From 7249a1d947680ece4b45ce84d478601da465dbba Mon Sep 17 00:00:00 2001 From: Adam Amstrong Date: Tue, 17 Mar 2009 20:49:01 +0000 Subject: [PATCH] add jpgraph (Q LICENSE) git-svn-id: http://www.observium.org/svn/observer/trunk@358 61d68cd4-352d-0410-923a-c4978735b2b8 --- html/billing-graph.php | 6 +- html/includes/billing.php | 4 +- html/includes/jpgraph/QPL.txt | 119 + html/includes/jpgraph/README | 162 + html/includes/jpgraph/VERSION | 1 + html/includes/jpgraph/docs/JpGraph_Logo.png | Bin 0 -> 8652 bytes .../docs/html/1010Groupingactivities.html | 60 + .../html/10111Addingatitleforthecolumns.html | 70 + ...2SpecifyingCSIMentriesforcolumntitles.html | 49 + .../1011Usingmultiplecolumnsastitles.html | 164 + .../docs/html/10121Addingatabletitle.html | 69 + .../html/10122Modifyingthedividerlines.html | 66 + .../10123Modifyingtheboxaroundtheplot.html | 55 + ...rizontalgridsandalternatinglinecolors.html | 68 + .../html/10125AddingiconstoGanttgraphs.html | 54 + ...0126Adjustingthemarginswithautosizing.html | 48 + .../html/1012MoregeneralGanttformatting.html | 41 + ...013SimplifyingthedrawingofGanttgraphs.html | 140 + ...gCSIMClientsideImageMapstoGanttcharts.html | 64 + ...Addingconstrainsbetweenyouractivities.html | 92 + .../html/10161Showingonlypartofthegraph.html | 47 + .../html/10162Specifyingstartdayofweek.html | 38 + .../docs/html/1016Advancedformatting.html | 35 + .../jpgraph/docs/html/1017Localizing.html | 56 + .../html/10181Enablingantialiasedlines.html | 89 + .../docs/html/1018AntialiasinginJpGraph.html | 40 + .../docs/html/1019Rotatingthegraphs.html | 140 + .../jpgraph/docs/html/101Introduction.html | 61 + .../docs/html/101WhyuseGanttcharts.html | 42 + ...essandcontrastforimagesandbackgrounds.html | 67 + .../html/1021Timingthegenerationofgraphs.html | 65 + ...1022Usingcountryflagsinvariouscontext.html | 75 + .../html/1023Addingiconsontothegraph.html | 65 + .../102CapabilitiesinJpGraphGanttmodule.html | 74 + .../docs/html/102Creatingasimplecanvas.html | 169 + .../103Addinglinesandrectanglestoacanvas.html | 187 + .../docs/html/103AsimpleGanttchart.html | 243 + .../html/104ThestructureofaGanttchart.html | 62 + .../docs/html/104Usingacanvasscale.html | 291 + .../docs/html/105CreatingaGanttChart.html | 68 + .../105SampleapplicationDrawingDBschema.html | 433 + .../106PositioningobjectsintheGanttplot.html | 71 + .../html/1071Specifyingverticalposition.html | 56 + ...2Specifyingstartandendpositionforabar.html | 56 + .../jpgraph/docs/html/1073Milestones.html | 144 + .../jpgraph/docs/html/1074Verticalline.html | 160 + .../html/1075Addingmarkerstoaganttbar.html | 125 + ...djustingtheminimumdistancebetweenbars.html | 97 + .../jpgraph/docs/html/107Ganttbars.html | 82 + .../jpgraph/docs/html/1081Minutescale.html | 83 + .../jpgraph/docs/html/1082Hourscale.html | 86 + .../jpgraph/docs/html/1083Dayscale.html | 89 + .../jpgraph/docs/html/1084Weekscale.html | 73 + .../jpgraph/docs/html/1085Monthscale.html | 73 + .../jpgraph/docs/html/1086Yearscale.html | 35 + .../html/108Formattingthescaleheaders.html | 129 + .../docs/html/1091Addingcaptiontobars.html | 71 + .../1092Addingprogressindicatorstobars.html | 76 + .../docs/html/109Moreformattingforbars.html | 36 + .../jpgraph/docs/html/10Ganttcharts.html | 35 + .../docs/html/10Workingwithcanvasgraphs.html | 46 + .../html/111GeneratingAntiSpamchallenge.html | 89 + .../jpgraph/docs/html/111Introduction.html | 61 + .../docs/html/112Creatingasimplecanvas.html | 169 + .../113Addinglinesandrectanglestoacanvas.html | 187 + .../docs/html/114Usingacanvasscale.html | 291 + .../115SampleapplicationDrawingDBschema.html | 432 + .../docs/html/11AntiSpamChallenges.html | 54 + .../jpgraph/docs/html/11Versionhistory.html | 42 + .../docs/html/11Workingwithcanvasgraphs.html | 46 + .../html/121GeneratingAntiSpamchallenge.html | 89 + .../1221AdjustingthesizeoftheLEDdigits.html | 44 + ...122GeneratingLEDlikedigitswithJpGraph.html | 76 + .../docs/html/12AntiSpamChallenges.html | 54 + .../docs/html/12CodedefinesinJpGraph.html | 174 + .../docs/html/12Howwasthismanualproduced.html | 43 + .../131AdjustingthesizeoftheLEDdigits.html | 44 + .../132ImprovingtheLEDswithsupersampling.html | 49 + .../docs/html/13CodedefinesinJpGraph.html | 175 + .../13GeneratingLEDlikedigitswithJpGraph.html | 76 + .../docs/html/14CodedefinesinJpGraph.html | 174 + .../jpgraph/docs/html/1Aboutthismanual.html | 32 + .../includes/jpgraph/docs/html/21Version.html | 45 + .../jpgraph/docs/html/22SoftwareLicense.html | 41 + .../jpgraph/docs/html/23JpGraphFeatures.html | 86 + .../docs/html/24Gettingthelatestversion.html | 46 + .../docs/html/25Plannedfutureaddition.html | 36 + .../docs/html/26Knownbugsandomissions.html | 43 + .../jpgraph/docs/html/27Acknowledgments.html | 55 + ...eportingbugsandsuggestingimprovements.html | 46 + .../jpgraph/docs/html/29Gettingsupport.html | 52 + .../jpgraph/docs/html/2Introduction.html | 35 + ...fyingthatyouhavetheGDlibraryinstalled.html | 76 + .../312VerifyingthatyouhaveGD2installed.html | 78 + .../html/313PreparingTrueTypeFontFiles.html | 69 + ...314UsingnonlatinbasedfontswithJpGraph.html | 91 + .../jpgraph/docs/html/31Preparation.html | 49 + .../html/32Customizingtheinstallation.html | 45 + .../docs/html/331Plotextensionmodules.html | 90 + .../jpgraph/docs/html/33Requiredfiles.html | 40 + ...Imageformatsandexternalimagelibraries.html | 52 + .../html/35DetailedstepstoinstallJpGraph.html | 67 + .../36Troubleshootingyourinstallation.html | 75 + .../jpgraph/docs/html/37CompilingPHP4.html | 69 + .../jpgraph/docs/html/3Installation.html | 35 + .../411Whatyouwilllearninthischapter.html | 49 + .../412WhatyouwillNOTlearninthischapter.html | 39 + .../docs/html/41Scopeofthischapter.html | 35 + ...singtheJpGraphlibrarytosendbackimages.html | 55 + .../html/42HowtogenerateimageswithPHP.html | 69 + .../jpgraph/docs/html/43UsingPHPdirectly.html | 62 + ...ncipleofJpGraphandthecreationofimages.html | 130 + .../45ChoosingtheimageformatforJpGraph.html | 58 + ...46Alternativestostreamingbacktheimage.html | 64 + .../docs/html/471InstallingTrueTypefonts.html | 52 + .../html/472VerifyingthattheTTFfontswork.html | 90 + .../jpgraph/docs/html/473Specifyingfonts.html | 105 + .../474AddingadditionalfontstoJpGraph.html | 50 + ...75UnderstandingtextalignmentinJpGraph.html | 57 + .../html/47WorkingwithfontsinJpGraph.html | 47 + .../html/481Adjustingthetransparency.html | 54 + .../docs/html/482Availablenamedcolors.html | 39 + .../docs/html/483Themecolorsforpies.html | 45 + .../html/48SpecifyingcolorsinJpGraph.html | 68 + .../4QuickStartDynamicImageGeneration.html | 44 + .../docs/html/51Enablingthecachesystem.html | 68 + .../docs/html/51Thespecialprodlocale.html | 43 + .../52Includedlocalizederrormessages.html | 40 + .../html/52Usingthecacheinyourscript.html | 75 + ...53Creatingyourownlanguageresourcefile.html | 47 + ...3UsingthecachewithClientSideImageMaps.html | 108 + .../docs/html/54Somefinalcomments.html | 45 + .../jpgraph/docs/html/551Clipping.html | 43 + .../docs/html/552Commonlyusedproperties.html | 49 + .../docs/html/553Commonlyusedmethods.html | 54 + .../html/55Commonfeatureforallgraphs.html | 36 + .../docs/html/5Localizingerrormessages.html | 52 + ...5UnderstandingtheJpGraphcachingsystem.html | 44 + .../docs/html/61Enablingthecachesystem.html | 68 + ...61Thebasicstructureofanimagemapscript.html | 66 + .../62Specifyingtargetsforimagemapplots.html | 60 + .../html/62Usingthecacheinyourscript.html | 75 + .../jpgraph/docs/html/63UsingStrokeCSIM.html | 107 + ...3UsingthecachewithClientSideImageMaps.html | 108 + .../docs/html/64ExamplesofImagemaps.html | 58 + .../docs/html/64Somefinalcomments.html | 45 + .../jpgraph/docs/html/651Clipping.html | 45 + .../docs/html/652Commonlyusedproperties.html | 49 + .../docs/html/653Commonlyusedmethods.html | 54 + .../html/65Commonfeatureforallgraphs.html | 36 + .../docs/html/65HowdoesStrokeCSIMwork.html | 51 + .../docs/html/66Gettingholdoftheimagemap.html | 56 + .../html/67Imagemapsandthecachesystem.html | 39 + ...6UnderstandingtheJpGraphcachingsystem.html | 44 + .../docs/html/6UsingimagemapswithJpGraph.html | 47 + .../7101Usingtheautomaticdatetimescale.html | 216 + ...yingadatetimescalewithamanualcallback.html | 236 + .../docs/html/710Handlingdatetimescales.html | 47 + .../7110Adjustingthegridlinesintheplot.html | 84 + .../docs/html/7111Usingfilledgridlines.html | 47 + .../7112SpecifyingtextlabelsfortheXaxis.html | 70 + .../7113Adjustingtheticksonatextscale.html | 63 + .../docs/html/7114Usingfilledlinegraphs.html | 68 + .../html/7115Usingaccumulatedlinegraphs.html | 90 + ...uctingsmoothlineplotswithCubicSplines.html | 85 + .../html/7117Addingplotmarkstoalineplot.html | 155 + .../711AddingplotmarkstolineplotsXXX.html | 61 + .../html/711Adjustinglabelsonatextscale.html | 131 + ...2Addingarbitrarytextstringstothegraph.html | 108 + ...12Displayingthevaluesforeachdatapoint.html | 83 + .../713Addingseveralplotstothesamegraph.html | 88 + .../713AddingtitlesandfooterstotheGraph.html | 104 + .../docs/html/714AddingasecondYscale.html | 77 + .../jpgraph/docs/html/714Addingatabtitle.html | 48 + .../docs/html/715Addingalegendtothegraph.html | 125 + .../docs/html/715Usingbackgroundimages.html | 95 + .../716Handlingnullvaluesinlineplots.html | 50 + .../html/716Usingabackgroundgradient.html | 69 + .../html/717UsingcallbacksforPlotmarks.html | 92 + ...717Usingthestepstyletorenderlineplots.html | 49 + .../docs/html/718Rotatinggraphs90degrees.html | 58 + .../docs/html/718Usinglogarithmicscale.html | 76 + .../docs/html/7191Standardtwoaxisgraphs.html | 132 + .../docs/html/7192Scientificstyleaxis.html | 63 + ...3Adjustingthepositionofthescalelabels.html | 57 + .../html/7194Formattingthescalelabels.html | 43 + .../docs/html/7195InvertingtheYaxis.html | 59 + .../docs/html/719Formattingtheaxis.html | 38 + .../jpgraph/docs/html/719Moreonscales.html | 87 + .../jpgraph/docs/html/71Lineplots.html | 220 + ...71Thebasicstructureofanimagemapscript.html | 66 + ...justingtheautoscalinglimitsgracevalue.html | 93 + .../html/7210Creatingsemifilledbargraphs.html | 50 + .../docs/html/7211Customizingthepatterns.html | 90 + ...1Addingbandsofpatternandcolortographs.html | 130 + .../html/721Adjustingthewidthofthebars.html | 51 + .../html/722Addingstaticlinestotheplot.html | 49 + .../html/722Displayingthevalueofeachbar.html | 104 + .../html/723Addingadropshadowtothebar.html | 44 + ...justingthealignmentofbarsonatextscale.html | 39 + .../docs/html/725Usinggroupedbarplots.html | 87 + .../html/726Usingaccumulatedbarplots.html | 52 + .../727Usinggroupedaccumulatedbargraphs.html | 95 + .../docs/html/728Horizontalbargraphs.html | 98 + .../729Usinggradientfillforbargraphs.html | 126 + .../jpgraph/docs/html/72Bargraphs.html | 95 + .../72Specifyingtargetsforimagemapplots.html | 60 + .../docs/html/731Usinglineerrorplots.html | 82 + .../jpgraph/docs/html/73Errorplots.html | 68 + .../jpgraph/docs/html/73UsingStrokeCSIM.html | 107 + .../docs/html/74ExamplesofImagemaps.html | 58 + .../jpgraph/docs/html/74Scatterplots.html | 113 + .../jpgraph/docs/html/75Fieldplots.html | 60 + .../docs/html/75HowdoesStrokeCSIMwork.html | 51 + .../jpgraph/docs/html/761StockCharts.html | 69 + ...762BoxPLotsStockchartswithamedianline.html | 48 + .../763ImagemapsforBoxandStockcharts.html | 40 + .../docs/html/76BoxandStockcharts.html | 36 + .../docs/html/76Gettingholdoftheimagemap.html | 56 + .../html/77Combiningdifferentgraphtypes.html | 108 + .../html/77Imagemapsandthecachesystem.html | 39 + .../html/78Specifyingthescalemanually.html | 106 + .../79Adjustingtheautomatictickmarks.html | 54 + .../docs/html/7UsingimagemapswithJpGraph.html | 47 + .../html/7WorkingwithorthogonalXYplots.html | 41 + .../8101Usingtheautomaticdatetimescale.html | 216 + ...yingadatetimescalewithamanualcallback.html | 236 + .../docs/html/810Handlingdatetimescales.html | 47 + .../8110Adjustingthegridlinesintheplot.html | 84 + .../docs/html/8111Usingfilledgridlines.html | 47 + .../8112SpecifyingtextlabelsfortheXaxis.html | 70 + .../8113Adjustingtheticksonatextscale.html | 63 + .../docs/html/8114Usingfilledlinegraphs.html | 68 + .../html/8115Usingaccumulatedlinegraphs.html | 90 + ...uctingsmoothlineplotswithCubicSplines.html | 85 + .../html/8117Addingplotmarkstoalineplot.html | 155 + .../811AddingplotmarkstolineplotsXXX.html | 61 + .../html/811Adjustinglabelsonatextscale.html | 131 + .../docs/html/811Simpleradarplots.html | 95 + ...2Addingarbitrarytextstringstothegraph.html | 108 + ...12Displayingthevaluesforeachdatapoint.html | 83 + ...titlesfortheaxisandlegendsfortheplots.html | 53 + .../html/813Addinggridlinetotheradarplot.html | 68 + .../813Addingseveralplotstothesamegraph.html | 88 + .../813AddingtitlesandfooterstotheGraph.html | 104 + .../docs/html/814AddingasecondYscale.html | 77 + .../jpgraph/docs/html/814Addingatabtitle.html | 48 + ...Addingseveralplotstothesameradargraph.html | 47 + .../docs/html/815Addingalegendtothegraph.html | 122 + .../html/815Addingplotmarksiradargraphs.html | 44 + .../docs/html/815Usingbackgroundimages.html | 95 + .../816Handlingnullvaluesinlineplots.html | 50 + .../html/816Usingabackgroundgradient.html | 69 + .../html/817UsingcallbacksforPlotmarks.html | 76 + ...817Usingthestepstyletorenderlineplots.html | 49 + .../docs/html/818Rotatinggraphs90degrees.html | 58 + .../docs/html/818Usinglogarithmicscale.html | 76 + .../docs/html/8191Standardtwoaxisgraphs.html | 132 + .../docs/html/8192Scientificstyleaxis.html | 63 + ...3Adjustingthepositionofthescalelabels.html | 57 + .../html/8194Formattingthescalelabels.html | 43 + .../docs/html/8195InvertingtheYaxis.html | 59 + .../docs/html/819Formattingtheaxis.html | 38 + .../jpgraph/docs/html/819Moreonscales.html | 85 + .../jpgraph/docs/html/81Lineplots.html | 220 + .../jpgraph/docs/html/81Radarplots.html | 64 + ...justingtheautoscalinglimitsgracevalue.html | 93 + .../html/8210Creatingsemifilledbargraphs.html | 50 + .../docs/html/8211Customizingthepatterns.html | 90 + ...1Addingbandsofpatternandcolortographs.html | 130 + .../html/821AddingguidelinestoPiePlots.html | 93 + .../html/821Adjustingthewidthofthebars.html | 51 + .../html/822Addingstaticlinestotheplot.html | 49 + .../docs/html/822Creating3Dpieplots.html | 59 + .../html/822Displayingthevalueofeachbar.html | 104 + .../html/823Addingadropshadowtothebar.html | 44 + .../docs/html/823Explodingpieslices.html | 70 + ...justingthealignmentofbarsonatextscale.html | 39 + ...pecifyingandadjustinglabelsonpieplots.html | 80 + ...25Specifyingslicecolorsandusingthemes.html | 84 + .../docs/html/825Usinggroupedbarplots.html | 87 + .../html/826Addingdropshadowstotheslices.html | 46 + .../html/826Usingaccumulatedbarplots.html | 52 + .../html/827Anothervariantof2DPieplots.html | 92 + .../827Usinggroupedaccumulatedbargraphs.html | 95 + .../docs/html/828Horizontalbargraphs.html | 98 + .../829Usinggradientfillforbargraphs.html | 126 + .../jpgraph/docs/html/82Bargraphs.html | 89 + .../jpgraph/docs/html/82Pieplots.html | 155 + .../jpgraph/docs/html/831Overview.html | 61 + .../docs/html/831Usinglineerrorplots.html | 82 + .../docs/html/832Adjustingtheradiusscale.html | 64 + .../docs/html/833Adjustingthegridlines.html | 64 + .../docs/html/834Adjustingthelabelfonts.html | 53 + .../docs/html/835Adjustingthelabels.html | 47 + .../jpgraph/docs/html/836Imagemaps.html | 60 + .../jpgraph/docs/html/837Afinalexample.html | 45 + .../jpgraph/docs/html/83Errorplots.html | 68 + .../jpgraph/docs/html/83Polarplots.html | 35 + .../jpgraph/docs/html/84Scatterplots.html | 113 + .../jpgraph/docs/html/85Fieldplots.html | 60 + .../jpgraph/docs/html/861StockCharts.html | 69 + ...862BoxPLotsStockchartswithamedianline.html | 48 + .../863ImagemapsforBoxandStockcharts.html | 40 + .../docs/html/86BoxandStockcharts.html | 36 + .../html/87Combiningdifferentgraphtypes.html | 108 + .../html/88Specifyingthescalemanually.html | 106 + .../89Adjustingtheautomatictickmarks.html | 54 + .../docs/html/8WorkingwithnonXYplots.html | 52 + .../html/8WorkingwithorthogonalXYplots.html | 41 + .../docs/html/910Groupingactivities.html | 60 + .../html/9111Addingatitleforthecolumns.html | 70 + ...2SpecifyingCSIMentriesforcolumntitles.html | 49 + .../docs/html/911Simpleradarplots.html | 95 + .../html/911Usingmultiplecolumnsastitles.html | 164 + .../docs/html/9121Addingatabletitle.html | 69 + .../html/9122Modifyingthedividerlines.html | 66 + .../9123Modifyingtheboxaroundtheplot.html | 55 + ...rizontalgridsandalternatinglinecolors.html | 68 + .../html/9125AddingiconstoGanttgraphs.html | 54 + ...9126Adjustingthemarginswithautosizing.html | 48 + .../html/912MoregeneralGanttformatting.html | 41 + ...titlesfortheaxisandlegendsfortheplots.html | 53 + .../html/913Addinggridlinetotheradarplot.html | 68 + ...913SimplifyingthedrawingofGanttgraphs.html | 140 + ...gCSIMClientsideImageMapstoGanttcharts.html | 64 + ...Addingseveralplotstothesameradargraph.html | 47 + ...Addingconstrainsbetweenyouractivities.html | 92 + .../html/915Addingplotmarksiradargraphs.html | 44 + .../html/9161Showingonlypartofthegraph.html | 47 + .../html/9162Specifyingstartdayofweek.html | 38 + .../docs/html/916Advancedformatting.html | 35 + .../jpgraph/docs/html/917Localizing.html | 56 + .../html/9181Enablingantialiasedlines.html | 89 + .../docs/html/918AntialiasinginJpGraph.html | 40 + .../docs/html/919Rotatingthegraphs.html | 140 + .../jpgraph/docs/html/91Radarplots.html | 64 + .../docs/html/91WhyuseGanttcharts.html | 42 + ...essandcontrastforimagesandbackgrounds.html | 67 + .../html/921AddingguidelinestoPiePlots.html | 93 + .../html/921Timingthegenerationofgraphs.html | 65 + .../docs/html/922Creating3Dpieplots.html | 59 + .../922Usingcountryflagsinvariouscontext.html | 75 + .../docs/html/923Addingiconsontothegraph.html | 65 + .../docs/html/923Explodingpieslices.html | 70 + ...pecifyingandadjustinglabelsonpieplots.html | 80 + ...25Specifyingslicecolorsandusingthemes.html | 84 + .../html/926Addingdropshadowstotheslices.html | 46 + .../html/927Anothervariantof2DPieplots.html | 92 + .../92CapabilitiesinJpGraphGanttmodule.html | 74 + .../jpgraph/docs/html/92Pieplots.html | 155 + .../jpgraph/docs/html/931Overview.html | 61 + .../docs/html/932Adjustingtheradiusscale.html | 64 + .../docs/html/933Adjustingthegridlines.html | 64 + .../docs/html/934Adjustingthelabelfonts.html | 53 + .../docs/html/935Adjustingthelabels.html | 47 + .../jpgraph/docs/html/936Imagemaps.html | 60 + .../jpgraph/docs/html/937Afinalexample.html | 45 + .../docs/html/93AsimpleGanttchart.html | 242 + .../jpgraph/docs/html/93Polarplots.html | 35 + .../html/94ThestructureofaGanttchart.html | 62 + .../docs/html/95CreatingaGanttChart.html | 68 + .../96PositioningobjectsintheGanttplot.html | 71 + .../html/971Specifyingverticalposition.html | 56 + ...2Specifyingstartandendpositionforabar.html | 56 + .../jpgraph/docs/html/973Milestones.html | 144 + .../jpgraph/docs/html/974Verticalline.html | 160 + .../html/975Addingmarkerstoaganttbar.html | 125 + ...djustingtheminimumdistancebetweenbars.html | 97 + .../jpgraph/docs/html/97Ganttbars.html | 82 + .../jpgraph/docs/html/981Minutescale.html | 83 + .../jpgraph/docs/html/982Hourscale.html | 86 + .../jpgraph/docs/html/983Dayscale.html | 89 + .../jpgraph/docs/html/984Weekscale.html | 73 + .../jpgraph/docs/html/985Monthscale.html | 73 + .../jpgraph/docs/html/986Yearscale.html | 35 + .../html/98Formattingthescaleheaders.html | 129 + .../docs/html/991Addingcaptiontobars.html | 71 + .../992Addingprogressindicatorstobars.html | 76 + .../docs/html/99Moreformattingforbars.html | 36 + .../jpgraph/docs/html/9Ganttcharts.html | 35 + .../docs/html/9WorkingwithnonXYplots.html | 52 + .../docs/html/exframes/JpGraph_Logo.html | 4 + .../docs/html/exframes/alphabarex1.html | 3 + .../docs/html/exframes/antispamex01.html | 3 + .../docs/html/exframes/backgroundex03.html | 3 + .../docs/html/exframes/balloonex1.html | 3 + .../docs/html/exframes/bar_csimex1.html | 4 + .../docs/html/exframes/bar_csimex2.html | 4 + .../docs/html/exframes/bar_csimex3.html | 4 + .../docs/html/exframes/bargradsmallex1.html | 4 + .../docs/html/exframes/bargradsmallex2.html | 4 + .../docs/html/exframes/bargradsmallex3.html | 4 + .../docs/html/exframes/bargradsmallex4.html | 4 + .../docs/html/exframes/bargradsmallex5.html | 4 + .../docs/html/exframes/bargradsmallex6.html | 4 + .../docs/html/exframes/bargradsmallex7.html | 4 + .../docs/html/exframes/bargradsmallex8.html | 4 + .../docs/html/exframes/barline_csimex1.html | 3 + .../html/exframes/barlinefreq_csimex1.html | 4 + .../jpgraph/docs/html/exframes/bartutex1.html | 3 + .../jpgraph/docs/html/exframes/bartutex2.html | 3 + .../jpgraph/docs/html/exframes/bartutex3.html | 3 + .../jpgraph/docs/html/exframes/bartutex4.html | 3 + .../jpgraph/docs/html/exframes/bartutex5.html | 3 + .../jpgraph/docs/html/exframes/bartutex6.html | 3 + .../docs/html/exframes/boxstockcsimex1.html | 4 + .../docs/html/exframes/boxstockex1.html | 4 + .../html/exframes/builtinplotmarksex1.html | 3 + .../docs/html/exframes/canvas_jpgarchex.html | 3 + .../docs/html/exframes/canvasex01.html | 3 + .../docs/html/exframes/canvasex02.html | 3 + .../docs/html/exframes/canvasex03.html | 3 + .../docs/html/exframes/canvasex04.html | 3 + .../docs/html/exframes/canvasex05.html | 3 + .../docs/html/exframes/canvasex06.html | 3 + .../docs/html/exframes/color_chart01.html | 4 + .../docs/html/exframes/color_chart02.html | 4 + .../docs/html/exframes/color_chart03.html | 4 + .../docs/html/exframes/color_chart04.html | 4 + .../docs/html/exframes/dateaxisex1.html | 3 + .../docs/html/exframes/dateaxisex2.html | 4 + .../docs/html/exframes/dateaxisex4.html | 4 + .../docs/html/exframes/dbschemaex1.html | 3 + .../jpgraph/docs/html/exframes/example0.html | 4 + .../jpgraph/docs/html/exframes/example11.html | 4 + .../jpgraph/docs/html/exframes/example13.html | 4 + .../jpgraph/docs/html/exframes/example14.html | 4 + .../jpgraph/docs/html/exframes/example15.html | 4 + .../docs/html/exframes/example16.1.html | 4 + .../docs/html/exframes/example16.2.html | 4 + .../docs/html/exframes/example16.3.html | 4 + .../docs/html/exframes/example16.4.html | 4 + .../docs/html/exframes/example16.6.html | 3 + .../jpgraph/docs/html/exframes/example16.html | 4 + .../jpgraph/docs/html/exframes/example17.html | 4 + .../jpgraph/docs/html/exframes/example18.html | 4 + .../docs/html/exframes/example19.1.html | 4 + .../jpgraph/docs/html/exframes/example19.html | 4 + .../jpgraph/docs/html/exframes/example2.html | 4 + .../docs/html/exframes/example20.1.html | 4 + .../docs/html/exframes/example20.2.html | 4 + .../docs/html/exframes/example20.3.html | 4 + .../docs/html/exframes/example20.4.html | 4 + .../docs/html/exframes/example20.5.html | 4 + .../jpgraph/docs/html/exframes/example20.html | 4 + .../jpgraph/docs/html/exframes/example21.html | 4 + .../jpgraph/docs/html/exframes/example22.html | 4 + .../jpgraph/docs/html/exframes/example23.html | 4 + .../jpgraph/docs/html/exframes/example24.html | 4 + .../docs/html/exframes/example25.1.html | 4 + .../docs/html/exframes/example25.2.html | 4 + .../jpgraph/docs/html/exframes/example25.html | 4 + .../docs/html/exframes/example26.1.html | 3 + .../jpgraph/docs/html/exframes/example26.html | 3 + .../docs/html/exframes/example27.1.html | 3 + .../docs/html/exframes/example27.2.html | 3 + .../docs/html/exframes/example27.3.html | 3 + .../jpgraph/docs/html/exframes/example27.html | 3 + .../docs/html/exframes/example28.1.html | 3 + .../docs/html/exframes/example28.2.html | 3 + .../docs/html/exframes/example28.3.html | 3 + .../jpgraph/docs/html/exframes/example28.html | 3 + .../docs/html/exframes/example3.1.html | 4 + .../docs/html/exframes/example3.2.1.html | 4 + .../docs/html/exframes/example3.2.2.html | 4 + .../docs/html/exframes/example3.2.html | 4 + .../docs/html/exframes/example3.3.html | 4 + .../docs/html/exframes/example3.4.html | 4 + .../jpgraph/docs/html/exframes/example3.html | 4 + .../jpgraph/docs/html/exframes/example4.html | 4 + .../docs/html/exframes/example5.1.html | 4 + .../jpgraph/docs/html/exframes/example5.html | 4 + .../docs/html/exframes/example6.1.html | 4 + .../docs/html/exframes/example6.2.html | 4 + .../jpgraph/docs/html/exframes/example6.html | 4 + .../jpgraph/docs/html/exframes/example7.html | 4 + .../jpgraph/docs/html/exframes/example8.html | 4 + .../docs/html/exframes/example9.1.html | 4 + .../docs/html/exframes/example9.2.html | 4 + .../jpgraph/docs/html/exframes/example9.html | 4 + .../docs/html/exframes/fieldscatterex1.html | 3 + .../docs/html/exframes/filledgridex1.html | 3 + .../docs/html/exframes/filledlineex01.1.html | 4 + .../docs/html/exframes/filledlineex01.html | 4 + .../html/exframes/frame_JpGraph_Logo.html | 1 + .../docs/html/exframes/frame_alphabarex1.html | 1 + .../html/exframes/frame_antispamex01.html | 1 + .../html/exframes/frame_backgroundex03.html | 1 + .../docs/html/exframes/frame_balloonex1.html | 1 + .../docs/html/exframes/frame_bar_csimex1.html | 1 + .../docs/html/exframes/frame_bar_csimex2.html | 1 + .../docs/html/exframes/frame_bar_csimex3.html | 1 + .../html/exframes/frame_bargradsmallex1.html | 1 + .../html/exframes/frame_bargradsmallex2.html | 1 + .../html/exframes/frame_bargradsmallex3.html | 1 + .../html/exframes/frame_bargradsmallex4.html | 1 + .../html/exframes/frame_bargradsmallex5.html | 1 + .../html/exframes/frame_bargradsmallex6.html | 1 + .../html/exframes/frame_bargradsmallex7.html | 1 + .../html/exframes/frame_bargradsmallex8.html | 1 + .../html/exframes/frame_barline_csimex1.html | 1 + .../exframes/frame_barlinefreq_csimex1.html | 1 + .../docs/html/exframes/frame_bartutex1.html | 1 + .../docs/html/exframes/frame_bartutex2.html | 1 + .../docs/html/exframes/frame_bartutex3.html | 1 + .../docs/html/exframes/frame_bartutex4.html | 1 + .../docs/html/exframes/frame_bartutex5.html | 1 + .../docs/html/exframes/frame_bartutex6.html | 1 + .../html/exframes/frame_boxstockcsimex1.html | 1 + .../docs/html/exframes/frame_boxstockex1.html | 1 + .../exframes/frame_builtinplotmarksex1.html | 1 + .../html/exframes/frame_canvas_jpgarchex.html | 1 + .../docs/html/exframes/frame_canvasex01.html | 1 + .../docs/html/exframes/frame_canvasex02.html | 1 + .../docs/html/exframes/frame_canvasex03.html | 1 + .../docs/html/exframes/frame_canvasex04.html | 1 + .../docs/html/exframes/frame_canvasex05.html | 1 + .../docs/html/exframes/frame_canvasex06.html | 1 + .../html/exframes/frame_color_chart01.html | 1 + .../html/exframes/frame_color_chart02.html | 1 + .../html/exframes/frame_color_chart03.html | 1 + .../html/exframes/frame_color_chart04.html | 1 + .../docs/html/exframes/frame_dateaxisex1.html | 1 + .../docs/html/exframes/frame_dateaxisex2.html | 1 + .../docs/html/exframes/frame_dateaxisex4.html | 1 + .../docs/html/exframes/frame_dbschemaex1.html | 1 + .../docs/html/exframes/frame_example0.html | 1 + .../docs/html/exframes/frame_example11.html | 1 + .../docs/html/exframes/frame_example13.html | 1 + .../docs/html/exframes/frame_example14.html | 1 + .../docs/html/exframes/frame_example15.html | 1 + .../docs/html/exframes/frame_example16.1.html | 1 + .../docs/html/exframes/frame_example16.2.html | 1 + .../docs/html/exframes/frame_example16.3.html | 1 + .../docs/html/exframes/frame_example16.4.html | 1 + .../docs/html/exframes/frame_example16.6.html | 1 + .../docs/html/exframes/frame_example16.html | 1 + .../docs/html/exframes/frame_example17.html | 1 + .../docs/html/exframes/frame_example18.html | 1 + .../docs/html/exframes/frame_example19.1.html | 1 + .../docs/html/exframes/frame_example19.html | 1 + .../docs/html/exframes/frame_example2.html | 1 + .../docs/html/exframes/frame_example20.1.html | 1 + .../docs/html/exframes/frame_example20.2.html | 1 + .../docs/html/exframes/frame_example20.3.html | 1 + .../docs/html/exframes/frame_example20.4.html | 1 + .../docs/html/exframes/frame_example20.5.html | 1 + .../docs/html/exframes/frame_example20.html | 1 + .../docs/html/exframes/frame_example21.html | 1 + .../docs/html/exframes/frame_example22.html | 1 + .../docs/html/exframes/frame_example23.html | 1 + .../docs/html/exframes/frame_example24.html | 1 + .../docs/html/exframes/frame_example25.1.html | 1 + .../docs/html/exframes/frame_example25.2.html | 1 + .../docs/html/exframes/frame_example25.html | 1 + .../docs/html/exframes/frame_example26.1.html | 1 + .../docs/html/exframes/frame_example26.html | 1 + .../docs/html/exframes/frame_example27.1.html | 1 + .../docs/html/exframes/frame_example27.2.html | 1 + .../docs/html/exframes/frame_example27.3.html | 1 + .../docs/html/exframes/frame_example27.html | 1 + .../docs/html/exframes/frame_example28.1.html | 1 + .../docs/html/exframes/frame_example28.2.html | 1 + .../docs/html/exframes/frame_example28.3.html | 1 + .../docs/html/exframes/frame_example28.html | 1 + .../docs/html/exframes/frame_example3.1.html | 1 + .../html/exframes/frame_example3.2.1.html | 1 + .../html/exframes/frame_example3.2.2.html | 1 + .../docs/html/exframes/frame_example3.2.html | 1 + .../docs/html/exframes/frame_example3.3.html | 1 + .../docs/html/exframes/frame_example3.4.html | 1 + .../docs/html/exframes/frame_example3.html | 1 + .../docs/html/exframes/frame_example4.html | 1 + .../docs/html/exframes/frame_example5.1.html | 1 + .../docs/html/exframes/frame_example5.html | 1 + .../docs/html/exframes/frame_example6.1.html | 1 + .../docs/html/exframes/frame_example6.2.html | 1 + .../docs/html/exframes/frame_example6.html | 1 + .../docs/html/exframes/frame_example7.html | 1 + .../docs/html/exframes/frame_example8.html | 1 + .../docs/html/exframes/frame_example9.1.html | 1 + .../docs/html/exframes/frame_example9.2.html | 1 + .../docs/html/exframes/frame_example9.html | 1 + .../html/exframes/frame_fieldscatterex1.html | 1 + .../html/exframes/frame_filledgridex1.html | 1 + .../html/exframes/frame_filledlineex01.1.html | 1 + .../html/exframes/frame_filledlineex01.html | 1 + .../docs/html/exframes/frame_funcex1.html | 1 + .../exframes/frame_ganttconstrainex0.html | 1 + .../exframes/frame_ganttconstrainex1.html | 1 + .../html/exframes/frame_ganttcsimex01.html | 1 + .../html/exframes/frame_ganttcsimex02.html | 1 + .../docs/html/exframes/frame_ganttex00.html | 1 + .../docs/html/exframes/frame_ganttex01.html | 1 + .../docs/html/exframes/frame_ganttex02.html | 1 + .../docs/html/exframes/frame_ganttex03.html | 1 + .../docs/html/exframes/frame_ganttex04.html | 1 + .../docs/html/exframes/frame_ganttex05.html | 1 + .../docs/html/exframes/frame_ganttex06.html | 1 + .../docs/html/exframes/frame_ganttex07.html | 1 + .../docs/html/exframes/frame_ganttex08.html | 1 + .../docs/html/exframes/frame_ganttex09.html | 1 + .../docs/html/exframes/frame_ganttex10.html | 1 + .../docs/html/exframes/frame_ganttex11.html | 1 + .../docs/html/exframes/frame_ganttex12.html | 1 + .../docs/html/exframes/frame_ganttex13.html | 1 + .../docs/html/exframes/frame_ganttex14.html | 1 + .../docs/html/exframes/frame_ganttex15.html | 1 + .../docs/html/exframes/frame_ganttex16.html | 1 + .../docs/html/exframes/frame_ganttex17.html | 1 + .../docs/html/exframes/frame_ganttex18.html | 1 + .../docs/html/exframes/frame_ganttex19.html | 1 + .../html/exframes/frame_gantthgridex1.html | 1 + .../html/exframes/frame_gantthourex1.html | 1 + .../html/exframes/frame_gantthourminex1.html | 1 + .../html/exframes/frame_gantticonex1.html | 1 + .../html/exframes/frame_ganttsimpleex1.html | 1 + .../docs/html/exframes/frame_gradbkgex1.html | 1 + .../docs/html/exframes/frame_horizbarex1.html | 1 + .../docs/html/exframes/frame_horizbarex2.html | 1 + .../docs/html/exframes/frame_horizbarex3.html | 1 + .../docs/html/exframes/frame_horizbarex4.html | 1 + .../html/exframes/frame_imgmarkercsimex1.html | 1 + .../html/exframes/frame_imgmarkerex1.html | 1 + .../docs/html/exframes/frame_impulsex1.html | 1 + .../docs/html/exframes/frame_impulsex2.html | 1 + .../docs/html/exframes/frame_impulsex3.html | 1 + .../docs/html/exframes/frame_impulsex4.html | 1 + .../docs/html/exframes/frame_inyaxisex2.html | 1 + .../html/exframes/frame_linebarcentex1.html | 1 + .../docs/html/exframes/frame_lineiconex1.html | 1 + .../docs/html/exframes/frame_lineiconex2.html | 1 + .../html/exframes/frame_listfontsex1.html | 1 + .../docs/html/exframes/frame_logbarex1.html | 1 + .../docs/html/exframes/frame_loglogex1.html | 1 + .../docs/html/exframes/frame_manscaleex1.html | 1 + .../docs/html/exframes/frame_manscaleex2.html | 1 + .../docs/html/exframes/frame_manscaleex3.html | 1 + .../docs/html/exframes/frame_manscaleex4.html | 1 + .../docs/html/exframes/frame_markflagex1.html | 1 + .../html/exframes/frame_nullvalueex01.html | 1 + .../frame_partiallyfilledlineex1.html | 1 + .../docs/html/exframes/frame_penguin.html | 1 + .../html/exframes/frame_pie3d_csimex1.html | 1 + .../docs/html/exframes/frame_pie_csimex1.html | 1 + .../html/exframes/frame_piec_csimex1.html | 1 + .../docs/html/exframes/frame_piecex1.html | 1 + .../docs/html/exframes/frame_piecex2.html | 1 + .../docs/html/exframes/frame_pieex3.html | 1 + .../docs/html/exframes/frame_pieex8.html | 1 + .../docs/html/exframes/frame_pieex9.html | 1 + .../html/exframes/frame_pielabelsex1.html | 1 + .../html/exframes/frame_pielabelsex2.html | 1 + .../html/exframes/frame_pielabelsex4.html | 1 + .../html/exframes/frame_polarex0-180.html | 1 + .../docs/html/exframes/frame_polarex0.html | 1 + .../html/exframes/frame_polarex3-lin.html | 1 + .../docs/html/exframes/frame_polarex3.html | 1 + .../docs/html/exframes/frame_polarex4.html | 1 + .../docs/html/exframes/frame_polarex5.html | 1 + .../docs/html/exframes/frame_polarex7-2.html | 1 + .../docs/html/exframes/frame_polarex9.html | 1 + .../docs/html/exframes/frame_radarex1.html | 1 + .../docs/html/exframes/frame_radarex2.html | 1 + .../docs/html/exframes/frame_radarex4.html | 1 + .../docs/html/exframes/frame_radarex6.1.html | 1 + .../docs/html/exframes/frame_radarex6.html | 1 + .../docs/html/exframes/frame_radarex7.html | 1 + .../docs/html/exframes/frame_radarex8.1.html | 1 + .../docs/html/exframes/frame_radarex8.html | 1 + .../html/exframes/frame_radarmarkex1.html | 1 + .../docs/html/exframes/frame_rotex0.html | 1 + .../docs/html/exframes/frame_rotex1.html | 1 + .../docs/html/exframes/frame_rotex2.html | 1 + .../docs/html/exframes/frame_rotex3.html | 1 + .../docs/html/exframes/frame_rotex4.html | 1 + .../docs/html/exframes/frame_rotex5.html | 1 + .../html/exframes/frame_scatter_csimex1.html | 1 + .../docs/html/exframes/frame_scatterex1.html | 1 + .../docs/html/exframes/frame_scatterex2.html | 1 + .../exframes/frame_smallstaticbandsex1.html | 1 + .../exframes/frame_smallstaticbandsex10.html | 1 + .../exframes/frame_smallstaticbandsex2.html | 1 + .../exframes/frame_smallstaticbandsex3.html | 1 + .../exframes/frame_smallstaticbandsex4.html | 1 + .../exframes/frame_smallstaticbandsex5.html | 1 + .../exframes/frame_smallstaticbandsex6.html | 1 + .../exframes/frame_smallstaticbandsex7.html | 1 + .../exframes/frame_smallstaticbandsex8.html | 1 + .../exframes/frame_smallstaticbandsex9.html | 1 + .../docs/html/exframes/frame_splineex1.html | 1 + .../html/exframes/frame_staticbandbarex7.html | 1 + .../docs/html/exframes/frame_stockex1.html | 1 + .../docs/html/exframes/frame_tabtitleex1.html | 1 + .../html/exframes/frame_textalignex1.html | 1 + .../html/exframes/frame_titlecsimex01.html | 1 + .../docs/html/exframes/frame_topxaxisex1.html | 1 + .../jpgraph/docs/html/exframes/funcex1.html | 3 + .../docs/html/exframes/ganttconstrainex0.html | 3 + .../docs/html/exframes/ganttconstrainex1.html | 3 + .../docs/html/exframes/ganttcsimex01.html | 3 + .../docs/html/exframes/ganttcsimex02.html | 3 + .../jpgraph/docs/html/exframes/ganttex00.html | 4 + .../jpgraph/docs/html/exframes/ganttex01.html | 4 + .../jpgraph/docs/html/exframes/ganttex02.html | 4 + .../jpgraph/docs/html/exframes/ganttex03.html | 4 + .../jpgraph/docs/html/exframes/ganttex04.html | 4 + .../jpgraph/docs/html/exframes/ganttex05.html | 4 + .../jpgraph/docs/html/exframes/ganttex06.html | 4 + .../jpgraph/docs/html/exframes/ganttex07.html | 4 + .../jpgraph/docs/html/exframes/ganttex08.html | 4 + .../jpgraph/docs/html/exframes/ganttex09.html | 4 + .../jpgraph/docs/html/exframes/ganttex10.html | 4 + .../jpgraph/docs/html/exframes/ganttex11.html | 4 + .../jpgraph/docs/html/exframes/ganttex12.html | 4 + .../jpgraph/docs/html/exframes/ganttex13.html | 4 + .../jpgraph/docs/html/exframes/ganttex14.html | 4 + .../jpgraph/docs/html/exframes/ganttex15.html | 4 + .../jpgraph/docs/html/exframes/ganttex16.html | 4 + .../jpgraph/docs/html/exframes/ganttex17.html | 4 + .../jpgraph/docs/html/exframes/ganttex18.html | 4 + .../jpgraph/docs/html/exframes/ganttex19.html | 4 + .../docs/html/exframes/gantthgridex1.html | 3 + .../docs/html/exframes/gantthourex1.html | 3 + .../docs/html/exframes/gantthourminex1.html | 3 + .../docs/html/exframes/gantticonex1.html | 3 + .../docs/html/exframes/ganttsimpleex1.html | 3 + .../docs/html/exframes/gradbkgex1.html | 3 + .../docs/html/exframes/horizbarex1.html | 4 + .../docs/html/exframes/horizbarex2.html | 4 + .../docs/html/exframes/horizbarex3.html | 4 + .../docs/html/exframes/horizbarex4.html | 4 + .../html/exframes/image_JpGraph_Logo.html | 1 + .../docs/html/exframes/image_alphabarex1.html | 1 + .../html/exframes/image_antispamex01.html | 1 + .../html/exframes/image_backgroundex03.html | 1 + .../docs/html/exframes/image_balloonex1.html | 1 + .../docs/html/exframes/image_bar_csimex1.html | 1 + .../docs/html/exframes/image_bar_csimex2.html | 1 + .../docs/html/exframes/image_bar_csimex3.html | 1 + .../html/exframes/image_bargradsmallex1.html | 1 + .../html/exframes/image_bargradsmallex2.html | 1 + .../html/exframes/image_bargradsmallex3.html | 1 + .../html/exframes/image_bargradsmallex4.html | 1 + .../html/exframes/image_bargradsmallex5.html | 1 + .../html/exframes/image_bargradsmallex6.html | 1 + .../html/exframes/image_bargradsmallex7.html | 1 + .../html/exframes/image_bargradsmallex8.html | 1 + .../html/exframes/image_barline_csimex1.html | 1 + .../exframes/image_barlinefreq_csimex1.html | 1 + .../docs/html/exframes/image_bartutex1.html | 1 + .../docs/html/exframes/image_bartutex2.html | 1 + .../docs/html/exframes/image_bartutex3.html | 1 + .../docs/html/exframes/image_bartutex4.html | 1 + .../docs/html/exframes/image_bartutex5.html | 1 + .../docs/html/exframes/image_bartutex6.html | 1 + .../html/exframes/image_boxstockcsimex1.html | 1 + .../docs/html/exframes/image_boxstockex1.html | 1 + .../exframes/image_builtinplotmarksex1.html | 1 + .../html/exframes/image_canvas_jpgarchex.html | 1 + .../docs/html/exframes/image_canvasex01.html | 1 + .../docs/html/exframes/image_canvasex02.html | 1 + .../docs/html/exframes/image_canvasex03.html | 1 + .../docs/html/exframes/image_canvasex04.html | 1 + .../docs/html/exframes/image_canvasex05.html | 1 + .../docs/html/exframes/image_canvasex06.html | 1 + .../html/exframes/image_color_chart01.html | 1 + .../html/exframes/image_color_chart02.html | 1 + .../html/exframes/image_color_chart03.html | 1 + .../html/exframes/image_color_chart04.html | 1 + .../docs/html/exframes/image_dateaxisex1.html | 1 + .../docs/html/exframes/image_dateaxisex2.html | 1 + .../docs/html/exframes/image_dateaxisex4.html | 1 + .../docs/html/exframes/image_dbschemaex1.html | 1 + .../docs/html/exframes/image_example0.html | 1 + .../docs/html/exframes/image_example11.html | 1 + .../docs/html/exframes/image_example13.html | 1 + .../docs/html/exframes/image_example14.html | 1 + .../docs/html/exframes/image_example15.html | 1 + .../docs/html/exframes/image_example16.1.html | 1 + .../docs/html/exframes/image_example16.2.html | 1 + .../docs/html/exframes/image_example16.3.html | 1 + .../docs/html/exframes/image_example16.4.html | 1 + .../docs/html/exframes/image_example16.6.html | 1 + .../docs/html/exframes/image_example16.html | 1 + .../docs/html/exframes/image_example17.html | 1 + .../docs/html/exframes/image_example18.html | 1 + .../docs/html/exframes/image_example19.1.html | 1 + .../docs/html/exframes/image_example19.html | 1 + .../docs/html/exframes/image_example2.html | 1 + .../docs/html/exframes/image_example20.1.html | 1 + .../docs/html/exframes/image_example20.2.html | 1 + .../docs/html/exframes/image_example20.3.html | 1 + .../docs/html/exframes/image_example20.4.html | 1 + .../docs/html/exframes/image_example20.5.html | 1 + .../docs/html/exframes/image_example20.html | 1 + .../docs/html/exframes/image_example21.html | 1 + .../docs/html/exframes/image_example22.html | 1 + .../docs/html/exframes/image_example23.html | 1 + .../docs/html/exframes/image_example24.html | 1 + .../docs/html/exframes/image_example25.1.html | 1 + .../docs/html/exframes/image_example25.2.html | 1 + .../docs/html/exframes/image_example25.html | 1 + .../docs/html/exframes/image_example26.1.html | 1 + .../docs/html/exframes/image_example26.html | 1 + .../docs/html/exframes/image_example27.1.html | 1 + .../docs/html/exframes/image_example27.2.html | 1 + .../docs/html/exframes/image_example27.3.html | 1 + .../docs/html/exframes/image_example27.html | 1 + .../docs/html/exframes/image_example28.1.html | 1 + .../docs/html/exframes/image_example28.2.html | 1 + .../docs/html/exframes/image_example28.3.html | 1 + .../docs/html/exframes/image_example28.html | 1 + .../docs/html/exframes/image_example3.1.html | 1 + .../html/exframes/image_example3.2.1.html | 1 + .../html/exframes/image_example3.2.2.html | 1 + .../docs/html/exframes/image_example3.2.html | 1 + .../docs/html/exframes/image_example3.3.html | 1 + .../docs/html/exframes/image_example3.4.html | 1 + .../docs/html/exframes/image_example3.html | 1 + .../docs/html/exframes/image_example4.html | 1 + .../docs/html/exframes/image_example5.1.html | 1 + .../docs/html/exframes/image_example5.html | 1 + .../docs/html/exframes/image_example6.1.html | 1 + .../docs/html/exframes/image_example6.2.html | 1 + .../docs/html/exframes/image_example6.html | 1 + .../docs/html/exframes/image_example7.html | 1 + .../docs/html/exframes/image_example8.html | 1 + .../docs/html/exframes/image_example9.1.html | 1 + .../docs/html/exframes/image_example9.2.html | 1 + .../docs/html/exframes/image_example9.html | 1 + .../html/exframes/image_fieldscatterex1.html | 1 + .../html/exframes/image_filledgridex1.html | 1 + .../html/exframes/image_filledlineex01.1.html | 1 + .../html/exframes/image_filledlineex01.html | 1 + .../docs/html/exframes/image_funcex1.html | 1 + .../exframes/image_ganttconstrainex0.html | 1 + .../exframes/image_ganttconstrainex1.html | 1 + .../html/exframes/image_ganttcsimex01.html | 1 + .../html/exframes/image_ganttcsimex02.html | 1 + .../docs/html/exframes/image_ganttex00.html | 1 + .../docs/html/exframes/image_ganttex01.html | 1 + .../docs/html/exframes/image_ganttex02.html | 1 + .../docs/html/exframes/image_ganttex03.html | 1 + .../docs/html/exframes/image_ganttex04.html | 1 + .../docs/html/exframes/image_ganttex05.html | 1 + .../docs/html/exframes/image_ganttex06.html | 1 + .../docs/html/exframes/image_ganttex07.html | 1 + .../docs/html/exframes/image_ganttex08.html | 1 + .../docs/html/exframes/image_ganttex09.html | 1 + .../docs/html/exframes/image_ganttex10.html | 1 + .../docs/html/exframes/image_ganttex11.html | 1 + .../docs/html/exframes/image_ganttex12.html | 1 + .../docs/html/exframes/image_ganttex13.html | 1 + .../docs/html/exframes/image_ganttex14.html | 1 + .../docs/html/exframes/image_ganttex15.html | 1 + .../docs/html/exframes/image_ganttex16.html | 1 + .../docs/html/exframes/image_ganttex17.html | 1 + .../docs/html/exframes/image_ganttex18.html | 1 + .../docs/html/exframes/image_ganttex19.html | 1 + .../html/exframes/image_gantthgridex1.html | 1 + .../html/exframes/image_gantthourex1.html | 1 + .../html/exframes/image_gantthourminex1.html | 1 + .../html/exframes/image_gantticonex1.html | 1 + .../html/exframes/image_ganttsimpleex1.html | 1 + .../docs/html/exframes/image_gradbkgex1.html | 1 + .../docs/html/exframes/image_horizbarex1.html | 1 + .../docs/html/exframes/image_horizbarex2.html | 1 + .../docs/html/exframes/image_horizbarex3.html | 1 + .../docs/html/exframes/image_horizbarex4.html | 1 + .../html/exframes/image_imgmarkercsimex1.html | 1 + .../html/exframes/image_imgmarkerex1.html | 1 + .../docs/html/exframes/image_impulsex1.html | 1 + .../docs/html/exframes/image_impulsex2.html | 1 + .../docs/html/exframes/image_impulsex3.html | 1 + .../docs/html/exframes/image_impulsex4.html | 1 + .../docs/html/exframes/image_inyaxisex2.html | 1 + .../html/exframes/image_linebarcentex1.html | 1 + .../docs/html/exframes/image_lineiconex1.html | 1 + .../docs/html/exframes/image_lineiconex2.html | 1 + .../html/exframes/image_listfontsex1.html | 1 + .../docs/html/exframes/image_logbarex1.html | 1 + .../docs/html/exframes/image_loglogex1.html | 1 + .../docs/html/exframes/image_manscaleex1.html | 1 + .../docs/html/exframes/image_manscaleex2.html | 1 + .../docs/html/exframes/image_manscaleex3.html | 1 + .../docs/html/exframes/image_manscaleex4.html | 1 + .../docs/html/exframes/image_markflagex1.html | 1 + .../html/exframes/image_nullvalueex01.html | 1 + .../image_partiallyfilledlineex1.html | 1 + .../docs/html/exframes/image_penguin.html | 1 + .../html/exframes/image_pie3d_csimex1.html | 1 + .../docs/html/exframes/image_pie_csimex1.html | 1 + .../html/exframes/image_piec_csimex1.html | 1 + .../docs/html/exframes/image_piecex1.html | 1 + .../docs/html/exframes/image_piecex2.html | 1 + .../docs/html/exframes/image_pieex3.html | 1 + .../docs/html/exframes/image_pieex8.html | 1 + .../docs/html/exframes/image_pieex9.html | 1 + .../html/exframes/image_pielabelsex1.html | 1 + .../html/exframes/image_pielabelsex2.html | 1 + .../html/exframes/image_pielabelsex4.html | 1 + .../html/exframes/image_polarex0-180.html | 1 + .../docs/html/exframes/image_polarex0.html | 1 + .../html/exframes/image_polarex3-lin.html | 1 + .../docs/html/exframes/image_polarex3.html | 1 + .../docs/html/exframes/image_polarex4.html | 1 + .../docs/html/exframes/image_polarex5.html | 1 + .../docs/html/exframes/image_polarex7-2.html | 1 + .../docs/html/exframes/image_polarex9.html | 1 + .../docs/html/exframes/image_radarex1.html | 1 + .../docs/html/exframes/image_radarex2.html | 1 + .../docs/html/exframes/image_radarex4.html | 1 + .../docs/html/exframes/image_radarex6.1.html | 1 + .../docs/html/exframes/image_radarex6.html | 1 + .../docs/html/exframes/image_radarex7.html | 1 + .../docs/html/exframes/image_radarex8.1.html | 1 + .../docs/html/exframes/image_radarex8.html | 1 + .../html/exframes/image_radarmarkex1.html | 1 + .../docs/html/exframes/image_rotex0.html | 1 + .../docs/html/exframes/image_rotex1.html | 1 + .../docs/html/exframes/image_rotex2.html | 1 + .../docs/html/exframes/image_rotex3.html | 1 + .../docs/html/exframes/image_rotex4.html | 1 + .../docs/html/exframes/image_rotex5.html | 1 + .../html/exframes/image_scatter_csimex1.html | 1 + .../docs/html/exframes/image_scatterex1.html | 1 + .../docs/html/exframes/image_scatterex2.html | 1 + .../exframes/image_smallstaticbandsex1.html | 1 + .../exframes/image_smallstaticbandsex10.html | 1 + .../exframes/image_smallstaticbandsex2.html | 1 + .../exframes/image_smallstaticbandsex3.html | 1 + .../exframes/image_smallstaticbandsex4.html | 1 + .../exframes/image_smallstaticbandsex5.html | 1 + .../exframes/image_smallstaticbandsex6.html | 1 + .../exframes/image_smallstaticbandsex7.html | 1 + .../exframes/image_smallstaticbandsex8.html | 1 + .../exframes/image_smallstaticbandsex9.html | 1 + .../docs/html/exframes/image_splineex1.html | 1 + .../html/exframes/image_staticbandbarex7.html | 1 + .../docs/html/exframes/image_stockex1.html | 1 + .../docs/html/exframes/image_tabtitleex1.html | 1 + .../html/exframes/image_textalignex1.html | 1 + .../html/exframes/image_titlecsimex01.html | 1 + .../docs/html/exframes/image_topxaxisex1.html | 1 + .../docs/html/exframes/imgmarkercsimex1.html | 3 + .../docs/html/exframes/imgmarkerex1.html | 3 + .../jpgraph/docs/html/exframes/impulsex1.html | 4 + .../jpgraph/docs/html/exframes/impulsex2.html | 4 + .../jpgraph/docs/html/exframes/impulsex3.html | 4 + .../jpgraph/docs/html/exframes/impulsex4.html | 4 + .../docs/html/exframes/inyaxisex2.html | 3 + .../docs/html/exframes/linebarcentex1.html | 4 + .../docs/html/exframes/lineiconex1.html | 3 + .../docs/html/exframes/lineiconex2.html | 3 + .../docs/html/exframes/listfontsex1.html | 3 + .../jpgraph/docs/html/exframes/logbarex1.html | 4 + .../jpgraph/docs/html/exframes/loglogex1.html | 4 + .../docs/html/exframes/manscaleex1.html | 3 + .../docs/html/exframes/manscaleex2.html | 3 + .../docs/html/exframes/manscaleex3.html | 3 + .../docs/html/exframes/manscaleex4.html | 3 + .../docs/html/exframes/markflagex1.html | 3 + .../docs/html/exframes/nullvalueex01.html | 3 + .../html/exframes/partiallyfilledlineex1.html | 4 + .../jpgraph/docs/html/exframes/penguin.html | 4 + .../docs/html/exframes/pie3d_csimex1.html | 3 + .../docs/html/exframes/pie_csimex1.html | 3 + .../docs/html/exframes/piec_csimex1.html | 3 + .../jpgraph/docs/html/exframes/piecex1.html | 3 + .../jpgraph/docs/html/exframes/piecex2.html | 3 + .../jpgraph/docs/html/exframes/pieex3.html | 3 + .../jpgraph/docs/html/exframes/pieex8.html | 4 + .../jpgraph/docs/html/exframes/pieex9.html | 4 + .../docs/html/exframes/pielabelsex1.html | 3 + .../docs/html/exframes/pielabelsex2.html | 3 + .../docs/html/exframes/pielabelsex4.html | 3 + .../docs/html/exframes/polarex0-180.html | 4 + .../jpgraph/docs/html/exframes/polarex0.html | 4 + .../docs/html/exframes/polarex3-lin.html | 4 + .../jpgraph/docs/html/exframes/polarex3.html | 4 + .../jpgraph/docs/html/exframes/polarex4.html | 4 + .../jpgraph/docs/html/exframes/polarex5.html | 4 + .../docs/html/exframes/polarex7-2.html | 4 + .../jpgraph/docs/html/exframes/polarex9.html | 4 + .../jpgraph/docs/html/exframes/radarex1.html | 4 + .../jpgraph/docs/html/exframes/radarex2.html | 4 + .../jpgraph/docs/html/exframes/radarex4.html | 4 + .../docs/html/exframes/radarex6.1.html | 4 + .../jpgraph/docs/html/exframes/radarex6.html | 4 + .../jpgraph/docs/html/exframes/radarex7.html | 4 + .../docs/html/exframes/radarex8.1.html | 4 + .../jpgraph/docs/html/exframes/radarex8.html | 4 + .../docs/html/exframes/radarmarkex1.html | 4 + .../jpgraph/docs/html/exframes/rotex0.html | 3 + .../jpgraph/docs/html/exframes/rotex1.html | 3 + .../jpgraph/docs/html/exframes/rotex2.html | 3 + .../jpgraph/docs/html/exframes/rotex3.html | 3 + .../jpgraph/docs/html/exframes/rotex4.html | 3 + .../jpgraph/docs/html/exframes/rotex5.html | 3 + .../docs/html/exframes/scatter_csimex1.html | 4 + .../docs/html/exframes/scatterex1.html | 4 + .../docs/html/exframes/scatterex2.html | 4 + .../html/exframes/smallstaticbandsex1.html | 4 + .../html/exframes/smallstaticbandsex10.html | 4 + .../html/exframes/smallstaticbandsex2.html | 4 + .../html/exframes/smallstaticbandsex3.html | 4 + .../html/exframes/smallstaticbandsex4.html | 4 + .../html/exframes/smallstaticbandsex5.html | 4 + .../html/exframes/smallstaticbandsex6.html | 4 + .../html/exframes/smallstaticbandsex7.html | 4 + .../html/exframes/smallstaticbandsex8.html | 4 + .../html/exframes/smallstaticbandsex9.html | 4 + .../jpgraph/docs/html/exframes/splineex1.html | 3 + .../docs/html/exframes/staticbandbarex7.html | 4 + .../jpgraph/docs/html/exframes/stockex1.html | 4 + .../docs/html/exframes/tabtitleex1.html | 3 + .../docs/html/exframes/textalignex1.html | 3 + .../docs/html/exframes/titlecsimex01.html | 4 + .../docs/html/exframes/topxaxisex1.html | 3 + .../jpgraph/docs/html/img/alphabarex1.png | Bin 0 -> 143464 bytes .../jpgraph/docs/html/img/antispamex01.png | Bin 0 -> 2394 bytes .../jpgraph/docs/html/img/backgroundex03.png | Bin 0 -> 26634 bytes .../jpgraph/docs/html/img/balloonex1.png | Bin 0 -> 4921 bytes .../jpgraph/docs/html/img/bargradsmallex1.png | Bin 0 -> 1251 bytes .../jpgraph/docs/html/img/bargradsmallex2.png | Bin 0 -> 1703 bytes .../jpgraph/docs/html/img/bargradsmallex3.png | Bin 0 -> 1646 bytes .../jpgraph/docs/html/img/bargradsmallex4.png | Bin 0 -> 1190 bytes .../jpgraph/docs/html/img/bargradsmallex5.png | Bin 0 -> 1278 bytes .../jpgraph/docs/html/img/bargradsmallex6.png | Bin 0 -> 1649 bytes .../jpgraph/docs/html/img/bargradsmallex7.png | Bin 0 -> 1547 bytes .../jpgraph/docs/html/img/bargradsmallex8.png | Bin 0 -> 1403 bytes .../jpgraph/docs/html/img/bartutex1.png | Bin 0 -> 2080 bytes .../jpgraph/docs/html/img/bartutex2.png | Bin 0 -> 2183 bytes .../jpgraph/docs/html/img/bartutex3.png | Bin 0 -> 2601 bytes .../jpgraph/docs/html/img/bartutex4.png | Bin 0 -> 2385 bytes .../jpgraph/docs/html/img/bartutex5.png | Bin 0 -> 2294 bytes .../jpgraph/docs/html/img/bartutex6.png | Bin 0 -> 2235 bytes .../jpgraph/docs/html/img/boxstockex1.png | Bin 0 -> 2103 bytes .../docs/html/img/builtinplotmarksex1.png | Bin 0 -> 8496 bytes .../docs/html/img/canvas_jpgarchex.png | Bin 0 -> 56434 bytes .../jpgraph/docs/html/img/canvasex01.png | Bin 0 -> 6572 bytes .../jpgraph/docs/html/img/canvasex02.png | Bin 0 -> 2113 bytes .../jpgraph/docs/html/img/canvasex03.png | Bin 0 -> 2191 bytes .../jpgraph/docs/html/img/canvasex04.png | Bin 0 -> 1180 bytes .../jpgraph/docs/html/img/canvasex05.png | Bin 0 -> 1641 bytes .../jpgraph/docs/html/img/canvasex06.png | Bin 0 -> 1400 bytes .../jpgraph/docs/html/img/color_chart01.png | Bin 0 -> 12958 bytes .../jpgraph/docs/html/img/color_chart02.png | Bin 0 -> 13777 bytes .../jpgraph/docs/html/img/color_chart03.png | Bin 0 -> 13718 bytes .../jpgraph/docs/html/img/color_chart04.png | Bin 0 -> 11156 bytes .../jpgraph/docs/html/img/dateaxisex1.png | Bin 0 -> 3236 bytes .../jpgraph/docs/html/img/dateaxisex2.png | Bin 0 -> 5513 bytes .../jpgraph/docs/html/img/dateaxisex4.png | Bin 0 -> 4905 bytes .../jpgraph/docs/html/img/dbschemaex1.png | Bin 0 -> 30426 bytes .../jpgraph/docs/html/img/example0.png | Bin 0 -> 2692 bytes .../jpgraph/docs/html/img/example11.png | Bin 0 -> 4170 bytes .../jpgraph/docs/html/img/example13.png | Bin 0 -> 2163 bytes .../jpgraph/docs/html/img/example14.png | Bin 0 -> 2124 bytes .../jpgraph/docs/html/img/example15.png | Bin 0 -> 2795 bytes .../jpgraph/docs/html/img/example16.1.png | Bin 0 -> 3547 bytes .../jpgraph/docs/html/img/example16.2.png | Bin 0 -> 3115 bytes .../jpgraph/docs/html/img/example16.3.png | Bin 0 -> 3362 bytes .../jpgraph/docs/html/img/example16.4.png | Bin 0 -> 3486 bytes .../jpgraph/docs/html/img/example16.6.png | Bin 0 -> 2457 bytes .../jpgraph/docs/html/img/example16.png | Bin 0 -> 3146 bytes .../jpgraph/docs/html/img/example17.png | Bin 0 -> 2752 bytes .../jpgraph/docs/html/img/example18.png | Bin 0 -> 1925 bytes .../jpgraph/docs/html/img/example19.1.png | Bin 0 -> 1421 bytes .../jpgraph/docs/html/img/example19.png | Bin 0 -> 1913 bytes .../jpgraph/docs/html/img/example2.png | Bin 0 -> 2477 bytes .../jpgraph/docs/html/img/example20.1.png | Bin 0 -> 2285 bytes .../jpgraph/docs/html/img/example20.2.png | Bin 0 -> 2495 bytes .../jpgraph/docs/html/img/example20.3.png | Bin 0 -> 4989 bytes .../jpgraph/docs/html/img/example20.4.png | Bin 0 -> 5023 bytes .../jpgraph/docs/html/img/example20.5.png | Bin 0 -> 2223 bytes .../jpgraph/docs/html/img/example20.png | Bin 0 -> 1801 bytes .../jpgraph/docs/html/img/example21.png | Bin 0 -> 1951 bytes .../jpgraph/docs/html/img/example22.png | Bin 0 -> 2068 bytes .../jpgraph/docs/html/img/example23.png | Bin 0 -> 1969 bytes .../jpgraph/docs/html/img/example24.png | Bin 0 -> 2162 bytes .../jpgraph/docs/html/img/example25.1.png | Bin 0 -> 2265 bytes .../jpgraph/docs/html/img/example25.2.png | Bin 0 -> 2981 bytes .../jpgraph/docs/html/img/example25.png | Bin 0 -> 2132 bytes .../jpgraph/docs/html/img/example26.1.png | Bin 0 -> 2586 bytes .../jpgraph/docs/html/img/example26.png | Bin 0 -> 2310 bytes .../jpgraph/docs/html/img/example27.1.png | Bin 0 -> 2411 bytes .../jpgraph/docs/html/img/example27.2.png | Bin 0 -> 2687 bytes .../jpgraph/docs/html/img/example27.3.png | Bin 0 -> 3089 bytes .../jpgraph/docs/html/img/example27.png | Bin 0 -> 2887 bytes .../jpgraph/docs/html/img/example28.1.png | Bin 0 -> 1478 bytes .../jpgraph/docs/html/img/example28.2.png | Bin 0 -> 1500 bytes .../jpgraph/docs/html/img/example28.3.png | Bin 0 -> 1490 bytes .../jpgraph/docs/html/img/example28.png | Bin 0 -> 1488 bytes .../jpgraph/docs/html/img/example3.1.png | Bin 0 -> 3259 bytes .../jpgraph/docs/html/img/example3.2.1.png | Bin 0 -> 3355 bytes .../jpgraph/docs/html/img/example3.2.2.png | Bin 0 -> 3308 bytes .../jpgraph/docs/html/img/example3.2.png | Bin 0 -> 3456 bytes .../jpgraph/docs/html/img/example3.3.png | Bin 0 -> 3865 bytes .../jpgraph/docs/html/img/example3.4.png | Bin 0 -> 4222 bytes .../jpgraph/docs/html/img/example3.png | Bin 0 -> 3056 bytes .../jpgraph/docs/html/img/example4.png | Bin 0 -> 4021 bytes .../jpgraph/docs/html/img/example5.1.png | Bin 0 -> 4077 bytes .../jpgraph/docs/html/img/example5.png | Bin 0 -> 3945 bytes .../jpgraph/docs/html/img/example6.1.png | Bin 0 -> 4490 bytes .../jpgraph/docs/html/img/example6.2.png | Bin 0 -> 2242 bytes .../jpgraph/docs/html/img/example6.png | Bin 0 -> 4465 bytes .../jpgraph/docs/html/img/example7.png | Bin 0 -> 4281 bytes .../jpgraph/docs/html/img/example8.png | Bin 0 -> 3388 bytes .../jpgraph/docs/html/img/example9.1.png | Bin 0 -> 3569 bytes .../jpgraph/docs/html/img/example9.2.png | Bin 0 -> 3753 bytes .../jpgraph/docs/html/img/example9.png | Bin 0 -> 3701 bytes .../jpgraph/docs/html/img/fieldscatterex1.png | Bin 0 -> 5428 bytes .../jpgraph/docs/html/img/filledgridex1.png | Bin 0 -> 3354 bytes .../docs/html/img/filledlineex01.1.png | Bin 0 -> 2551 bytes .../jpgraph/docs/html/img/filledlineex01.png | Bin 0 -> 2534 bytes .../jpgraph/docs/html/img/funcex1.png | Bin 0 -> 5840 bytes .../docs/html/img/ganttconstrainex0.png | Bin 0 -> 3899 bytes .../docs/html/img/ganttconstrainex1.png | Bin 0 -> 4327 bytes .../jpgraph/docs/html/img/ganttex00.png | Bin 0 -> 1584 bytes .../jpgraph/docs/html/img/ganttex01.png | Bin 0 -> 3709 bytes .../jpgraph/docs/html/img/ganttex02.png | Bin 0 -> 2152 bytes .../jpgraph/docs/html/img/ganttex03.png | Bin 0 -> 4295 bytes .../jpgraph/docs/html/img/ganttex04.png | Bin 0 -> 4388 bytes .../jpgraph/docs/html/img/ganttex05.png | Bin 0 -> 4378 bytes .../jpgraph/docs/html/img/ganttex06.png | Bin 0 -> 4601 bytes .../jpgraph/docs/html/img/ganttex07.png | Bin 0 -> 4606 bytes .../jpgraph/docs/html/img/ganttex08.png | Bin 0 -> 5003 bytes .../jpgraph/docs/html/img/ganttex09.png | Bin 0 -> 4882 bytes .../jpgraph/docs/html/img/ganttex10.png | Bin 0 -> 5231 bytes .../jpgraph/docs/html/img/ganttex11.png | Bin 0 -> 4913 bytes .../jpgraph/docs/html/img/ganttex12.png | Bin 0 -> 4760 bytes .../jpgraph/docs/html/img/ganttex13.png | Bin 0 -> 6431 bytes .../jpgraph/docs/html/img/ganttex14.png | Bin 0 -> 4916 bytes .../jpgraph/docs/html/img/ganttex15.png | Bin 0 -> 4941 bytes .../jpgraph/docs/html/img/ganttex16.png | Bin 0 -> 5356 bytes .../jpgraph/docs/html/img/ganttex17.png | Bin 0 -> 4976 bytes .../jpgraph/docs/html/img/ganttex18.png | Bin 0 -> 5005 bytes .../jpgraph/docs/html/img/ganttex19.png | Bin 0 -> 5262 bytes .../jpgraph/docs/html/img/gantthgridex1.png | Bin 0 -> 15017 bytes .../jpgraph/docs/html/img/gantthourex1.png | Bin 0 -> 6517 bytes .../jpgraph/docs/html/img/gantthourminex1.png | Bin 0 -> 12762 bytes .../jpgraph/docs/html/img/gantticonex1.png | Bin 0 -> 13883 bytes .../jpgraph/docs/html/img/ganttsimpleex1.png | Bin 0 -> 3836 bytes .../jpgraph/docs/html/img/gradbkgex1.png | Bin 0 -> 7849 bytes .../jpgraph/docs/html/img/horizbarex1.png | Bin 0 -> 15239 bytes .../jpgraph/docs/html/img/horizbarex2.png | Bin 0 -> 18031 bytes .../jpgraph/docs/html/img/horizbarex3.png | Bin 0 -> 15434 bytes .../jpgraph/docs/html/img/horizbarex4.png | Bin 0 -> 4555 bytes .../docs/html/img/imgadj_b00c00sat-1.jpg | Bin 0 -> 14354 bytes .../docs/html/img/imgadj_b03c-03sat0.jpg | Bin 0 -> 11814 bytes .../docs/html/img/imgadj_b04c-07sat-1.jpg | Bin 0 -> 7531 bytes .../docs/html/img/imgadj_b04c-07sat0.jpg | Bin 0 -> 7688 bytes .../jpgraph/docs/html/img/imgadj_b0c0sat1.jpg | Bin 0 -> 21118 bytes .../jpgraph/docs/html/img/imgadj_orig.jpg | Bin 0 -> 15015 bytes .../jpgraph/docs/html/img/imgmarkerex1.png | Bin 0 -> 10529 bytes .../jpgraph/docs/html/img/impulsex1.png | Bin 0 -> 1856 bytes .../jpgraph/docs/html/img/impulsex2.png | Bin 0 -> 2340 bytes .../jpgraph/docs/html/img/impulsex3.png | Bin 0 -> 2684 bytes .../jpgraph/docs/html/img/impulsex4.png | Bin 0 -> 4671 bytes .../jpgraph/docs/html/img/inyaxisex2.png | Bin 0 -> 17294 bytes .../jpgraph/docs/html/img/linebarcentex1.png | Bin 0 -> 3443 bytes .../jpgraph/docs/html/img/lineiconex1.png | Bin 0 -> 18452 bytes .../jpgraph/docs/html/img/lineiconex2.png | Bin 0 -> 6716 bytes .../jpgraph/docs/html/img/listfontsex1.png | Bin 0 -> 34037 bytes .../jpgraph/docs/html/img/logbarex1.png | Bin 0 -> 7481 bytes .../jpgraph/docs/html/img/loglogex1.png | Bin 0 -> 4502 bytes .../jpgraph/docs/html/img/manscaleex1.png | Bin 0 -> 1905 bytes .../jpgraph/docs/html/img/manscaleex2.png | Bin 0 -> 1841 bytes .../jpgraph/docs/html/img/manscaleex3.png | Bin 0 -> 2058 bytes .../jpgraph/docs/html/img/manscaleex4.png | Bin 0 -> 1889 bytes .../jpgraph/docs/html/img/markflagex1.png | Bin 0 -> 8137 bytes .../jpgraph/docs/html/img/nullvalueex01.png | Bin 0 -> 9228 bytes .../docs/html/img/partiallyfilledlineex1.png | Bin 0 -> 4284 bytes .../jpgraph/docs/html/img/piecex1.png | Bin 0 -> 11485 bytes .../jpgraph/docs/html/img/piecex2.png | Bin 0 -> 19535 bytes .../includes/jpgraph/docs/html/img/pieex3.png | Bin 0 -> 4859 bytes .../includes/jpgraph/docs/html/img/pieex8.png | Bin 0 -> 2627 bytes .../includes/jpgraph/docs/html/img/pieex9.png | Bin 0 -> 3033 bytes .../jpgraph/docs/html/img/pielabelsex1.png | Bin 0 -> 13195 bytes .../jpgraph/docs/html/img/pielabelsex2.png | Bin 0 -> 13890 bytes .../jpgraph/docs/html/img/pielabelsex4.png | Bin 0 -> 13374 bytes .../jpgraph/docs/html/img/polarex0-180.png | Bin 0 -> 5138 bytes .../jpgraph/docs/html/img/polarex0.png | Bin 0 -> 6687 bytes .../jpgraph/docs/html/img/polarex3-lin.png | Bin 0 -> 5811 bytes .../jpgraph/docs/html/img/polarex3.png | Bin 0 -> 6052 bytes .../jpgraph/docs/html/img/polarex4.png | Bin 0 -> 9022 bytes .../jpgraph/docs/html/img/polarex5.png | Bin 0 -> 15010 bytes .../jpgraph/docs/html/img/polarex7-2.png | Bin 0 -> 22871 bytes .../jpgraph/docs/html/img/polarex9.png | Bin 0 -> 17586 bytes .../jpgraph/docs/html/img/radarex1.png | Bin 0 -> 1873 bytes .../jpgraph/docs/html/img/radarex2.png | Bin 0 -> 2285 bytes .../jpgraph/docs/html/img/radarex4.png | Bin 0 -> 2655 bytes .../jpgraph/docs/html/img/radarex6.1.png | Bin 0 -> 3127 bytes .../jpgraph/docs/html/img/radarex6.png | Bin 0 -> 2952 bytes .../jpgraph/docs/html/img/radarex7.png | Bin 0 -> 4243 bytes .../jpgraph/docs/html/img/radarex8.1.png | Bin 0 -> 7479 bytes .../jpgraph/docs/html/img/radarex8.png | Bin 0 -> 3927 bytes .../jpgraph/docs/html/img/radarmarkex1.png | Bin 0 -> 9064 bytes .../includes/jpgraph/docs/html/img/rotex0.png | Bin 0 -> 1991 bytes .../includes/jpgraph/docs/html/img/rotex1.png | Bin 0 -> 2991 bytes .../includes/jpgraph/docs/html/img/rotex2.png | Bin 0 -> 1820 bytes .../includes/jpgraph/docs/html/img/rotex3.png | Bin 0 -> 2872 bytes .../includes/jpgraph/docs/html/img/rotex4.png | Bin 0 -> 1540 bytes .../includes/jpgraph/docs/html/img/rotex5.png | Bin 0 -> 2746 bytes .../jpgraph/docs/html/img/scatterex1.png | Bin 0 -> 1813 bytes .../jpgraph/docs/html/img/scatterex2.png | Bin 0 -> 2359 bytes .../docs/html/img/smallstaticbandsex1.png | Bin 0 -> 2751 bytes .../docs/html/img/smallstaticbandsex10.png | Bin 0 -> 3561 bytes .../docs/html/img/smallstaticbandsex2.png | Bin 0 -> 2664 bytes .../docs/html/img/smallstaticbandsex3.png | Bin 0 -> 2433 bytes .../docs/html/img/smallstaticbandsex4.png | Bin 0 -> 4156 bytes .../docs/html/img/smallstaticbandsex5.png | Bin 0 -> 3621 bytes .../docs/html/img/smallstaticbandsex6.png | Bin 0 -> 2192 bytes .../docs/html/img/smallstaticbandsex7.png | Bin 0 -> 2057 bytes .../docs/html/img/smallstaticbandsex8.png | Bin 0 -> 2824 bytes .../docs/html/img/smallstaticbandsex9.png | Bin 0 -> 3091 bytes .../jpgraph/docs/html/img/splineex1.png | Bin 0 -> 4549 bytes .../docs/html/img/staticbandbarex7.png | Bin 0 -> 8292 bytes .../jpgraph/docs/html/img/stockex1.png | Bin 0 -> 1999 bytes .../jpgraph/docs/html/img/tabtitleex1.png | Bin 0 -> 5077 bytes .../jpgraph/docs/html/img/textalignex1.png | Bin 0 -> 23870 bytes .../jpgraph/docs/html/img/theme01.png | Bin 0 -> 3698 bytes .../jpgraph/docs/html/img/theme02.png | Bin 0 -> 2876 bytes .../jpgraph/docs/html/img/theme03.png | Bin 0 -> 2280 bytes .../jpgraph/docs/html/img/theme04.png | Bin 0 -> 1649 bytes .../jpgraph/docs/html/img/topxaxisex1.png | Bin 0 -> 2675 bytes .../jpgraph/docs/html/imgadj_b00c00sat-1.jpg | Bin 0 -> 14354 bytes .../jpgraph/docs/html/imgadj_b03c-03sat0.jpg | Bin 0 -> 11814 bytes .../jpgraph/docs/html/imgadj_b04c-07sat-1.jpg | Bin 0 -> 7531 bytes .../jpgraph/docs/html/imgadj_b04c-07sat0.jpg | Bin 0 -> 7688 bytes .../jpgraph/docs/html/imgadj_b0c0sat1.jpg | Bin 0 -> 21118 bytes .../jpgraph/docs/html/imgadj_orig.jpg | Bin 0 -> 15015 bytes html/includes/jpgraph/docs/html/index.html | 26 + html/includes/jpgraph/docs/html/jpgmanual.css | 154 + .../jpgraph/docs/html/manual_jpgraph.html | 8893 +++++++++++++++++ html/includes/jpgraph/docs/html/toc.html | 502 + html/includes/jpgraph/docs/index.html | 113 + html/includes/jpgraph/docs/manual.png | Bin 0 -> 884 bytes .../includes/jpgraph/docs/ref/AccBarPlot.html | 72 + .../jpgraph/docs/ref/AccLinePlot.html | 90 + html/includes/jpgraph/docs/ref/AntiSpam.html | 100 + html/includes/jpgraph/docs/ref/Axis.html | 881 ++ html/includes/jpgraph/docs/ref/BarPlot.html | 354 + html/includes/jpgraph/docs/ref/Bezier.html | 91 + html/includes/jpgraph/docs/ref/BoxPlot.html | 68 + .../jpgraph/docs/ref/CanvasGraph.html | 103 + .../jpgraph/docs/ref/CanvasRectangleText.html | 432 + .../jpgraph/docs/ref/CanvasScale.html | 161 + .../includes/jpgraph/docs/ref/DateLocale.html | 543 + html/includes/jpgraph/docs/ref/DateScale.html | 154 + .../jpgraph/docs/ref/DigitalLED74.html | 88 + .../jpgraph/docs/ref/DisplayValue.html | 251 + .../includes/jpgraph/docs/ref/ErrMsgText.html | 10 + .../jpgraph/docs/ref/ErrorLinePlot.html | 41 + html/includes/jpgraph/docs/ref/ErrorPlot.html | 41 + .../includes/jpgraph/docs/ref/FieldArrow.html | 61 + html/includes/jpgraph/docs/ref/FieldPlot.html | 74 + html/includes/jpgraph/docs/ref/Footer.html | 15 + .../jpgraph/docs/ref/FuncGenerator.html | 85 + .../includes/jpgraph/docs/ref/GTextTable.html | 1944 ++++ .../jpgraph/docs/ref/GanttActivityInfo.html | 267 + html/includes/jpgraph/docs/ref/GanttBar.html | 214 + .../includes/jpgraph/docs/ref/GanttGraph.html | 357 + .../jpgraph/docs/ref/GanttPlotObject.html | 176 + .../includes/jpgraph/docs/ref/GanttScale.html | 167 + .../includes/jpgraph/docs/ref/GanttVLine.html | 111 + html/includes/jpgraph/docs/ref/Graph.html | 1748 ++++ .../jpgraph/docs/ref/GraphTabTitle.html | 202 + html/includes/jpgraph/docs/ref/Grid.html | 153 + .../jpgraph/docs/ref/GroupBarPlot.html | 45 + .../jpgraph/docs/ref/HeaderProperty.html | 343 + .../jpgraph/docs/ref/HorizontalGridLine.html | 80 + html/includes/jpgraph/docs/ref/IconImage.html | 117 + html/includes/jpgraph/docs/ref/IconPlot.html | 227 + html/includes/jpgraph/docs/ref/Image.html | 278 + html/includes/jpgraph/docs/ref/Legend.html | 519 + .../jpgraph/docs/ref/LineErrorPlot.html | 40 + html/includes/jpgraph/docs/ref/LinePlot.html | 326 + .../jpgraph/docs/ref/LineProperty.html | 99 + .../jpgraph/docs/ref/LinearScale.html | 126 + .../jpgraph/docs/ref/LinearTicks.html | 168 + html/includes/jpgraph/docs/ref/LogScale.html | 38 + html/includes/jpgraph/docs/ref/LogTicks.html | 52 + html/includes/jpgraph/docs/ref/MileStone.html | 49 + html/includes/jpgraph/docs/ref/PieGraph.html | 159 + html/includes/jpgraph/docs/ref/PiePlot.html | 618 ++ html/includes/jpgraph/docs/ref/PiePlot3D.html | 279 + html/includes/jpgraph/docs/ref/PiePlotC.html | 163 + html/includes/jpgraph/docs/ref/Plot.html | 173 + html/includes/jpgraph/docs/ref/PlotBand.html | 164 + html/includes/jpgraph/docs/ref/PlotLine.html | 199 + html/includes/jpgraph/docs/ref/PlotMark.html | 506 + html/includes/jpgraph/docs/ref/PolarAxis.html | 277 + .../includes/jpgraph/docs/ref/PolarGraph.html | 257 + html/includes/jpgraph/docs/ref/PolarPlot.html | 165 + html/includes/jpgraph/docs/ref/Progress.html | 102 + html/includes/jpgraph/docs/ref/RadarAxis.html | 10 + .../includes/jpgraph/docs/ref/RadarGraph.html | 385 + html/includes/jpgraph/docs/ref/RadarGrid.html | 10 + .../jpgraph/docs/ref/RadarLinearTicks.html | 10 + .../jpgraph/docs/ref/RadarLogTicks.html | 10 + html/includes/jpgraph/docs/ref/RadarPlot.html | 181 + html/includes/jpgraph/docs/ref/RotImage.html | 137 + .../jpgraph/docs/ref/ScatterPlot.html | 102 + html/includes/jpgraph/docs/ref/Shape.html | 562 ++ html/includes/jpgraph/docs/ref/Spline.html | 70 + html/includes/jpgraph/docs/ref/StockPlot.html | 135 + .../jpgraph/docs/ref/SuperScriptText.html | 190 + html/includes/jpgraph/docs/ref/Text.html | 777 ++ .../jpgraph/docs/ref/TextProperty.html | 189 + html/includes/jpgraph/docs/ref/Ticks.html | 306 + html/includes/jpgraph/docs/ref/class_toc.html | 618 ++ html/includes/jpgraph/docs/ref/index.html | 10 + html/includes/jpgraph/docs/ref/projinfo.html | 5 + html/includes/jpgraph/docs/reference.png | Bin 0 -> 531 bytes .../jpgraph/src/Examples/accbarex1.php | 40 + .../jpgraph/src/Examples/alphabarex1.php | 75 + .../jpgraph/src/Examples/antispamex01.php | 18 + .../jpgraph/src/Examples/backgroundex01.php | 51 + .../jpgraph/src/Examples/backgroundex02.php | 51 + .../jpgraph/src/Examples/backgroundex03.php | 51 + .../jpgraph/src/Examples/balloonex1.php | 56 + .../jpgraph/src/Examples/balloonex2.php | 78 + .../jpgraph/src/Examples/bar2scalesex1.php | 48 + .../jpgraph/src/Examples/bar_csimex1.php | 52 + .../jpgraph/src/Examples/bar_csimex2.php | 51 + .../jpgraph/src/Examples/bar_csimex3.php | 88 + .../src/Examples/barformatcallbackex1.php | 30 + .../jpgraph/src/Examples/bargradex1.php | 47 + .../jpgraph/src/Examples/bargradex2.php | 48 + .../jpgraph/src/Examples/bargradex3.php | 50 + .../jpgraph/src/Examples/bargradex4.php | 47 + .../jpgraph/src/Examples/bargradex5.php | 52 + .../jpgraph/src/Examples/bargradex6.php | 51 + .../jpgraph/src/Examples/bargradsmallex1.php | 34 + .../jpgraph/src/Examples/bargradsmallex2.php | 34 + .../jpgraph/src/Examples/bargradsmallex3.php | 34 + .../jpgraph/src/Examples/bargradsmallex4.php | 34 + .../jpgraph/src/Examples/bargradsmallex5.php | 34 + .../jpgraph/src/Examples/bargradsmallex6.php | 34 + .../jpgraph/src/Examples/bargradsmallex7.php | 34 + .../jpgraph/src/Examples/bargradsmallex8.php | 34 + .../jpgraph/src/Examples/barimgex1.php | 29 + .../jpgraph/src/Examples/barintex1.php | 48 + .../jpgraph/src/Examples/barintex2.php | 58 + .../jpgraph/src/Examples/barline_csimex1.php | 42 + .../jpgraph/src/Examples/barlinealphaex1.php | 74 + .../src/Examples/barlinefreq_csimex1.php | 100 + .../jpgraph/src/Examples/barlinefreqex1.php | 83 + .../jpgraph/src/Examples/barpatternex1.php | 33 + .../src/Examples/barscalecallbackex1.php | 59 + .../jpgraph/src/Examples/bartutex1.php | 35 + .../jpgraph/src/Examples/bartutex12.php | 90 + .../jpgraph/src/Examples/bartutex2.php | 40 + .../jpgraph/src/Examples/bartutex3.php | 44 + .../jpgraph/src/Examples/bartutex4.php | 47 + .../jpgraph/src/Examples/bartutex5.php | 45 + .../jpgraph/src/Examples/bartutex6.php | 47 + .../jpgraph/src/Examples/bezierex1.php | 54 + .../jpgraph/src/Examples/bkgimgflagex1.php | 81 + .../jpgraph/src/Examples/bkgimgflagex2.php | 83 + .../jpgraph/src/Examples/bkgimgflagex3.php | 83 + .../jpgraph/src/Examples/bkgimgflagex4.php | 83 + .../src/Examples/blueblack400x300grad.png | Bin 0 -> 1165 bytes .../jpgraph/src/Examples/boxstockcsimex1.php | 37 + .../jpgraph/src/Examples/boxstockex1.php | 33 + .../jpgraph/src/Examples/boxstockex2.php | 38 + .../src/Examples/builtinplotmarksex1.php | 65 + .../jpgraph/src/Examples/canvas_jpgarchex.php | 143 + .../jpgraph/src/Examples/canvasbezierex1.php | 40 + .../jpgraph/src/Examples/canvasex01.php | 37 + .../jpgraph/src/Examples/canvasex02.php | 42 + .../jpgraph/src/Examples/canvasex03.php | 58 + .../jpgraph/src/Examples/canvasex04.php | 58 + .../jpgraph/src/Examples/canvasex05.php | 58 + .../jpgraph/src/Examples/canvasex06.php | 42 + .../jpgraph/src/Examples/canvaspiralex1.php | 78 + .../jpgraph/src/Examples/centeredlineex01.php | 35 + .../jpgraph/src/Examples/centeredlineex02.php | 30 + .../jpgraph/src/Examples/centeredlineex03.php | 31 + .../jpgraph/src/Examples/centerlinebarex1.php | 35 + .../jpgraph/src/Examples/combgraphex1.php | 89 + .../jpgraph/src/Examples/dateaxisex1.php | 55 + .../jpgraph/src/Examples/dateaxisex2.php | 38 + .../jpgraph/src/Examples/dateaxisex3.php | 48 + .../jpgraph/src/Examples/dateaxisex4.php | 44 + .../jpgraph/src/Examples/dbschemaex1.php | 117 + .../jpgraph/src/Examples/dupyaxisex1.php | 31 + .../jpgraph/src/Examples/example0.php | 21 + .../jpgraph/src/Examples/example1.1.php | 25 + .../jpgraph/src/Examples/example1.2.php | 29 + .../jpgraph/src/Examples/example1.php | 25 + .../jpgraph/src/Examples/example10.php | 59 + .../jpgraph/src/Examples/example11.php | 44 + .../jpgraph/src/Examples/example13.php | 36 + .../jpgraph/src/Examples/example14.php | 37 + .../jpgraph/src/Examples/example15.php | 40 + .../jpgraph/src/Examples/example16.1.php | 46 + .../jpgraph/src/Examples/example16.2.php | 46 + .../jpgraph/src/Examples/example16.3.php | 47 + .../jpgraph/src/Examples/example16.4.php | 44 + .../jpgraph/src/Examples/example16.5.php | 57 + .../jpgraph/src/Examples/example16.6.php | 53 + .../jpgraph/src/Examples/example16.php | 44 + .../jpgraph/src/Examples/example17.php | 41 + .../jpgraph/src/Examples/example18.php | 32 + .../jpgraph/src/Examples/example19.1.php | 35 + .../jpgraph/src/Examples/example19.php | 35 + .../jpgraph/src/Examples/example2.1.php | 30 + .../jpgraph/src/Examples/example2.5.php | 26 + .../jpgraph/src/Examples/example2.6.php | 27 + .../jpgraph/src/Examples/example2.php | 25 + .../jpgraph/src/Examples/example20.1.php | 36 + .../jpgraph/src/Examples/example20.2.php | 37 + .../jpgraph/src/Examples/example20.3.php | 40 + .../jpgraph/src/Examples/example20.4.php | 41 + .../jpgraph/src/Examples/example20.5.php | 47 + .../jpgraph/src/Examples/example20.php | 36 + .../jpgraph/src/Examples/example21.php | 39 + .../jpgraph/src/Examples/example22.php | 38 + .../jpgraph/src/Examples/example23.php | 37 + .../jpgraph/src/Examples/example24.php | 46 + .../jpgraph/src/Examples/example25.1.php | 41 + .../jpgraph/src/Examples/example25.2.php | 42 + .../jpgraph/src/Examples/example25.php | 39 + .../jpgraph/src/Examples/example26.1.php | 23 + .../jpgraph/src/Examples/example26.php | 18 + .../jpgraph/src/Examples/example27.1.php | 25 + .../jpgraph/src/Examples/example27.2.php | 24 + .../jpgraph/src/Examples/example27.3.php | 24 + .../jpgraph/src/Examples/example27.php | 24 + .../jpgraph/src/Examples/example28.1.php | 22 + .../jpgraph/src/Examples/example28.2.php | 22 + .../jpgraph/src/Examples/example28.3.php | 22 + .../jpgraph/src/Examples/example28.php | 22 + .../jpgraph/src/Examples/example3.1.php | 35 + .../jpgraph/src/Examples/example3.2.1.php | 35 + .../jpgraph/src/Examples/example3.2.2.php | 37 + .../jpgraph/src/Examples/example3.2.php | 34 + .../jpgraph/src/Examples/example3.3.php | 37 + .../jpgraph/src/Examples/example3.4.php | 41 + .../jpgraph/src/Examples/example3.php | 35 + .../jpgraph/src/Examples/example4.php | 42 + .../jpgraph/src/Examples/example5.1.php | 47 + .../jpgraph/src/Examples/example5.php | 44 + .../jpgraph/src/Examples/example6.1.php | 55 + .../jpgraph/src/Examples/example6.2.php | 47 + .../jpgraph/src/Examples/example6.php | 54 + .../jpgraph/src/Examples/example7.php | 44 + .../jpgraph/src/Examples/example8.1.php | 57 + .../jpgraph/src/Examples/example8.php | 48 + .../jpgraph/src/Examples/example9.1.php | 50 + .../jpgraph/src/Examples/example9.2.php | 52 + .../jpgraph/src/Examples/example9.php | 49 + .../jpgraph/src/Examples/exampleex9.php | 63 + .../jpgraph/src/Examples/fieldscatterex1.php | 92 + .../jpgraph/src/Examples/filledgridex1.php | 50 + .../jpgraph/src/Examples/filledline01.php | 24 + .../jpgraph/src/Examples/filledlineex01.1.php | 24 + .../jpgraph/src/Examples/filledlineex01.php | 23 + .../jpgraph/src/Examples/filledlineex02.php | 24 + .../jpgraph/src/Examples/filledlineex03.php | 23 + .../src/Examples/filledstepstyleex1.php | 39 + .../src/Examples/fixscale_radarex1.php | 37 + .../includes/jpgraph/src/Examples/funcex1.php | 58 + .../includes/jpgraph/src/Examples/funcex2.php | 34 + .../includes/jpgraph/src/Examples/funcex3.php | 37 + .../includes/jpgraph/src/Examples/funcex4.php | 63 + .../src/Examples/ganttconstrainex0.php | 38 + .../src/Examples/ganttconstrainex1.php | 39 + .../src/Examples/ganttconstrainex2.php | 39 + .../jpgraph/src/Examples/ganttcsimex01.php | 28 + .../jpgraph/src/Examples/ganttcsimex02.php | 40 + .../jpgraph/src/Examples/ganttex00.php | 14 + .../jpgraph/src/Examples/ganttex01.php | 40 + .../jpgraph/src/Examples/ganttex02.php | 42 + .../jpgraph/src/Examples/ganttex03.php | 42 + .../jpgraph/src/Examples/ganttex04.php | 46 + .../jpgraph/src/Examples/ganttex05.php | 48 + .../jpgraph/src/Examples/ganttex06.php | 52 + .../jpgraph/src/Examples/ganttex07.php | 53 + .../jpgraph/src/Examples/ganttex08.php | 63 + .../jpgraph/src/Examples/ganttex09.php | 66 + .../jpgraph/src/Examples/ganttex10.php | 90 + .../jpgraph/src/Examples/ganttex11.php | 89 + .../jpgraph/src/Examples/ganttex12.php | 93 + .../jpgraph/src/Examples/ganttex13.php | 71 + .../jpgraph/src/Examples/ganttex14.php | 67 + .../jpgraph/src/Examples/ganttex15.php | 68 + .../jpgraph/src/Examples/ganttex16.php | 73 + .../jpgraph/src/Examples/ganttex17.php | 78 + .../jpgraph/src/Examples/ganttex18.php | 82 + .../jpgraph/src/Examples/ganttex19.php | 84 + .../jpgraph/src/Examples/ganttex30.php | 87 + .../jpgraph/src/Examples/ganttex_slice.php | 78 + .../jpgraph/src/Examples/gantthgridex1.php | 63 + .../jpgraph/src/Examples/gantthourex1.php | 51 + .../jpgraph/src/Examples/gantthourminex1.php | 90 + .../jpgraph/src/Examples/gantticonex1.php | 76 + .../src/Examples/ganttmonthyearex1.php | 50 + .../src/Examples/ganttmonthyearex2.php | 66 + .../src/Examples/ganttmonthyearex3.php | 66 + .../jpgraph/src/Examples/ganttsimpleex1.php | 31 + .../jpgraph/src/Examples/gradbkgex1.php | 66 + .../jpgraph/src/Examples/gradlinefillex1.php | 29 + .../jpgraph/src/Examples/gradlinefillex2.php | 30 + .../jpgraph/src/Examples/gradlinefillex3.php | 30 + .../jpgraph/src/Examples/gradlinefillex4.php | 31 + .../jpgraph/src/Examples/groupbarex1.php | 44 + .../jpgraph/src/Examples/horizbarex1.php | 64 + .../jpgraph/src/Examples/horizbarex2.php | 70 + .../jpgraph/src/Examples/horizbarex3.php | 99 + .../jpgraph/src/Examples/horizbarex4.php | 48 + .../jpgraph/src/Examples/horizbarex6.php | 83 + .../jpgraph/src/Examples/imgmarkercsimex1.php | 55 + .../jpgraph/src/Examples/imgmarkerex1.php | 52 + .../jpgraph/src/Examples/impulsex1.php | 23 + .../jpgraph/src/Examples/impulsex2.php | 29 + .../jpgraph/src/Examples/impulsex3.php | 53 + .../jpgraph/src/Examples/impulsex4.php | 75 + .../jpgraph/src/Examples/inyaxisex1.php | 51 + .../jpgraph/src/Examples/inyaxisex2.php | 53 + .../jpgraph/src/Examples/inyaxisex3.php | 69 + html/includes/jpgraph/src/Examples/ledex1.php | 12 + html/includes/jpgraph/src/Examples/ledex2.php | 12 + html/includes/jpgraph/src/Examples/ledex3.php | 12 + html/includes/jpgraph/src/Examples/ledex4.php | 12 + .../Examples/lightbluedarkblue400x300grad.png | Bin 0 -> 1165 bytes .../jpgraph/src/Examples/linebarcentex1.php | 49 + .../jpgraph/src/Examples/linebarex1.php | 75 + .../jpgraph/src/Examples/linebarex2.php | 59 + .../jpgraph/src/Examples/linebarex3.php | 52 + .../jpgraph/src/Examples/linegraceex.php | 31 + .../jpgraph/src/Examples/lineiconex1.php | 49 + .../jpgraph/src/Examples/lineiconex2.php | 32 + .../jpgraph/src/Examples/linlogex1.php | 64 + .../jpgraph/src/Examples/listallflags.php | 29 + .../src/Examples/listallflags_helper.php | 25 + .../jpgraph/src/Examples/listfontsex1.php | 117 + .../jpgraph/src/Examples/logbarex1.php | 48 + .../jpgraph/src/Examples/loglogex1.php | 59 + .../jpgraph/src/Examples/manscaleex1.php | 22 + .../jpgraph/src/Examples/manscaleex2.php | 21 + .../jpgraph/src/Examples/manscaleex3.php | 23 + .../jpgraph/src/Examples/manscaleex4.php | 22 + .../jpgraph/src/Examples/manualtickex1.php | 73 + .../jpgraph/src/Examples/manualtickex2.php | 72 + .../jpgraph/src/Examples/markflagex1.php | 74 + .../src/Examples/multconstganttex01.php | 30 + .../jpgraph/src/Examples/mulyaxiscsimex1.php | 75 + .../jpgraph/src/Examples/mulyaxisex1.php | 51 + .../jpgraph/src/Examples/negbarvalueex01.php | 39 + .../jpgraph/src/Examples/nullvalueex01.php | 56 + .../src/Examples/partiallyfilledlineex1.php | 44 + .../includes/jpgraph/src/Examples/penguin.png | Bin 0 -> 8284 bytes .../jpgraph/src/Examples/pie3d_csimex1.php | 43 + .../jpgraph/src/Examples/pie3dex1.php | 32 + .../jpgraph/src/Examples/pie3dex2.php | 45 + .../jpgraph/src/Examples/pie3dex3.php | 42 + .../jpgraph/src/Examples/pie3dex4.php | 46 + .../jpgraph/src/Examples/pie3dex5.php | 46 + .../jpgraph/src/Examples/pie_csimex1.php | 35 + .../jpgraph/src/Examples/piebkgex1.php | 95 + .../jpgraph/src/Examples/piec_csimex1.php | 87 + .../includes/jpgraph/src/Examples/piecex1.php | 46 + .../includes/jpgraph/src/Examples/piecex2.php | 70 + html/includes/jpgraph/src/Examples/pieex1.php | 32 + html/includes/jpgraph/src/Examples/pieex2.php | 24 + html/includes/jpgraph/src/Examples/pieex3.php | 53 + html/includes/jpgraph/src/Examples/pieex4.php | 25 + html/includes/jpgraph/src/Examples/pieex5.php | 31 + html/includes/jpgraph/src/Examples/pieex6.php | 48 + html/includes/jpgraph/src/Examples/pieex7.php | 52 + html/includes/jpgraph/src/Examples/pieex8.php | 33 + html/includes/jpgraph/src/Examples/pieex9.php | 39 + .../jpgraph/src/Examples/pielabelsex1.php | 38 + .../jpgraph/src/Examples/pielabelsex2.php | 38 + .../jpgraph/src/Examples/pielabelsex3.php | 39 + .../jpgraph/src/Examples/pielabelsex4.php | 38 + .../jpgraph/src/Examples/plotlineex1.php | 35 + .../jpgraph/src/Examples/polarex0-180.php | 27 + .../jpgraph/src/Examples/polarex0.php | 26 + .../jpgraph/src/Examples/polarex1.php | 30 + .../jpgraph/src/Examples/polarex10.php | 66 + .../jpgraph/src/Examples/polarex2.php | 34 + .../jpgraph/src/Examples/polarex3-lin.php | 33 + .../jpgraph/src/Examples/polarex3.php | 33 + .../jpgraph/src/Examples/polarex4.php | 34 + .../jpgraph/src/Examples/polarex5.php | 37 + .../jpgraph/src/Examples/polarex6.php | 35 + .../jpgraph/src/Examples/polarex7-1.php | 50 + .../jpgraph/src/Examples/polarex7-2.php | 53 + .../jpgraph/src/Examples/polarex7.php | 53 + .../jpgraph/src/Examples/polarex8.php | 54 + .../jpgraph/src/Examples/polarex9.php | 63 + .../jpgraph/src/Examples/pushpinex1.php | 62 + .../jpgraph/src/Examples/pushpinex2.php | 63 + .../jpgraph/src/Examples/radarex1.php | 15 + .../jpgraph/src/Examples/radarex2.php | 21 + .../jpgraph/src/Examples/radarex3.php | 21 + .../jpgraph/src/Examples/radarex4.php | 25 + .../jpgraph/src/Examples/radarex5.php | 26 + .../jpgraph/src/Examples/radarex6.1.php | 45 + .../jpgraph/src/Examples/radarex6.php | 35 + .../jpgraph/src/Examples/radarex7.php | 48 + .../jpgraph/src/Examples/radarex8.1.php | 52 + .../jpgraph/src/Examples/radarex8.php | 51 + .../jpgraph/src/Examples/radarex9.php | 33 + .../jpgraph/src/Examples/radarlogex1.php | 53 + .../jpgraph/src/Examples/radarlogex2.php | 47 + .../jpgraph/src/Examples/radarmarkex1.php | 35 + .../jpgraph/src/Examples/rotateex1.php | 46 + html/includes/jpgraph/src/Examples/rotex0.php | 22 + html/includes/jpgraph/src/Examples/rotex1.php | 24 + html/includes/jpgraph/src/Examples/rotex2.php | 24 + html/includes/jpgraph/src/Examples/rotex3.php | 25 + html/includes/jpgraph/src/Examples/rotex4.php | 25 + html/includes/jpgraph/src/Examples/rotex5.php | 25 + .../includes/jpgraph/src/Examples/saab_95.jpg | Bin 0 -> 2664 bytes .../jpgraph/src/Examples/scatter_csimex1.php | 44 + .../jpgraph/src/Examples/scatterex1.php | 22 + .../jpgraph/src/Examples/scatterex2.php | 25 + .../jpgraph/src/Examples/scatterlinkex1.php | 26 + .../jpgraph/src/Examples/scatterlinkex2.php | 43 + .../jpgraph/src/Examples/scatterlinkex3.php | 46 + .../jpgraph/src/Examples/scatterlinkex4.php | 45 + .../jpgraph/src/Examples/scatterrotex1.php | 35 + .../jpgraph/src/Examples/show-example.php | 24 + .../jpgraph/src/Examples/show-image.php | 10 + .../jpgraph/src/Examples/show-source.php | 1 + .../src/Examples/smallstaticbandsex1.php | 41 + .../src/Examples/smallstaticbandsex10.php | 41 + .../src/Examples/smallstaticbandsex11.php | 41 + .../src/Examples/smallstaticbandsex2.php | 41 + .../src/Examples/smallstaticbandsex3.php | 41 + .../src/Examples/smallstaticbandsex4.php | 42 + .../src/Examples/smallstaticbandsex5.php | 42 + .../src/Examples/smallstaticbandsex6.php | 41 + .../src/Examples/smallstaticbandsex7.php | 41 + .../src/Examples/smallstaticbandsex8.php | 41 + .../src/Examples/smallstaticbandsex9.php | 41 + .../jpgraph/src/Examples/splineex1.php | 56 + .../jpgraph/src/Examples/staticbandbarex1.php | 52 + .../jpgraph/src/Examples/staticbandbarex2.php | 52 + .../jpgraph/src/Examples/staticbandbarex3.php | 58 + .../jpgraph/src/Examples/staticbandbarex4.php | 60 + .../jpgraph/src/Examples/staticbandbarex5.php | 63 + .../jpgraph/src/Examples/staticbandbarex6.php | 72 + .../jpgraph/src/Examples/staticbandbarex7.php | 61 + .../jpgraph/src/Examples/staticlinebarex1.php | 54 + .../jpgraph/src/Examples/stockex1.php | 33 + .../jpgraph/src/Examples/stockex2.php | 39 + html/includes/jpgraph/src/Examples/stship.jpg | Bin 0 -> 17200 bytes .../jpgraph/src/Examples/tabtitleex1.php | 51 + .../jpgraph/src/Examples/testsuit.php | 107 + .../jpgraph/src/Examples/text-example1.php | 18 + .../jpgraph/src/Examples/text-example2.php | 18 + .../jpgraph/src/Examples/textalignex1.php | 77 + .../jpgraph/src/Examples/tiger_bkg.gif | Bin 0 -> 19662 bytes .../jpgraph/src/Examples/tiger_bkg.jpg | Bin 0 -> 8095 bytes .../jpgraph/src/Examples/tiger_bkg.png | Bin 0 -> 19213 bytes .../jpgraph/src/Examples/timestampex01.php | 59 + .../jpgraph/src/Examples/titlecsimex01.php | 62 + .../jpgraph/src/Examples/topxaxisex1.php | 49 + .../jpgraph/src/Examples/worldmap1.jpg | Bin 0 -> 65693 bytes html/includes/jpgraph/src/flags.dat | Bin 0 -> 982587 bytes .../jpgraph/src/flags_thumb100x100.dat | Bin 0 -> 687530 bytes .../includes/jpgraph/src/flags_thumb35x35.dat | Bin 0 -> 214310 bytes .../includes/jpgraph/src/flags_thumb60x60.dat | Bin 0 -> 375469 bytes html/includes/jpgraph/src/gd_image.inc.php | 2161 ++++ .../jpgraph/src/imgdata_balls.inc.php | 1063 ++ .../jpgraph/src/imgdata_bevels.inc.php | 104 + .../jpgraph/src/imgdata_diamonds.inc.php | 177 + .../jpgraph/src/imgdata_pushpins.inc.php | 517 + .../jpgraph/src/imgdata_squares.inc.php | 150 + .../jpgraph/src/imgdata_stars.inc.php | 144 + html/includes/jpgraph/src/jpg-config.inc.php | 216 + html/includes/jpgraph/src/jpgraph.php | 5950 +++++++++++ .../jpgraph/src/jpgraph_antispam-digits.php | 204 + .../includes/jpgraph/src/jpgraph_antispam.php | 624 ++ html/includes/jpgraph/src/jpgraph_bar.php | 1036 ++ html/includes/jpgraph/src/jpgraph_canvas.php | 94 + .../jpgraph/src/jpgraph_canvtools.php | 515 + html/includes/jpgraph/src/jpgraph_date.php | 497 + .../jpgraph/src/jpgraph_errhandler.inc.php | 277 + html/includes/jpgraph/src/jpgraph_error.php | 156 + html/includes/jpgraph/src/jpgraph_flags.php | 376 + html/includes/jpgraph/src/jpgraph_gantt.php | 3808 +++++++ html/includes/jpgraph/src/jpgraph_gb2312.php | 1552 +++ .../includes/jpgraph/src/jpgraph_gradient.php | 424 + .../includes/jpgraph/src/jpgraph_iconplot.php | 189 + .../includes/jpgraph/src/jpgraph_imgtrans.php | 223 + html/includes/jpgraph/src/jpgraph_led.php | 316 + html/includes/jpgraph/src/jpgraph_line.php | 635 ++ html/includes/jpgraph/src/jpgraph_log.php | 282 + html/includes/jpgraph/src/jpgraph_mgraph.php | 381 + html/includes/jpgraph/src/jpgraph_pie.php | 1437 +++ html/includes/jpgraph/src/jpgraph_pie3d.php | 923 ++ .../includes/jpgraph/src/jpgraph_plotband.php | 634 ++ .../jpgraph/src/jpgraph_plotmark.inc.php | 496 + html/includes/jpgraph/src/jpgraph_polar.php | 839 ++ html/includes/jpgraph/src/jpgraph_radar.php | 667 ++ html/includes/jpgraph/src/jpgraph_regstat.php | 202 + html/includes/jpgraph/src/jpgraph_scatter.php | 228 + html/includes/jpgraph/src/jpgraph_stock.php | 182 + html/includes/jpgraph/src/jpgraph_ttf.inc.php | 379 + .../jpgraph/src/jpgraph_utils.inc.php | 523 + html/includes/jpgraph/src/lang/de.inc.php | 498 + html/includes/jpgraph/src/lang/en.inc.php | 501 + html/includes/jpgraph/src/lang/prod.inc.php | 354 + includes/billing.php | 2 +- 1713 files changed, 104596 insertions(+), 6 deletions(-) create mode 100644 html/includes/jpgraph/QPL.txt create mode 100644 html/includes/jpgraph/README create mode 100644 html/includes/jpgraph/VERSION create mode 100644 html/includes/jpgraph/docs/JpGraph_Logo.png create mode 100644 html/includes/jpgraph/docs/html/1010Groupingactivities.html create mode 100644 html/includes/jpgraph/docs/html/10111Addingatitleforthecolumns.html create mode 100644 html/includes/jpgraph/docs/html/10112SpecifyingCSIMentriesforcolumntitles.html create mode 100644 html/includes/jpgraph/docs/html/1011Usingmultiplecolumnsastitles.html create mode 100644 html/includes/jpgraph/docs/html/10121Addingatabletitle.html create mode 100644 html/includes/jpgraph/docs/html/10122Modifyingthedividerlines.html create mode 100644 html/includes/jpgraph/docs/html/10123Modifyingtheboxaroundtheplot.html create mode 100644 html/includes/jpgraph/docs/html/10124Horizontalgridsandalternatinglinecolors.html create mode 100644 html/includes/jpgraph/docs/html/10125AddingiconstoGanttgraphs.html create mode 100644 html/includes/jpgraph/docs/html/10126Adjustingthemarginswithautosizing.html create mode 100644 html/includes/jpgraph/docs/html/1012MoregeneralGanttformatting.html create mode 100644 html/includes/jpgraph/docs/html/1013SimplifyingthedrawingofGanttgraphs.html create mode 100644 html/includes/jpgraph/docs/html/1014AddingCSIMClientsideImageMapstoGanttcharts.html create mode 100644 html/includes/jpgraph/docs/html/1015Addingconstrainsbetweenyouractivities.html create mode 100644 html/includes/jpgraph/docs/html/10161Showingonlypartofthegraph.html create mode 100644 html/includes/jpgraph/docs/html/10162Specifyingstartdayofweek.html create mode 100644 html/includes/jpgraph/docs/html/1016Advancedformatting.html create mode 100644 html/includes/jpgraph/docs/html/1017Localizing.html create mode 100644 html/includes/jpgraph/docs/html/10181Enablingantialiasedlines.html create mode 100644 html/includes/jpgraph/docs/html/1018AntialiasinginJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/1019Rotatingthegraphs.html create mode 100644 html/includes/jpgraph/docs/html/101Introduction.html create mode 100644 html/includes/jpgraph/docs/html/101WhyuseGanttcharts.html create mode 100644 html/includes/jpgraph/docs/html/1020Adjustingbrightnessandcontrastforimagesandbackgrounds.html create mode 100644 html/includes/jpgraph/docs/html/1021Timingthegenerationofgraphs.html create mode 100644 html/includes/jpgraph/docs/html/1022Usingcountryflagsinvariouscontext.html create mode 100644 html/includes/jpgraph/docs/html/1023Addingiconsontothegraph.html create mode 100644 html/includes/jpgraph/docs/html/102CapabilitiesinJpGraphGanttmodule.html create mode 100644 html/includes/jpgraph/docs/html/102Creatingasimplecanvas.html create mode 100644 html/includes/jpgraph/docs/html/103Addinglinesandrectanglestoacanvas.html create mode 100644 html/includes/jpgraph/docs/html/103AsimpleGanttchart.html create mode 100644 html/includes/jpgraph/docs/html/104ThestructureofaGanttchart.html create mode 100644 html/includes/jpgraph/docs/html/104Usingacanvasscale.html create mode 100644 html/includes/jpgraph/docs/html/105CreatingaGanttChart.html create mode 100644 html/includes/jpgraph/docs/html/105SampleapplicationDrawingDBschema.html create mode 100644 html/includes/jpgraph/docs/html/106PositioningobjectsintheGanttplot.html create mode 100644 html/includes/jpgraph/docs/html/1071Specifyingverticalposition.html create mode 100644 html/includes/jpgraph/docs/html/1072Specifyingstartandendpositionforabar.html create mode 100644 html/includes/jpgraph/docs/html/1073Milestones.html create mode 100644 html/includes/jpgraph/docs/html/1074Verticalline.html create mode 100644 html/includes/jpgraph/docs/html/1075Addingmarkerstoaganttbar.html create mode 100644 html/includes/jpgraph/docs/html/1076Adjustingtheminimumdistancebetweenbars.html create mode 100644 html/includes/jpgraph/docs/html/107Ganttbars.html create mode 100644 html/includes/jpgraph/docs/html/1081Minutescale.html create mode 100644 html/includes/jpgraph/docs/html/1082Hourscale.html create mode 100644 html/includes/jpgraph/docs/html/1083Dayscale.html create mode 100644 html/includes/jpgraph/docs/html/1084Weekscale.html create mode 100644 html/includes/jpgraph/docs/html/1085Monthscale.html create mode 100644 html/includes/jpgraph/docs/html/1086Yearscale.html create mode 100644 html/includes/jpgraph/docs/html/108Formattingthescaleheaders.html create mode 100644 html/includes/jpgraph/docs/html/1091Addingcaptiontobars.html create mode 100644 html/includes/jpgraph/docs/html/1092Addingprogressindicatorstobars.html create mode 100644 html/includes/jpgraph/docs/html/109Moreformattingforbars.html create mode 100644 html/includes/jpgraph/docs/html/10Ganttcharts.html create mode 100644 html/includes/jpgraph/docs/html/10Workingwithcanvasgraphs.html create mode 100644 html/includes/jpgraph/docs/html/111GeneratingAntiSpamchallenge.html create mode 100644 html/includes/jpgraph/docs/html/111Introduction.html create mode 100644 html/includes/jpgraph/docs/html/112Creatingasimplecanvas.html create mode 100644 html/includes/jpgraph/docs/html/113Addinglinesandrectanglestoacanvas.html create mode 100644 html/includes/jpgraph/docs/html/114Usingacanvasscale.html create mode 100644 html/includes/jpgraph/docs/html/115SampleapplicationDrawingDBschema.html create mode 100644 html/includes/jpgraph/docs/html/11AntiSpamChallenges.html create mode 100644 html/includes/jpgraph/docs/html/11Versionhistory.html create mode 100644 html/includes/jpgraph/docs/html/11Workingwithcanvasgraphs.html create mode 100644 html/includes/jpgraph/docs/html/121GeneratingAntiSpamchallenge.html create mode 100644 html/includes/jpgraph/docs/html/1221AdjustingthesizeoftheLEDdigits.html create mode 100644 html/includes/jpgraph/docs/html/122GeneratingLEDlikedigitswithJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/12AntiSpamChallenges.html create mode 100644 html/includes/jpgraph/docs/html/12CodedefinesinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/12Howwasthismanualproduced.html create mode 100644 html/includes/jpgraph/docs/html/131AdjustingthesizeoftheLEDdigits.html create mode 100644 html/includes/jpgraph/docs/html/132ImprovingtheLEDswithsupersampling.html create mode 100644 html/includes/jpgraph/docs/html/13CodedefinesinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/13GeneratingLEDlikedigitswithJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/14CodedefinesinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/1Aboutthismanual.html create mode 100644 html/includes/jpgraph/docs/html/21Version.html create mode 100644 html/includes/jpgraph/docs/html/22SoftwareLicense.html create mode 100644 html/includes/jpgraph/docs/html/23JpGraphFeatures.html create mode 100644 html/includes/jpgraph/docs/html/24Gettingthelatestversion.html create mode 100644 html/includes/jpgraph/docs/html/25Plannedfutureaddition.html create mode 100644 html/includes/jpgraph/docs/html/26Knownbugsandomissions.html create mode 100644 html/includes/jpgraph/docs/html/27Acknowledgments.html create mode 100644 html/includes/jpgraph/docs/html/28Reportingbugsandsuggestingimprovements.html create mode 100644 html/includes/jpgraph/docs/html/29Gettingsupport.html create mode 100644 html/includes/jpgraph/docs/html/2Introduction.html create mode 100644 html/includes/jpgraph/docs/html/311VerifyingthatyouhavetheGDlibraryinstalled.html create mode 100644 html/includes/jpgraph/docs/html/312VerifyingthatyouhaveGD2installed.html create mode 100644 html/includes/jpgraph/docs/html/313PreparingTrueTypeFontFiles.html create mode 100644 html/includes/jpgraph/docs/html/314UsingnonlatinbasedfontswithJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/31Preparation.html create mode 100644 html/includes/jpgraph/docs/html/32Customizingtheinstallation.html create mode 100644 html/includes/jpgraph/docs/html/331Plotextensionmodules.html create mode 100644 html/includes/jpgraph/docs/html/33Requiredfiles.html create mode 100644 html/includes/jpgraph/docs/html/34Imageformatsandexternalimagelibraries.html create mode 100644 html/includes/jpgraph/docs/html/35DetailedstepstoinstallJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/36Troubleshootingyourinstallation.html create mode 100644 html/includes/jpgraph/docs/html/37CompilingPHP4.html create mode 100644 html/includes/jpgraph/docs/html/3Installation.html create mode 100644 html/includes/jpgraph/docs/html/411Whatyouwilllearninthischapter.html create mode 100644 html/includes/jpgraph/docs/html/412WhatyouwillNOTlearninthischapter.html create mode 100644 html/includes/jpgraph/docs/html/41Scopeofthischapter.html create mode 100644 html/includes/jpgraph/docs/html/421UsingtheJpGraphlibrarytosendbackimages.html create mode 100644 html/includes/jpgraph/docs/html/42HowtogenerateimageswithPHP.html create mode 100644 html/includes/jpgraph/docs/html/43UsingPHPdirectly.html create mode 100644 html/includes/jpgraph/docs/html/44ThebasicprincipleofJpGraphandthecreationofimages.html create mode 100644 html/includes/jpgraph/docs/html/45ChoosingtheimageformatforJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/46Alternativestostreamingbacktheimage.html create mode 100644 html/includes/jpgraph/docs/html/471InstallingTrueTypefonts.html create mode 100644 html/includes/jpgraph/docs/html/472VerifyingthattheTTFfontswork.html create mode 100644 html/includes/jpgraph/docs/html/473Specifyingfonts.html create mode 100644 html/includes/jpgraph/docs/html/474AddingadditionalfontstoJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/475UnderstandingtextalignmentinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/47WorkingwithfontsinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/481Adjustingthetransparency.html create mode 100644 html/includes/jpgraph/docs/html/482Availablenamedcolors.html create mode 100644 html/includes/jpgraph/docs/html/483Themecolorsforpies.html create mode 100644 html/includes/jpgraph/docs/html/48SpecifyingcolorsinJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/4QuickStartDynamicImageGeneration.html create mode 100644 html/includes/jpgraph/docs/html/51Enablingthecachesystem.html create mode 100644 html/includes/jpgraph/docs/html/51Thespecialprodlocale.html create mode 100644 html/includes/jpgraph/docs/html/52Includedlocalizederrormessages.html create mode 100644 html/includes/jpgraph/docs/html/52Usingthecacheinyourscript.html create mode 100644 html/includes/jpgraph/docs/html/53Creatingyourownlanguageresourcefile.html create mode 100644 html/includes/jpgraph/docs/html/53UsingthecachewithClientSideImageMaps.html create mode 100644 html/includes/jpgraph/docs/html/54Somefinalcomments.html create mode 100644 html/includes/jpgraph/docs/html/551Clipping.html create mode 100644 html/includes/jpgraph/docs/html/552Commonlyusedproperties.html create mode 100644 html/includes/jpgraph/docs/html/553Commonlyusedmethods.html create mode 100644 html/includes/jpgraph/docs/html/55Commonfeatureforallgraphs.html create mode 100644 html/includes/jpgraph/docs/html/5Localizingerrormessages.html create mode 100644 html/includes/jpgraph/docs/html/5UnderstandingtheJpGraphcachingsystem.html create mode 100644 html/includes/jpgraph/docs/html/61Enablingthecachesystem.html create mode 100644 html/includes/jpgraph/docs/html/61Thebasicstructureofanimagemapscript.html create mode 100644 html/includes/jpgraph/docs/html/62Specifyingtargetsforimagemapplots.html create mode 100644 html/includes/jpgraph/docs/html/62Usingthecacheinyourscript.html create mode 100644 html/includes/jpgraph/docs/html/63UsingStrokeCSIM.html create mode 100644 html/includes/jpgraph/docs/html/63UsingthecachewithClientSideImageMaps.html create mode 100644 html/includes/jpgraph/docs/html/64ExamplesofImagemaps.html create mode 100644 html/includes/jpgraph/docs/html/64Somefinalcomments.html create mode 100644 html/includes/jpgraph/docs/html/651Clipping.html create mode 100644 html/includes/jpgraph/docs/html/652Commonlyusedproperties.html create mode 100644 html/includes/jpgraph/docs/html/653Commonlyusedmethods.html create mode 100644 html/includes/jpgraph/docs/html/65Commonfeatureforallgraphs.html create mode 100644 html/includes/jpgraph/docs/html/65HowdoesStrokeCSIMwork.html create mode 100644 html/includes/jpgraph/docs/html/66Gettingholdoftheimagemap.html create mode 100644 html/includes/jpgraph/docs/html/67Imagemapsandthecachesystem.html create mode 100644 html/includes/jpgraph/docs/html/6UnderstandingtheJpGraphcachingsystem.html create mode 100644 html/includes/jpgraph/docs/html/6UsingimagemapswithJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/7101Usingtheautomaticdatetimescale.html create mode 100644 html/includes/jpgraph/docs/html/7102Specifyingadatetimescalewithamanualcallback.html create mode 100644 html/includes/jpgraph/docs/html/710Handlingdatetimescales.html create mode 100644 html/includes/jpgraph/docs/html/7110Adjustingthegridlinesintheplot.html create mode 100644 html/includes/jpgraph/docs/html/7111Usingfilledgridlines.html create mode 100644 html/includes/jpgraph/docs/html/7112SpecifyingtextlabelsfortheXaxis.html create mode 100644 html/includes/jpgraph/docs/html/7113Adjustingtheticksonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/7114Usingfilledlinegraphs.html create mode 100644 html/includes/jpgraph/docs/html/7115Usingaccumulatedlinegraphs.html create mode 100644 html/includes/jpgraph/docs/html/7116ConstructingsmoothlineplotswithCubicSplines.html create mode 100644 html/includes/jpgraph/docs/html/7117Addingplotmarkstoalineplot.html create mode 100644 html/includes/jpgraph/docs/html/711AddingplotmarkstolineplotsXXX.html create mode 100644 html/includes/jpgraph/docs/html/711Adjustinglabelsonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/712Addingarbitrarytextstringstothegraph.html create mode 100644 html/includes/jpgraph/docs/html/712Displayingthevaluesforeachdatapoint.html create mode 100644 html/includes/jpgraph/docs/html/713Addingseveralplotstothesamegraph.html create mode 100644 html/includes/jpgraph/docs/html/713AddingtitlesandfooterstotheGraph.html create mode 100644 html/includes/jpgraph/docs/html/714AddingasecondYscale.html create mode 100644 html/includes/jpgraph/docs/html/714Addingatabtitle.html create mode 100644 html/includes/jpgraph/docs/html/715Addingalegendtothegraph.html create mode 100644 html/includes/jpgraph/docs/html/715Usingbackgroundimages.html create mode 100644 html/includes/jpgraph/docs/html/716Handlingnullvaluesinlineplots.html create mode 100644 html/includes/jpgraph/docs/html/716Usingabackgroundgradient.html create mode 100644 html/includes/jpgraph/docs/html/717UsingcallbacksforPlotmarks.html create mode 100644 html/includes/jpgraph/docs/html/717Usingthestepstyletorenderlineplots.html create mode 100644 html/includes/jpgraph/docs/html/718Rotatinggraphs90degrees.html create mode 100644 html/includes/jpgraph/docs/html/718Usinglogarithmicscale.html create mode 100644 html/includes/jpgraph/docs/html/7191Standardtwoaxisgraphs.html create mode 100644 html/includes/jpgraph/docs/html/7192Scientificstyleaxis.html create mode 100644 html/includes/jpgraph/docs/html/7193Adjustingthepositionofthescalelabels.html create mode 100644 html/includes/jpgraph/docs/html/7194Formattingthescalelabels.html create mode 100644 html/includes/jpgraph/docs/html/7195InvertingtheYaxis.html create mode 100644 html/includes/jpgraph/docs/html/719Formattingtheaxis.html create mode 100644 html/includes/jpgraph/docs/html/719Moreonscales.html create mode 100644 html/includes/jpgraph/docs/html/71Lineplots.html create mode 100644 html/includes/jpgraph/docs/html/71Thebasicstructureofanimagemapscript.html create mode 100644 html/includes/jpgraph/docs/html/720Adjustingtheautoscalinglimitsgracevalue.html create mode 100644 html/includes/jpgraph/docs/html/7210Creatingsemifilledbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/7211Customizingthepatterns.html create mode 100644 html/includes/jpgraph/docs/html/721Addingbandsofpatternandcolortographs.html create mode 100644 html/includes/jpgraph/docs/html/721Adjustingthewidthofthebars.html create mode 100644 html/includes/jpgraph/docs/html/722Addingstaticlinestotheplot.html create mode 100644 html/includes/jpgraph/docs/html/722Displayingthevalueofeachbar.html create mode 100644 html/includes/jpgraph/docs/html/723Addingadropshadowtothebar.html create mode 100644 html/includes/jpgraph/docs/html/724Adjustingthealignmentofbarsonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/725Usinggroupedbarplots.html create mode 100644 html/includes/jpgraph/docs/html/726Usingaccumulatedbarplots.html create mode 100644 html/includes/jpgraph/docs/html/727Usinggroupedaccumulatedbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/728Horizontalbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/729Usinggradientfillforbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/72Bargraphs.html create mode 100644 html/includes/jpgraph/docs/html/72Specifyingtargetsforimagemapplots.html create mode 100644 html/includes/jpgraph/docs/html/731Usinglineerrorplots.html create mode 100644 html/includes/jpgraph/docs/html/73Errorplots.html create mode 100644 html/includes/jpgraph/docs/html/73UsingStrokeCSIM.html create mode 100644 html/includes/jpgraph/docs/html/74ExamplesofImagemaps.html create mode 100644 html/includes/jpgraph/docs/html/74Scatterplots.html create mode 100644 html/includes/jpgraph/docs/html/75Fieldplots.html create mode 100644 html/includes/jpgraph/docs/html/75HowdoesStrokeCSIMwork.html create mode 100644 html/includes/jpgraph/docs/html/761StockCharts.html create mode 100644 html/includes/jpgraph/docs/html/762BoxPLotsStockchartswithamedianline.html create mode 100644 html/includes/jpgraph/docs/html/763ImagemapsforBoxandStockcharts.html create mode 100644 html/includes/jpgraph/docs/html/76BoxandStockcharts.html create mode 100644 html/includes/jpgraph/docs/html/76Gettingholdoftheimagemap.html create mode 100644 html/includes/jpgraph/docs/html/77Combiningdifferentgraphtypes.html create mode 100644 html/includes/jpgraph/docs/html/77Imagemapsandthecachesystem.html create mode 100644 html/includes/jpgraph/docs/html/78Specifyingthescalemanually.html create mode 100644 html/includes/jpgraph/docs/html/79Adjustingtheautomatictickmarks.html create mode 100644 html/includes/jpgraph/docs/html/7UsingimagemapswithJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/7WorkingwithorthogonalXYplots.html create mode 100644 html/includes/jpgraph/docs/html/8101Usingtheautomaticdatetimescale.html create mode 100644 html/includes/jpgraph/docs/html/8102Specifyingadatetimescalewithamanualcallback.html create mode 100644 html/includes/jpgraph/docs/html/810Handlingdatetimescales.html create mode 100644 html/includes/jpgraph/docs/html/8110Adjustingthegridlinesintheplot.html create mode 100644 html/includes/jpgraph/docs/html/8111Usingfilledgridlines.html create mode 100644 html/includes/jpgraph/docs/html/8112SpecifyingtextlabelsfortheXaxis.html create mode 100644 html/includes/jpgraph/docs/html/8113Adjustingtheticksonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/8114Usingfilledlinegraphs.html create mode 100644 html/includes/jpgraph/docs/html/8115Usingaccumulatedlinegraphs.html create mode 100644 html/includes/jpgraph/docs/html/8116ConstructingsmoothlineplotswithCubicSplines.html create mode 100644 html/includes/jpgraph/docs/html/8117Addingplotmarkstoalineplot.html create mode 100644 html/includes/jpgraph/docs/html/811AddingplotmarkstolineplotsXXX.html create mode 100644 html/includes/jpgraph/docs/html/811Adjustinglabelsonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/811Simpleradarplots.html create mode 100644 html/includes/jpgraph/docs/html/812Addingarbitrarytextstringstothegraph.html create mode 100644 html/includes/jpgraph/docs/html/812Displayingthevaluesforeachdatapoint.html create mode 100644 html/includes/jpgraph/docs/html/812Specifyingtitlesfortheaxisandlegendsfortheplots.html create mode 100644 html/includes/jpgraph/docs/html/813Addinggridlinetotheradarplot.html create mode 100644 html/includes/jpgraph/docs/html/813Addingseveralplotstothesamegraph.html create mode 100644 html/includes/jpgraph/docs/html/813AddingtitlesandfooterstotheGraph.html create mode 100644 html/includes/jpgraph/docs/html/814AddingasecondYscale.html create mode 100644 html/includes/jpgraph/docs/html/814Addingatabtitle.html create mode 100644 html/includes/jpgraph/docs/html/814Addingseveralplotstothesameradargraph.html create mode 100644 html/includes/jpgraph/docs/html/815Addingalegendtothegraph.html create mode 100644 html/includes/jpgraph/docs/html/815Addingplotmarksiradargraphs.html create mode 100644 html/includes/jpgraph/docs/html/815Usingbackgroundimages.html create mode 100644 html/includes/jpgraph/docs/html/816Handlingnullvaluesinlineplots.html create mode 100644 html/includes/jpgraph/docs/html/816Usingabackgroundgradient.html create mode 100644 html/includes/jpgraph/docs/html/817UsingcallbacksforPlotmarks.html create mode 100644 html/includes/jpgraph/docs/html/817Usingthestepstyletorenderlineplots.html create mode 100644 html/includes/jpgraph/docs/html/818Rotatinggraphs90degrees.html create mode 100644 html/includes/jpgraph/docs/html/818Usinglogarithmicscale.html create mode 100644 html/includes/jpgraph/docs/html/8191Standardtwoaxisgraphs.html create mode 100644 html/includes/jpgraph/docs/html/8192Scientificstyleaxis.html create mode 100644 html/includes/jpgraph/docs/html/8193Adjustingthepositionofthescalelabels.html create mode 100644 html/includes/jpgraph/docs/html/8194Formattingthescalelabels.html create mode 100644 html/includes/jpgraph/docs/html/8195InvertingtheYaxis.html create mode 100644 html/includes/jpgraph/docs/html/819Formattingtheaxis.html create mode 100644 html/includes/jpgraph/docs/html/819Moreonscales.html create mode 100644 html/includes/jpgraph/docs/html/81Lineplots.html create mode 100644 html/includes/jpgraph/docs/html/81Radarplots.html create mode 100644 html/includes/jpgraph/docs/html/820Adjustingtheautoscalinglimitsgracevalue.html create mode 100644 html/includes/jpgraph/docs/html/8210Creatingsemifilledbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/8211Customizingthepatterns.html create mode 100644 html/includes/jpgraph/docs/html/821Addingbandsofpatternandcolortographs.html create mode 100644 html/includes/jpgraph/docs/html/821AddingguidelinestoPiePlots.html create mode 100644 html/includes/jpgraph/docs/html/821Adjustingthewidthofthebars.html create mode 100644 html/includes/jpgraph/docs/html/822Addingstaticlinestotheplot.html create mode 100644 html/includes/jpgraph/docs/html/822Creating3Dpieplots.html create mode 100644 html/includes/jpgraph/docs/html/822Displayingthevalueofeachbar.html create mode 100644 html/includes/jpgraph/docs/html/823Addingadropshadowtothebar.html create mode 100644 html/includes/jpgraph/docs/html/823Explodingpieslices.html create mode 100644 html/includes/jpgraph/docs/html/824Adjustingthealignmentofbarsonatextscale.html create mode 100644 html/includes/jpgraph/docs/html/824Specifyingandadjustinglabelsonpieplots.html create mode 100644 html/includes/jpgraph/docs/html/825Specifyingslicecolorsandusingthemes.html create mode 100644 html/includes/jpgraph/docs/html/825Usinggroupedbarplots.html create mode 100644 html/includes/jpgraph/docs/html/826Addingdropshadowstotheslices.html create mode 100644 html/includes/jpgraph/docs/html/826Usingaccumulatedbarplots.html create mode 100644 html/includes/jpgraph/docs/html/827Anothervariantof2DPieplots.html create mode 100644 html/includes/jpgraph/docs/html/827Usinggroupedaccumulatedbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/828Horizontalbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/829Usinggradientfillforbargraphs.html create mode 100644 html/includes/jpgraph/docs/html/82Bargraphs.html create mode 100644 html/includes/jpgraph/docs/html/82Pieplots.html create mode 100644 html/includes/jpgraph/docs/html/831Overview.html create mode 100644 html/includes/jpgraph/docs/html/831Usinglineerrorplots.html create mode 100644 html/includes/jpgraph/docs/html/832Adjustingtheradiusscale.html create mode 100644 html/includes/jpgraph/docs/html/833Adjustingthegridlines.html create mode 100644 html/includes/jpgraph/docs/html/834Adjustingthelabelfonts.html create mode 100644 html/includes/jpgraph/docs/html/835Adjustingthelabels.html create mode 100644 html/includes/jpgraph/docs/html/836Imagemaps.html create mode 100644 html/includes/jpgraph/docs/html/837Afinalexample.html create mode 100644 html/includes/jpgraph/docs/html/83Errorplots.html create mode 100644 html/includes/jpgraph/docs/html/83Polarplots.html create mode 100644 html/includes/jpgraph/docs/html/84Scatterplots.html create mode 100644 html/includes/jpgraph/docs/html/85Fieldplots.html create mode 100644 html/includes/jpgraph/docs/html/861StockCharts.html create mode 100644 html/includes/jpgraph/docs/html/862BoxPLotsStockchartswithamedianline.html create mode 100644 html/includes/jpgraph/docs/html/863ImagemapsforBoxandStockcharts.html create mode 100644 html/includes/jpgraph/docs/html/86BoxandStockcharts.html create mode 100644 html/includes/jpgraph/docs/html/87Combiningdifferentgraphtypes.html create mode 100644 html/includes/jpgraph/docs/html/88Specifyingthescalemanually.html create mode 100644 html/includes/jpgraph/docs/html/89Adjustingtheautomatictickmarks.html create mode 100644 html/includes/jpgraph/docs/html/8WorkingwithnonXYplots.html create mode 100644 html/includes/jpgraph/docs/html/8WorkingwithorthogonalXYplots.html create mode 100644 html/includes/jpgraph/docs/html/910Groupingactivities.html create mode 100644 html/includes/jpgraph/docs/html/9111Addingatitleforthecolumns.html create mode 100644 html/includes/jpgraph/docs/html/9112SpecifyingCSIMentriesforcolumntitles.html create mode 100644 html/includes/jpgraph/docs/html/911Simpleradarplots.html create mode 100644 html/includes/jpgraph/docs/html/911Usingmultiplecolumnsastitles.html create mode 100644 html/includes/jpgraph/docs/html/9121Addingatabletitle.html create mode 100644 html/includes/jpgraph/docs/html/9122Modifyingthedividerlines.html create mode 100644 html/includes/jpgraph/docs/html/9123Modifyingtheboxaroundtheplot.html create mode 100644 html/includes/jpgraph/docs/html/9124Horizontalgridsandalternatinglinecolors.html create mode 100644 html/includes/jpgraph/docs/html/9125AddingiconstoGanttgraphs.html create mode 100644 html/includes/jpgraph/docs/html/9126Adjustingthemarginswithautosizing.html create mode 100644 html/includes/jpgraph/docs/html/912MoregeneralGanttformatting.html create mode 100644 html/includes/jpgraph/docs/html/912Specifyingtitlesfortheaxisandlegendsfortheplots.html create mode 100644 html/includes/jpgraph/docs/html/913Addinggridlinetotheradarplot.html create mode 100644 html/includes/jpgraph/docs/html/913SimplifyingthedrawingofGanttgraphs.html create mode 100644 html/includes/jpgraph/docs/html/914AddingCSIMClientsideImageMapstoGanttcharts.html create mode 100644 html/includes/jpgraph/docs/html/914Addingseveralplotstothesameradargraph.html create mode 100644 html/includes/jpgraph/docs/html/915Addingconstrainsbetweenyouractivities.html create mode 100644 html/includes/jpgraph/docs/html/915Addingplotmarksiradargraphs.html create mode 100644 html/includes/jpgraph/docs/html/9161Showingonlypartofthegraph.html create mode 100644 html/includes/jpgraph/docs/html/9162Specifyingstartdayofweek.html create mode 100644 html/includes/jpgraph/docs/html/916Advancedformatting.html create mode 100644 html/includes/jpgraph/docs/html/917Localizing.html create mode 100644 html/includes/jpgraph/docs/html/9181Enablingantialiasedlines.html create mode 100644 html/includes/jpgraph/docs/html/918AntialiasinginJpGraph.html create mode 100644 html/includes/jpgraph/docs/html/919Rotatingthegraphs.html create mode 100644 html/includes/jpgraph/docs/html/91Radarplots.html create mode 100644 html/includes/jpgraph/docs/html/91WhyuseGanttcharts.html create mode 100644 html/includes/jpgraph/docs/html/920Adjustingbrightnessandcontrastforimagesandbackgrounds.html create mode 100644 html/includes/jpgraph/docs/html/921AddingguidelinestoPiePlots.html create mode 100644 html/includes/jpgraph/docs/html/921Timingthegenerationofgraphs.html create mode 100644 html/includes/jpgraph/docs/html/922Creating3Dpieplots.html create mode 100644 html/includes/jpgraph/docs/html/922Usingcountryflagsinvariouscontext.html create mode 100644 html/includes/jpgraph/docs/html/923Addingiconsontothegraph.html create mode 100644 html/includes/jpgraph/docs/html/923Explodingpieslices.html create mode 100644 html/includes/jpgraph/docs/html/924Specifyingandadjustinglabelsonpieplots.html create mode 100644 html/includes/jpgraph/docs/html/925Specifyingslicecolorsandusingthemes.html create mode 100644 html/includes/jpgraph/docs/html/926Addingdropshadowstotheslices.html create mode 100644 html/includes/jpgraph/docs/html/927Anothervariantof2DPieplots.html create mode 100644 html/includes/jpgraph/docs/html/92CapabilitiesinJpGraphGanttmodule.html create mode 100644 html/includes/jpgraph/docs/html/92Pieplots.html create mode 100644 html/includes/jpgraph/docs/html/931Overview.html create mode 100644 html/includes/jpgraph/docs/html/932Adjustingtheradiusscale.html create mode 100644 html/includes/jpgraph/docs/html/933Adjustingthegridlines.html create mode 100644 html/includes/jpgraph/docs/html/934Adjustingthelabelfonts.html create mode 100644 html/includes/jpgraph/docs/html/935Adjustingthelabels.html create mode 100644 html/includes/jpgraph/docs/html/936Imagemaps.html create mode 100644 html/includes/jpgraph/docs/html/937Afinalexample.html create mode 100644 html/includes/jpgraph/docs/html/93AsimpleGanttchart.html create mode 100644 html/includes/jpgraph/docs/html/93Polarplots.html create mode 100644 html/includes/jpgraph/docs/html/94ThestructureofaGanttchart.html create mode 100644 html/includes/jpgraph/docs/html/95CreatingaGanttChart.html create mode 100644 html/includes/jpgraph/docs/html/96PositioningobjectsintheGanttplot.html create mode 100644 html/includes/jpgraph/docs/html/971Specifyingverticalposition.html create mode 100644 html/includes/jpgraph/docs/html/972Specifyingstartandendpositionforabar.html create mode 100644 html/includes/jpgraph/docs/html/973Milestones.html create mode 100644 html/includes/jpgraph/docs/html/974Verticalline.html create mode 100644 html/includes/jpgraph/docs/html/975Addingmarkerstoaganttbar.html create mode 100644 html/includes/jpgraph/docs/html/976Adjustingtheminimumdistancebetweenbars.html create mode 100644 html/includes/jpgraph/docs/html/97Ganttbars.html create mode 100644 html/includes/jpgraph/docs/html/981Minutescale.html create mode 100644 html/includes/jpgraph/docs/html/982Hourscale.html create mode 100644 html/includes/jpgraph/docs/html/983Dayscale.html create mode 100644 html/includes/jpgraph/docs/html/984Weekscale.html create mode 100644 html/includes/jpgraph/docs/html/985Monthscale.html create mode 100644 html/includes/jpgraph/docs/html/986Yearscale.html create mode 100644 html/includes/jpgraph/docs/html/98Formattingthescaleheaders.html create mode 100644 html/includes/jpgraph/docs/html/991Addingcaptiontobars.html create mode 100644 html/includes/jpgraph/docs/html/992Addingprogressindicatorstobars.html create mode 100644 html/includes/jpgraph/docs/html/99Moreformattingforbars.html create mode 100644 html/includes/jpgraph/docs/html/9Ganttcharts.html create mode 100644 html/includes/jpgraph/docs/html/9WorkingwithnonXYplots.html create mode 100644 html/includes/jpgraph/docs/html/exframes/JpGraph_Logo.html create mode 100644 html/includes/jpgraph/docs/html/exframes/alphabarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/antispamex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/backgroundex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/balloonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bar_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bar_csimex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bar_csimex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bargradsmallex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/barline_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/barlinefreq_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/bartutex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/boxstockcsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/boxstockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/builtinplotmarksex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvas_jpgarchex.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/canvasex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/color_chart01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/color_chart02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/color_chart03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/color_chart04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/dateaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/dateaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/dateaxisex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/dbschemaex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example19.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example20.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example21.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example22.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example23.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example24.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example25.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example25.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example25.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example26.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example26.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example27.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example27.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example27.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example27.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example28.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example28.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example28.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example28.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.2.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.2.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example5.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example6.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example9.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example9.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/example9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/fieldscatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/filledgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/filledlineex01.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/filledlineex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_JpGraph_Logo.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_alphabarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_antispamex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_backgroundex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_balloonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bar_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bar_csimex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bar_csimex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_barline_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_barlinefreq_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_bartutex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_boxstockcsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_boxstockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_builtinplotmarksex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvas_jpgarchex.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_canvasex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_color_chart01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_color_chart02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_color_chart03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_color_chart04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_dateaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_dateaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_dateaxisex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_dbschemaex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example19.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example20.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example21.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example22.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example23.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example24.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example25.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example25.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example25.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example26.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example26.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example27.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example27.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example27.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example27.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example28.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example28.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example28.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example28.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.2.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.2.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example5.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example6.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example9.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example9.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_example9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_fieldscatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_filledgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_funcex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex00.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex07.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex08.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex09.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex12.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttex19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_gantthgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_gantthourex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_gantthourminex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_gantticonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_ganttsimpleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_gradbkgex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_horizbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_horizbarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_horizbarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_horizbarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_imgmarkercsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_imgmarkerex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_impulsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_impulsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_impulsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_impulsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_inyaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_linebarcentex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_lineiconex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_lineiconex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_listfontsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_logbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_loglogex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_manscaleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_manscaleex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_manscaleex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_manscaleex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_markflagex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_nullvalueex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_partiallyfilledlineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_penguin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pie3d_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pie_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_piec_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_piecex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_piecex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pieex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pieex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pieex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pielabelsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pielabelsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_pielabelsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex0-180.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex3-lin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex7-2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_polarex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex8.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_radarmarkex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_rotex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_scatter_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_scatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_scatterex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_splineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_staticbandbarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_stockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_tabtitleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_textalignex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_titlecsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/frame_topxaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/funcex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttconstrainex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttconstrainex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttcsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttcsimex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex00.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex07.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex08.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex09.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex12.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttex19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/gantthgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/gantthourex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/gantthourminex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/gantticonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/ganttsimpleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/gradbkgex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/horizbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/horizbarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/horizbarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/horizbarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_JpGraph_Logo.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_alphabarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_antispamex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_backgroundex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_balloonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bar_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bar_csimex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bar_csimex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bargradsmallex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_barline_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_barlinefreq_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_bartutex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_boxstockcsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_boxstockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_builtinplotmarksex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvas_jpgarchex.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_canvasex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_color_chart01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_color_chart02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_color_chart03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_color_chart04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_dateaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_dateaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_dateaxisex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_dbschemaex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example19.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example20.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example21.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example22.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example23.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example24.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example25.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example25.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example25.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example26.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example26.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example27.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example27.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example27.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example27.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example28.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example28.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example28.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example28.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.2.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.2.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example5.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example6.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example9.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example9.2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_example9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_fieldscatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_filledgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_filledlineex01.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_filledlineex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_funcex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttcsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttcsimex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex00.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex02.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex03.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex04.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex05.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex06.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex07.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex08.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex09.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex11.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex12.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex13.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex14.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex15.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex16.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex17.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex18.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttex19.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_gantthgridex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_gantthourex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_gantthourminex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_gantticonex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_ganttsimpleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_gradbkgex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_horizbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_horizbarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_horizbarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_horizbarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_imgmarkercsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_imgmarkerex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_impulsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_impulsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_impulsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_impulsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_inyaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_linebarcentex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_lineiconex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_lineiconex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_listfontsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_logbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_loglogex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_manscaleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_manscaleex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_manscaleex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_manscaleex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_markflagex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_nullvalueex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_partiallyfilledlineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_penguin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pie3d_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pie_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_piec_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_piecex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_piecex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pieex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pieex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pieex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pielabelsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pielabelsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_pielabelsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex0-180.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex3-lin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex7-2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_polarex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex8.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_radarmarkex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_rotex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_scatter_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_scatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_scatterex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_splineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_staticbandbarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_stockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_tabtitleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_textalignex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_titlecsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/image_topxaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/imgmarkercsimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/imgmarkerex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/impulsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/impulsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/impulsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/impulsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/inyaxisex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/linebarcentex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/lineiconex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/lineiconex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/listfontsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/logbarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/loglogex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/manscaleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/manscaleex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/manscaleex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/manscaleex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/markflagex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/nullvalueex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/partiallyfilledlineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/penguin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pie3d_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pie_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/piec_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/piecex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/piecex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pieex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pieex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pieex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pielabelsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pielabelsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/pielabelsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex0-180.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex3-lin.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex7-2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/polarex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex6.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex8.1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/radarmarkex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex0.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/rotex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/scatter_csimex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/scatterex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/scatterex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex10.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex2.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex3.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex4.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex5.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex6.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex8.html create mode 100644 html/includes/jpgraph/docs/html/exframes/smallstaticbandsex9.html create mode 100644 html/includes/jpgraph/docs/html/exframes/splineex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/staticbandbarex7.html create mode 100644 html/includes/jpgraph/docs/html/exframes/stockex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/tabtitleex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/textalignex1.html create mode 100644 html/includes/jpgraph/docs/html/exframes/titlecsimex01.html create mode 100644 html/includes/jpgraph/docs/html/exframes/topxaxisex1.html create mode 100644 html/includes/jpgraph/docs/html/img/alphabarex1.png create mode 100644 html/includes/jpgraph/docs/html/img/antispamex01.png create mode 100644 html/includes/jpgraph/docs/html/img/backgroundex03.png create mode 100644 html/includes/jpgraph/docs/html/img/balloonex1.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex1.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex2.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex3.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex4.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex5.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex6.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex7.png create mode 100644 html/includes/jpgraph/docs/html/img/bargradsmallex8.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex1.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex2.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex3.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex4.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex5.png create mode 100644 html/includes/jpgraph/docs/html/img/bartutex6.png create mode 100644 html/includes/jpgraph/docs/html/img/boxstockex1.png create mode 100644 html/includes/jpgraph/docs/html/img/builtinplotmarksex1.png create mode 100644 html/includes/jpgraph/docs/html/img/canvas_jpgarchex.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex01.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex02.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex03.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex04.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex05.png create mode 100644 html/includes/jpgraph/docs/html/img/canvasex06.png create mode 100644 html/includes/jpgraph/docs/html/img/color_chart01.png create mode 100644 html/includes/jpgraph/docs/html/img/color_chart02.png create mode 100644 html/includes/jpgraph/docs/html/img/color_chart03.png create mode 100644 html/includes/jpgraph/docs/html/img/color_chart04.png create mode 100644 html/includes/jpgraph/docs/html/img/dateaxisex1.png create mode 100644 html/includes/jpgraph/docs/html/img/dateaxisex2.png create mode 100644 html/includes/jpgraph/docs/html/img/dateaxisex4.png create mode 100644 html/includes/jpgraph/docs/html/img/dbschemaex1.png create mode 100644 html/includes/jpgraph/docs/html/img/example0.png create mode 100644 html/includes/jpgraph/docs/html/img/example11.png create mode 100644 html/includes/jpgraph/docs/html/img/example13.png create mode 100644 html/includes/jpgraph/docs/html/img/example14.png create mode 100644 html/includes/jpgraph/docs/html/img/example15.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.3.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.4.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.6.png create mode 100644 html/includes/jpgraph/docs/html/img/example16.png create mode 100644 html/includes/jpgraph/docs/html/img/example17.png create mode 100644 html/includes/jpgraph/docs/html/img/example18.png create mode 100644 html/includes/jpgraph/docs/html/img/example19.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example19.png create mode 100644 html/includes/jpgraph/docs/html/img/example2.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.3.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.4.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.5.png create mode 100644 html/includes/jpgraph/docs/html/img/example20.png create mode 100644 html/includes/jpgraph/docs/html/img/example21.png create mode 100644 html/includes/jpgraph/docs/html/img/example22.png create mode 100644 html/includes/jpgraph/docs/html/img/example23.png create mode 100644 html/includes/jpgraph/docs/html/img/example24.png create mode 100644 html/includes/jpgraph/docs/html/img/example25.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example25.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example25.png create mode 100644 html/includes/jpgraph/docs/html/img/example26.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example26.png create mode 100644 html/includes/jpgraph/docs/html/img/example27.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example27.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example27.3.png create mode 100644 html/includes/jpgraph/docs/html/img/example27.png create mode 100644 html/includes/jpgraph/docs/html/img/example28.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example28.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example28.3.png create mode 100644 html/includes/jpgraph/docs/html/img/example28.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.2.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.2.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.3.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.4.png create mode 100644 html/includes/jpgraph/docs/html/img/example3.png create mode 100644 html/includes/jpgraph/docs/html/img/example4.png create mode 100644 html/includes/jpgraph/docs/html/img/example5.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example5.png create mode 100644 html/includes/jpgraph/docs/html/img/example6.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example6.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example6.png create mode 100644 html/includes/jpgraph/docs/html/img/example7.png create mode 100644 html/includes/jpgraph/docs/html/img/example8.png create mode 100644 html/includes/jpgraph/docs/html/img/example9.1.png create mode 100644 html/includes/jpgraph/docs/html/img/example9.2.png create mode 100644 html/includes/jpgraph/docs/html/img/example9.png create mode 100644 html/includes/jpgraph/docs/html/img/fieldscatterex1.png create mode 100644 html/includes/jpgraph/docs/html/img/filledgridex1.png create mode 100644 html/includes/jpgraph/docs/html/img/filledlineex01.1.png create mode 100644 html/includes/jpgraph/docs/html/img/filledlineex01.png create mode 100644 html/includes/jpgraph/docs/html/img/funcex1.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttconstrainex0.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttconstrainex1.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex00.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex01.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex02.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex03.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex04.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex05.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex06.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex07.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex08.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex09.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex10.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex11.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex12.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex13.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex14.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex15.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex16.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex17.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex18.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttex19.png create mode 100644 html/includes/jpgraph/docs/html/img/gantthgridex1.png create mode 100644 html/includes/jpgraph/docs/html/img/gantthourex1.png create mode 100644 html/includes/jpgraph/docs/html/img/gantthourminex1.png create mode 100644 html/includes/jpgraph/docs/html/img/gantticonex1.png create mode 100644 html/includes/jpgraph/docs/html/img/ganttsimpleex1.png create mode 100644 html/includes/jpgraph/docs/html/img/gradbkgex1.png create mode 100644 html/includes/jpgraph/docs/html/img/horizbarex1.png create mode 100644 html/includes/jpgraph/docs/html/img/horizbarex2.png create mode 100644 html/includes/jpgraph/docs/html/img/horizbarex3.png create mode 100644 html/includes/jpgraph/docs/html/img/horizbarex4.png create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_b00c00sat-1.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_b03c-03sat0.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat-1.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat0.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_b0c0sat1.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgadj_orig.jpg create mode 100644 html/includes/jpgraph/docs/html/img/imgmarkerex1.png create mode 100644 html/includes/jpgraph/docs/html/img/impulsex1.png create mode 100644 html/includes/jpgraph/docs/html/img/impulsex2.png create mode 100644 html/includes/jpgraph/docs/html/img/impulsex3.png create mode 100644 html/includes/jpgraph/docs/html/img/impulsex4.png create mode 100644 html/includes/jpgraph/docs/html/img/inyaxisex2.png create mode 100644 html/includes/jpgraph/docs/html/img/linebarcentex1.png create mode 100644 html/includes/jpgraph/docs/html/img/lineiconex1.png create mode 100644 html/includes/jpgraph/docs/html/img/lineiconex2.png create mode 100644 html/includes/jpgraph/docs/html/img/listfontsex1.png create mode 100644 html/includes/jpgraph/docs/html/img/logbarex1.png create mode 100644 html/includes/jpgraph/docs/html/img/loglogex1.png create mode 100644 html/includes/jpgraph/docs/html/img/manscaleex1.png create mode 100644 html/includes/jpgraph/docs/html/img/manscaleex2.png create mode 100644 html/includes/jpgraph/docs/html/img/manscaleex3.png create mode 100644 html/includes/jpgraph/docs/html/img/manscaleex4.png create mode 100644 html/includes/jpgraph/docs/html/img/markflagex1.png create mode 100644 html/includes/jpgraph/docs/html/img/nullvalueex01.png create mode 100644 html/includes/jpgraph/docs/html/img/partiallyfilledlineex1.png create mode 100644 html/includes/jpgraph/docs/html/img/piecex1.png create mode 100644 html/includes/jpgraph/docs/html/img/piecex2.png create mode 100644 html/includes/jpgraph/docs/html/img/pieex3.png create mode 100644 html/includes/jpgraph/docs/html/img/pieex8.png create mode 100644 html/includes/jpgraph/docs/html/img/pieex9.png create mode 100644 html/includes/jpgraph/docs/html/img/pielabelsex1.png create mode 100644 html/includes/jpgraph/docs/html/img/pielabelsex2.png create mode 100644 html/includes/jpgraph/docs/html/img/pielabelsex4.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex0-180.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex0.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex3-lin.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex3.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex4.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex5.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex7-2.png create mode 100644 html/includes/jpgraph/docs/html/img/polarex9.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex1.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex2.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex4.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex6.1.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex6.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex7.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex8.1.png create mode 100644 html/includes/jpgraph/docs/html/img/radarex8.png create mode 100644 html/includes/jpgraph/docs/html/img/radarmarkex1.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex0.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex1.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex2.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex3.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex4.png create mode 100644 html/includes/jpgraph/docs/html/img/rotex5.png create mode 100644 html/includes/jpgraph/docs/html/img/scatterex1.png create mode 100644 html/includes/jpgraph/docs/html/img/scatterex2.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex1.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex10.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex2.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex3.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex4.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex5.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex6.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex7.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex8.png create mode 100644 html/includes/jpgraph/docs/html/img/smallstaticbandsex9.png create mode 100644 html/includes/jpgraph/docs/html/img/splineex1.png create mode 100644 html/includes/jpgraph/docs/html/img/staticbandbarex7.png create mode 100644 html/includes/jpgraph/docs/html/img/stockex1.png create mode 100644 html/includes/jpgraph/docs/html/img/tabtitleex1.png create mode 100644 html/includes/jpgraph/docs/html/img/textalignex1.png create mode 100644 html/includes/jpgraph/docs/html/img/theme01.png create mode 100644 html/includes/jpgraph/docs/html/img/theme02.png create mode 100644 html/includes/jpgraph/docs/html/img/theme03.png create mode 100644 html/includes/jpgraph/docs/html/img/theme04.png create mode 100644 html/includes/jpgraph/docs/html/img/topxaxisex1.png create mode 100644 html/includes/jpgraph/docs/html/imgadj_b00c00sat-1.jpg create mode 100644 html/includes/jpgraph/docs/html/imgadj_b03c-03sat0.jpg create mode 100644 html/includes/jpgraph/docs/html/imgadj_b04c-07sat-1.jpg create mode 100644 html/includes/jpgraph/docs/html/imgadj_b04c-07sat0.jpg create mode 100644 html/includes/jpgraph/docs/html/imgadj_b0c0sat1.jpg create mode 100644 html/includes/jpgraph/docs/html/imgadj_orig.jpg create mode 100644 html/includes/jpgraph/docs/html/index.html create mode 100644 html/includes/jpgraph/docs/html/jpgmanual.css create mode 100644 html/includes/jpgraph/docs/html/manual_jpgraph.html create mode 100644 html/includes/jpgraph/docs/html/toc.html create mode 100644 html/includes/jpgraph/docs/index.html create mode 100644 html/includes/jpgraph/docs/manual.png create mode 100644 html/includes/jpgraph/docs/ref/AccBarPlot.html create mode 100644 html/includes/jpgraph/docs/ref/AccLinePlot.html create mode 100644 html/includes/jpgraph/docs/ref/AntiSpam.html create mode 100644 html/includes/jpgraph/docs/ref/Axis.html create mode 100644 html/includes/jpgraph/docs/ref/BarPlot.html create mode 100644 html/includes/jpgraph/docs/ref/Bezier.html create mode 100644 html/includes/jpgraph/docs/ref/BoxPlot.html create mode 100644 html/includes/jpgraph/docs/ref/CanvasGraph.html create mode 100644 html/includes/jpgraph/docs/ref/CanvasRectangleText.html create mode 100644 html/includes/jpgraph/docs/ref/CanvasScale.html create mode 100644 html/includes/jpgraph/docs/ref/DateLocale.html create mode 100644 html/includes/jpgraph/docs/ref/DateScale.html create mode 100644 html/includes/jpgraph/docs/ref/DigitalLED74.html create mode 100644 html/includes/jpgraph/docs/ref/DisplayValue.html create mode 100644 html/includes/jpgraph/docs/ref/ErrMsgText.html create mode 100644 html/includes/jpgraph/docs/ref/ErrorLinePlot.html create mode 100644 html/includes/jpgraph/docs/ref/ErrorPlot.html create mode 100644 html/includes/jpgraph/docs/ref/FieldArrow.html create mode 100644 html/includes/jpgraph/docs/ref/FieldPlot.html create mode 100644 html/includes/jpgraph/docs/ref/Footer.html create mode 100644 html/includes/jpgraph/docs/ref/FuncGenerator.html create mode 100644 html/includes/jpgraph/docs/ref/GTextTable.html create mode 100644 html/includes/jpgraph/docs/ref/GanttActivityInfo.html create mode 100644 html/includes/jpgraph/docs/ref/GanttBar.html create mode 100644 html/includes/jpgraph/docs/ref/GanttGraph.html create mode 100644 html/includes/jpgraph/docs/ref/GanttPlotObject.html create mode 100644 html/includes/jpgraph/docs/ref/GanttScale.html create mode 100644 html/includes/jpgraph/docs/ref/GanttVLine.html create mode 100644 html/includes/jpgraph/docs/ref/Graph.html create mode 100644 html/includes/jpgraph/docs/ref/GraphTabTitle.html create mode 100644 html/includes/jpgraph/docs/ref/Grid.html create mode 100644 html/includes/jpgraph/docs/ref/GroupBarPlot.html create mode 100644 html/includes/jpgraph/docs/ref/HeaderProperty.html create mode 100644 html/includes/jpgraph/docs/ref/HorizontalGridLine.html create mode 100644 html/includes/jpgraph/docs/ref/IconImage.html create mode 100644 html/includes/jpgraph/docs/ref/IconPlot.html create mode 100644 html/includes/jpgraph/docs/ref/Image.html create mode 100644 html/includes/jpgraph/docs/ref/Legend.html create mode 100644 html/includes/jpgraph/docs/ref/LineErrorPlot.html create mode 100644 html/includes/jpgraph/docs/ref/LinePlot.html create mode 100644 html/includes/jpgraph/docs/ref/LineProperty.html create mode 100644 html/includes/jpgraph/docs/ref/LinearScale.html create mode 100644 html/includes/jpgraph/docs/ref/LinearTicks.html create mode 100644 html/includes/jpgraph/docs/ref/LogScale.html create mode 100644 html/includes/jpgraph/docs/ref/LogTicks.html create mode 100644 html/includes/jpgraph/docs/ref/MileStone.html create mode 100644 html/includes/jpgraph/docs/ref/PieGraph.html create mode 100644 html/includes/jpgraph/docs/ref/PiePlot.html create mode 100644 html/includes/jpgraph/docs/ref/PiePlot3D.html create mode 100644 html/includes/jpgraph/docs/ref/PiePlotC.html create mode 100644 html/includes/jpgraph/docs/ref/Plot.html create mode 100644 html/includes/jpgraph/docs/ref/PlotBand.html create mode 100644 html/includes/jpgraph/docs/ref/PlotLine.html create mode 100644 html/includes/jpgraph/docs/ref/PlotMark.html create mode 100644 html/includes/jpgraph/docs/ref/PolarAxis.html create mode 100644 html/includes/jpgraph/docs/ref/PolarGraph.html create mode 100644 html/includes/jpgraph/docs/ref/PolarPlot.html create mode 100644 html/includes/jpgraph/docs/ref/Progress.html create mode 100644 html/includes/jpgraph/docs/ref/RadarAxis.html create mode 100644 html/includes/jpgraph/docs/ref/RadarGraph.html create mode 100644 html/includes/jpgraph/docs/ref/RadarGrid.html create mode 100644 html/includes/jpgraph/docs/ref/RadarLinearTicks.html create mode 100644 html/includes/jpgraph/docs/ref/RadarLogTicks.html create mode 100644 html/includes/jpgraph/docs/ref/RadarPlot.html create mode 100644 html/includes/jpgraph/docs/ref/RotImage.html create mode 100644 html/includes/jpgraph/docs/ref/ScatterPlot.html create mode 100644 html/includes/jpgraph/docs/ref/Shape.html create mode 100644 html/includes/jpgraph/docs/ref/Spline.html create mode 100644 html/includes/jpgraph/docs/ref/StockPlot.html create mode 100644 html/includes/jpgraph/docs/ref/SuperScriptText.html create mode 100644 html/includes/jpgraph/docs/ref/Text.html create mode 100644 html/includes/jpgraph/docs/ref/TextProperty.html create mode 100644 html/includes/jpgraph/docs/ref/Ticks.html create mode 100644 html/includes/jpgraph/docs/ref/class_toc.html create mode 100644 html/includes/jpgraph/docs/ref/index.html create mode 100644 html/includes/jpgraph/docs/ref/projinfo.html create mode 100644 html/includes/jpgraph/docs/reference.png create mode 100644 html/includes/jpgraph/src/Examples/accbarex1.php create mode 100644 html/includes/jpgraph/src/Examples/alphabarex1.php create mode 100644 html/includes/jpgraph/src/Examples/antispamex01.php create mode 100644 html/includes/jpgraph/src/Examples/backgroundex01.php create mode 100644 html/includes/jpgraph/src/Examples/backgroundex02.php create mode 100644 html/includes/jpgraph/src/Examples/backgroundex03.php create mode 100644 html/includes/jpgraph/src/Examples/balloonex1.php create mode 100644 html/includes/jpgraph/src/Examples/balloonex2.php create mode 100644 html/includes/jpgraph/src/Examples/bar2scalesex1.php create mode 100644 html/includes/jpgraph/src/Examples/bar_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/bar_csimex2.php create mode 100644 html/includes/jpgraph/src/Examples/bar_csimex3.php create mode 100644 html/includes/jpgraph/src/Examples/barformatcallbackex1.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex1.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex2.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex3.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex4.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex5.php create mode 100644 html/includes/jpgraph/src/Examples/bargradex6.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex1.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex2.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex3.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex4.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex5.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex6.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex7.php create mode 100644 html/includes/jpgraph/src/Examples/bargradsmallex8.php create mode 100644 html/includes/jpgraph/src/Examples/barimgex1.php create mode 100644 html/includes/jpgraph/src/Examples/barintex1.php create mode 100644 html/includes/jpgraph/src/Examples/barintex2.php create mode 100644 html/includes/jpgraph/src/Examples/barline_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/barlinealphaex1.php create mode 100644 html/includes/jpgraph/src/Examples/barlinefreq_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/barlinefreqex1.php create mode 100644 html/includes/jpgraph/src/Examples/barpatternex1.php create mode 100644 html/includes/jpgraph/src/Examples/barscalecallbackex1.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex1.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex12.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex2.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex3.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex4.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex5.php create mode 100644 html/includes/jpgraph/src/Examples/bartutex6.php create mode 100644 html/includes/jpgraph/src/Examples/bezierex1.php create mode 100644 html/includes/jpgraph/src/Examples/bkgimgflagex1.php create mode 100644 html/includes/jpgraph/src/Examples/bkgimgflagex2.php create mode 100644 html/includes/jpgraph/src/Examples/bkgimgflagex3.php create mode 100644 html/includes/jpgraph/src/Examples/bkgimgflagex4.php create mode 100644 html/includes/jpgraph/src/Examples/blueblack400x300grad.png create mode 100644 html/includes/jpgraph/src/Examples/boxstockcsimex1.php create mode 100644 html/includes/jpgraph/src/Examples/boxstockex1.php create mode 100644 html/includes/jpgraph/src/Examples/boxstockex2.php create mode 100644 html/includes/jpgraph/src/Examples/builtinplotmarksex1.php create mode 100644 html/includes/jpgraph/src/Examples/canvas_jpgarchex.php create mode 100644 html/includes/jpgraph/src/Examples/canvasbezierex1.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex01.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex02.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex03.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex04.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex05.php create mode 100644 html/includes/jpgraph/src/Examples/canvasex06.php create mode 100644 html/includes/jpgraph/src/Examples/canvaspiralex1.php create mode 100644 html/includes/jpgraph/src/Examples/centeredlineex01.php create mode 100644 html/includes/jpgraph/src/Examples/centeredlineex02.php create mode 100644 html/includes/jpgraph/src/Examples/centeredlineex03.php create mode 100644 html/includes/jpgraph/src/Examples/centerlinebarex1.php create mode 100644 html/includes/jpgraph/src/Examples/combgraphex1.php create mode 100644 html/includes/jpgraph/src/Examples/dateaxisex1.php create mode 100644 html/includes/jpgraph/src/Examples/dateaxisex2.php create mode 100644 html/includes/jpgraph/src/Examples/dateaxisex3.php create mode 100644 html/includes/jpgraph/src/Examples/dateaxisex4.php create mode 100644 html/includes/jpgraph/src/Examples/dbschemaex1.php create mode 100644 html/includes/jpgraph/src/Examples/dupyaxisex1.php create mode 100644 html/includes/jpgraph/src/Examples/example0.php create mode 100644 html/includes/jpgraph/src/Examples/example1.1.php create mode 100644 html/includes/jpgraph/src/Examples/example1.2.php create mode 100644 html/includes/jpgraph/src/Examples/example1.php create mode 100644 html/includes/jpgraph/src/Examples/example10.php create mode 100644 html/includes/jpgraph/src/Examples/example11.php create mode 100644 html/includes/jpgraph/src/Examples/example13.php create mode 100644 html/includes/jpgraph/src/Examples/example14.php create mode 100644 html/includes/jpgraph/src/Examples/example15.php create mode 100644 html/includes/jpgraph/src/Examples/example16.1.php create mode 100644 html/includes/jpgraph/src/Examples/example16.2.php create mode 100644 html/includes/jpgraph/src/Examples/example16.3.php create mode 100644 html/includes/jpgraph/src/Examples/example16.4.php create mode 100644 html/includes/jpgraph/src/Examples/example16.5.php create mode 100644 html/includes/jpgraph/src/Examples/example16.6.php create mode 100644 html/includes/jpgraph/src/Examples/example16.php create mode 100644 html/includes/jpgraph/src/Examples/example17.php create mode 100644 html/includes/jpgraph/src/Examples/example18.php create mode 100644 html/includes/jpgraph/src/Examples/example19.1.php create mode 100644 html/includes/jpgraph/src/Examples/example19.php create mode 100644 html/includes/jpgraph/src/Examples/example2.1.php create mode 100644 html/includes/jpgraph/src/Examples/example2.5.php create mode 100644 html/includes/jpgraph/src/Examples/example2.6.php create mode 100644 html/includes/jpgraph/src/Examples/example2.php create mode 100644 html/includes/jpgraph/src/Examples/example20.1.php create mode 100644 html/includes/jpgraph/src/Examples/example20.2.php create mode 100644 html/includes/jpgraph/src/Examples/example20.3.php create mode 100644 html/includes/jpgraph/src/Examples/example20.4.php create mode 100644 html/includes/jpgraph/src/Examples/example20.5.php create mode 100644 html/includes/jpgraph/src/Examples/example20.php create mode 100644 html/includes/jpgraph/src/Examples/example21.php create mode 100644 html/includes/jpgraph/src/Examples/example22.php create mode 100644 html/includes/jpgraph/src/Examples/example23.php create mode 100644 html/includes/jpgraph/src/Examples/example24.php create mode 100644 html/includes/jpgraph/src/Examples/example25.1.php create mode 100644 html/includes/jpgraph/src/Examples/example25.2.php create mode 100644 html/includes/jpgraph/src/Examples/example25.php create mode 100644 html/includes/jpgraph/src/Examples/example26.1.php create mode 100644 html/includes/jpgraph/src/Examples/example26.php create mode 100644 html/includes/jpgraph/src/Examples/example27.1.php create mode 100644 html/includes/jpgraph/src/Examples/example27.2.php create mode 100644 html/includes/jpgraph/src/Examples/example27.3.php create mode 100644 html/includes/jpgraph/src/Examples/example27.php create mode 100644 html/includes/jpgraph/src/Examples/example28.1.php create mode 100644 html/includes/jpgraph/src/Examples/example28.2.php create mode 100644 html/includes/jpgraph/src/Examples/example28.3.php create mode 100644 html/includes/jpgraph/src/Examples/example28.php create mode 100644 html/includes/jpgraph/src/Examples/example3.1.php create mode 100644 html/includes/jpgraph/src/Examples/example3.2.1.php create mode 100644 html/includes/jpgraph/src/Examples/example3.2.2.php create mode 100644 html/includes/jpgraph/src/Examples/example3.2.php create mode 100644 html/includes/jpgraph/src/Examples/example3.3.php create mode 100644 html/includes/jpgraph/src/Examples/example3.4.php create mode 100644 html/includes/jpgraph/src/Examples/example3.php create mode 100644 html/includes/jpgraph/src/Examples/example4.php create mode 100644 html/includes/jpgraph/src/Examples/example5.1.php create mode 100644 html/includes/jpgraph/src/Examples/example5.php create mode 100644 html/includes/jpgraph/src/Examples/example6.1.php create mode 100644 html/includes/jpgraph/src/Examples/example6.2.php create mode 100644 html/includes/jpgraph/src/Examples/example6.php create mode 100644 html/includes/jpgraph/src/Examples/example7.php create mode 100644 html/includes/jpgraph/src/Examples/example8.1.php create mode 100644 html/includes/jpgraph/src/Examples/example8.php create mode 100644 html/includes/jpgraph/src/Examples/example9.1.php create mode 100644 html/includes/jpgraph/src/Examples/example9.2.php create mode 100644 html/includes/jpgraph/src/Examples/example9.php create mode 100644 html/includes/jpgraph/src/Examples/exampleex9.php create mode 100644 html/includes/jpgraph/src/Examples/fieldscatterex1.php create mode 100644 html/includes/jpgraph/src/Examples/filledgridex1.php create mode 100644 html/includes/jpgraph/src/Examples/filledline01.php create mode 100644 html/includes/jpgraph/src/Examples/filledlineex01.1.php create mode 100644 html/includes/jpgraph/src/Examples/filledlineex01.php create mode 100644 html/includes/jpgraph/src/Examples/filledlineex02.php create mode 100644 html/includes/jpgraph/src/Examples/filledlineex03.php create mode 100644 html/includes/jpgraph/src/Examples/filledstepstyleex1.php create mode 100644 html/includes/jpgraph/src/Examples/fixscale_radarex1.php create mode 100644 html/includes/jpgraph/src/Examples/funcex1.php create mode 100644 html/includes/jpgraph/src/Examples/funcex2.php create mode 100644 html/includes/jpgraph/src/Examples/funcex3.php create mode 100644 html/includes/jpgraph/src/Examples/funcex4.php create mode 100644 html/includes/jpgraph/src/Examples/ganttconstrainex0.php create mode 100644 html/includes/jpgraph/src/Examples/ganttconstrainex1.php create mode 100644 html/includes/jpgraph/src/Examples/ganttconstrainex2.php create mode 100644 html/includes/jpgraph/src/Examples/ganttcsimex01.php create mode 100644 html/includes/jpgraph/src/Examples/ganttcsimex02.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex00.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex01.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex02.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex03.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex04.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex05.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex06.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex07.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex08.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex09.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex10.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex11.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex12.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex13.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex14.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex15.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex16.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex17.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex18.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex19.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex30.php create mode 100644 html/includes/jpgraph/src/Examples/ganttex_slice.php create mode 100644 html/includes/jpgraph/src/Examples/gantthgridex1.php create mode 100644 html/includes/jpgraph/src/Examples/gantthourex1.php create mode 100644 html/includes/jpgraph/src/Examples/gantthourminex1.php create mode 100644 html/includes/jpgraph/src/Examples/gantticonex1.php create mode 100644 html/includes/jpgraph/src/Examples/ganttmonthyearex1.php create mode 100644 html/includes/jpgraph/src/Examples/ganttmonthyearex2.php create mode 100644 html/includes/jpgraph/src/Examples/ganttmonthyearex3.php create mode 100644 html/includes/jpgraph/src/Examples/ganttsimpleex1.php create mode 100644 html/includes/jpgraph/src/Examples/gradbkgex1.php create mode 100644 html/includes/jpgraph/src/Examples/gradlinefillex1.php create mode 100644 html/includes/jpgraph/src/Examples/gradlinefillex2.php create mode 100644 html/includes/jpgraph/src/Examples/gradlinefillex3.php create mode 100644 html/includes/jpgraph/src/Examples/gradlinefillex4.php create mode 100644 html/includes/jpgraph/src/Examples/groupbarex1.php create mode 100644 html/includes/jpgraph/src/Examples/horizbarex1.php create mode 100644 html/includes/jpgraph/src/Examples/horizbarex2.php create mode 100644 html/includes/jpgraph/src/Examples/horizbarex3.php create mode 100644 html/includes/jpgraph/src/Examples/horizbarex4.php create mode 100644 html/includes/jpgraph/src/Examples/horizbarex6.php create mode 100644 html/includes/jpgraph/src/Examples/imgmarkercsimex1.php create mode 100644 html/includes/jpgraph/src/Examples/imgmarkerex1.php create mode 100644 html/includes/jpgraph/src/Examples/impulsex1.php create mode 100644 html/includes/jpgraph/src/Examples/impulsex2.php create mode 100644 html/includes/jpgraph/src/Examples/impulsex3.php create mode 100644 html/includes/jpgraph/src/Examples/impulsex4.php create mode 100644 html/includes/jpgraph/src/Examples/inyaxisex1.php create mode 100644 html/includes/jpgraph/src/Examples/inyaxisex2.php create mode 100644 html/includes/jpgraph/src/Examples/inyaxisex3.php create mode 100644 html/includes/jpgraph/src/Examples/ledex1.php create mode 100644 html/includes/jpgraph/src/Examples/ledex2.php create mode 100644 html/includes/jpgraph/src/Examples/ledex3.php create mode 100644 html/includes/jpgraph/src/Examples/ledex4.php create mode 100644 html/includes/jpgraph/src/Examples/lightbluedarkblue400x300grad.png create mode 100644 html/includes/jpgraph/src/Examples/linebarcentex1.php create mode 100644 html/includes/jpgraph/src/Examples/linebarex1.php create mode 100644 html/includes/jpgraph/src/Examples/linebarex2.php create mode 100644 html/includes/jpgraph/src/Examples/linebarex3.php create mode 100644 html/includes/jpgraph/src/Examples/linegraceex.php create mode 100644 html/includes/jpgraph/src/Examples/lineiconex1.php create mode 100644 html/includes/jpgraph/src/Examples/lineiconex2.php create mode 100644 html/includes/jpgraph/src/Examples/linlogex1.php create mode 100644 html/includes/jpgraph/src/Examples/listallflags.php create mode 100644 html/includes/jpgraph/src/Examples/listallflags_helper.php create mode 100644 html/includes/jpgraph/src/Examples/listfontsex1.php create mode 100644 html/includes/jpgraph/src/Examples/logbarex1.php create mode 100644 html/includes/jpgraph/src/Examples/loglogex1.php create mode 100644 html/includes/jpgraph/src/Examples/manscaleex1.php create mode 100644 html/includes/jpgraph/src/Examples/manscaleex2.php create mode 100644 html/includes/jpgraph/src/Examples/manscaleex3.php create mode 100644 html/includes/jpgraph/src/Examples/manscaleex4.php create mode 100644 html/includes/jpgraph/src/Examples/manualtickex1.php create mode 100644 html/includes/jpgraph/src/Examples/manualtickex2.php create mode 100644 html/includes/jpgraph/src/Examples/markflagex1.php create mode 100644 html/includes/jpgraph/src/Examples/multconstganttex01.php create mode 100644 html/includes/jpgraph/src/Examples/mulyaxiscsimex1.php create mode 100644 html/includes/jpgraph/src/Examples/mulyaxisex1.php create mode 100644 html/includes/jpgraph/src/Examples/negbarvalueex01.php create mode 100644 html/includes/jpgraph/src/Examples/nullvalueex01.php create mode 100644 html/includes/jpgraph/src/Examples/partiallyfilledlineex1.php create mode 100644 html/includes/jpgraph/src/Examples/penguin.png create mode 100644 html/includes/jpgraph/src/Examples/pie3d_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/pie3dex1.php create mode 100644 html/includes/jpgraph/src/Examples/pie3dex2.php create mode 100644 html/includes/jpgraph/src/Examples/pie3dex3.php create mode 100644 html/includes/jpgraph/src/Examples/pie3dex4.php create mode 100644 html/includes/jpgraph/src/Examples/pie3dex5.php create mode 100644 html/includes/jpgraph/src/Examples/pie_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/piebkgex1.php create mode 100644 html/includes/jpgraph/src/Examples/piec_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/piecex1.php create mode 100644 html/includes/jpgraph/src/Examples/piecex2.php create mode 100644 html/includes/jpgraph/src/Examples/pieex1.php create mode 100644 html/includes/jpgraph/src/Examples/pieex2.php create mode 100644 html/includes/jpgraph/src/Examples/pieex3.php create mode 100644 html/includes/jpgraph/src/Examples/pieex4.php create mode 100644 html/includes/jpgraph/src/Examples/pieex5.php create mode 100644 html/includes/jpgraph/src/Examples/pieex6.php create mode 100644 html/includes/jpgraph/src/Examples/pieex7.php create mode 100644 html/includes/jpgraph/src/Examples/pieex8.php create mode 100644 html/includes/jpgraph/src/Examples/pieex9.php create mode 100644 html/includes/jpgraph/src/Examples/pielabelsex1.php create mode 100644 html/includes/jpgraph/src/Examples/pielabelsex2.php create mode 100644 html/includes/jpgraph/src/Examples/pielabelsex3.php create mode 100644 html/includes/jpgraph/src/Examples/pielabelsex4.php create mode 100644 html/includes/jpgraph/src/Examples/plotlineex1.php create mode 100644 html/includes/jpgraph/src/Examples/polarex0-180.php create mode 100644 html/includes/jpgraph/src/Examples/polarex0.php create mode 100644 html/includes/jpgraph/src/Examples/polarex1.php create mode 100644 html/includes/jpgraph/src/Examples/polarex10.php create mode 100644 html/includes/jpgraph/src/Examples/polarex2.php create mode 100644 html/includes/jpgraph/src/Examples/polarex3-lin.php create mode 100644 html/includes/jpgraph/src/Examples/polarex3.php create mode 100644 html/includes/jpgraph/src/Examples/polarex4.php create mode 100644 html/includes/jpgraph/src/Examples/polarex5.php create mode 100644 html/includes/jpgraph/src/Examples/polarex6.php create mode 100644 html/includes/jpgraph/src/Examples/polarex7-1.php create mode 100644 html/includes/jpgraph/src/Examples/polarex7-2.php create mode 100644 html/includes/jpgraph/src/Examples/polarex7.php create mode 100644 html/includes/jpgraph/src/Examples/polarex8.php create mode 100644 html/includes/jpgraph/src/Examples/polarex9.php create mode 100644 html/includes/jpgraph/src/Examples/pushpinex1.php create mode 100644 html/includes/jpgraph/src/Examples/pushpinex2.php create mode 100644 html/includes/jpgraph/src/Examples/radarex1.php create mode 100644 html/includes/jpgraph/src/Examples/radarex2.php create mode 100644 html/includes/jpgraph/src/Examples/radarex3.php create mode 100644 html/includes/jpgraph/src/Examples/radarex4.php create mode 100644 html/includes/jpgraph/src/Examples/radarex5.php create mode 100644 html/includes/jpgraph/src/Examples/radarex6.1.php create mode 100644 html/includes/jpgraph/src/Examples/radarex6.php create mode 100644 html/includes/jpgraph/src/Examples/radarex7.php create mode 100644 html/includes/jpgraph/src/Examples/radarex8.1.php create mode 100644 html/includes/jpgraph/src/Examples/radarex8.php create mode 100644 html/includes/jpgraph/src/Examples/radarex9.php create mode 100644 html/includes/jpgraph/src/Examples/radarlogex1.php create mode 100644 html/includes/jpgraph/src/Examples/radarlogex2.php create mode 100644 html/includes/jpgraph/src/Examples/radarmarkex1.php create mode 100644 html/includes/jpgraph/src/Examples/rotateex1.php create mode 100644 html/includes/jpgraph/src/Examples/rotex0.php create mode 100644 html/includes/jpgraph/src/Examples/rotex1.php create mode 100644 html/includes/jpgraph/src/Examples/rotex2.php create mode 100644 html/includes/jpgraph/src/Examples/rotex3.php create mode 100644 html/includes/jpgraph/src/Examples/rotex4.php create mode 100644 html/includes/jpgraph/src/Examples/rotex5.php create mode 100644 html/includes/jpgraph/src/Examples/saab_95.jpg create mode 100644 html/includes/jpgraph/src/Examples/scatter_csimex1.php create mode 100644 html/includes/jpgraph/src/Examples/scatterex1.php create mode 100644 html/includes/jpgraph/src/Examples/scatterex2.php create mode 100644 html/includes/jpgraph/src/Examples/scatterlinkex1.php create mode 100644 html/includes/jpgraph/src/Examples/scatterlinkex2.php create mode 100644 html/includes/jpgraph/src/Examples/scatterlinkex3.php create mode 100644 html/includes/jpgraph/src/Examples/scatterlinkex4.php create mode 100644 html/includes/jpgraph/src/Examples/scatterrotex1.php create mode 100644 html/includes/jpgraph/src/Examples/show-example.php create mode 100644 html/includes/jpgraph/src/Examples/show-image.php create mode 100644 html/includes/jpgraph/src/Examples/show-source.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex1.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex10.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex11.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex2.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex3.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex4.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex5.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex6.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex7.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex8.php create mode 100644 html/includes/jpgraph/src/Examples/smallstaticbandsex9.php create mode 100644 html/includes/jpgraph/src/Examples/splineex1.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex1.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex2.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex3.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex4.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex5.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex6.php create mode 100644 html/includes/jpgraph/src/Examples/staticbandbarex7.php create mode 100644 html/includes/jpgraph/src/Examples/staticlinebarex1.php create mode 100644 html/includes/jpgraph/src/Examples/stockex1.php create mode 100644 html/includes/jpgraph/src/Examples/stockex2.php create mode 100644 html/includes/jpgraph/src/Examples/stship.jpg create mode 100644 html/includes/jpgraph/src/Examples/tabtitleex1.php create mode 100644 html/includes/jpgraph/src/Examples/testsuit.php create mode 100644 html/includes/jpgraph/src/Examples/text-example1.php create mode 100644 html/includes/jpgraph/src/Examples/text-example2.php create mode 100644 html/includes/jpgraph/src/Examples/textalignex1.php create mode 100644 html/includes/jpgraph/src/Examples/tiger_bkg.gif create mode 100644 html/includes/jpgraph/src/Examples/tiger_bkg.jpg create mode 100644 html/includes/jpgraph/src/Examples/tiger_bkg.png create mode 100644 html/includes/jpgraph/src/Examples/timestampex01.php create mode 100644 html/includes/jpgraph/src/Examples/titlecsimex01.php create mode 100644 html/includes/jpgraph/src/Examples/topxaxisex1.php create mode 100644 html/includes/jpgraph/src/Examples/worldmap1.jpg create mode 100644 html/includes/jpgraph/src/flags.dat create mode 100644 html/includes/jpgraph/src/flags_thumb100x100.dat create mode 100644 html/includes/jpgraph/src/flags_thumb35x35.dat create mode 100644 html/includes/jpgraph/src/flags_thumb60x60.dat create mode 100644 html/includes/jpgraph/src/gd_image.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_balls.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_bevels.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_diamonds.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_pushpins.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_squares.inc.php create mode 100644 html/includes/jpgraph/src/imgdata_stars.inc.php create mode 100644 html/includes/jpgraph/src/jpg-config.inc.php create mode 100644 html/includes/jpgraph/src/jpgraph.php create mode 100644 html/includes/jpgraph/src/jpgraph_antispam-digits.php create mode 100644 html/includes/jpgraph/src/jpgraph_antispam.php create mode 100644 html/includes/jpgraph/src/jpgraph_bar.php create mode 100644 html/includes/jpgraph/src/jpgraph_canvas.php create mode 100644 html/includes/jpgraph/src/jpgraph_canvtools.php create mode 100644 html/includes/jpgraph/src/jpgraph_date.php create mode 100644 html/includes/jpgraph/src/jpgraph_errhandler.inc.php create mode 100644 html/includes/jpgraph/src/jpgraph_error.php create mode 100644 html/includes/jpgraph/src/jpgraph_flags.php create mode 100644 html/includes/jpgraph/src/jpgraph_gantt.php create mode 100644 html/includes/jpgraph/src/jpgraph_gb2312.php create mode 100644 html/includes/jpgraph/src/jpgraph_gradient.php create mode 100644 html/includes/jpgraph/src/jpgraph_iconplot.php create mode 100644 html/includes/jpgraph/src/jpgraph_imgtrans.php create mode 100644 html/includes/jpgraph/src/jpgraph_led.php create mode 100644 html/includes/jpgraph/src/jpgraph_line.php create mode 100644 html/includes/jpgraph/src/jpgraph_log.php create mode 100644 html/includes/jpgraph/src/jpgraph_mgraph.php create mode 100644 html/includes/jpgraph/src/jpgraph_pie.php create mode 100644 html/includes/jpgraph/src/jpgraph_pie3d.php create mode 100644 html/includes/jpgraph/src/jpgraph_plotband.php create mode 100644 html/includes/jpgraph/src/jpgraph_plotmark.inc.php create mode 100644 html/includes/jpgraph/src/jpgraph_polar.php create mode 100644 html/includes/jpgraph/src/jpgraph_radar.php create mode 100644 html/includes/jpgraph/src/jpgraph_regstat.php create mode 100644 html/includes/jpgraph/src/jpgraph_scatter.php create mode 100644 html/includes/jpgraph/src/jpgraph_stock.php create mode 100644 html/includes/jpgraph/src/jpgraph_ttf.inc.php create mode 100644 html/includes/jpgraph/src/jpgraph_utils.inc.php create mode 100644 html/includes/jpgraph/src/lang/de.inc.php create mode 100644 html/includes/jpgraph/src/lang/en.inc.php create mode 100644 html/includes/jpgraph/src/lang/prod.inc.php diff --git a/html/billing-graph.php b/html/billing-graph.php index 8bf2e45786..a1d10584b3 100644 --- a/html/billing-graph.php +++ b/html/billing-graph.php @@ -9,9 +9,9 @@ include("../config.php"); include("../includes/functions.php"); include("includes/authenticate.inc"); if(!$_SESSION['authenticated']) { echo("unauthenticated"); exit; } -require("includes/jpgraph/jpgraph.php"); -include("includes/jpgraph/jpgraph_line.php"); -include("includes/jpgraph/jpgraph_utils.inc.php"); +require("includes/jpgraph/src/jpgraph.php"); +include("includes/jpgraph/src/jpgraph_line.php"); +include("includes/jpgraph/src/jpgraph_utils.inc.php"); if($_GET['bill_id']){ if(testPassword($_GET['bill_id'],$_GET['bill_code']) == "1") { diff --git a/html/includes/billing.php b/html/includes/billing.php index 47ee7e5314..accceee6c6 100644 --- a/html/includes/billing.php +++ b/html/includes/billing.php @@ -120,11 +120,11 @@ $lastmonth = mysql_result(mysql_query("SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INT $yesterday = mysql_result(mysql_query("SELECT UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY))"), 0); $now = date(U); -$di = ""; -$mi = ""; diff --git a/html/includes/jpgraph/QPL.txt b/html/includes/jpgraph/QPL.txt new file mode 100644 index 0000000000..66986cb17c --- /dev/null +++ b/html/includes/jpgraph/QPL.txt @@ -0,0 +1,119 @@ +THE Q PUBLIC LICENSE version 1.0 + +Copyright (C) 1999 Trolltech AS, Norway. + Everyone is permitted to copy and + distribute this license document. + +The intent of this license is to establish freedom to share and change +the software regulated by this license under the open source model. + +This license applies to any software containing a notice placed by the +copyright holder saying that it may be distributed under the terms of +the Q Public License version 1.0. Such software is herein referred to +as the Software. This license covers modification and distribution of +the Software, use of third-party application programs based on the +Software, and development of free software which uses the Software. + + +Granted Rights + +1. You are granted the non-exclusive rights set forth in this license + provided you agree to and comply with any and all conditions in + this license. Whole or partial distribution of the Software, or + software items that link with the Software, in any form signifies + acceptance of this license. + + +2. You may copy and distribute the Software in unmodified form + provided that the entire package, including - but not restricted to + - copyright, trademark notices and disclaimers, as released by the + initial developer of the Software, is distributed. + + +3. You may make modifications to the Software and distribute your + modifications, in a form that is separate from the Software, such + as patches. The following restrictions apply to modifications: + + a. Modifications must not alter or remove any copyright notices in the + Software. + + b. When modifications to the Software are released under this license, + a non-exclusive royalty-free right is granted to the initial developer + of the Software to distribute your modification in future versions of + the Software provided such versions remain available under these terms + in addition to any other license(s) of the initial developer. + + +4. You may distribute machine-executable forms of the Software or + machine-executable forms of modified versions of the Software, + provided that you meet these restrictions: + + a. You must include this license document in the distribution. + + b. You must ensure that all recipients of the machine-executable forms + are also able to receive the complete machine-readable source code to + the distributed Software, including all modifications, without any + charge beyond the costs of data transfer, and place prominent notices + in the distribution explaining this. + + c. You must ensure that all modifications included in the + machine-executable forms are available under the terms of this + license. + + +5. You may use the original or modified versions of the Software to + compile, link and run application programs legally developed by you + or by others. + + +6. You may develop application programs, reusable components and other + software items that link with the original or modified versions of + the Software. These items, when distributed, are subject to the + following requirements: + + + + a. You must ensure that all recipients of machine-executable forms of + these items are also able to receive and use the complete + machine-readable source code to the items without any charge beyond + the costs of data transfer. + + + b. You must explicitly license all recipients of your items to use and + re-distribute original and modified versions of the items in both + machine-executable and source code forms. The recipients must be able + to do so without any charges whatsoever, and they must be able to + re-distribute to anyone they choose. + + + c. If the items are not available to the general public, and the + initial developer of the Software requests a copy of the items, then + you must supply one. + + +Limitations of Liability + +In no event shall the initial developers or copyright holders be +liable for any damages whatsoever, including - but not restricted to - +lost revenue or profits or other direct, indirect, special, incidental +or consequential damages, even if they have been advised of the +possibility of such damages, except to the extent invariable law, if +any, provides otherwise. + + +No Warranty + +The Software and this license document are provided AS IS with NO +WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +Choice of Law + +This license is governed by the Laws of Norway. Disputes shall be +settled by Oslo City Court. + + + + + diff --git a/html/includes/jpgraph/README b/html/includes/jpgraph/README new file mode 100644 index 0000000000..c17ed7c8bb --- /dev/null +++ b/html/includes/jpgraph/README @@ -0,0 +1,162 @@ +README FOR JPGRAPH +================== + +This package contains JpGraph, an Object Oriented PHP4 Graph Plotting library. + +The library is Copyright (C) 1999-2009 Aditus Consulting and +released under dual license QPL 1.0 for open source and educational +use and JpGraph Professional License for commercial use. + +Please see full license details at http://www.aditus.nu/jpgraph/ + +* -------------------------------------------------------------------- +* PHP5 IS NOT SUPPORTED IN THE 1.x SERIES +* Please use the 2.x serie if PHP5 support is required +* -------------------------------------------------------------------- + + +Included files +-------------- +README This file +QPL.txt QPL 1.0 Licensee + +/src + jpg-config.inc.php Configuration setup for JpGraph + jpgraph.php Base library + jpgraph_errhandler.inc.php Base library. Error handler module. + gd_image.inc.php Base library. GD interface class + jpgraph_ttf.inc.php Base library. TTF font handling + + jpgraph_led.php Extension: LED digits module + jpgraph_log.php Extension: logarithmic scales + jpgraph_date.php Extension: date/time scales + jpgraph_line.php Extension: line plots + jpgraph_bar.php Extension: bar plots + jpgraph_error.php Extension: error plots + jpgraph_scatter.php Extension: scatter/impulse plots + jpgraph_radar.php Extension: radar plots + jpgraph_pie.php Extension: pie plots + jpgraph_pie3d.php Extension: 3D pie plots + jpgraph_canvas.php Extension: drawing canvas + jpgraph_canvtools.php Extension: utility classes for working with canvas + jpgraph_gantt.php Extension: Gantt chart + jpgraph_regstat.php Extension: Statistics and cubic splines. + jpgraph_stock.php Extension: Stock and box plots. + jpgraph_gradient.php Extension: Color gradient class + jpgraph_gb2312.php Extension: Chinese GB2312 to Unicode translation + jpgraph_plotmark.php Extension: Handle plotmarks in plots + jpgraph_imgtrans.php Extension: Basic image transformation + jpgraph_flags.php Extension: Country flags + jpgraph_iconplot.php Extension: Use image icons in plots + jpgraph_plotband.php Extension: Plotbands in graphs + jpgraph_plotmark.inc.php Extension: Using plotmarks in graphs + jpgraph_antispam.php Extension: Antispam module + jpgraph_antispam-digits.php Extension: Antispam module + jpgraph_utils.inc.php Extension: Non mandatory Utility classes + jpgraph_mgraph.php Extension: Multi graph + imgdata_*.inc Extension: Encoded images for plot marks + flags*.dat Raw Image data: Pre-compiled data for country flags. + +/src/Examples A directory with example sripts. + Run testsuit.php to get a list of all + files and you can easily click on a file to + see the code and the resulting image. + +/docs Directory with all documentation +/docs/index.html Documentation portal + +/lang + de.inc.php German translation of error messages + en.inc.php English version of error messages + prod.inc.php Production version of error messages (does not + give specific details in error message.) +Requirements: +------------- +Miminum: +* PHP 4.4.1 or higher + (earlier versions might work but is unsupported) +* GD 2.0.30 or higher + (earlier versions might work but is unsupported) + +Recommended: +* PHP 4.4.9 +* PHP Builtin GD 2.0.34 library + +Installation +------------ +0. Make sure that the PHP version is compatible with the stated requirements + and that the PHP installation has support for the GD library. + Please run phpinfo() to check if GD library + is supported in the installation. + If the GD library doesn't seem to be installed + please consult the PHP manual under section "Image" for + instructions on where to find this library. Please refer to + the manual section "Verifying your PHP installation" + +1. Unzip and copy the files to a directory of your choice where Your + httpd sever can access them. + For a global site installation you should copy the files to + somewhere in the PHP search path. + +2. Check that the default directory paths in jpg-config.inc + for cache directory and TTF directory suits your installation. + Note1: The default directories are different depending on if + the library is running on Windows or UNIX. + Note2: Apache/PHP must have write permission to your cache + directory if you enable the cache feature. By default the cache + is disabled. + +3. Check that all rest of the DEFINE in jpg-config.inc + is setup to your preference. The default should be fine + for most users. (See also Note 3. below) + +4. If any problems are encounted please start by reading the FAQ on + http://www.aditus.nu/jpgraph/jpgraphfaq.php. + + +Documentation +------------- +The installation includes HTML documentation and reference guide for the +library. The portal page for all the documentation is +/docs/index.html + + +Troubleshooting +--------------- +0. Make sure your PHP installation has the minimum requirements and has + the GD library enabled (most modern installations fulfills the minimmum + requirements). See chapter 3.1 in the manual. + +1. If an empty page is returned back when running an example check + the following + + i) Increase the maximum memory allowed by PHP (in php.ini) to at least 32MB + ii) Enable all error messages and notices in php.ini (error_reporting = E_ALL) + III) Make sure output buffering is disabled in php.ini (output_buffering = Off) + this will make it possible to see the errors more easily + IV) Disable any PHP accelerometer you may have installed (e.g. Zend Cache) + + Then try running the example again. Most likely an error message will + now be shown that will give further information on what is wrong. + For further clarifiction on the casues for the error messages see + the FAQ section on the WEB site. + +2. If you are running IIS and Win2k and get the error "Can't find + font' when trying to use TTF fonts then try to change you paths + to UNIX style, i.e. "/usr/local/fonts/ttf/". Remember that the + path is absolute and not relative to the htdocs catalogue. Some + versions of GD for Windows also need you to set the environment + variable GDFONTPATH for GD to find the fonts. + +3. If you are using the cache please make sure that you have + set the permissions correctly for the cache directory so that + Apache/PHP can write to that directory. + + +Bug reports and suggestions +--------------------------- +Should be reported in the issue tracker at + +http://www.aditus.nu/bugtraq + + diff --git a/html/includes/jpgraph/VERSION b/html/includes/jpgraph/VERSION new file mode 100644 index 0000000000..8a099aa60b --- /dev/null +++ b/html/includes/jpgraph/VERSION @@ -0,0 +1 @@ +Revision: r1089, Exported: 2009-01-31 15:55 diff --git a/html/includes/jpgraph/docs/JpGraph_Logo.png b/html/includes/jpgraph/docs/JpGraph_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd25d8a6124a03ef15a7e40a5c644dfda1c86bc GIT binary patch literal 8652 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 bt04S<}Kl4Si?laT)bbja&L literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/1010Groupingactivities.html b/html/includes/jpgraph/docs/html/1010Groupingactivities.html new file mode 100644 index 0000000000..03bf976ceb --- /dev/null +++ b/html/includes/jpgraph/docs/html/1010Groupingactivities.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.10 Grouping activities

+

It is common to group activities. We have used this feature in the + examples of constrains. There is no special type for activity bars that + are used to illustrate grouping. The common way of illustrating this + (as have been used above) is to add "half" a triangle marker at both + ends of the bar. The special provision that JpGraph does is that if you + add a left or right marker of type MARK_LEFTTRIANGLE or + MARK_RIGHTTRIANGLE those triangles will be drawn under the bars to give + the effect as show in the examples above. In the example above we also + have made the grouping bars have slightly less heigh since the end + triangles will visually "grow" the bar.

+

So to get the effect we want for a group bar we have to use the two + lines:

+ $groupbar-> +leftMark-> +SetType( +"MARK_LEFTTRIANGLE"); +
$groupbar +->rightMark->SetType( +"MARK_RIGHTTRIANGLE") +

+

+

As of the current version There is not yet any formatting support to + accomplish the effect of indentation for the titles so this is + accomplished by using a fixed width font and adding spaces in front of + the title.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10111Addingatitleforthecolumns.html b/html/includes/jpgraph/docs/html/10111Addingatitleforthecolumns.html new file mode 100644 index 0000000000..e1fa224fd0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10111Addingatitleforthecolumns.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.11.1 Adding a title for the columns

+

Precisely as before you can also have a title spanning all the + columns. This title is specified with the property tableTitle of + the scale. Specifying a table title will automatically adjust the + height of the column titles to fit the table title. The small code + snippet below shows how to add a title.

 $graph +->scale->tableTitle-> +Set('Phase 1'); +
$graph->scale-> +tableTitle-> +SetFont( +FF_ARIAL, +FS_NORMAL,12); +
$graph->scale-> +SetTableTitleBackground( +'darkgreen@0.6'); +
$graph->scale-> +tableTitle-> +Show(true);
+

+

A full example of this is shown below

+
+
Figure 161: Adding a column titles stratching all title + columns. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10112SpecifyingCSIMentriesforcolumntitles.html b/html/includes/jpgraph/docs/html/10112SpecifyingCSIMentriesforcolumntitles.html new file mode 100644 index 0000000000..daa216c64f --- /dev/null +++ b/html/includes/jpgraph/docs/html/10112SpecifyingCSIMentriesforcolumntitles.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.11.2 Specifying CSIM entries for column titles +

+

In exactly the same way as for a single title it is possible to + specify individual CSIM targets for each of the title columns. This is + accomplished by specifying an array for both the target and the alt + text instead of a single string as arguments for SetCSIMTarget() + The following code snippet shows how to specify that.

+  $bar +->title->SetCSIMTarget(array('sometarget1.html','sometarget1.html'), +
array(
'alttext1' +,'alttext2'));

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1011Usingmultiplecolumnsastitles.html b/html/includes/jpgraph/docs/html/1011Usingmultiplecolumnsastitles.html new file mode 100644 index 0000000000..7b480320db --- /dev/null +++ b/html/includes/jpgraph/docs/html/1011Usingmultiplecolumnsastitles.html @@ -0,0 +1,164 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.11 Using multiple columns as titles

+

It is often of interest not only to show one title for a gantt bar + but often one wants to show, title, start date, end date, duration or + effort and so on. Up until now we have, to keep things simple only + shown a single title for each activity. We will now show you how you + can specify an arbitrary number of columns as titles for a Gantt chart + as well as adding icons in the graph columns.

+

First out is an example to help visualize what we will achieve

+
+
Figure 160: A Gantt chart with multiple columns [src]  +

+

+

To use multiple columns there is two steps. First you need to set + the titles (name, color, fonts etc). Thereafter you need to add the + title columns for each individual bar.

+

To set the columns you will have to work with the Activity + information property of the scale. The following code excerpt show + this

+ $graph->scale->actinfo +->SetColTitles +( +
    array(
'Note' +,'Task','Duration', +'Start', +'Finish'),array( +30,100));
+

+

You will notice two things. We fist specify the titles using an + array. We have also specified a second array with the numbers 30 and + 100. This is an optional array that specifies the minimum width of, in + this case, the first two columns. By default the columns will be wide + enough to hold the widest text string in the column. However for + esthetic reasons you might sometimes want to increase the minium width. + This is what we have done here for the first two columns.

+

Furthermore you can also adjust the background colors and the style + and colors of the vertical dividing grid lines. In the previous image + we used the lines

 $graph-> +scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +
$graph->scale-> +actinfo-> +SetFont( +FF_ARIAL, +FS_NORMAL,10); +
$graph->scale-> +actinfo->vgrid->SetStyle +('solid'); +
$graph->scale-> +actinfo->vgrid->SetColor +('gray');

+

The style for the grid lines can also be "dashed", "dotted" or + "longdashed" as in other line formatting contexts within the library. + You can also adjust if you would like the small "3D" effect in the + titles. By default this is enabled. You can easily turn this of with a + call to

+ $graph->scale->actinfo +->SetStyle(ACTINFO_2D); +

+

To adjust the colors of the vertical dividing lines in the title the + method SetColor() is used as in + "$graph->scale->actinfo->SetColor('navy');".

+

The second thins is to actually populate the columns. This is done + (of course) as you add the activity bars to the graph. Previous we just + used a string as the title when we wasn't using columns. By simply + replacing this string with an array we specify the content of the + columns.

+

For example to specify two column titles we just create a + hypothetical Gantt bar as In the full example above we put all this in + arrays to make for better coding practice since we create several bars.

+

In addition to ordinary text you can also add an image or any of the + predefined icons available. In order to add that in a column you first + create an instance of IconImage() and then specify that instance + instead of the text. So in the previous code snippet if we wanted a + "open folder" image in the first column we would change the lines to

+ $iconopen = new  +IconImage( +GICON_FOLDEROPEN, +0.6); +
$title2=""; +
$bar  += new GanttBar +(0,array($iconopen, +$title2), +"2003-11-23", +"2003-12-05"); +

+

The available builtin icons are

+
    +
  • GICON_WARNINGRED
  • +
  • GICON_TEXT
  • +
  • GICON_ENDCONS
  • +
  • GICON_MAIL
  • +
  • GICON_STARTCONS
  • +
  • GICON_CALC
  • +
  • GICON_MAGNIFIER
  • +
  • GICON_LOCK
  • +
  • GICON_STOP
  • +
  • GICON_WARNINGYELLOW
  • +
  • GICON_FOLDEROPEN
  • +
  • GICON_FOLDER
  • +
  • GICON_TEXTIMPORTANT
  • +
+

In addition you can also use any of you own images if you specify + the argument as a string, for example

+  $myicon IconImage( +'myicon.png'); +

+

If you wonder, the second argument in the IconImage() call is + an optional scaling factor which you can use to adjust the size of the + image.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10121Addingatabletitle.html b/html/includes/jpgraph/docs/html/10121Addingatabletitle.html new file mode 100644 index 0000000000..7217f9bac6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10121Addingatabletitle.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.1 Adding a table title

+

The (default) white area in the top left of the gantt table may have + a title. This is accessed by the 'tableTitle' property of the gantt + scale. Using this is straightforward as the following lines show.

+  $graph +->scale->tableTitle-> +Set( +"(Rev: 1.22)"); +
$graph->scale-> +tableTitle-> +SetFont( +FF_FONT1, +FS_BOLD); +
$graph->scale-> +SetTableTitleBackground( +"silver"); +
$graph->scale-> +tableTitle-> +Show();
+

+

The example lines above also changes the default white background to + silver. Adding these lines to the previous example gives the following + result:

+
+
Figure 162: Adding a table title. [src]  +

+

+

From the above example you might notice that the width of the left + column (which holds all the titles) have automatically adjusted itself + to make the table title fit.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10122Modifyingthedividerlines.html b/html/includes/jpgraph/docs/html/10122Modifyingthedividerlines.html new file mode 100644 index 0000000000..02f62b1cf1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10122Modifyingthedividerlines.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.2 Modifying the divider lines

+

The vertical and horizontal lines between the titles and the bars + can be modified by accessing the 'divider' and 'dividerh' properties of + the scale. Again, this is straightforward as the following example + shows:

+ $graph->scale->divider +->SetWeight(3); +
$graph->scale-> +divider-> +SetColor( +"navy"); +
$graph->scale-> +dividerh-> +SetWeight(3); +
$graph->scale-> +dividerh-> +SetColor( +"navy"); +

+

The effect of this is shown in Figure 163 below

+
+
Figure 163: Modifying the dividing line [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10123Modifyingtheboxaroundtheplot.html b/html/includes/jpgraph/docs/html/10123Modifyingtheboxaroundtheplot.html new file mode 100644 index 0000000000..8ecfb170fa --- /dev/null +++ b/html/includes/jpgraph/docs/html/10123Modifyingtheboxaroundtheplot.html @@ -0,0 +1,55 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.3 Modifying the box around the plot

+

In a similar manner to the other plots in JpGraph you modify the Box + round the plot with the standard graph method 'SetBox()' as in

+  $graph +->SetBox(true, +"navy",3)
+

+

which will result in a thicker plot box around the area as shown + below

+
+
Figure 164: Modifying the box around the plotarea [src]  +

+

+

Note: You might notice the slight + discrepancy in design that here you use a method and in the previous + cases accessed a property which you modified. This is the unfortunate + affect of the evolving design and development of this library once it + was realised that the original design could be improved upon.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10124Horizontalgridsandalternatinglinecolors.html b/html/includes/jpgraph/docs/html/10124Horizontalgridsandalternatinglinecolors.html new file mode 100644 index 0000000000..60e2119de1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10124Horizontalgridsandalternatinglinecolors.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.4 Horizontal grids and alternating line + colors

+

In order to make large charts easier to read it is possible to + specify alternating an horizontal grid and optional alternating line + colors in the background for Gantt charts. The horizontal grid is + accessed through the Graph::hgrid property and the line (used in + the grid) is accessed through the Graph::hgrid::line + sub-property

+

In order to specify the alternating line colors the + SetRowFillColor() method is used. For example, to use alternating + blue background with blue grid line the following lines would have to + be added to the graph script

+   +// Setup a horizontal grid +
$graph->hgrid-> +Show(); +
$graph->hgrid-> +line->SetColor('lightblue' +); +
$graph->hgrid-> +SetRowFillColor( +'darkblue@0.9'); +

+

Below is an example of a Gantt graph using this formatting

+
+
Figure 165: Adding a horizontal grid to the graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10125AddingiconstoGanttgraphs.html b/html/includes/jpgraph/docs/html/10125AddingiconstoGanttgraphs.html new file mode 100644 index 0000000000..041ee067b8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10125AddingiconstoGanttgraphs.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.5 Adding icons to Gantt graphs

+ As is illustrated in the image above it is also possible (just like for + normal Graph) to add small images (or icons) to a Gantt graph by + creating an IconPlot() instance and then adding it to the graph. In the + image above the following lines were used to add the small image of + "tux" in the left lower corner
+  $icon = new IconPlot( +'penguin.png', +0.01,0.95,1 +,15); +
$icon->SetAnchor( +'left', +'bottom'); +
$graph->Add( +$icon);
+
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10126Adjustingthemarginswithautosizing.html b/html/includes/jpgraph/docs/html/10126Adjustingthemarginswithautosizing.html new file mode 100644 index 0000000000..2cbff7266c --- /dev/null +++ b/html/includes/jpgraph/docs/html/10126Adjustingthemarginswithautosizing.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12.6 Adjusting the margins with auto-sizing

+ As of version 1.17 it is possible to use Graph::SetMargin() to specify + the margin for a Gantt graph even when the vertical height is + determined automatically. For example to generate a graph with no left, + right or bottom margin the following lines would be needed
+  $graph  += new GanttGraph +(500); +
$graph->SetMargin( +0,0,30 +,0);
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1012MoregeneralGanttformatting.html b/html/includes/jpgraph/docs/html/1012MoregeneralGanttformatting.html new file mode 100644 index 0000000000..b3b111f83a --- /dev/null +++ b/html/includes/jpgraph/docs/html/1012MoregeneralGanttformatting.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.12 More general Gantt formatting

+

In this section we will show a few more way by which you may + customize the gantt chart itself. This includes

+
    +
  • Adding a table title (not to be confused with the graph title)
  • +
  • Adjusting appearance of the various lines in the bar chart
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1013SimplifyingthedrawingofGanttgraphs.html b/html/includes/jpgraph/docs/html/1013SimplifyingthedrawingofGanttgraphs.html new file mode 100644 index 0000000000..2c98f82be9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1013SimplifyingthedrawingofGanttgraphs.html @@ -0,0 +1,140 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.13 Simplifying the drawing of Gantt graphs

+

As we have shown in the previous examples constructing a Gantt chart + consists of a number of repetitive tasks; Create the individual + activity bars and add them to the graph.

+

Now when you have a basic understanding of how this works you are + ready to appreciate a small helper method. +GanttGraph::CreateSimple(). This method takes a few arrays of data + which specifies you Gantt chart and then constructs this chart. By + using this method you sacrifices a few adjustment possibilities for + simplicity. This method is nothing magical it just takes the data for + the activities,(start and end date, titles, progress, any constrains + and so on) and constructs the activities and adds them to the graph.

+

The activities are specified in data array which for each activity + have the following fields

+
    +
  • What row the activity should be on
  • +
  • Activity type, controls the appearance. Can be one of +
      +
    1. ACTYPE_NORMAL, A standard activty bar
    2. +
    3. ACTYPE_GROUP, A Grouping bar
    4. +
    5. ACTYPE_MILESTONE, A milestone
    6. +
    7. +
    +

    +
  • +
  • Title text
  • +
  • Start date
  • +
  • End date (NOT FOR Milestones!)
  • +
  • Caption
  • +
+

+

So for example to create a Gantt chart consisting of two activities + which are grouped and a milestone one would have to use something + similar to the following code

+

+ $data = array( +
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26", +"2001-11-23", +""), +
  array(
1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26", +"2001-11-13", +"[KJ]"), +
  array(
2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20", +"2001-11-22", +"[EP]"), +
  array(
3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23", +"M2") ); +
+
// Create the basic graph +
$graph  += new GanttGraph +(); +
$graph->title-> +Set( +"Gantt Graph using CreateSimple()"); +
+
// Setup scale +
$graph->ShowHeaders( +GANTT_HYEAR  +GANTT_HMONTH  +GANTT_HDAY  +GANTT_HWEEK); +
$graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
+
// Add the specified activities +
$graph->CreateSimple( +$data); +
+
// .. and stroke the graph +
$graph->Stroke(); +

+

This will then show up as

+
+
Figure 166: Using the simplified way via CreateSimple() + method +[src]  +

+

+

You may (slightly) modify the appearance of the simple Gantt charts + by means of the methods GanttGraph::SetSimpleFont() and GanttGraph::SetSimpleStyle() But not anything else, remember + that the purpose with this way of constructing graphs is to be simple. + If you need full advanced control you have to construct all the + activities in the "normal" way.

+

You can also specify constrains and progress for each bar by + supplying additional data arrays to GanttGraph::CreateSimple().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1014AddingCSIMClientsideImageMapstoGanttcharts.html b/html/includes/jpgraph/docs/html/1014AddingCSIMClientsideImageMapstoGanttcharts.html new file mode 100644 index 0000000000..4a8d07eab0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1014AddingCSIMClientsideImageMapstoGanttcharts.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.14 Adding CSIM (Client side Image Maps) to Gantt + charts

+

Gantt charts can have independent (different targets) hot spots in + both the activities and in the associated labels for each activity.

+

You specify the target and the associated "Alt" text for an activity + bar by calling the + GanttBar::SetCSIMTarget() and + GanttBar::SetCSIMAlt()

+

In a similar way you set the target and Alt texts for the activity + title as the following code extract shows.

 $bar +->SetCSIMTarget +("http://localhost/abc/" +); +
$bar->SetCSIMAlt( +"Alt Text for the bar"); +
$bar->title-> +SetCSIMTarget( +"http://localhost/abc"); +
$bar->title-> +SetCSIMAlt( +"Alt Text for the title"); +

+

The above code assumes that your activity is available in the + variable 'bar'. In the example directory there is a complete example of + how to use CSIM together with Gantt charts in the "ganttcsimex1.php" + file. (Please note that this example makes use of the simplified Gantt + chart specification using the CreateSimple() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1015Addingconstrainsbetweenyouractivities.html b/html/includes/jpgraph/docs/html/1015Addingconstrainsbetweenyouractivities.html new file mode 100644 index 0000000000..3724d4826b --- /dev/null +++ b/html/includes/jpgraph/docs/html/1015Addingconstrainsbetweenyouractivities.html @@ -0,0 +1,92 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.15 Adding constrains between your activities

+

With Gantt charts there is often the need to illustrate constrains + between one or several activities. One of the most common constrain is + that on activity can't start before an other activity finish.

+

JpGraph support visualizing the following types of constrains

+
    +
  • Start to End
  • +
  • Start to Start
  • +
  • End to Start
  • +
  • End to End
  • +
+

An example will clarify how to specify a constrain between two + activities.

+

Assume that we start with the Gantt schema as illustrated below

+
+
Figure 167: The original Gantt schema we wich to add + constrains to +[src]  +

+

+

We would now like to add the constrains that the activity "Label 3" + cant start before activity "Label 2" has finished and that the + milestone "Phase 1 done" is depending on when activity "Label 3" is + done.

+

The principle of adding constrains is that you for each activity you + want to have a constrain you have to tell to what other activity this + constrain should be to. That other activity is specified by telling on + what row that activity lies. Depending on what type of constrain, e.g. + Start-to-End, an arrow will now connect the two activities in correct + way.

+

The way to do this is to call the + SetConstrain() method on the activity. In this method you specify + the type of constrain as well as to what other activity this constrain + should be to. If you read the class reference you can also see that you + can specify the type and size of arrow used. For now we will just use + the default sizes and type.

+

So for example to add an End-To-Start constrain between "Label 2" + and "Label 3" you could write

+  $bar2-> +SetConstrain(2,CONSTRAIN_ENDSTART)
+

+

The first parameter in the call above "2" is the row of the target + activity (i.e. the row where "Label 3") activity is. In the example + below we have added the constrains we wanted.

+
+
Figure 168: Adding constrains to a gantt chart [src]  +

+

+

A note: The actual path followed by the arrow is controlled by some + heuristics to make it clear what the constrain is. It has been a design + decision that in order to keep the API simple the user has no further + detailed controlled on the actual path followed. However, in future + version the heuristics may be extended and provide some + user-controllable parameters.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10161Showingonlypartofthegraph.html b/html/includes/jpgraph/docs/html/10161Showingonlypartofthegraph.html new file mode 100644 index 0000000000..a0686c0364 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10161Showingonlypartofthegraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.16.1 Showing only part of the graph

+

You can choose to only display a vertical slice of the overall Gantt + chart by explicitly specifying a date range with the method + GanttGraph::SetDateRange(). This will cap any bars to only be displayed + in between the start and end date given as parameters. For example + specifying

+ $graph-> +SetDateRange( +"2001-12-20", +"2002-01-20"); +

+

will show the part of the Gantt chart between the 20 Dec 2001 and 20 + of January 2002. Please note that the format depends on the locale + setting.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10162Specifyingstartdayofweek.html b/html/includes/jpgraph/docs/html/10162Specifyingstartdayofweek.html new file mode 100644 index 0000000000..d36626468b --- /dev/null +++ b/html/includes/jpgraph/docs/html/10162Specifyingstartdayofweek.html @@ -0,0 +1,38 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.16.2 Specifying start day of week

+

You can set the week start day with a call to + GanttScale::SetWeekStart(). This method takes an integer [0,6] as input + which represents the start day of the week, 0 means Sunday, 1 Monday, 2 + Tuesday and so on. The default is to start the week on Monday.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1016Advancedformatting.html b/html/includes/jpgraph/docs/html/1016Advancedformatting.html new file mode 100644 index 0000000000..ea306e8e4e --- /dev/null +++ b/html/includes/jpgraph/docs/html/1016Advancedformatting.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.16 Advanced formatting

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1017Localizing.html b/html/includes/jpgraph/docs/html/1017Localizing.html new file mode 100644 index 0000000000..e51017a53f --- /dev/null +++ b/html/includes/jpgraph/docs/html/1017Localizing.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.17 Localizing

+

Depending on your installation of PHP you might have support for + several locales. By default the locale is set up to use the default + locale on the server.

+

To specifically set a locale you specify the wanted locale with a + locale string (ala standard PHP), for example American English is + specified with the string 'EN_US', British English with 'EN_UK' 'nl_NL' + for Dutch and so on. If your current installation does not support the + specified locale an error message will be given.

+  $graph +->scale->SetDateLocale( +"se_SE"); +

+

The result is displayed below.

+
+
Figure 169: Using swedish locale. (Can you spot the + difference from English?) +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10181Enablingantialiasedlines.html b/html/includes/jpgraph/docs/html/10181Enablingantialiasedlines.html new file mode 100644 index 0000000000..164e904ecc --- /dev/null +++ b/html/includes/jpgraph/docs/html/10181Enablingantialiasedlines.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.18.1 Enabling anti-aliased lines

+

Anti-aliased lines are enabled by calling the method + SetAntiAliasing() in the + Image class in the script where you want to use anti-aliasing.

+

The anti-aliasing for lines works by "smoothing" out the edges on + the line by using a progressive scale of colors interpolated between + the background color and the line color.

+

Note: The algorithm used for anti-aliasing + of lines is quite simple. It would be possible to achieve even better + result by doing some real 2D signal processing. However, doing real + time 2D signal processing on a HTTP server would be foolish so the + design is deliberately kept simple. To achieve best visual result + always use a dark line color on a light background.

+

An example will show that this, quite simple algorithm, gives a + reasonable good result. The figures below shows a radar plot with and + without anti-aliasing.

+

+
+
Figure 170: Spiderplot without anti-aliasing [src]  +

+

+

+

+
+
Figure 171: Spiderplot with anti-aliasing [src]  +

+

+

+

One thing you need to keep in mind when deciding to use + anti-aliasing is that it could have potentially a dramatic effect on + the time it takes to generate the image. Line drawing with + anti-aliasing turned on is roughly 8 times slower than the normal line + drawing so treat this feature wisely.

+

Furthermore there are a couple of "gotchas" you should be aware of + when using anti-aliasing.

+
    +
  1. Anti-aliased lines uses up more of the available color-palette. The + exact number of colors used is dependent on the line-angle, a near + horizontal or near vertical line uses more colors (number of lines with + different angles uses more colors). Hence it might not be possible to + use anti-aliasing with color-gradient fill since the number of + available colors in the palette might not be enough. A normal palette + can keep around 256 colors. This means that you are advised to use a + true-color image when using anti-aliasing.
  2. +
  3. Anti-aliasing does not work very well together with background + images since it assumes a the same solid color on each side of the + line. Doing a more advanced anti-aliasing algorithm would simple take + to much processing power.
  4. +
  5. Anti-aliased lines will ignore the line width specified. They will + always have a width of roughly 1.
  6. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1018AntialiasinginJpGraph.html b/html/includes/jpgraph/docs/html/1018AntialiasinginJpGraph.html new file mode 100644 index 0000000000..8acceb16ac --- /dev/null +++ b/html/includes/jpgraph/docs/html/1018AntialiasinginJpGraph.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.18 Anti-aliasing in JpGraph

+

From version 1.2 JpGraph supports drawing of anti-aliased lines. + There are a few caveats in order to use this which is discussed in this + section.

+

Note: Note that anti-aliasing will not be + used for either horizontal, vertical or 45 degree lines since they are + by their nature are sampled at adequate rate.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1019Rotatingthegraphs.html b/html/includes/jpgraph/docs/html/1019Rotatingthegraphs.html new file mode 100644 index 0000000000..51aca47cbd --- /dev/null +++ b/html/includes/jpgraph/docs/html/1019Rotatingthegraphs.html @@ -0,0 +1,140 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.19 Rotating the graphs

+

JpGraph provide the possibility for you to rotate the generated + graph an arbitrary angle. This will only affect the actual graph (axis, + axis titles, labels and so on) and not fixed elements on the graph like + title or footer.

+

Rotation is probably most used to rotate a graph 90 degrees, for + example a bar graph to get the effect of horizontal bars.

+

+
+

Performance note: Adding a rotation transformation + will make the graph generation slightly slower since each point of the + graph as to go through a transformation step before being stroked on to + the image. JpGraph optimizes this by using a pre-calculated + transformation matric and also optimizes the special case 90 degrees.

+
+
+

By default the center of the rotation will be the center of the plot + area, which may or may not coincide with the center of the entire + image.

+

To control the rotation you use the two methods

+ +

For example

+ $graph->image->SetAngle +(45);

+

+

There is actually a third method that you could use, adding a + translation to the graph after the rotation. Since + this probably a very little used method we don't discuss it further but + refer the reader to the class reference instead + Graph:image::SetTranslation()

+

When you rotate an image you should be aware of that the individual + labels on the axis are not rotated. The design decision behind this is +
a) Bit mapped font can't be rotated +
b) Maintain readability

+

Please remember that you may still rotate the labels by calling the Axis::SetLabelAngle() + method.

+

Since the anchor point for labels is by default the optimum for + graph at 0 degree you might want to adjust the anchor point and + alignment for the labels on the axis to get a better visual appearance + on you rotated graph. This is accomplished by the method + Axis::SetLabelAlign() For a detailed discussion on how to do this + please see the section on horizontal bar graphs, ( +Working with bar plots )

+

The table below shows some examples on different kinds of rotation + to give you an idea of how changing the angle and rotation center may + be used to generate different effects. The top left graph is the + original image. The point of rotation has been marked with a red-cross + in each of the images.

+

+
+
Figure 172: Original image [src]  +

+

+

+
+
Figure 173: Rotated 45 degrees around center of plot area [src]  +

+

+

+
+
Figure 174: Rotated 90 degrees around center of plot area [src]  +

+

+

+
+
Figure 175: Rotated 45 degrees around center of the image [src]  +

+

+

+
+
Figure 176: Rotated 90 degrees around center of the image [src]  +

+

+

+
+
Figure 177: Rotated -30 degrees around the lower left point + of the plot area +[src]  +

+

+

+

As you can see from the images above if you rotate about any other + point than the center of the plot area the plot can be placed outside + the image after rotation.

+

Since the rotation, by design, only affects the plot area it is + often most effective to use when the color of the margin is the same as + the background color.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/101Introduction.html b/html/includes/jpgraph/docs/html/101Introduction.html new file mode 100644 index 0000000000..cfebf1c177 --- /dev/null +++ b/html/includes/jpgraph/docs/html/101Introduction.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.1 Introduction

+

Canvas graph is really not a graph. It a blank sheet of paper which + you can use to draw arbitrary shapes and still have access to some of + the convenient features of JpGraph.

+

You can work with a canvas in different levels of complexity. You + can for example work directly with the Image class which provides a + large number of primitives for drawing but requires that you use + absolute pixel coordinates.

+

You can also make life a little bit easier by using a canvas scale. + This lets you define your own scale on the canvas which often makes it + easier by letting you work on a grid you have specified yourself. It + also makes it very easy to re-scale you image automatically by just + changing your scale. For example to half the size of you drawing you + just make the scale twice as large.

+

To give you some help in working with different canvas you should + include the "jpgraph_canvtools.php" file when working on canvases. This + is not strictly necessary but it will give you some nice abstraction to + help you create your masterpieces.

+

As another (concrete) example on the use of a canvas the figure + below is a listing of font styles available with JpGraph.

+
+
Figure 187: Another example of using a canvas to draw a + number of text boxes +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/101WhyuseGanttcharts.html b/html/includes/jpgraph/docs/html/101WhyuseGanttcharts.html new file mode 100644 index 0000000000..d3ae45fa0d --- /dev/null +++ b/html/includes/jpgraph/docs/html/101WhyuseGanttcharts.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.1 Why use Gantt charts?

+

The cynical view: To explain why your project is over-due and + over-budget.

+

The pragmatic view: To keep management of our back and know what we + have forgotten

+

The common view: As a tool to help identify project issues and + highlight problem areas.

+

Basically, Gantt charts are used to show the state of a number of + activities (possible grouped) against time.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1020Adjustingbrightnessandcontrastforimagesandbackgrounds.html b/html/includes/jpgraph/docs/html/1020Adjustingbrightnessandcontrastforimagesandbackgrounds.html new file mode 100644 index 0000000000..e2ce4cd049 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1020Adjustingbrightnessandcontrastforimagesandbackgrounds.html @@ -0,0 +1,67 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.20 Adjusting brightness and contrast for images + and backgrounds

+

The following section only applies to palette images. This + means it wont work on true-color images.

+

It is often desirable to have a background image look a little bit + "washed" out so it doesn't take the concentration away from the actual + graph. There are basically two ways of accomplish this

+
    +
  1. Prepare the image with an external images editor to adjust the + level of brightness and contrasty to a desirable level
  2. +
  3. Use JpGraph:s built in adjustment for contrast, brightness and + color saturation.
  4. +
+

To adjust the background image call The levels for both brightness + and contrast are real numbers in the range [-1, 1] You can choose to + adjust for example just the background image or you might also choose + to adjust the whole image. To change the background image just use the + method + Graph::AdjBackgroundImage() to specify a suitable value. Let's show + some example on what we can do with this. The following example have + been generated by using the small utility "adjimg.php" which you can + find in the "utils/" directory.

+

+
Brightness=0, contrast=0, saturation = -1 (Original image)

+

+
Brightness=0, contrast=0, saturation = -1 (Black & White image)

+

+
Brightness=0.3, contrast=-0.3, saturation=0

+

+
Brightness=0.4, contrast=-0.7, saturation=0

+

+
Brightness=0.4, contrast=-0.7, saturation=-1

+

+
Brightness=0, contrast=0, saturation=1

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1021Timingthegenerationofgraphs.html b/html/includes/jpgraph/docs/html/1021Timingthegenerationofgraphs.html new file mode 100644 index 0000000000..1d489f9bab --- /dev/null +++ b/html/includes/jpgraph/docs/html/1021Timingthegenerationofgraphs.html @@ -0,0 +1,65 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.21 Timing the generation of graphs

+

During development and optimization it can be very handy to have the + actual time it took to generate the image as a footnote. The following + example shows the usage of this feature

+
+
Figure 178: Timing of a graph [src]  +

+

+

To enable this feature you can proceed in two ways.

+
    +
  1. You can either set the global define BRAND_TIMING (in jpgraph.php) + to true. This will add the timing string to all graphs generated.
  2. +
  3. .. or you can enable it for a specific graph by setting the global + variable $gJpgBrandTiming as in
    +  $gJpgBrandTiming=true; +
    +

    in the beginning of the script.

    +
  4. +
+

If you like you might also change the way the timing is formatted by + setting the string defined by BRAND_TIMING_FORMAT (in jpgraph.php). + This string represents a standard printf() format string.

+Note: JpGraph contains a utility class called JpgTimer which you + can use yourself should you need ms timing of part of your own code. + The API is really simple. The class supports multiple running timers + and you start a timer simply by calling the Push() method. This will + start a new timer and put it on the top of the timer stack. To stop the + timer, pop it from the stack and return the timing value simply call + Pop().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1022Usingcountryflagsinvariouscontext.html b/html/includes/jpgraph/docs/html/1022Usingcountryflagsinvariouscontext.html new file mode 100644 index 0000000000..3a50453966 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1022Usingcountryflagsinvariouscontext.html @@ -0,0 +1,75 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.22 Using country flags in various context

+

JpGraph has built-in support for over 200 country flags, i.e. they + are available to be used in graphs without any external image + definitions.

+

Country flags can be used in primarily two settings

+
    +
  1. As image markers in line and scatter graphs
  2. +
  3. As background images for graphs
  4. +
  5. As a special type of icons (using the IconPlot()) which can be + added to the graph in any arbitrary position. See next section
  6. +
+

In order to make it easy to find the appropriate country flags they + can be specified with either full or partial name or as an numeric + index. The routines in JpGraph are "smart" enough to figure out which + way you are trying to specify a particular flag.

+

To specify a country flag as a marker you have to specify the + special mark type as one of MARK_FLAG1,MARK_FLAG2,MARK_FLAG3 or + MARK_FLAG4

+

Flags are internally stored in 4 different sizes which is indicated + by the number in the mark types. Flags may also be arbitrary scaled + when displayed. Since this is partially overlapping functionality you + might very well ask why the flags are stored in four different basic + sizes. The reason is of course performance. It you only want a very + small flag it takes processing time to scale down a large image to, + say, a small icon size. At the same time for large flags to be used as + background a small original flag might not have enough details to be + scaled up to a large size. Hence the reason for storing the flags in 4 + different sizes.

+

The example below shows how to use country flags as markers

+
+
Figure 179: Using country flags as line plot markers [src]  +

+

+

To use country flags as background one has to use the method + Graph::SetBackgroundCountryFlag(). With this method you can specify + both how much of the image should be filled as well as how much of the + flag should be mixed into the background.

+

To see a list of all supported country flags you can run the script + "listallcountryflags.php" in the Example directory. This will show you + a table with all flags.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1023Addingiconsontothegraph.html b/html/includes/jpgraph/docs/html/1023Addingiconsontothegraph.html new file mode 100644 index 0000000000..9b3c8c7af6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1023Addingiconsontothegraph.html @@ -0,0 +1,65 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.23 Adding icons onto the graph

+

In addition to the standard background image you can also add an + arbitrary number of icons onto the background of the graph. These icons + are created with a call to the special Plot class IconPlot.

+

The image from icons are taken from a file or as one of the builtin + country flags.

+

You may control how much of the icon should be blended into the + background by specifying a percentage (1-100). The example below shows + how to mix in the picture of "Tux" into the background of a filled line + graph. Note: This example uses alpha blending and will therefore + require GD2.

+
+
Figure 180: Adding an icon into the background [src]  +

+

+

To specify any of the roughly 200 country flags as an icon you first + create an empty Icon and then call the IconPlot::SetCountryFlag() with + the appropriate parameters. (See the class reference). This is + illustrated below by adding the Icelandic flag into the background as + an icon

+
+
Figure 181: Adding an icon flag into the background [src]  +

+

+

Note: Some older versions of PHP pre-4.3.3 + using the builtin GD have problems rendering blended images. If you + have this problem then you need to upgrade to a more recent version of + PHP.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/102CapabilitiesinJpGraphGanttmodule.html b/html/includes/jpgraph/docs/html/102CapabilitiesinJpGraphGanttmodule.html new file mode 100644 index 0000000000..cdc7fa60d0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/102CapabilitiesinJpGraphGanttmodule.html @@ -0,0 +1,74 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.2 Capabilities in JpGraph Gantt module

+

+
    +
  • Both automatic and manual scaling of date
  • +
  • Full support for independent CSIM for both labels and activity bars
  • +
  • Extremely flexible scales, possibility to use both months, weeks, + days, hours and minutes as scales. Furthermore (unlike MS Project) you + can have as may scales displayed at the same time as you like.
  • +
  • Support for visualization of grouped activities
  • +
  • Gantt charts can be automatically sized according to the number of + bars and scale used. This means you don't have to supply a specific + size when creating a graph.
  • +
  • Unlimited number of activities
  • +
  • Supports platform independent Week number calculation according to + ISO:8601
  • +
  • Rich possibility to display a variety of scales or combination of + scales supports both day, week, month, year. Each scale header is + totally configurable in terms of font, size, color, background etc
  • +
  • User configurable date format in the scale headlines
  • +
  • Visualization of constrains between activities, start-to-start, + start-to-end, end-to-start and end-to-end
  • +
  • Scales have "intelligent" grids
  • +
  • Supports title and subtitle with user specified font, size and + color
  • +
  • Activity bars can have multiple patterns and colors
  • +
  • Activity bar may have shadows
  • +
  • Activity bars can have internal progress bars displayed to show how + much of a given task has been accomplished
  • +
  • Activity titles can have individual fonts, colors and backgrounds
  • +
  • Activity bars can have captions
  • +
  • Activity bars can have specified left- and right end markers
  • +
  • Bar heights can be specified in absolute pixels or in percent of + the activity line width
  • +
  • Supports milestones with many different marks
  • +
  • Supports vertical marker lines with text
  • +
  • Can easily be localized
  • +
  • Full support for CSIM (or drill down graphs)
  • +
  • Alternate row colors
  • +
  • ... and more
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/102Creatingasimplecanvas.html b/html/includes/jpgraph/docs/html/102Creatingasimplecanvas.html new file mode 100644 index 0000000000..cbb9814a40 --- /dev/null +++ b/html/includes/jpgraph/docs/html/102Creatingasimplecanvas.html @@ -0,0 +1,169 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.2 Creating a simple canvas

+

In order to create a canvas graph you need to include the file + "jpgraph_canvas.php" in addition to the standard "jpgraph.php" file. + You might also want to include the "jpgraph_canvtools.php" to get + access to some supporting classes that may (or not) come in handy.

+

Creating a canvas gives you the opportunity draw arbitrary shapes on + a "white" piece of paper. Let's first show a simple example were we + just draw a text box. We first show you the code which we will walk + through

(File: canvasex01.php) +
<?php +
+// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,300,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Draw a text box in the middle +
$txt="This\nis\na TEXT!!!"; +
$t = new Text( +$txt,200,10 +); +
$t->SetFont( +FF_ARIAL, +FS_BOLD,40); +
+
+// How should the text box interpret the coordinates? +
$t->Align( +'center','top'); +
+
// How should the paragraph be aligned? +
$t->ParagraphAlign( +'center'); +
+
+// Add a box around the text, white fill, black border and gray shadow +
$t->SetBox( +"white", +"black","gray"); +
+
// Stroke the text +
$t->Stroke( +$g->img); +
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+

+

The example above starts by creating a (400x200) sized image. We set + the margins to get a nice frame around the image. For canvases the + margins has no effect in the way you enter coordinates. Top left is + (0,0) and bottom right (including any potential margin and shadow) is + the maximum. In this case the coordinates are X:0-399, and Y:0-199

+

We then call the + InitFrame() method which actually strokes the margin and plotarea + to the graph. Since everything is stroked in the order you issue the + commands you must make sure that the graphical objects you want on top + is stroked last. This is different from the way you normally work with + JpGraph since it queues up all you addition and then makes sure they + are stroked in the correct order.

+

We then create a Text object, + setup it's properties, including the absolute screen position where we + want the text, and then stroke it. Her it might be a need for a closer + explanation of the, perhaps misnamed, method +Text::Align() This method states how the text coordinates + should be interpreted , i.e when we specify (200,10) as the + coordinates for the text paragraph should that be interpreted as the + top left corner, bottom-left corner or something else (of the bounding + box)? In the code above we have chosen to interpret the X-coordinate as + being the center of the bounding box and the Y-coordinate as the top. + Hence the text will be aligned so that the (200,100) point in the graph + is aligned with the middle of the top line of the paragraphs bounding + box.

+

We also specify that the lines within the paragraph should be + centered with a call to + Text::ParagraphAlign() Since we also choose to have a box around + the text we have to make use of the method + Text::SetBox() which is used to specify the fill color, the border + color and the shadow color (if you leave out shadow color or set it to + '', no shadow will be used).

+

Now we are ready to stroke the text onto the canvas. In order to do + so we must specify the basic Image drawing class we want to use. + Without discussing this further we just state that a suitable image + class can always be found as the img property of the + Graph class.

+

Finally we are ready to stroke the entire graph, which in effect + sends the canvas back to the browser. Below you can see the effect of + all this code

+

+
+
Figure 188: A simple canvas drawing with a text box in the + middle [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/103Addinglinesandrectanglestoacanvas.html b/html/includes/jpgraph/docs/html/103Addinglinesandrectanglestoacanvas.html new file mode 100644 index 0000000000..c5669f772b --- /dev/null +++ b/html/includes/jpgraph/docs/html/103Addinglinesandrectanglestoacanvas.html @@ -0,0 +1,187 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.3 Adding lines and rectangles to a canvas

+

A canvas also makes a good background for using standard graphic + primitives, for example circles and lines. What you first have to + remember is that you are (so far) working with absolute screen + coordinates and secondly all drawing primitives are found in the + Image Class accessible as a property of the Graph class. So for + example to draw a line between coordinate (0,0) and (100,100) you would + have to add the line

+  $graph->img-> +Line(0,0 +,100,100); +

+

+

To your code. The following example shows some of the graphic + primitives you have access to in the Image class

+(File: canvasex02.php) +
<?php +
+// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,200,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Add a black line +
$g->img-> +SetColor( +'black'); +
$g->img-> +Line(0,0 +,100,100); +
+
// .. and a circle (x,y,diameter) +
$g->img-> +Circle(100,100 +,50); +
+
+// .. and a filled circle (x,y,diameter) +
$g->img-> +SetColor('red'); +
$g->img-> +FilledCircle( +200,100,50 +); +
+
// .. add a rectangle +
$g->img-> +SetColor( +'green'); +
$g->img-> +FilledRectangle( +10,10,50 +,50); +
+
// .. add a filled rounded rectangle +
$g->img-> +SetColor( +'green'); +
$g->img-> +FilledRoundedRectangle( +300,30,350 +,80,10); +
// .. with a darker border +
$g->img-> +SetColor( +'darkgreen'); +
$g->img-> +RoundedRectangle( +300,30,350 +,80,10); +
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+

+

Pleas note the way to access these routines through the img property + of the Graph class. Please also keep in mind that the coordinates are + absolute.

+

+
+
Figure 189: Example of graphic primitives [src]  +

+

+

+

+
+

A note on GD For those of you using GD 1.xx you + might notice that the large "filled circle" isn't completely filled. + This is because in GD 1.xx there are no low level primitives to fill an + ellipse or circle so JpGraph tries to make the best out of a bad + situation and manually fake a filled circle. For interest of speed + JpGraph does not contain a complete (for example) Bresenham-circle fill + but cheats by using some existing GD routines. This is not a perfect + solution and for large filled circles like this you get some + moire-patterns in the circle. If you upgrade to GD 2.x JpGraph will be + able to make full use of those new existing methods and the fill will + be perfect.

+
+
+

We refer you to the class reference to find out what other graphic + primitives are available for use.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/103AsimpleGanttchart.html b/html/includes/jpgraph/docs/html/103AsimpleGanttchart.html new file mode 100644 index 0000000000..19c113e720 --- /dev/null +++ b/html/includes/jpgraph/docs/html/103AsimpleGanttchart.html @@ -0,0 +1,243 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.3 A simple Gantt chart

+

Time to show you an example of a Gantt chart and how easy it is to + make one. Lets make it the simplest possible Gantt chart. One activity, + named "Project", which lasts from "2001-11-01" to "2002-02-20".

+

All it takes to do this (using default values for everything) is the + following code.

(File: ganttex00.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_gantt.php"); +
+
// A new graph with automatic size +
$graph  += new GanttGraph +(0,0, +"auto"); +
+
//  A new activity on row '0' +
$activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
$graph->Add( +$activity); +
+
// Display the Gantt chart +
$graph->Stroke(); +
?> +

+

The resulting image is shown in Figure + + below.

+
+
Figure 143: Your first simple Gantt chart. [src]  +

+
+

+

+

Let's note a few things with the above image and code:

+
    +
  • You always need to include both jpgraph.php and jpgraph_gantt.php
  • +
  • A bar is specified a minimum of four parameters, vertical position + (more about that in a second), a title, start and end date.
  • +
  • If you don't specify a size for the image it will be automatically + decided based on the min and max dates for the bars rounded to a full + week.
  • +
  • By default the week and day scale are displayed.
  • +
  • Weekend background are displayed default in a slightly gray color
  • +
  • Sundays are written in red.
  • +
  • Weeks are numbered according to ISO 8601
  • +
  • Activity bars are rendered as blue stripes on a white background by + default.
  • +
+

So, lets start making this graph a little bit more interesting. + First we are going to add a title, then we will add a month scale and + finally we will change the color of the bar.

+

All that is taken care of in the code below.

+(File: ganttex01.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_gantt.php"); +
+
$graph  += new GanttGraph +(0,0, +"auto"); +
$graph->SetShadow(); +
+
// Add title and subtitle +
$graph->title-> +Set( +"A nice main title"); +
$graph->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
$graph->subtitle-> +Set( +"(Draft version)"); +
+
// Show day, week and month scale +
$graph->ShowHeaders( +GANTT_HDAY  +GANTT_HWEEK  +GANTT_HMONTH); +
+
+// Instead of week number show the date for the first day in the week +
// on the week scale +
$graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
+
+// Make the week scale font smaller than the default +
$graph->scale-> +week->SetFont(FF_FONT0 +); +
+
+// Use the short name of the month together with a 2 digit year +
// on the month scale +
$graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR2); +
+
+// Format the bar for the first activity +
// ($row,$title,$startdate,$enddate) +
$activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
+
+// Yellow diagonal line pattern on a red background +
$activity +->SetPattern(BAND_RDIAG, +"yellow"); +
$activity +->SetFillColor +("red"); +
+
// Finally add the bar to the graph +
$graph->Add( +$activity); +
+
// ... and display it +
$graph->Stroke(); +
?> +
The resulting image is shown in Figure + 144 below.
+
+
Figure 144: Making the Gantt chart a little bit more + interesting with title and more colors. [src]  +

+

+

From the above example you might note a few things

+
    +
  • The margins adjust automatically to the added title and subtitle
  • +
  • The height of the scale headers adjust automatically when you + change the font.
  • +
  • You have great flexibility in choosing what format the scale labels + will have. If you for example wanted the full 4 digit year in the month + header all you have to change is use the constant + MONTHSTYLE_SHORTNAMEYEAR2 in the code above to + MONTHSTYLE_SHORTNAMEYEAR4
  • +
  • You have full freedom of manipulating headers in terms of font, + color, background and size.
  • +
+

To show that this is really simple let's show the full year in the + month, and set the header style to be white text on a dark blue + background by adding the lines

+   +// Use the short name of the month together with a 4 digit year +
// on the month scale +
$graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR4); +
$graph->scale-> +month-> +SetTextColor( +"white"); +
$graph->scale-> +month-> +SetBackgroundColor( +"blue"); +

+

to the code above. The resulting image is shown in Figure 145

+
+
Figure 145: Enhancing the scale headers. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/104ThestructureofaGanttchart.html b/html/includes/jpgraph/docs/html/104ThestructureofaGanttchart.html new file mode 100644 index 0000000000..c583e79580 --- /dev/null +++ b/html/includes/jpgraph/docs/html/104ThestructureofaGanttchart.html @@ -0,0 +1,62 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.4 The structure of a Gantt chart

+

A Gantt chart is made up of four distinct areas.

+
    +
  1. On the left side there is the activity title column.
  2. +
  3. On the top there is the scale headers (up to four headers may be + displayed)
  4. +
  5. The actual plot area where all the Gantt bars and markers go
  6. +
  7. The margin area, where for example the titles are shown
  8. +
+

Since a Gantt chart inherits all the usual properties of a JpGraph + Graph() you have the access to the same method to formatting the image + as before. For example to have a shadow around the image you call + Graph::SetShadow() and to set the margin color you can use + Graph::SetMarginColor(). Please refer to the reference documentation + for a full list of supported features.

+

To create a Gantt chart you add objects to it. As + of this writing you may add the following object by the use of the + GanttChart::Add() method

+
    +
  • Gantt bars (indicates the length of an activity)
  • +
  • Milestones, a single mark at a specific date
  • +
  • Vertical line, might be use to mark phases in projects
  • +
+

All these objects may be extensively modified in terms of + formatting. You can specify color (both fill- and frame color), size, + titles, style and patterns and so on. All these objects comes with (in + my mind) sensible default so you don't have to specify a lot of + parameters. But if you need a fine grain control or if you disagree + with my taste you can.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/104Usingacanvasscale.html b/html/includes/jpgraph/docs/html/104Usingacanvasscale.html new file mode 100644 index 0000000000..d9a51a2a64 --- /dev/null +++ b/html/includes/jpgraph/docs/html/104Usingacanvasscale.html @@ -0,0 +1,291 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.4 Using a canvas scale

+

The previous method using absolute coordinates works. But nothing + more. It doesn't give you any chance to easily scale the image (unless + you manually recalculate all used coordinates) , it gets tedious to + work with pixel level resolution. Especially if you just like to draw a + few basic shapes.

+

To help with this you can use a scale for the canvas. This lets you + define a "work-space" of your choice. You can for example set the + coordinates to be between X:0-10, Y:0-10. This makes it easier to + position objects on the canvas. This also has two additional + advantages:

+
    +
  • If you increase the size of the canvas all objects will be + automatically scale to keep their proportions without any changes.
  • +
  • You can shrink/enlarge your drawing (not the image) by just using + another scale. For example if you originally draw the image using a + (0:10, 0:10) scale and then change the scale to (0:20, 0:20) then the + effect will be that you drawings will "shrink" to half their size.
  • +
+

+

To use this type of scaling you must make sure you include the file + "jpgraph_canvtools.php" . In addition to the scaling class their are + also a couple of other utility classes that may come in handy, + especially the Shape class.

+

Using the scale is quite simple. You first instantiate a scale + object passing the graph as a parameter and then specify the scale you + want to use. This means you need to add the lines

+  $scale  += new CanvasScale +($g); +
$scale->Set( +0,$xmax,0 +,$ymax);

+

+

to your code. You can then use one of the translation methods (for + example +CanvasScale::Translate()) in the canvas scale class to translate + between your world coordinates and the absolute screen coordinates. + This means you could take the code in the example above and just add + the lines, for example,

+  list( +$x1,$y1) = $this +->scale->Translate( +$x1,$y1); +
list(
$x2,$y2) =  +$this->scale->Translate +($x2,$y2); +
$g->img-> +Line($x1,$y1 +,$x2,$y2); +

+

Since this pattern has to be repeated for every object that has to + be drawn it makes good sense to encapsulate this in a separate class. + This is exactly why the canvas tools file also have a utility class + called Shape This class is + mainly a wrapper around the most commonly used methods in the basic + Image class (with one important exception) and does all these the + translation for you. Please see the class reference for a complete list + of the available methods To set up the Shape class you instantiate it + with the graphic context and the scale you want to use as argument as + in

+

+ $shape = new  +Shape($g,$scale +);

+

+

You are then ready to use all the methods in the shape class. Using + a scale and imitating the previous example we would get the source + shown below.

(File: canvasex03.php) +
<?php +
+// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
include 
"../jpgraph_canvtools.php"; +
+
// Define work space +
$xmax=20; +
$ymax=20; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,200,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Create a new scale +
$scale  += new CanvasScale +($g); +
$scale->Set( +0,$xmax,0 +,$ymax); +
+
+// The shape class is wrapper around the Imgae class which translates +
// the coordinates for us +
$shape  += new Shape($g, +$scale); +
$shape->SetColor( +'black'); +
+
+
// Add a black line +
$shape->SetColor( +'black'); +
$shape->Line( +0,0,20 +,20); +
+
// .. and a circle (x,y,diameter) +
$shape->Circle( +5,14,2 +); +
+
+// .. and a filled circle (x,y,diameter) +
$shape->SetColor( +'red'); +
$shape->FilledCircle( +11,8,3 +); +
+
// .. add a rectangle +
$shape->SetColor( +'green'); +
$shape->FilledRectangle(15, +8,19,14 +); +
+
// .. add a filled rounded rectangle +
$shape->SetColor( +'green'); +
$shape->FilledRoundedRectangle(2, +3,8,6 +); +
// .. with a darker border +
$shape->SetColor( +'darkgreen'); +
$shape->RoundedRectangle(2, +3,8,6 +); +
+
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+
The source above gives the following result
+
+
Figure 190: Drawing shapes on a canvas using a scale. [src]  +

+

+

If we like to make a smaller image we could just change the image + size and everything will be rescaled without any further code changes. + SO for example making the image half the size would give the result

+
+
Figure 191: Shrinking the image to half the size is easy + since the scaling will maintain the relative position of the objects [src]  +

+

+

If we instead wanted to keep the image size but shrink the shapes we + could just make the scale twice as large which would result in

+
+
Figure 192: Shrinking hte graphic object by making the scale + twice as large +[src]  +

+

+

+

We previously mentioned that the Shape class was a wrapper around + the image class with one exception. So what is the exception? Well, + glad you asked. The exception is that it contain an additional method + which draws an "indented rectangle". An indented rectangle is a + rectangle where one of it's four corners have been moved into the + rectangle. You create an indented rectangle by calling either + Shape::IndentedRectangle() or A few examples illustrates what this + shape looks like.

+
+
Figure 193: Examples of filled indented rectangles [src]  +

+

+

+

As a final note we mention the class + CanvasRectangleText Which can be used to add a text with a rounded + rectangle (possibly filled) onto the canvas. The previous example where + all the available fonts were drawn were using this class. We don't + describe it further but refer the interested reader to the class + reference and the 'listfontsex1.php' example file.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/105CreatingaGanttChart.html b/html/includes/jpgraph/docs/html/105CreatingaGanttChart.html new file mode 100644 index 0000000000..16c5401998 --- /dev/null +++ b/html/includes/jpgraph/docs/html/105CreatingaGanttChart.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.5 Creating a GanttChart

+

You create a new Gantt Chart with a call to GanttChart(). The + signature for GanttGraph is the same as for ordinary JpGraph graphs, + i.e

function  +GanttGraph( +$aWidth, +$aHeight, +$aCachedName, +$aTimeOut, +$aInline) +

+

The only real difference is that for GanttCharts you can specify one + or both of the dimension parameters (width and height) as -1 in which + case that dimension will be automatically sized determined by scale and + fonts chosen. The following examples shows some possible ways of + creating a new graph

+
    +
  • $graph=new GanttGraph() +
    The size of the graph will be determined automatically, no caching + will be used and the graph will be generated in-line.
  • +
  • $graph=new GanttGraph(-1,-1,"auto") +
    The size of the graph will be determined automatically, caching + will be used (the name will be based on the script name), no timeout + will be used and the graph will be generated in-line
  • +
  • $graph=new GanttGraph(450,-1,"auto",5) +
    Same as the previous entry but the width is fixed to 450 points and + the cached image will have a timeout of 5 min.
  • +
  • $graph=new GanttGraph(-1,-1,"auto",5,false) +
    The image will not be generated in-line, only the cache will be + updated if it has timed out, otherwise nothing will happen.
  • +
+

Since GanttGraph() inherits all the methods (that make sense for + GanttGraph) from Graph you can specify shadow, color etc of the general + frame.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/105SampleapplicationDrawingDBschema.html b/html/includes/jpgraph/docs/html/105SampleapplicationDrawingDBschema.html new file mode 100644 index 0000000000..cbfc635ae7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/105SampleapplicationDrawingDBschema.html @@ -0,0 +1,433 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.5 Sample application: Drawing DB schema

+

As a final example we shortly discuss how the canvas type of graph + was used to generate the DB schema for the DDDA architecture.

+

The library php file "utils/misc/imgdbschema.php" included in the + distribution contains some utility classes to make the drawing of table + schemes easier. It contains two basic classes, Class ImgDBTable and + Class ImgDBSchema. The first class understand how to draw an image + illustrating a single table. The second class is responsible for + automatically extract all the relevant information from a DB to draw a + complete DB Schema.

+

Before going into this a little bit more we show what an example of + this might look like.

+
+
Figure 194: Example of using the canvas graph style together + with the imgdbschema.php library to semi-automatically generate a DB + schema [src] +  +

+

+

+

Before going on it should be noted that the ImgDBSchema assumes that + the DB can be accessed through a DB abstraction layer modeled after the + abstraction layer available in the 'jpdb.php' file in the DDDA + architecture. This abstraction layer assumes a MySQL database in the + bottom. This specific dependency of this particular abstraction layer + is the reason why these classes is not included in the generic canvas + tools file.

+

The second thing to note is that this library does not contain a + complete automatic-layout engine but rather a very simple automatic + system which, if nothing else is specified, just puts the table in a + rectangular grid. A complete graph layout engine would simple be to + much to write in this context. This is also a very difficult + optimization problem and sofar not even any of the available research + programs that tries this can achieve a satisfactory layout without + manual intervention.

+

The critical lines in the code to generate the above graph is

+  $tblposadj=array($tlo +,0,$tblwidth+ +$tlo+2,0 +,2*$tblwidth+ +$tlo+4,0 +,-1,16,- +1,16); +
$dbschema  += new ImgDBSchema +("jpgraph_doc" +,"FormatTblName" +,"FormatFldName" +); +
$dbschema +->SetMargin($leftm, +$topm); +
$dbschema +->SetTableWidth +($tblwidth); +
$dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj);

+

+

The rest of the code in the file is just to setup the canvas, add an + indented rectangle to group some tables and generate a footer with the + date and time this image was generated.

+

The first line instantiates a new ImgDBSCheme layout engine asking + it to draw an image for the database 'jpgraph_doc'. The following two + arguments specify two callback functions for formatting the text for + header and each field in a table.

+

The next line specify the top left margin where the drawing of the + tables should be started.

+

The third line specify the width of a single table. The final lines + starts the engine and draws all tables in the database to the canvas. + The final argument requires some further explanation. This is an offset + (x,y) from the top left corner how each individual table should be + positioned. If the value is -1 indicates that the default value should + be used. If this array is not specified then the tables will simple + arranged line by line.

+

The full source code for drawing this DB schema example is shown + below.

+

(File: dbschemaex1.php) +
<?php +
+/*======================================================================= +
// File:     DBSCHEMAEX1.PHP +
// Description:    Draw a DB schema of the DDDA architecture +
// Created:     2002-08-25 +
// Author:    Johan Persson (johanp@aditus.nu) +
+// Ver:        $Id: dbschemaex1.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
// +
// License:     This code is released under QPL +
//              Copyright (C) 2001,2002 Johan Persson +
+// Note:        The actual drawing of the tables are semi-automatically +
+//              but you can easily adjust the individual tables position +
//              with the 'tblposadj' array.  +
// +
+//======================================================================== +
*/ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
include 
"../jpgraph_canvtools.php"; +
include 
"../utils/misc/imgdbschema.inc"; +
include 
"../utils/jpdocgen/jpdb.php"; +
+
+
+// Global callback to format the table header names +
function  +FormatTblName( +$aName) { +
    
+// We want to replace any specifi references to the +
    // 'JpGraph' project with the generic '<project>' +
    
return  +str_replace( +'JpGraph', +'<project>' +$aName); +
} +
+
+// Global callback to format each field name in the table +
function  +FormatFldName( +$aName,$aTable) { +
    return 
$aName +; +
} +
+
+
class 
Driver  +{ +
+
    var 
$ig +, $img$iscale +$ishape; +
    var 
$iymax +,$ixmax; +
    var 
$iwidth +,$iheight; +
+
    function 
Driver +() { +
+
    
+// Define Image size and coordinate grid space to work within +
    
$this +->iwidth 600; +
    
$this +->iheight750; +
    
$this +->iymax  50; +
    
$this +->ixmax  55; +
+
    
// Setup a basic canvas +
    
$this +->ig = new CanvasGraph( +$this->iwidth,$this +->iheight,'auto'); +
    
$this +->img $this-> +ig->img; +
+
    
// Define the scale to be used +
    
$this +->iscale  += new CanvasScale +($this->ig); +
    
$this +->iscale->Set( +0,$this->ixmax +,0,$this-> +iymax); +
    
$this +->ishape  += new Shape($this-> +ig,$this->iscale +); +
+
    
// A small frame around the canvas +
    
$this +->ig->SetMargin( +2,3,2 +,3); +
    
$this +->ig->SetMarginColor( +"teal"); +
    
$this +->ig->InitFrame(); +
+
    } +
+
    function 
Run +() { +
+
    
$leftm +=1.5;    // Left margin (for table schemes)  +
    
$topm=5;     +// Top margin (for table schemes)  +
    
$tblwidth +=15;    // Individual table width +
    
$tlo=1;         +// Offset for top line +
+
    // Add the background color for the project specific tables +
    
$this +->ishape->IndentedRectangle($leftm, +$topm-1,3 +*$tblwidth+$tlo+ +6,45, +
                     
$tlo ++2*$tblwidth+ +2,30,CORNER_BOTTOMLEFT, +
                     
'lightblue'); +
+
    
+// Stroke the tables (series of x,y offsets, If =-1 then use the +
    // automtic positioning +
    
$tblposadj +=array($tlo,0, +$tblwidth+$tlo+2 +,0,2* +$tblwidth+$tlo+4 +, +
             
0 +,-1,16,- +1,16); +
    
$dbschema  += new ImgDBSchema +('jpgraph_doc' +,'FormatTblName' +,'FormatFldName' +); +
    
$dbschema +->SetMargin($leftm, +$topm); +
    
$dbschema +->SetTableWidth +($tblwidth); +
    
$dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj); +
+
    
$tt  += new CanvasRectangleText +(); +
    
$tt->SetFillColor( +''); +
    
$tt->SetColor( +''); +
    
$tt->SetFontColor( +'navy'); +
+
    
// Add explanation +
    
$tt->SetFont( +FF_ARIAL, +FS_NORMAL,12); +
    
$tt->Set( +'Project specific tables', +$tblwidth+ +$leftm+3,16 +,15); +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
// Add title +
    
$tt->SetColor( +''); +
    
$tt->SetFont( +FF_VERDANA, +FS_BOLD,26); +
    
$tt->Set( +'DDDA - DB Schema', +9,0.5,30 +); +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
// Add a version and date +
    
$tt->SetFillColor( +'yellow'); +
    
$tt->SetFont( +FF_FONT1, +FS_NORMAL,10); +
    
$tt->Set( +"Generated: ". +date("ymd H:i",time +()),1,$this-> +iymax*0.96,15 +);  +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
$this +->ig->Stroke(); +
    } +
} +
+
$driver  += new Driver +(); +
$driver->Run(); +
+
?> +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/106PositioningobjectsintheGanttplot.html b/html/includes/jpgraph/docs/html/106PositioningobjectsintheGanttplot.html new file mode 100644 index 0000000000..3377330602 --- /dev/null +++ b/html/includes/jpgraph/docs/html/106PositioningobjectsintheGanttplot.html @@ -0,0 +1,71 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.6 Positioning objects in the Gantt plot

+

Bars and Milestones need both a vertical position and a horizontal + position. The horizontal start position is specified as a date, e.g. + "2001-06-23", and the vertical positions are specified as a number + [0,1,2,3,...]. This vertical number indicates the position from the top + where the object should be placed. To understand this you might imagine + a number of "invisible" horizontal bands with a certain height. If you + specify 0 as the vertical position the bar will be placed in the first + band, specify 3 and the bar will be placed in the fourth band and so + on.

+

It is perfectly legal, and perhaps even desirable to leave "gaps" + when laying out bands to group related activities. So, for example you + could have three activities/bars at positions 1,2,3 and then another 2 + bars at position 6,7 leaving band 0,4,5 empty.

+

All these "invisible bands" have the same height (equ-spaced). The + height of each band is automatically determined and depends on both the + method of layout ( as specified by (GanttChart::SetLayout()) and the + individual heights of the individual bars and titles. The rules are + quite simple:

+
    +
  • If you use layout=GANTT_FROMTOP (the default and most common) the + height will equal the height (+ a margin) of the highest gantt bar. The + height calculation of each bar takes into account both the actual bar, + the title, and any left- right-marks (more about that later) that may + be present. The name "fromtop" refers to that when you have explicitly + specified a height the bars will usually be added from band 0 and + onwards and hence being added from the top. (This might leave empty + space at the bottom of the plot area in the graph if the height of the + graph has been explicitly specified).
  • +
  • If you use layout=GANTT_EVEN the bars are evenly (hence the name) + spread out over the available height in the gantt chart and no + consideration is taken of the individual bars heights. Note that if you + use automatic sizing you cant use even layout. It just doesn't make + sense. Even layout is for those cases when you deliberately specify a + very large image and want the bars evenly distributed using the full + height.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1071Specifyingverticalposition.html b/html/includes/jpgraph/docs/html/1071Specifyingverticalposition.html new file mode 100644 index 0000000000..92259ddcef --- /dev/null +++ b/html/includes/jpgraph/docs/html/1071Specifyingverticalposition.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.1 Specifying vertical position

+

As described above vertical positions are specified as a numeric + value [0..n] where 'n' is an arbitrary constant. (For practical + purposes n is most likely < 100)

+

Using our previous example we will illustrate this parameter by + changing the position of our 'Project' activity to position 7. Therefor + we change the call to GanttBar() to

+  $activity = new GanttBar( +7,"Project","2001-12-21" +,"2002-02-20" +);

+

and we then get the chart as shown below in Figure 146.

+

+
+
Figure 146: Changing the vertical position to 7 [src]  +

+

+

Note that the height of each position (vertical position) will + depend on the actual height of the bar.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1072Specifyingstartandendpositionforabar.html b/html/includes/jpgraph/docs/html/1072Specifyingstartandendpositionforabar.html new file mode 100644 index 0000000000..138842288a --- /dev/null +++ b/html/includes/jpgraph/docs/html/1072Specifyingstartandendpositionforabar.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.2 Specifying start and end position for a bar +

+

Start of bars are given as a date string. The format depends on the + current locale. Examples of valid date strings are

+
    +
  • "2001-10-22"
  • +
  • "22 October 2001"
  • +
  • "22 Oct 2001"
  • +
+

Even if several format are supported it is recommended to use all + numeric dates, i.e in the form "2001-10-22".

+

Specifying the end position may be done in two different ways, + either by the end date in the same way as for the start date. The other + way is to specify the length of the activity in number of days + (and fractions thereof). Examples of valid end dates are:

+
    +
  • "2001-11-15"
  • +
  • "15 Nov 2001"
  • +
  • 22, (specifies duration of 22 days)
  • +
  • 22.7, (specifies duration of 22.7 days)
  • +
+

Please note that duration is specified as numerical values and + not strings.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1073Milestones.html b/html/includes/jpgraph/docs/html/1073Milestones.html new file mode 100644 index 0000000000..9a946b4187 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1073Milestones.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.3 Milestones

+

Milestones are similar to bars but have no end date since milestones + just apply to one single date. Milestones are created much the same way + as activities but using method MileStone() instead.

+

The full signature for milestones are

  +function MileStone +($aVPos,$aTitle, +$aDate, +$aCaption) +

+

+

+ + + + + +
+ +  $aVPos  + The vertical position for the + bar, [0..n]
+ +  $aTitle  + Title for the activity
+ +  $aDate  + Date for the milestone
+ +  $aCaption  + Text to the right of the + milestone
+

Valid milestones are for example

+
    +
  • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +);
    +

    +
  • +
  • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +,"(2001-12-01)" +);
    +

    +
  • +
+

By default milestones are rendered as a filled "Diamond" shape. This + may be optionally modified. The actual shape is specified by the 'mark' + property of milestone which is an instance of the PlotMark() class + (same class responsible for the marks in line graphs).

+

To change the shape of a milestone to, say a triangle, you use the + SetType() method as in

+  $milestone->mark-> +SetType( +MARK_DTRIANGLE) +

+

Let's put this into practice and add a milestone to our previous + example by adding the following two lines of code which result in + Figure 147 shown below.

+
+
Figure 147: Illustration of how to add a milestone to a gantt + chart [src]  +

+

+

+

You may note that by default the title color is red for milestones. + If you like to change this to be instead, say bold black, you would + invoke the SetColor() and SetFont() methods on the title property of + milestones as in

 $milestone-> +title->SetFont(FF_FONT1 +,FF_BOLD); +
$milestone +->title->SetColor( +"black"); +

+

and thew result would now (not surprisingly be)

+
+
Figure 148: Modifying the milestone title color and font [src]  +

+

+

To modify the caption you do exactly the same but act on property + 'caption' instead of 'title', i.e.

+  $milestone->caption-> +SetFont( +FF_FONT1, +FF_BOLD); +
$milestone +->caption->SetColor( +"black"); +

+

+

It is worth noting that you modify the bar title and caption the + exact same way by acting on the 'title' and 'caption' property for the + bars.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1074Verticalline.html b/html/includes/jpgraph/docs/html/1074Verticalline.html new file mode 100644 index 0000000000..f95df98e0d --- /dev/null +++ b/html/includes/jpgraph/docs/html/1074Verticalline.html @@ -0,0 +1,160 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.4 Vertical line

+

The final object you may add to a Gantt chart is simple, but quite + useful, a straight vertical line extending over the whole plot height. + This could for example be used to illustrate different phases in a + project. You create a line object by a call to GanttVLine()

+

The full signature for GanttVLine() is

  +function GanttVLine +($aDate,$aTitle, +$aColor, +$aWeight, +$aStyle) +

+

+

+ + + + + + +
+ +  $aDate  + Date for the milestone
+ +  $aTitle  + Title for the line. The title is + displayed at the bottom of the line
+ +  $aColor  + Color for the line
+ +  $aWeight  + Line width
+ +  $aStyle  + Line style,"dashed", "dotted" and + so on
+

Valid creations of lines are for example

+
    +
  • + $vline = new  +GanttVLine( +"2001-12-24"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5);
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5,"dotted" +);
    +

    +
  • +
+

To add the line to the graph you just have to call GanttGraph::Add() + as with milestones and bars. Let's illustrate the use of vertical lines + by adding a line to the previous example.

 $vline  += new GanttVLine +("2001-12-24","Phase 1"); +
$graph->Add( +$vline); +

+

and the example (See 149) now becomes

+
+
Figure 149: Adding a vertical line with a title to the Gantt + chart [src]  +

+

+

From the above figure you can see that by default the line is drawn + at the beginning of the day of the specified date and in a 'dashed' + style. This can (of course!) be modified so that the line is + drawn/aligned anywhere in the specified day. You modify this by + invoking the method SetDayOffset() with an argument specifying the + fraction of the day where you want the line positioned.

+

If you, for example, want to display the line in the middle of the + day just add the line

+  $vline->SetDayOffset( +0.5); +

+

to the previous code and the result will be

+
+
Figure 150: Modifying the position of the line within the day + [src]  +

+

+

+

As usual you may modify the font, size and color by invoking the + appropriate method (SetFont(), SetColor()) on the 'title' property of + lines.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1075Addingmarkerstoaganttbar.html b/html/includes/jpgraph/docs/html/1075Addingmarkerstoaganttbar.html new file mode 100644 index 0000000000..38aefed225 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1075Addingmarkerstoaganttbar.html @@ -0,0 +1,125 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.5 Adding markers to a gantt bar

+

You can easily add a variety of markers both to the start and end of + the gantt bar. They could for example be used as an alternate way to + illustrate important milestones or anticipated deliveries.

+

The left and right markers are accessed through the two properties + 'leftMark' and 'rightMark'. They are both instances of the general + 'PlotMark' class which is also used for the milestones (and in line + graphs). The 'PlotMark' class supports several different styles, for + example, diamond (the default for milestones), filled and unfilled + circles, squares, stares, and so on. Please refer to the reference + section for a complete listing.

+

Let's illustrate this by adding a right marker to the previous + example. We will use a style of a filled (red) circle with a white + title, say, "M5". In order to accomplish this we must augment the + previous example with the following lines:

 $activity +->rightMark->Show();     +
$activity +->rightMark->title-> +Set("M5"); +
$activity +->rightMark->SetType( +MARK_FILLEDCIRCLE); +
$activity +->rightMark->SetWidth( +10); +
$activity +->rightMark->SetColor( +"red"); +
$activity +->rightMark->SetFillColor( +"red"); +
$activity +->rightMark->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
$activity +->rightMark->title-> +SetColor( +"white"); +

+

This might seem like a lot of lines but this is as complicated as it + possible can get. As an illustration in the example belwo more or less + everything that is changeable has been changed, the default font, + font-color, fill-color, frame-color and width of marker. The two lines + only really necessary are the first two, showing the mark and setting a + title. One could still get a good result by using default values for + the rest of the properties.

+

The resulting image can be seen in Figure 151 below.

+
+
Figure 151: Adding a right marker to a bar. [src]  +

+

+

We have deliberately introduced a "strangeness" here. If the + previous two examples are compared it can bee seen that the last + example is larger than the previous one. Why?

+

The explanation is trivial once we recall that the height of bars + are sized relative to the horizontal spacing. The horizontal spacing + are based on the highest single bar including title size and, here come + the explanation, marker size. The horizontal spacing has grown since + the minimum height is now based on 10 points(=the height of the mark). + The bar still occupy the same percentage of the height so it seems to + have grown.

+

If this behavior is unwanted it is always possible to specify an + absolute size for the bar heigh, say 8 pixels, with a call

+  $activity->SetHeight +(8);

+

and achieve the result in Figure 152 below.

+
+
Figure 152: Specifying an absolute size for the height of the + bar. [src]  +

+

+

It is worth noting that the height reserved for each bar is still + the same since we haven't changed the height of the marker and the + reserved space is the maximum height used by any bar.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1076Adjustingtheminimumdistancebetweenbars.html b/html/includes/jpgraph/docs/html/1076Adjustingtheminimumdistancebetweenbars.html new file mode 100644 index 0000000000..d1c5ef0a5b --- /dev/null +++ b/html/includes/jpgraph/docs/html/1076Adjustingtheminimumdistancebetweenbars.html @@ -0,0 +1,97 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7.6 Adjusting the minimum distance between bars +

+

Let's see what happens if we set the height of each bar to be 100% + of the reserved height by adding another activity/bar below the first + one and set the height of each bar to 100% by adding the lines (We omit + the added lines to add another bar since they are just a copy of the + first bar)

+ $activity-> +SetHeight(1.0); +
$activity2 +->SetHeight(1.0); +

+

to the previous example. (Note that a value in the range [0..1] is + interpretated as the fraction of the reserved height while a value > 1 + is interpretated as the absolute size in pixels.)

+
+
Figure 153: Setting the height for each bar to 100% [src]  +

+

+

Aha.. What we are trying to do doesn't really make sense. Since we + have specified that the bar will always occupy 100% of the available + reserved with there will be no distance between the bars. So what if we + specify the bar as 10 pixel absolute by changing the lines to

+  $activity->SetHeight +(10); +
$activity2 +->SetHeight(10); +

+

we instead get

+
+
Figure 154: Setting both bars height to 10 pixels [src]  +

+

+

So what can we actually do? Well if you remember the reserved height + for each bar is the maximum height of all bars including titles. This + guarantees that no two bars will ever overlap. To guarantee that titles + don't end up too close together there is a Vertical Label Margin + which basically specifies some extra "air" in between the titles. The + amount of air is specified in percent of the title height. To set the + margin you use

+ GanttGraph:: +SetLabelVMarginFactor( +$aMargin) +

+

As an example let's set that margin in the previous example to 0 and + see what happens.

+
+
Figure 155: Setting the vertical label margin to 0% [src]  +

+

+

As you would perhaps expect the two bars just barely touches now + since there are no extra margin added. If the two bars hadn't had the + extra right marker it would have looked very compressed.

+

By default the vertical margin is set to 40%.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/107Ganttbars.html b/html/includes/jpgraph/docs/html/107Ganttbars.html new file mode 100644 index 0000000000..5a1d0ac7e5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/107Ganttbars.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.7 Gantt bars

+

The most common of all object in a Gantt chart is of course the + activity bar (GanttBar()). In terms of formatting this object has a + very large flexibility. The full signature for the GanttBar constructor + is

function  +GanttBar( +$aVPos,$aTitle,$aStart +,$aEnd,$aCaption, +$aHeight) +

+

+

+ + + + + + + +
+ +  $aVPos  + The vertical position for the + bar, [0..n]
+ +  $aTitle  + Title for the activity
+ +  $aStart  + Start date for the activity given + as string, e.g "2001-09-22"
+ +  $aEnd  + End date for activity given as either + a date (a string) or as the duration (in days) of the activity, e.g + both "2001-10-15" and 20.5 are valid inputs
+ +  $aCaption  + Text string (caption) to appear + at the end (right side) of the bar
+ +  $aHeight  + Height of bar given as either + a value in range [0,1] in which case this is interpretated as what + fraction of the vertical position should the bar occupy. The height can + also be given in absolute pixels [1..200]
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1081Minutescale.html b/html/includes/jpgraph/docs/html/1081Minutescale.html new file mode 100644 index 0000000000..cb9566dfd3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1081Minutescale.html @@ -0,0 +1,83 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.1 Minute scale

+

Minute scale is the lowest resolution you can use. It is often + convenient to use Minute scale with "GanttScale::SetINtervall()" since + by default the increment will be 1 minute. The style of minute scale + can be further adjusted by the use style parameters which can be + one of

+
    +
  1. "MINUTESTYLE_MM", This will display minutes as a two digit number + with a leading zero if necessary
  2. +
  3. "MINUTESTYLE_CUSTOM", This will let you specify you own custom + minute style by making a call to HeaderProperty:: SetFormatString() +
  4. +
+

Minute scale is enabled by adding the GANTT_HMIN in the + GanttGraph::ShowHeaders() call. For example as in

+  $graph +->ShowHeaders(GANTT_HDAY  +GANTT_HHOUR  +GANTT_HMIN); +

+

The code snippet below shows how to set up a minute scale with 30 + min interval and some custom colors.

+  $graph->scale-> +minute-> +SetIntervall( +30); +
$graph->scale-> +minute-> +SetBackgroundColor( +'lightyellow:1.5'); +
$graph->scale-> +minute-> +SetFont( +FF_FONT0); +
$graph->scale-> +minute-> +SetStyle( +MINUTESTYLE_MM); +
$graph->scale-> +minute->grid->SetColor +('lightgray');

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1082Hourscale.html b/html/includes/jpgraph/docs/html/1082Hourscale.html new file mode 100644 index 0000000000..d8013ec8e6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1082Hourscale.html @@ -0,0 +1,86 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.2 Hour scale

+

The hour scale has more builtin formatting possibilities. The + following formatting options are available

+
    +
  1. "HOURSTYLE_HM24", Will display the only the hour in military time + 0-24 , for example 13:00
  2. +
  3. "HOURSTYLE_H24", Will display the hour with both hour and minute in + military time 0-24, for example 13
  4. +
  5. "HOURSTYLE_HMAMPM", Will display the hour and minutes with a + suitable am/pm postfix, for example 1:30pm
  6. +
  7. "HOURSTYLE_HAMPM", Will display only the hour with a suitable am/pm + postfix, for example 1pm
  8. +
  9. "HOURSTYLE_CUSTOM", Custom defined format as specified with a call + to HeaderProperty::SetFormatString()
  10. +
+

For hours it is possible to specify the interval in either of two + ways. With an integer, e.g. 6, or as time interval, e.g. "1:30" which + makes the interval one and a half hour. The only restriction is that + the interval must be even dividable for 24 hours since one day is the + smallest possible interval to show. This means that it is allowed to + use, for example 2,4,6,"1:30" or "0:45" as intervals but not 7, "2:45".

+

The code snippet below shows hot to set up a hour scale to with 45 + minutes interval and some custom colors

 $graph +->scale->hour-> +SetBackgroundColor( +'lightyellow:1.5'); +
$graph->scale-> +hour->SetFont(FF_FONT1 +); +
$graph->scale-> +hour->SetStyle(HOURSTYLE_HMAMPM); +
$graph->scale-> +hour-> +SetIntervall( +"0:45"); +

+

The example below shows a gantt chart with the day and hour scale + enabled

+
+
Figure 156: Using hour scale in the Gantt chart [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1083Dayscale.html b/html/includes/jpgraph/docs/html/1083Dayscale.html new file mode 100644 index 0000000000..f7efa1db32 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1083Dayscale.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.3 Day scale

+

By default the day scale show the first letter of the week day but + it is also posible to format the day scale in a number of different + ways. Days can have one of the following scale formats.

+
    +
  • DAYSTYLE_ONELETTER, On letter week day. Example "M"
  • +
  • DAYSTYLE_LONG, Full week day. Example "Monday"
  • +
  • DAYSTYLE_LONGDAYDATE1, Day with date. Example "Monday 23 Jun"
  • +
  • DAYSTYLE_LONGDAYDATE2, Day with date+year. Example "Monday 23 Jun + 2003"
  • +
  • DAYSTYLE_SHORT, Short date. Example "Mon"
  • +
  • DAYSTYLE_SHORTDAYDATE1, Short date+date. Example "Mon 23/6"
  • +
  • DAYSTYLE_SHORTDAYDATE2, Short date+date. Example "Mon 23 Jun"
  • +
  • DAYSTYLE_SHORTDAYDATE3,Short date+date. Example "Mon 23"
  • +
  • DAYSTYLE_SHORTDATE1, Short date. Example "23/6"
  • +
  • DAYSTYLE_SHORTDATE2, Short date. Example "23 Jun"
  • +
  • DAYSTYLE_SHORTDATE3, Short date. Example "Mon 23"
  • +
  • DAYSTYLE_SHORTDATE4, Short date. Example "23"
  • +
  • DAYSTYLE_CUSTOM, Custom specified formatting string. Example "M"
  • +
+

The formatting is specified by using the SetStyle() method as in

+  $graph +->scale->day-> +SetStyle( +DAYSTYLE_LONG); +

+

The graphical formatting possibilities for days allow the + possibility to specify a different color for the weekend background and + also for the Sunday.

+
    +
  • + SetWeekendColor() +
    +

    Set the background color for weekends. (Defaults to light gray)

    +
  • +
  • + SetSundayFontColor() +
    +

    The Sunday font color. (Defaults to red)

    +
  • +
+

In addition to this there is also a possibility to choose whether or + not the weekend background should be extended vertically down over the + plot area. (the default). Since that is a property more of the whole + plot this behavior is modified with a call to the method

+  UseWeekendBackground()
+

+

of the scale, e.g. +
 

+ $graph->scale->UseWeekendBackground(false +);

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1084Weekscale.html b/html/includes/jpgraph/docs/html/1084Weekscale.html new file mode 100644 index 0000000000..46eaba2ffe --- /dev/null +++ b/html/includes/jpgraph/docs/html/1084Weekscale.html @@ -0,0 +1,73 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.4 Week scale

+

Week scales, if enabled, by default shows the week number in range 1 + to 53 (as defined by ISO-8601, see the reference section).

+

It might be worth pointing out here that the week number calculation + is carried out within JpGraph and does not rely on the underlying OS + date libraries. This makes the behavior consistent over several OS:s + (at least M$ Windows does not comply to ISO-8601 or supply any + way of doing this through the normal libraries, e.g. strftime())

+

You may modify the week behavior in three ways. You can specify + (with SetStyle()) a different date format using the constants

+
    +
  • + WEEKSTYLE_WNBR
    +

    Show week number To further modify the formatting of the actual week + number you can optionally supply a format string with a call to

    +  SetLabelFormatString()
    +

    +

    The format of the string should be a standard sprintf() syntax + expecting an integer (the week number). By default a 'W' is prefixed to + the number.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY
    +

    Show date of first day in week.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY2
    +

    Show date of first day in week and short month

    +
  • +
  • + WEEKSTYLE_FIRSTDAYWNBR
    +

    Show weeknumber of first day in week.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY2WNBR
    +

    Show weeknumber of first day in week and month

    +
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1085Monthscale.html b/html/includes/jpgraph/docs/html/1085Monthscale.html new file mode 100644 index 0000000000..0c7d2bba07 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1085Monthscale.html @@ -0,0 +1,73 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.5 Month scale

+

For month scale you can use the SetStyle() method to choose between + a variety of formats.

+
    +
  • + MONTHSTYLE_SHORTNAME
    +

    Display the month name in its locale specific short form, i.e Jan, + Feb etc

    +
  • +
  • + MONTHSTYLE_SHORTNAMEYEAR2
    +

    Display the month name in its locale specific short form together + with a 2 digit year , i.e Jan '01, Feb '01 etc

    +
  • +
  • + MONTHSTYLE_SHORTNAMEYEAR4
    +

    Display the month name in its locale specific short form together + with a 4 digit year , i.e Jan 2001, Feb 2001 etc

    +
  • +
  • + MONTHSTYLE_LONGNAME
    +

    Display the month name in its locale specific long name, i.e. + January, February

    +
  • +
  • + MONTHSTYLE_LONGNAMEYEAR2
    +

    Display the month name in its locale specific long name together with + a 2 digit year , i.e January '01, February '01 etc

    +
  • +
  • + MONTHSTYLE_LONGNAMEYEAR4
    +

    Display the month name in its locale specific long name together with + a 4 digit year , i.e January 2001, February 2001 etc

    +
  • +
  • + MONTHSTYLE_FIRSTLETTER
    +

    The first letter of the month name

    +
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1086Yearscale.html b/html/includes/jpgraph/docs/html/1086Yearscale.html new file mode 100644 index 0000000000..f9b01162fb --- /dev/null +++ b/html/includes/jpgraph/docs/html/1086Yearscale.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8.6 Year scale

+

Year scale has no extra formatting possibilities.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/108Formattingthescaleheaders.html b/html/includes/jpgraph/docs/html/108Formattingthescaleheaders.html new file mode 100644 index 0000000000..1e3127aa5e --- /dev/null +++ b/html/includes/jpgraph/docs/html/108Formattingthescaleheaders.html @@ -0,0 +1,129 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.8 Formatting the scale headers

+

The scale headers allow you to view up to four different scales at + the same time. The four basic scales are:

+
    +
  • Day scale
  • +
  • Week scale
  • +
  • Month scale
  • +
  • Year scale
  • +
+

You can choose what scale to include and exclude by using the + SetScale() method. For example, for a detailed gantt you might choose + to display days and weeks by specifying

 $graph +->ShowHeaders +( GANTT_HWEEK  +| GANTT_DAY );

+

If you instead wanted "the big picture" it might be enough to show + year and months by specifying

+  $graph->ShowHeaders +GANTT_YEAR  +GANTT_MONTH ); +

+

You can choose freely the combination of scales that you want, but a + chart must at least have one scale of course.

+

Once you have decided what level of details you need you can then + fine tune the exact layout/formatting of each of the enabled scales as + described below.

+

These scale header are all accessed through the graph instance + variables 'scale' as in

+  $graph->scale-> +week

+

or

+ $graph->scale->day
+

+

. All these headers share the following properties.

+
    +
  • + Show() +
    +

    Determine if the scale should be shown or not

    +
  • +
  • + SetFont() +
    +

    Font for text in header

    +
  • +
  • + SetFontColor() +
    +

    Specify the color of the header text

    +
  • +
  • + SetStyle() +
    +

    Specify what date format should be used, for example in the week + scale it is possible to show either week number, the start date of the + week and so on.

    +
  • +
  • + SetBackgroundColor() +
    +

    As it says, the background color for the header

    +
  • +
  • + SetFrameWeight() +
    +

    The line weight of the box around the scale

    +
  • +
  • + SetFrameColor() +
    +

    The line color for the frame

    +
  • +
  • + SetTitleVertMargin() +
    +

    The margin, in percent, below and above the title text

    +
  • +
+

In addition to these methods each scale also has the property 'grid' + which determines the appearance of grid lines for that specific scale. + You may modify the appearance of grid lines by the "normal" line + methods, i.e. SetColor(),SetWeight() SetStyle() and Show(). So for + example to set the week grid line red you would use

+  $graph +->scale->week-> +grid->SetColor("red" +);

+

Each of the scales also have some specific formatting possibilities + as described below.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1091Addingcaptiontobars.html b/html/includes/jpgraph/docs/html/1091Addingcaptiontobars.html new file mode 100644 index 0000000000..2c93a28d9e --- /dev/null +++ b/html/includes/jpgraph/docs/html/1091Addingcaptiontobars.html @@ -0,0 +1,71 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.9.1 Adding caption to bars

+

Caption for bars are placed at the far right side of the bars. They + can for example be used to indicate the resources assigned to a task, + the duration of the task or the progress of the activity.

+

Caption text for a bar is specified either when creating a bar or + later by accessing the 'caption' property of bars. So the two lines

+  $activity = new GanttBar +(0,"Activity 1", +"2001-11-21", +"2001-12-20", +"[BS,ER]") +

+

and

+ $activity-> +caption->Set("[BS,ER]" +);

+

are both ways of specifying the caption "[BS,ER]" for the activity. + Since activity is a standard JpGraph text object you can easily modify + font, color and size with calls to SetFont() and SetColor(), (e.g.

+  $activity->caption +->SetFont(FF_ARIAL, +FF_BOLD,9);
+

+

+

The figure below illustrates the use of caption

+
+
Figure 157: Illustration of the use of captions [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1092Addingprogressindicatorstobars.html b/html/includes/jpgraph/docs/html/1092Addingprogressindicatorstobars.html new file mode 100644 index 0000000000..8c9fdeeda5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1092Addingprogressindicatorstobars.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.9.2 Adding progress indicators to bars

+

To indicate the progress of a specific activity it is also possible + to add a progress indicator to each bar. This progress indicator + consists of a smaller bar within the bar. By default this progress bar + is black and 70% of the height of the bar. These parameter can (of + course) all be changed.

+

The properties for the progress indicator are accessed through the + 'progress' property and it's methods.

+

To set the progress for a specific activity you only specify the + percent as a fraction. As in

+  $activity->progress-> +Set(0.4)
+

+

In Figure 158 the previous example is modified to indicate the + progress of each activity by the default progress indicator. A solid + bar. To make it clearer we have also modified the caption to reflect + the displayed progress. (At the same time we also modified the scale + headers just to illustrate some more formatting options).

+
+
Figure 158: Adding progress indicators. [src]  +

+

+

To specify a different format for the progress you use the + SetPattern() method as in

+  $activity->progress-> +SetPattern( +BAND_RDIAG, +"blue"); +

+

In the reference section you can see the exact parameters and all + available methods.

+
+
Figure 159: Changing the style of the progress indicators. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/109Moreformattingforbars.html b/html/includes/jpgraph/docs/html/109Moreformattingforbars.html new file mode 100644 index 0000000000..6151eef707 --- /dev/null +++ b/html/includes/jpgraph/docs/html/109Moreformattingforbars.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10.9 More formatting for bars

+

This section shows some further modification you might do to + activity bars.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10Ganttcharts.html b/html/includes/jpgraph/docs/html/10Ganttcharts.html new file mode 100644 index 0000000000..7c84e186d0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/10Ganttcharts.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10 Gantt charts

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/10Workingwithcanvasgraphs.html b/html/includes/jpgraph/docs/html/10Workingwithcanvasgraphs.html new file mode 100644 index 0000000000..b3b485f56c --- /dev/null +++ b/html/includes/jpgraph/docs/html/10Workingwithcanvasgraphs.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

10 Working with canvas graphs

+

Canvas graphing is an advanced feature that comes in handy where you + need to draw some more arbitrary graphics. To give you a flavor of what + you can do the following example shows an architecture overview of + JpGraph which was drawn using a canvas.

+
+
Figure 186: Example of what you can draw on a canvas [src]  +

+

+

Working with canvas requires more understanding of JpGraph as well + as more programming and fine tuning.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/111GeneratingAntiSpamchallenge.html b/html/includes/jpgraph/docs/html/111GeneratingAntiSpamchallenge.html new file mode 100644 index 0000000000..dd95b3adf6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/111GeneratingAntiSpamchallenge.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.1 Generating Anti-Spam challenge

+

There are two basic alternatives on how to generate the content of + the anti-spam image

+
    +
  1. Submit a string that should be used
  2. +
  3. Automatically generate a random string. If this alternative is + chosen then the user of the library should save the created string and + compare it to what the user enters.
  4. +
+

In order to write a script to generate a new challenge there are + four steps to be completed.

+

First include the library file jpgraph_antispam.php. + Note that there is no need to include the "jpgraph.php" library since + all functionality is included in this library file.

+   +require_once "jpgraph_antispam.php";
+

+

Secondly a new instance of the class AntiSpam must be + created

+ $spam = new  +AntiSpam(); +

+

Thirdly the string to be used in the challenge must be + specified. To automatically generate a suitable string use

+   +// The argument determines the length of the generated string +
$chars $spam-> +Rand(5);
+

+

If instead the string to be used should be specified this string + should be specified in the initial creation of the AntiSpam() or by + calling the Set() method as in

+  $spam-> +Set("aui8k");
+

+

Please note that in order to minimize the risk for confusion the + letters 'O' and the number '0' (zero) is not allowed since they are too + alike and can be mistaken for each other.

+

The final and fourth step is to output the image with a call + the method Stroke() on the created instance of the AntiSpam + class.

if( $spam->Stroke +() === false  +) { +
    die(
"Illegal or no data to plot"); +
}

+

Note that we have put a guard around the output since in the case of + an error this method will result a boolean false value. As with the + other graph types it is possible to write the generated image to a file + by submitting a file name as an argument to Stroke().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/111Introduction.html b/html/includes/jpgraph/docs/html/111Introduction.html new file mode 100644 index 0000000000..628b32f1a0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/111Introduction.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.1 Introduction

+

Canvas graph is really not a graph. It a blank sheet of paper which + you can use to draw arbitrary shapes and still have access to some of + the convenient features of JpGraph.

+

You can work with a canvas in different levels of complexity. You + can for example work directly with the Image class which provides a + large number of primitives for drawing but requires that you use + absolute pixel coordinates.

+

You can also make life a little bit easier by using a canvas scale. + This lets you define your own scale on the canvas which often makes it + easier by letting you work on a grid you have specified yourself. It + also makes it very easy to re-scale you image automatically by just + changing your scale. For example to half the size of you drawing you + just make the scale twice as large.

+

To give you some help in working with different canvas you should + include the "jpgraph_canvtools.php" file when working on canvases. This + is not strictly necessary but it will give you some nice abstraction to + help you create your masterpieces.

+

As another (concrete) example on the use of a canvas the figure + below is a listing of font styles available with JpGraph.

+
+
Figure 183: Another example of using a canvas to draw a + number of text boxes +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/112Creatingasimplecanvas.html b/html/includes/jpgraph/docs/html/112Creatingasimplecanvas.html new file mode 100644 index 0000000000..d931c152ac --- /dev/null +++ b/html/includes/jpgraph/docs/html/112Creatingasimplecanvas.html @@ -0,0 +1,169 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.2 Creating a simple canvas

+

In order to create a canvas graph you need to include the file + "jpgraph_canvas.php" in addition to the standard "jpgraph.php" file. + You might also want to include the "jpgraph_canvtools.php" to get + access to some supporting classes that may (or not) come in handy.

+

Creating a canvas gives you the opportunity draw arbitrary shapes on + a "white" piece of paper. Let's first show a simple example were we + just draw a text box. We first show you the code which we will walk + through

(File: canvasex01.php) +
<?php +
+// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,300,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Draw a text box in the middle +
$txt="This\nis\na TEXT!!!"; +
$t = new Text( +$txt,200,10 +); +
$t->SetFont( +FF_ARIAL, +FS_BOLD,40); +
+
+// How should the text box interpret the coordinates? +
$t->Align( +'center','top'); +
+
// How should the paragraph be aligned? +
$t->ParagraphAlign( +'center'); +
+
+// Add a box around the text, white fill, black border and gray shadow +
$t->SetBox( +"white", +"black","gray"); +
+
// Stroke the text +
$t->Stroke( +$g->img); +
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+

+

The example above starts by creating a (400x200) sized image. We set + the margins to get a nice frame around the image. For canvases the + margins has no effect in the way you enter coordinates. Top left is + (0,0) and bottom right (including any potential margin and shadow) is + the maximum. In this case the coordinates are X:0-399, and Y:0-199

+

We then call the + InitFrame() method which actually strokes the margin and plotarea + to the graph. Since everything is stroked in the order you issue the + commands you must make sure that the graphical objects you want on top + is stroked last. This is different from the way you normally work with + JpGraph since it queues up all you addition and then makes sure they + are stroked in the correct order.

+

We then create a Text object, + setup it's properties, including the absolute screen position where we + want the text, and then stroke it. Her it might be a need for a closer + explanation of the, perhaps misnamed, method +Text::Align() This method states how the text coordinates + should be interpreted , i.e when we specify (200,10) as the + coordinates for the text paragraph should that be interpreted as the + top left corner, bottom-left corner or something else (of the bounding + box)? In the code above we have chosen to interpret the X-coordinate as + being the center of the bounding box and the Y-coordinate as the top. + Hence the text will be aligned so that the (200,100) point in the graph + is aligned with the middle of the top line of the paragraphs bounding + box.

+

We also specify that the lines within the paragraph should be + centered with a call to + Text::ParagraphAlign() Since we also choose to have a box around + the text we have to make use of the method + Text::SetBox() which is used to specify the fill color, the border + color and the shadow color (if you leave out shadow color or set it to + '', no shadow will be used).

+

Now we are ready to stroke the text onto the canvas. In order to do + so we must specify the basic Image drawing class we want to use. + Without discussing this further we just state that a suitable image + class can always be found as the img property of the + Graph class.

+

Finally we are ready to stroke the entire graph, which in effect + sends the canvas back to the browser. Below you can see the effect of + all this code

+

+
+
Figure 184: A simple canvas drawing with a text box in the + middle [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/113Addinglinesandrectanglestoacanvas.html b/html/includes/jpgraph/docs/html/113Addinglinesandrectanglestoacanvas.html new file mode 100644 index 0000000000..ef6788c536 --- /dev/null +++ b/html/includes/jpgraph/docs/html/113Addinglinesandrectanglestoacanvas.html @@ -0,0 +1,187 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.3 Adding lines and rectangles to a canvas

+

A canvas also makes a good background for using standard graphic + primitives, for example circles and lines. What you first have to + remember is that you are (so far) working with absolute screen + coordinates and secondly all drawing primitives are found in the + Image Class accessible as a property of the Graph class. So for + example to draw a line between coordinate (0,0) and (100,100) you would + have to add the line

+  $graph->img-> +Line(0,0 +,100,100); +

+

+

To your code. The following example shows some of the graphic + primitives you have access to in the Image class

+(File: canvasex02.php) +
<?php +
+// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,200,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Add a black line +
$g->img-> +SetColor( +'black'); +
$g->img-> +Line(0,0 +,100,100); +
+
// .. and a circle (x,y,diameter) +
$g->img-> +Circle(100,100 +,50); +
+
+// .. and a filled circle (x,y,diameter) +
$g->img-> +SetColor('red'); +
$g->img-> +FilledCircle( +200,100,50 +); +
+
// .. add a rectangle +
$g->img-> +SetColor( +'green'); +
$g->img-> +FilledRectangle( +10,10,50 +,50); +
+
// .. add a filled rounded rectangle +
$g->img-> +SetColor( +'green'); +
$g->img-> +FilledRoundedRectangle( +300,30,350 +,80,10); +
// .. with a darker border +
$g->img-> +SetColor( +'darkgreen'); +
$g->img-> +RoundedRectangle( +300,30,350 +,80,10); +
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+

+

Pleas note the way to access these routines through the img property + of the Graph class. Please also keep in mind that the coordinates are + absolute.

+

+
+
Figure 185: Example of graphic primitives [src]  +

+

+

+

+
+

A note on GD For those of you using GD 1.xx you + might notice that the large "filled circle" isn't completely filled. + This is because in GD 1.xx there are no low level primitives to fill an + ellipse or circle so JpGraph tries to make the best out of a bad + situation and manually fake a filled circle. For interest of speed + JpGraph does not contain a complete (for example) Bresenham-circle fill + but cheats by using some existing GD routines. This is not a perfect + solution and for large filled circles like this you get some + moire-patterns in the circle. If you upgrade to GD 2.x JpGraph will be + able to make full use of those new existing methods and the fill will + be perfect.

+
+
+

We refer you to the class reference to find out what other graphic + primitives are available for use.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/114Usingacanvasscale.html b/html/includes/jpgraph/docs/html/114Usingacanvasscale.html new file mode 100644 index 0000000000..af67f63b36 --- /dev/null +++ b/html/includes/jpgraph/docs/html/114Usingacanvasscale.html @@ -0,0 +1,291 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.4 Using a canvas scale

+

The previous method using absolute coordinates works. But nothing + more. It doesn't give you any chance to easily scale the image (unless + you manually recalculate all used coordinates) , it gets tedious to + work with pixel level resolution. Especially if you just like to draw a + few basic shapes.

+

To help with this you can use a scale for the canvas. This lets you + define a "work-space" of your choice. You can for example set the + coordinates to be between X:0-10, Y:0-10. This makes it easier to + position objects on the canvas. This also has two additional + advantages:

+
    +
  • If you increase the size of the canvas all objects will be + automatically scale to keep their proportions without any changes.
  • +
  • You can shrink/enlarge your drawing (not the image) by just using + another scale. For example if you originally draw the image using a + (0:10, 0:10) scale and then change the scale to (0:20, 0:20) then the + effect will be that you drawings will "shrink" to half their size.
  • +
+

+

To use this type of scaling you must make sure you include the file + "jpgraph_canvtools.php" . In addition to the scaling class their are + also a couple of other utility classes that may come in handy, + especially the Shape class.

+

Using the scale is quite simple. You first instantiate a scale + object passing the graph as a parameter and then specify the scale you + want to use. This means you need to add the lines

+  $scale  += new CanvasScale +($g); +
$scale->Set( +0,$xmax,0 +,$ymax);

+

+

to your code. You can then use one of the translation methods (for + example +CanvasScale::Translate()) in the canvas scale class to translate + between your world coordinates and the absolute screen coordinates. + This means you could take the code in the example above and just add + the lines, for example,

+  list( +$x1,$y1) = $this +->scale->Translate( +$x1,$y1); +
list(
$x2,$y2) =  +$this->scale->Translate +($x2,$y2); +
$g->img-> +Line($x1,$y1 +,$x2,$y2); +

+

Since this pattern has to be repeated for every object that has to + be drawn it makes good sense to encapsulate this in a separate class. + This is exactly why the canvas tools file also have a utility class + called Shape This class is + mainly a wrapper around the most commonly used methods in the basic + Image class (with one important exception) and does all these the + translation for you. Please see the class reference for a complete list + of the available methods To set up the Shape class you instantiate it + with the graphic context and the scale you want to use as argument as + in

+

+ $shape = new  +Shape($g,$scale +);

+

+

You are then ready to use all the methods in the shape class. Using + a scale and imitating the previous example we would get the source + shown below.

(File: canvasex03.php) +
<?php +
+// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
include 
"../jpgraph_canvtools.php"; +
+
// Define work space +
$xmax=20; +
$ymax=20; +
+
// Setup a basic canvas we can work  +
$g = new CanvasGraph( +400,200,'auto' +); +
$g->SetMargin( +5,11,6 +,11); +
$g->SetShadow(); +
$g->SetMarginColor( +"teal"); +
+
+// We need to stroke the plotarea and margin before we add the +
// text since we otherwise would overwrite the text. +
$g->InitFrame(); +
+
// Create a new scale +
$scale  += new CanvasScale +($g); +
$scale->Set( +0,$xmax,0 +,$ymax); +
+
+// The shape class is wrapper around the Imgae class which translates +
// the coordinates for us +
$shape  += new Shape($g, +$scale); +
$shape->SetColor( +'black'); +
+
+
// Add a black line +
$shape->SetColor( +'black'); +
$shape->Line( +0,0,20 +,20); +
+
// .. and a circle (x,y,diameter) +
$shape->Circle( +5,14,2 +); +
+
+// .. and a filled circle (x,y,diameter) +
$shape->SetColor( +'red'); +
$shape->FilledCircle( +11,8,3 +); +
+
// .. add a rectangle +
$shape->SetColor( +'green'); +
$shape->FilledRectangle(15, +8,19,14 +); +
+
// .. add a filled rounded rectangle +
$shape->SetColor( +'green'); +
$shape->FilledRoundedRectangle(2, +3,8,6 +); +
// .. with a darker border +
$shape->SetColor( +'darkgreen'); +
$shape->RoundedRectangle(2, +3,8,6 +); +
+
+
// Stroke the graph +
$g->Stroke(); +
+
?> +
+
The source above gives the following result
+
+
Figure 186: Drawing shapes on a canvas using a scale. [src]  +

+

+

If we like to make a smaller image we could just change the image + size and everything will be rescaled without any further code changes. + SO for example making the image half the size would give the result

+
+
Figure 187: Shrinking the image to half the size is easy + since the scaling will maintain the relative position of the objects [src]  +

+

+

If we instead wanted to keep the image size but shrink the shapes we + could just make the scale twice as large which would result in

+
+
Figure 188: Shrinking hte graphic object by making the scale + twice as large +[src]  +

+

+

+

We previously mentioned that the Shape class was a wrapper around + the image class with one exception. So what is the exception? Well, + glad you asked. The exception is that it contain an additional method + which draws an "indented rectangle". An indented rectangle is a + rectangle where one of it's four corners have been moved into the + rectangle. You create an indented rectangle by calling either + Shape::IndentedRectangle() or A few examples illustrates what this + shape looks like.

+
+
Figure 189: Examples of filled indented rectangles [src]  +

+

+

+

As a final note we mention the class + CanvasRectangleText Which can be used to add a text with a rounded + rectangle (possibly filled) onto the canvas. The previous example where + all the available fonts were drawn were using this class. We don't + describe it further but refer the interested reader to the class + reference and the 'listfontsex1.php' example file.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/115SampleapplicationDrawingDBschema.html b/html/includes/jpgraph/docs/html/115SampleapplicationDrawingDBschema.html new file mode 100644 index 0000000000..059af12f33 --- /dev/null +++ b/html/includes/jpgraph/docs/html/115SampleapplicationDrawingDBschema.html @@ -0,0 +1,432 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11.5 Sample application: Drawing DB schema

+

As a final example we shortly discuss how the canvas type of graph + was used to generate the DB schema for the DDDA architecture.

+

The library php file "utils/misc/imgdbschema.php" included in the + distribution contains some utility classes to make the drawing of table + schemes easier. It contains two basic classes, Class ImgDBTable and + Class ImgDBSchema. The first class understand how to draw an image + illustrating a single table. The second class is responsible for + automatically extract all the relevant information from a DB to draw a + complete DB Schema.

+

Before going into this a little bit more we show what an example of + this might look like.

+
+
Figure 190: Example of using the canvas graph style together + with the imgdbschema.php library to semi-automatically generate a DB + schema [src] +  +

+

+

+

Before going on it should be noted that the ImgDBSchema assumes that + the DB can be accessed through a DB abstraction layer modeled after the + abstraction layer available in the 'jpdb.php' file in the DDDA + architecture. This abstraction layer assumes a MySQL database in the + bottom. This specific dependency of this particular abstraction layer + is the reason why these classes is not included in the generic canvas + tools file.

+

The second thing to note is that this library does not contain a + complete automatic-layout engine but rather a very simple automatic + system which, if nothing else is specified, just puts the table in a + rectangular grid. A complete graph layout engine would simple be to + much to write in this context. This is also a very difficult + optimization problem and sofar not even any of the available research + programs that tries this can achieve a satisfactory layout without + manual intervention.

+

The critical lines in the code to generate the above graph is

+  $tblposadj=array($tlo +,0,$tblwidth+ +$tlo+2,0 +,2*$tblwidth+ +$tlo+4,0 +,-1,16,- +1,16); +
$dbschema  += new ImgDBSchema +("jpgraph_doc" +,"FormatTblName" +,"FormatFldName" +); +
$dbschema +->SetMargin($leftm, +$topm); +
$dbschema +->SetTableWidth +($tblwidth); +
$dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj);

+

+

The rest of the code in the file is just to setup the canvas, add an + indented rectangle to group some tables and generate a footer with the + date and time this image was generated.

+

The first line instantiates a new ImgDBSCheme layout engine asking + it to draw an image for the database 'jpgraph_doc'. The following two + arguments specify two callback functions for formatting the text for + header and each field in a table.

+

The next line specify the top left margin where the drawing of the + tables should be started.

+

The third line specify the width of a single table. The final lines + starts the engine and draws all tables in the database to the canvas. + The final argument requires some further explanation. This is an offset + (x,y) from the top left corner how each individual table should be + positioned. If the value is -1 indicates that the default value should + be used. If this array is not specified then the tables will simple + arranged line by line.

+

The full source code for drawing this DB schema example is shown + below.

+

(File: dbschemaex1.php) +
<?php +
+/*======================================================================= +
// File:     DBSCHEMAEX1.PHP +
// Description:    Draw a DB schema of the DDDA architecture +
// Created:     2002-08-25 +
+// Ver:        $Id: dbschemaex1.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
// +
// License:     This code is released under QPL +
//              Copyright (C) 2001,2002 Johan Persson +
+// Note:        The actual drawing of the tables are semi-automatically +
+//              but you can easily adjust the individual tables position +
//              with the 'tblposadj' array.  +
// +
+//======================================================================== +
*/ +
include  +"../jpgraph.php"; +
include 
"../jpgraph_canvas.php"; +
include 
"../jpgraph_canvtools.php"; +
include 
"../imgdbschema.inc"; +
include 
"../jpdb.php" +; +
+
+
+// Global callback to format the table header names +
function  +FormatTblName( +$aName) { +
    
+// We want to replace any specifi references to the +
    // 'JpGraph' project with the generic '<project>' +
    
return  +str_replace( +'JpGraph', +'<project>' +$aName); +
} +
+
+// Global callback to format each field name in the table +
function  +FormatFldName( +$aName,$aTable) { +
    return 
$aName +; +
} +
+
+
class 
Driver  +{ +
+
    var 
$ig +, $img$iscale +$ishape; +
    var 
$iymax +,$ixmax; +
    var 
$iwidth +,$iheight; +
+
    function 
Driver +() { +
+
    
+// Define Image size and coordinate grid space to work within +
    
$this +->iwidth 600; +
    
$this +->iheight750; +
    
$this +->iymax  50; +
    
$this +->ixmax  55; +
+
    
// Setup a basic canvas +
    
$this +->ig = new CanvasGraph( +$this->iwidth,$this +->iheight,'auto'); +
    
$this +->img $this-> +ig->img; +
+
    
// Define the scale to be used +
    
$this +->iscale  += new CanvasScale +($this->ig); +
    
$this +->iscale->Set( +0,$this->ixmax +,0,$this-> +iymax); +
    
$this +->ishape  += new Shape($this-> +ig,$this->iscale +); +
+
    
// A small frame around the canvas +
    
$this +->ig->SetMargin( +2,3,2 +,3); +
    
$this +->ig->SetMarginColor( +"teal"); +
    
$this +->ig->InitFrame(); +
+
    } +
+
    function 
Run +() { +
+
    
$leftm +=1.5;    // Left margin (for table schemes)  +
    
$topm=5;     +// Top margin (for table schemes)  +
    
$tblwidth +=15;    // Individual table width +
    
$tlo=1;         +// Offset for top line +
+
    // Add the background color for the project specific tables +
    
$this +->ishape->IndentedRectangle($leftm, +$topm-1,3 +*$tblwidth+$tlo+ +6,45, +
                     
$tlo ++2*$tblwidth+ +2,30,CORNER_BOTTOMLEFT, +
                     
'lightblue'); +
+
    
+// Stroke the tables (series of x,y offsets, If =-1 then use the +
    // automtic positioning +
    
$tblposadj +=array($tlo,0, +$tblwidth+$tlo+2 +,0,2* +$tblwidth+$tlo+4 +, +
             
0 +,-1,16,- +1,16); +
    
$dbschema  += new ImgDBSchema +('jpgraph_doc' +,'FormatTblName' +,'FormatFldName' +); +
    
$dbschema +->SetMargin($leftm, +$topm); +
    
$dbschema +->SetTableWidth +($tblwidth); +
    
$dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj); +
+
    
$tt  += new CanvasRectangleText +(); +
    
$tt->SetFillColor( +''); +
    
$tt->SetColor( +''); +
    
$tt->SetFontColor( +'navy'); +
+
    
// Add explanation +
    
$tt->SetFont( +FF_ARIAL, +FS_NORMAL,12); +
    
$tt->Set( +'Project specific tables', +$tblwidth+ +$leftm+3,16 +,15); +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
// Add title +
    
$tt->SetColor( +''); +
    
$tt->SetFont( +FF_VERDANA, +FS_BOLD,26); +
    
$tt->Set( +'DDDA - DB Schema', +9,0.5,30 +); +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
// Add a version and date +
    
$tt->SetFillColor( +'yellow'); +
    
$tt->SetFont( +FF_FONT1, +FS_NORMAL,10); +
    
$tt->Set( +"Generated: ". +date("ymd H:i",time +()),1,$this-> +iymax*0.96,15 +);  +
    
$tt->Stroke( +$this->img,$this +->iscale); +
+
    
$this +->ig->Stroke(); +
    } +
} +
+
$driver  += new Driver +(); +
$driver->Run(); +
+
?> +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/11AntiSpamChallenges.html b/html/includes/jpgraph/docs/html/11AntiSpamChallenges.html new file mode 100644 index 0000000000..98b3b2f70c --- /dev/null +++ b/html/includes/jpgraph/docs/html/11AntiSpamChallenges.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11 Anti-Spam Challenges

+

JpGraph includes a module to easily generate Anti-Spam challenges. + With this we mean an image consisting of numbers and letters which are + very hard to read for an OCR program. This is often used to secure sign + up for bulletin boards, on-line mail system or mailing lists since this + very effectively prevent automatic sign up by robots (spam-bots).

+

The module in JpGraph responsible for this is + jpgraph_antispam.php and behaves as a simplified plot module.

+

The example below illustrates how such an image can look like

+
+
Figure 195: Simple illustration of spam challenge image [src]  +

+

+

Anti spam images have less functionality then the usual images + generated with JpGraph in order to keep this utility reasonable small. + The primary limitation is that there are now additional formatting + options for the images and the image generated will always use the + JPEG image format. Hence it is not possible to change this to use, + for example, PNG.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/11Versionhistory.html b/html/includes/jpgraph/docs/html/11Versionhistory.html new file mode 100644 index 0000000000..2c5b908b89 --- /dev/null +++ b/html/includes/jpgraph/docs/html/11Versionhistory.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

1.1 Version history

+

+

+ + + + +
VersionDateStatusWhoComment
R1.92007-03-18ReleasedJohan Persson +Additional info for JpGraph 1.21
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/11Workingwithcanvasgraphs.html b/html/includes/jpgraph/docs/html/11Workingwithcanvasgraphs.html new file mode 100644 index 0000000000..1ff8246f52 --- /dev/null +++ b/html/includes/jpgraph/docs/html/11Workingwithcanvasgraphs.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

11 Working with canvas graphs

+

Canvas graphing is an advanced feature that comes in handy where you + need to draw some more arbitrary graphics. To give you a flavor of what + you can do the following example shows an architecture overview of + JpGraph which was drawn using a canvas.

+
+
Figure 182: Example of what you can draw on a canvas [src]  +

+

+

Working with canvas requires more understanding of JpGraph as well + as more programming and fine tuning.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/121GeneratingAntiSpamchallenge.html b/html/includes/jpgraph/docs/html/121GeneratingAntiSpamchallenge.html new file mode 100644 index 0000000000..3a658d7d93 --- /dev/null +++ b/html/includes/jpgraph/docs/html/121GeneratingAntiSpamchallenge.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

12.1 Generating Anti-Spam challenge

+

There are two basic alternatives on how to generate the content of + the anti-spam image

+
    +
  1. Submit a string that should be used
  2. +
  3. Automatically generate a random string. If this alternative is + chosen then the user of the library should save the created string and + compare it to what the user enters.
  4. +
+

In order to write a script to generate a new challenge there are + four steps to be completed.

+

First include the library file jpgraph_antispam.php. + Note that there is no need to include the "jpgraph.php" library since + all functionality is included in this library file.

+   +require_once "jpgraph_antispam.php";
+

+

Secondly a new instance of the class AntiSpam must be + created

+ $spam = new  +AntiSpam(); +

+

Thirdly the string to be used in the challenge must be + specified. To automatically generate a suitable string use

+   +// The argument determines the length of the generated string +
$chars $spam-> +Rand(5);
+

+

If instead the string to be used should be specified this string + should be specified in the initial creation of the AntiSpam() or by + calling the Set() method as in

+  $spam-> +Set("aui8k");
+

+

Please note that in order to minimize the risk for confusion the + letters 'O' and the number '0' (zero) is not allowed since they are too + alike and can be mistaken for each other.

+

The final and fourth step is to output the image with a call + the method Stroke() on the created instance of the AntiSpam + class.

if( $spam->Stroke +() === false  +) { +
    die(
"Illegal or no data to plot"); +
}

+

Note that we have put a guard around the output since in the case of + an error this method will result a boolean false value. As with the + other graph types it is possible to write the generated image to a file + by submitting a file name as an argument to Stroke().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/1221AdjustingthesizeoftheLEDdigits.html b/html/includes/jpgraph/docs/html/1221AdjustingthesizeoftheLEDdigits.html new file mode 100644 index 0000000000..6720b8d51b --- /dev/null +++ b/html/includes/jpgraph/docs/html/1221AdjustingthesizeoftheLEDdigits.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

12.2.1 Adjusting the size of the LED digits

+ There are two parameters that can be used to alter the size of the LED + digits. +
    +
  • The size (in pixels) of each "led diode"
  • +
  • The distance, specified as fractions of the "led diode" size + between each "led diode"
  • +
+ These two parameters are given in the constructor which has the + signature DigitalLED74::DigitalLED74($aRadius=2,$aMargin=0.6) + as can be seen from the above signature the default size is 2 pixels in + size and a fraction of 0.6 as the distance.
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/122GeneratingLEDlikedigitswithJpGraph.html b/html/includes/jpgraph/docs/html/122GeneratingLEDlikedigitswithJpGraph.html new file mode 100644 index 0000000000..30ccf9a34f --- /dev/null +++ b/html/includes/jpgraph/docs/html/122GeneratingLEDlikedigitswithJpGraph.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

12.2 Generating LED-like digits with JpGraph

+ Starting with v1.21 it is possible to generate LED like digits with + JpGraph. This is accomplished by the usage of the "jpgraph_led.php" + module. +

The creation of LED digits and letters are extremely simple. The + following complete example demonstrates the creation of a LED display

  +
+
include  +"../jpgraph.php"; +
include 
"../jpgraph_led.php"; +
+
+// By default each "LED" circle has a radius of 3 pixels +
$led  += new DigitalLED74 +(); +
$led->Stroke( +'0123456789. ABCDEFGHIJKL', +LEDC_GREEN);  +

+

The result of running this script can be seen by running the + "Examples/ledex1.php" Example in the example directory. As can be seen + from the above example the color to be used for the LED digits is + specified as the second argument to the DigitalLED74::Stroke() method. + Available color for LED digits is given by the table below

+ + + + + + + +
Symbolic nameColor
LEDC_REDRed
LEDC_GREENGreen
LEDC_BLUEBlue
LEDC_YELLOWYellow
GREYGrey
+ Since the standard LED matrix of 7x4 dots does not lend itself to + accurately represent all normal ASCII characters only the following + numbers and letters can be displayed. + + + +
All digits, 0-9
Capital Letters, A-L
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/12AntiSpamChallenges.html b/html/includes/jpgraph/docs/html/12AntiSpamChallenges.html new file mode 100644 index 0000000000..9140d8d2b0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/12AntiSpamChallenges.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

12 Anti-Spam Challenges

+

JpGraph includes a module to easily generate Anti-Spam challenges. + With this we mean an image consisting of numbers and letters which are + very hard to read for an OCR program. This is often used to secure sign + up for bulletin boards, on-line mail system or mailing lists since this + very effectively prevent automatic sign up by robots (spam-bots).

+

The module in JpGraph responsible for this is + jpgraph_antispam.php and behaves as a simplified plot module.

+

The example below illustrates how such an image can look like

+
+
Figure 191: Simple illustration of spam challenge image [src]  +

+

+

Anti spam images have less functionality then the usual images + generated with JpGraph in order to keep this utility reasonable small. + The primary limitation is that there are now additional formatting + options for the images and the image generated will always use the + JPEG image format. Hence it is not possible to change this to use, + for example, PNG.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/12CodedefinesinJpGraph.html b/html/includes/jpgraph/docs/html/12CodedefinesinJpGraph.html new file mode 100644 index 0000000000..3248c4758d --- /dev/null +++ b/html/includes/jpgraph/docs/html/12CodedefinesinJpGraph.html @@ -0,0 +1,174 @@ + + + + + + + + + + +Contents +Previous +
+

12 Code defines in JpGraph

+

Various settings in JpGraph are controlled by overall DEFINEs in the + configuration file "jpg-config.inc". Most of these defines have default + values that should be valid for most usage.

+

In the rest of this chapter all constants are described with default + value and usage.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Define, default valueComment
"CACHE_DIR", "/tmp/jpgraph_cache/"The full + absolute name of directory to be used as a cache. This directory + must be readable and writable for PHP. Must end with '/'
"TTF_DIR", "/usr/local/fonts/ttf/" +Directory for JpGraph TTF fonts. Must end with '/' The fonts must follow + the naming conventions as used by the supplied TTF fonts in JpGraph.
"CSIMCACHE_DIR", "csimcache/"Directory for + cache directory for CSIM graphs. Must end with '/' Cache directory + specification for use with CSIM graphs that are using the cache. The + directory must be the filesystem name as seen by PHP and the 'http' + version must be the same directory but as seen by the HTTP server + relative to the 'htdocs' directory. If a relative path is specified it + is taken to be relative from where the image script is executed. Note: + The default setting is to create a subdirectory in the directory from + where the image script is executed and store all files there. As usual + this directory must be writable by the PHP process.
"CSIMCACHE_HTTP_DIR", "csimcache"Directory + for JpGraph TTF fonts. Must end with '/' Cache directory specification + for use with CSIM graphs that are using the cache. The directory must + be the filesystem name as seen by PHP and the 'http' version must be + the same directory but as seen by the HTTP server relative to the + 'htdocs' directory. If a relative path is specified it is taken to be + relative from where the image script is executed. Note: The default + setting is to create a subdirectory in the directory from where the + image script is executed and store all files there. As usual this + directory must be writable by the PHP process.
"CHINESE_TTF_FONT", "bkai00mp.ttf" Actual + name of the TTF file used together with FF_CHINESE aka FF_BIG5 This is + the TTF file being used when the font family is specified as either + FF_CHINESE or FF_BIG5
"LANGUAGE_CYRILLIC", false Special unicode + Cyrillic language support.
"CYRILLIC_FROM_WINDOWS", false If you are + setting this config to true the conversion will assume that the input + text is windows 1251, if false it will assume koi8-r
'MINCHO_TTF_FONT', 'ipam.ttf' Japanese + TrueType font used with FF_MINCHO
'PMINCHO_TTF_FONT', 'ipamp.ttf' Japanese + TrueType font used with FF_PMINCHO
'GOTHIC_TTF_FONT', 'ipag.ttf' Japanese + TrueType font used with FF_GOTHIC
'PGOTHIC_TTF_FONT', 'ipagp.ttf' Japanese + TrueType font used with FF_PGOTHIC
"INSTALL_PHP_ERR_HANDLER", false Determine + if the library should also setup the default PHP error handler to + generate a graphic error message. This is useful during development to + be able to see the error message as an image instead as a "red-cross" + in a page where an image is expected.
"CATCH_PHPERRMSG", true Should the library + examine the global php_errmsg string and convert any error in it to a + graphical representation. This is handy for the occasions when, for + example, header files cannot be found and this results in the graph not + being created and just a "red-cross" image would be seen. This should + be turned off for a production site.
"USE_LIBRARY_GD2",falseSpecify if we + should use GD 2.x or GD 1.x If you have GD 2.x installed it is + recommended that you use it since it will give a slightly, slightly + better visual appearance for arcs. If you don't have GD2 installed this + must be set to false!
'USE_TRUECOLOR',trueShould the image be a + truecolor image? Note 1: Can only be used with GD 2.0.2 and above. Note + 2: GD 2.0.1 + PHP 4.0.6 on Win32 crashes when trying to use truecolor. + Truecolor support is to be considered alpha since GD 2.x is still not + considered stable (especially on Win32). Note 3: MUST be enabled to get + background images working with GD2 Note 4: If enabled then truetype + fonts will look very ugly => You can't have both background images and + truetype fonts in the same image until these bugs has been fixed in GD + 2.01
"USE_CACHE",falseShould the cache be used + at all? By setting this to false no files will be generated in the + cache directory. The difference from READ_CACHE being that setting + READ_CACHE to false will still create the image in the cache directory + just not use it. By setting USE_CACHE=false no files will even be + generated in the cache directory.
"READ_CACHE",trueShould we try to find an + image in the cache before generating it? Set this define to false to + bypass the reading of the cache and always regenerate the image. Note + that even if reading the cache is disabled the cached will still be + updated with the newly generated image. Set also "USE_CACHE" below.
"DEFAULT_GFORMAT","auto"Default graphic + format set to "auto" which will automatically choose the best available + format in the order png,gif,jpg (The supported format depends on what + your PHP installation supports)
"USE_IMAGE_ERROR_HANDLER",true Determine + if the error handler should be image based or purely text based. Image + based makes it easier since the script will always return an image even + in case of errors.
"USE_APPROX_COLORS",trueIf the color + palette is full should JpGraph try to allocate the closest match? If + you plan on using background image or gradient fills it might be a good + idea to enable this. If not you will otherwise get an error saying that + the color palette is exhausted. The drawback of using approximations is + that the colors might not be exactly what you specified. Note1: This + does only apply to a palette image, not true color images since they + don't have the limitations of maximum number of colors.
"ERR_DEPRECATED",falseShould usage of + deprecated functions and parameters give a fatal error? (Useful to + check if code is future proof.)
"BRAND_TIMING",falseShould the time taken + to generate each picture be branded to the lower left in corner in each + generated image? Useful for performance measurements generating graphs
"BRAND_TIME_FORMAT","Generated in: %01.3fs" +What format should be used for the timing string?
+

The following defines should very rarely need to be changed

+

+ + + + + + + +
Define, default valueComment
"CACHE_FILE_GROUP","wwwadmin"What group + should the cached file belong to (Set to "" will give the default group + for the "PHP-user") Please note that the Apache user must be a member + of the specified group since otherwise it is impossible for Apache to + set the specified group.
"CACHE_FILE_MOD",0664What permissions + should the cached file have (Set to "" will give the default + permissions for the "PHP-user")
"USE_BRESENHAM",falseDecide if we should + use the Bresenham circle algorithm or the built in Arc(). Bresenham + gives better visual appearance of circles but is more CPU intensive and + slower then the built in Arc() function in GD. Turned off by default + for speed
"_CSIM_SPECIALFILE","_csim_special_" +Special file name to indicate that we only want to calc the image map in + the call to Graph::Stroke() used internally from the GetHTMLCSIM() + method.
"_CSIM_DISPLAY","_jpg_csimd"HTTP GET + argument that is used with image map to indicate to the script to just + generate the image and not the full CSIM HTML page.
+   +

 

+

&nbsp

+
+Contents +Previous + + diff --git a/html/includes/jpgraph/docs/html/12Howwasthismanualproduced.html b/html/includes/jpgraph/docs/html/12Howwasthismanualproduced.html new file mode 100644 index 0000000000..268b6b5663 --- /dev/null +++ b/html/includes/jpgraph/docs/html/12Howwasthismanualproduced.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

1.2 How was this manual produced?

+

The bulk of the text was written directly in Emacs on a GNU/Linux + system in a mixture of PHP and HTML. A number of PHP functions were + used to automate the handling of formatting example code and figures.

+

To generate the images automatically in the img directory a custom + awk-script is used to extract all the used image script from the + manual. The script then uses the client version of PHP generate the + images from the scripts and stores them in the 'img' directory.

+

The final set of HTML files was then processes by HTMLDOC to + construct table of contents and chapter links.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/131AdjustingthesizeoftheLEDdigits.html b/html/includes/jpgraph/docs/html/131AdjustingthesizeoftheLEDdigits.html new file mode 100644 index 0000000000..eaa3cac94f --- /dev/null +++ b/html/includes/jpgraph/docs/html/131AdjustingthesizeoftheLEDdigits.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

13.1 Adjusting the size of the LED digits

+ There are two parameters that can be used to alter the size of the LED + digits. +
    +
  • The size (in pixels) of each "led diode"
  • +
  • The distance, specified as fractions of the "led diode" size + between each "led diode"
  • +
+ These two parameters are given in the constructor which has the + signature DigitalLED74::DigitalLED74($aRadius=2,$aMargin=0.6) + as can be seen from the above signature the default size is 2 pixels in + size and a fraction of 0.6 as the distance.
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/132ImprovingtheLEDswithsupersampling.html b/html/includes/jpgraph/docs/html/132ImprovingtheLEDswithsupersampling.html new file mode 100644 index 0000000000..938dd29748 --- /dev/null +++ b/html/includes/jpgraph/docs/html/132ImprovingtheLEDswithsupersampling.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+ +

13.2 Improving the LEDs with supersampling

+ In order to improve the visual appearance the library uses + super-sampling in order to create an anti-aliased image of the LED + digits. The default level of super-sampling is 3 times (oversampling). + In order reduce the CPU load the amount of oversampling can be lowered. + The level of super-sampling is controlled via the method +DigitalLed74::SetSupersampling::($aSuperSampling=3) +

For example setting the oversampling to "1" is the same thing as + disabling super-sampling. This will generate a fast image but a LED + appearance that looks quite "rugged".

+

Increasing the level of oversampling above "4" gives almost no + visual improvement to the resulting image, it will only increase the + CPU time needed to create the final image. Hence it is recommended that + the super-sampling is only specified as an integer in the range one to + four.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/13CodedefinesinJpGraph.html b/html/includes/jpgraph/docs/html/13CodedefinesinJpGraph.html new file mode 100644 index 0000000000..c2210d64a7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/13CodedefinesinJpGraph.html @@ -0,0 +1,175 @@ + + + + + + + + + + +Contents +Previous +
+ +

13 Code defines in JpGraph

+

Various settings in JpGraph are controlled by overall DEFINEs in the + configuration file "jpg-config.inc.php". Most of these defines have + default values that should be valid for most usage.

+

In the rest of this chapter all constants are described with default + value and usage.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Define, default valueComment
"CACHE_DIR", "/tmp/jpgraph_cache/"The full + absolute name of directory to be used as a cache. This directory + must be readable and writable for PHP. Must end with '/'
"TTF_DIR", "/usr/local/fonts/ttf/" +Directory for JpGraph TTF fonts. Must end with '/' The fonts must follow + the naming conventions as used by the supplied TTF fonts in JpGraph.
"CSIMCACHE_DIR", "csimcache/"Directory for + cache directory for CSIM graphs. Must end with '/' Cache directory + specification for use with CSIM graphs that are using the cache. The + directory must be the filesystem name as seen by PHP and the 'http' + version must be the same directory but as seen by the HTTP server + relative to the 'htdocs' directory. If a relative path is specified it + is taken to be relative from where the image script is executed. Note: + The default setting is to create a subdirectory in the directory from + where the image script is executed and store all files there. As usual + this directory must be writable by the PHP process.
"CSIMCACHE_HTTP_DIR", "csimcache"Directory + for JpGraph TTF fonts. Must end with '/' Cache directory specification + for use with CSIM graphs that are using the cache. The directory must + be the filesystem name as seen by PHP and the 'http' version must be + the same directory but as seen by the HTTP server relative to the + 'htdocs' directory. If a relative path is specified it is taken to be + relative from where the image script is executed. Note: The default + setting is to create a subdirectory in the directory from where the + image script is executed and store all files there. As usual this + directory must be writable by the PHP process.
"CHINESE_TTF_FONT", "bkai00mp.ttf" Actual + name of the TTF file used together with FF_CHINESE aka FF_BIG5 This is + the TTF file being used when the font family is specified as either + FF_CHINESE or FF_BIG5
"LANGUAGE_CYRILLIC", false Special unicode + Cyrillic language support.
"CYRILLIC_FROM_WINDOWS", false If you are + setting this config to true the conversion will assume that the input + text is windows 1251, if false it will assume koi8-r
'MINCHO_TTF_FONT', 'ipam.ttf' Japanese + TrueType font used with FF_MINCHO
'PMINCHO_TTF_FONT', 'ipamp.ttf' Japanese + TrueType font used with FF_PMINCHO
'GOTHIC_TTF_FONT', 'ipag.ttf' Japanese + TrueType font used with FF_GOTHIC
'PGOTHIC_TTF_FONT', 'ipagp.ttf' Japanese + TrueType font used with FF_PGOTHIC
"INSTALL_PHP_ERR_HANDLER", false Determine + if the library should also setup the default PHP error handler to + generate a graphic error message. This is useful during development to + be able to see the error message as an image instead as a "red-cross" + in a page where an image is expected.
"CATCH_PHPERRMSG", true Should the library + examine the global php_errmsg string and convert any error in it to a + graphical representation. This is handy for the occasions when, for + example, header files cannot be found and this results in the graph not + being created and just a "red-cross" image would be seen. This should + be turned off for a production site.
"USE_LIBRARY_GD2",falseSpecify if we + should use GD 2.x or GD 1.x If you have GD 2.x installed it is + recommended that you use it since it will give a slightly, slightly + better visual appearance for arcs. If you don't have GD2 installed this + must be set to false!
'USE_TRUECOLOR',trueShould the image be a + truecolor image? Note 1: Can only be used with GD 2.0.2 and above. Note + 2: GD 2.0.1 + PHP 4.0.6 on Win32 crashes when trying to use truecolor. + Truecolor support is to be considered alpha since GD 2.x is still not + considered stable (especially on Win32). Note 3: MUST be enabled to get + background images working with GD2 Note 4: If enabled then truetype + fonts will look very ugly => You can't have both background images and + truetype fonts in the same image until these bugs has been fixed in GD + 2.01
"USE_CACHE",falseShould the cache be used + at all? By setting this to false no files will be generated in the + cache directory. The difference from READ_CACHE being that setting + READ_CACHE to false will still create the image in the cache directory + just not use it. By setting USE_CACHE=false no files will even be + generated in the cache directory.
"READ_CACHE",trueShould we try to find an + image in the cache before generating it? Set this define to false to + bypass the reading of the cache and always regenerate the image. Note + that even if reading the cache is disabled the cached will still be + updated with the newly generated image. Set also "USE_CACHE" below.
"DEFAULT_GFORMAT","auto"Default graphic + format set to "auto" which will automatically choose the best available + format in the order png,gif,jpg (The supported format depends on what + your PHP installation supports)
"USE_IMAGE_ERROR_HANDLER",true Determine + if the error handler should be image based or purely text based. Image + based makes it easier since the script will always return an image even + in case of errors.
"USE_APPROX_COLORS",trueIf the color + palette is full should JpGraph try to allocate the closest match? If + you plan on using background image or gradient fills it might be a good + idea to enable this. If not you will otherwise get an error saying that + the color palette is exhausted. The drawback of using approximations is + that the colors might not be exactly what you specified. Note1: This + does only apply to a palette image, not true color images since they + don't have the limitations of maximum number of colors.
"ERR_DEPRECATED",falseShould usage of + deprecated functions and parameters give a fatal error? (Useful to + check if code is future proof.)
"BRAND_TIMING",falseShould the time taken + to generate each picture be branded to the lower left in corner in each + generated image? Useful for performance measurements generating graphs
"BRAND_TIME_FORMAT","Generated in: %01.3fs" +What format should be used for the timing string?
+

The following defines should very rarely need to be changed

+

+ + + + + + + +
Define, default valueComment
"CACHE_FILE_GROUP","wwwadmin"What group + should the cached file belong to (Set to "" will give the default group + for the "PHP-user") Please note that the Apache user must be a member + of the specified group since otherwise it is impossible for Apache to + set the specified group.
"CACHE_FILE_MOD",0664What permissions + should the cached file have (Set to "" will give the default + permissions for the "PHP-user")
"USE_BRESENHAM",falseDecide if we should + use the Bresenham circle algorithm or the built in Arc(). Bresenham + gives better visual appearance of circles but is more CPU intensive and + slower then the built in Arc() function in GD. Turned off by default + for speed
"_CSIM_SPECIALFILE","_csim_special_" +Special file name to indicate that we only want to calc the image map in + the call to Graph::Stroke() used internally from the GetHTMLCSIM() + method.
"_CSIM_DISPLAY","_jpg_csimd"HTTP GET + argument that is used with image map to indicate to the script to just + generate the image and not the full CSIM HTML page.
+   +

 

+

&nbsp

+
+Contents +Previous + + diff --git a/html/includes/jpgraph/docs/html/13GeneratingLEDlikedigitswithJpGraph.html b/html/includes/jpgraph/docs/html/13GeneratingLEDlikedigitswithJpGraph.html new file mode 100644 index 0000000000..37570d11f2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/13GeneratingLEDlikedigitswithJpGraph.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

13 Generating LED-like digits with JpGraph

+ Starting with v1.21 it is possible to generate LED like digits with + JpGraph. This is accomplished by the usage of the "jpgraph_led.php" + module. +

The creation of LED digits and letters are extremely simple. The + following complete example demonstrates the creation of a LED display

  +
+
include  +"../jpgraph.php"; +
include 
"../jpgraph_led.php"; +
+
+// By default each "LED" circle has a radius of 3 pixels +
$led  += new DigitalLED74 +(); +
$led->Stroke( +'0123456789. ABCDEFGHIJKL', +LEDC_GREEN);  +

+

The result of running this script can be seen by running the + "Examples/ledex1.php" Example in the example directory. As can be seen + from the above example the color to be used for the LED digits is + specified as the second argument to the DigitalLED74::Stroke() method. + Available color for LED digits is given by the table below

+ + + + + + + +
Symbolic nameColor
LEDC_REDRed
LEDC_GREENGreen
LEDC_BLUEBlue
LEDC_YELLOWYellow
GREYGrey
+

Since the standard LED matrix of 7x4 dots does not lend itself to + accurately represent all normal ASCII characters only the following + numbers and letters can be displayed.

+ + + +
All digits, 0-9
Capital Letters, A-L
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/14CodedefinesinJpGraph.html b/html/includes/jpgraph/docs/html/14CodedefinesinJpGraph.html new file mode 100644 index 0000000000..215516cf8d --- /dev/null +++ b/html/includes/jpgraph/docs/html/14CodedefinesinJpGraph.html @@ -0,0 +1,174 @@ + + + + + + + + + + +Contents +Previous +
+

14 Code defines in JpGraph

+

Various settings in JpGraph are controlled by overall DEFINEs in the + configuration file "jpg-config.inc.php". Most of these defines have + default values that should be valid for most usage.

+

In the rest of this chapter all constants are described with default + value and usage.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Define, default valueComment
"CACHE_DIR", "/tmp/jpgraph_cache/"The full + absolute name of directory to be used as a cache. This directory + must be readable and writable for PHP. Must end with '/'
"TTF_DIR", "/usr/local/fonts/ttf/" +Directory for JpGraph TTF fonts. Must end with '/' The fonts must follow + the naming conventions as used by the supplied TTF fonts in JpGraph.
"CSIMCACHE_DIR", "csimcache/"Directory for + cache directory for CSIM graphs. Must end with '/' Cache directory + specification for use with CSIM graphs that are using the cache. The + directory must be the filesystem name as seen by PHP and the 'http' + version must be the same directory but as seen by the HTTP server + relative to the 'htdocs' directory. If a relative path is specified it + is taken to be relative from where the image script is executed. Note: + The default setting is to create a subdirectory in the directory from + where the image script is executed and store all files there. As usual + this directory must be writable by the PHP process.
"CSIMCACHE_HTTP_DIR", "csimcache"Directory + for JpGraph TTF fonts. Must end with '/' Cache directory specification + for use with CSIM graphs that are using the cache. The directory must + be the filesystem name as seen by PHP and the 'http' version must be + the same directory but as seen by the HTTP server relative to the + 'htdocs' directory. If a relative path is specified it is taken to be + relative from where the image script is executed. Note: The default + setting is to create a subdirectory in the directory from where the + image script is executed and store all files there. As usual this + directory must be writable by the PHP process.
"CHINESE_TTF_FONT", "bkai00mp.ttf" Actual + name of the TTF file used together with FF_CHINESE aka FF_BIG5 This is + the TTF file being used when the font family is specified as either + FF_CHINESE or FF_BIG5
"LANGUAGE_CYRILLIC", false Special unicode + Cyrillic language support.
"CYRILLIC_FROM_WINDOWS", false If you are + setting this config to true the conversion will assume that the input + text is windows 1251, if false it will assume koi8-r
'MINCHO_TTF_FONT', 'ipam.ttf' Japanese + TrueType font used with FF_MINCHO
'PMINCHO_TTF_FONT', 'ipamp.ttf' Japanese + TrueType font used with FF_PMINCHO
'GOTHIC_TTF_FONT', 'ipag.ttf' Japanese + TrueType font used with FF_GOTHIC
'PGOTHIC_TTF_FONT', 'ipagp.ttf' Japanese + TrueType font used with FF_PGOTHIC
"INSTALL_PHP_ERR_HANDLER", false Determine + if the library should also setup the default PHP error handler to + generate a graphic error message. This is useful during development to + be able to see the error message as an image instead as a "red-cross" + in a page where an image is expected.
"CATCH_PHPERRMSG", true Should the library + examine the global php_errmsg string and convert any error in it to a + graphical representation. This is handy for the occasions when, for + example, header files cannot be found and this results in the graph not + being created and just a "red-cross" image would be seen. This should + be turned off for a production site.
"USE_LIBRARY_GD2",falseSpecify if we + should use GD 2.x or GD 1.x If you have GD 2.x installed it is + recommended that you use it since it will give a slightly, slightly + better visual appearance for arcs. If you don't have GD2 installed this + must be set to false!
'USE_TRUECOLOR',trueShould the image be a + truecolor image? Note 1: Can only be used with GD 2.0.2 and above. Note + 2: GD 2.0.1 + PHP 4.0.6 on Win32 crashes when trying to use truecolor. + Truecolor support is to be considered alpha since GD 2.x is still not + considered stable (especially on Win32). Note 3: MUST be enabled to get + background images working with GD2 Note 4: If enabled then truetype + fonts will look very ugly => You can't have both background images and + truetype fonts in the same image until these bugs has been fixed in GD + 2.01
"USE_CACHE",falseShould the cache be used + at all? By setting this to false no files will be generated in the + cache directory. The difference from READ_CACHE being that setting + READ_CACHE to false will still create the image in the cache directory + just not use it. By setting USE_CACHE=false no files will even be + generated in the cache directory.
"READ_CACHE",trueShould we try to find an + image in the cache before generating it? Set this define to false to + bypass the reading of the cache and always regenerate the image. Note + that even if reading the cache is disabled the cached will still be + updated with the newly generated image. Set also "USE_CACHE" below.
"DEFAULT_GFORMAT","auto"Default graphic + format set to "auto" which will automatically choose the best available + format in the order png,gif,jpg (The supported format depends on what + your PHP installation supports)
"USE_IMAGE_ERROR_HANDLER",true Determine + if the error handler should be image based or purely text based. Image + based makes it easier since the script will always return an image even + in case of errors.
"USE_APPROX_COLORS",trueIf the color + palette is full should JpGraph try to allocate the closest match? If + you plan on using background image or gradient fills it might be a good + idea to enable this. If not you will otherwise get an error saying that + the color palette is exhausted. The drawback of using approximations is + that the colors might not be exactly what you specified. Note1: This + does only apply to a palette image, not true color images since they + don't have the limitations of maximum number of colors.
"ERR_DEPRECATED",falseShould usage of + deprecated functions and parameters give a fatal error? (Useful to + check if code is future proof.)
"BRAND_TIMING",falseShould the time taken + to generate each picture be branded to the lower left in corner in each + generated image? Useful for performance measurements generating graphs
"BRAND_TIME_FORMAT","Generated in: %01.3fs" +What format should be used for the timing string?
+

The following defines should very rarely need to be changed

+

+ + + + + + + +
Define, default valueComment
"CACHE_FILE_GROUP","wwwadmin"What group + should the cached file belong to (Set to "" will give the default group + for the "PHP-user") Please note that the Apache user must be a member + of the specified group since otherwise it is impossible for Apache to + set the specified group.
"CACHE_FILE_MOD",0664What permissions + should the cached file have (Set to "" will give the default + permissions for the "PHP-user")
"USE_BRESENHAM",falseDecide if we should + use the Bresenham circle algorithm or the built in Arc(). Bresenham + gives better visual appearance of circles but is more CPU intensive and + slower then the built in Arc() function in GD. Turned off by default + for speed
"_CSIM_SPECIALFILE","_csim_special_" +Special file name to indicate that we only want to calc the image map in + the call to Graph::Stroke() used internally from the GetHTMLCSIM() + method.
"_CSIM_DISPLAY","_jpg_csimd"HTTP GET + argument that is used with image map to indicate to the script to just + generate the image and not the full CSIM HTML page.
+   +

 

+

&nbsp

+
+Contents +Previous + + diff --git a/html/includes/jpgraph/docs/html/1Aboutthismanual.html b/html/includes/jpgraph/docs/html/1Aboutthismanual.html new file mode 100644 index 0000000000..5413d49269 --- /dev/null +++ b/html/includes/jpgraph/docs/html/1Aboutthismanual.html @@ -0,0 +1,32 @@ + + + + + + + + + + +Contents +Next +
+

1 About this manual

+

+
+Contents +Next + + diff --git a/html/includes/jpgraph/docs/html/21Version.html b/html/includes/jpgraph/docs/html/21Version.html new file mode 100644 index 0000000000..ebb6c0628a --- /dev/null +++ b/html/includes/jpgraph/docs/html/21Version.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.1 Version

+

This manual covers versions up to 1.21 of JpGraph. A 2D graph + plotting library for PHP4 and PHP5.

+

The library exists in two main tracks, the 1.x track and the 2.x + track. From a functional perspective both branches are equivalent. The + difference is that 1.x is suitable for PHP4 and 2.x is suitable for + PHP5.

+

Please make sure you use the correct version ! The 1.x version will + not in general wotk on PHP5 installation and vice versa.

+

Even though the library is known to work with version of PHP prior + to 4.3 and 5.1 respectively the library is not tested nor is it + recommended to run with any older versions of PHP.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/22SoftwareLicense.html b/html/includes/jpgraph/docs/html/22SoftwareLicense.html new file mode 100644 index 0000000000..b7b9e2b3d8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/22SoftwareLicense.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.2 Software License

+

JpGraph is released under a dual license. For non-comercial usage + the library is released uner QPL 1.0 (Qt-License) and under the JpGraph + Professional License for commercial use. Commercial use is defined as + either a) The library is included as an integral part of a product that + is sold with a cost that exceeds the cost of the distribution medium. + b) The library is offered as a WEB service for a fee c) The library is + used on an intranet in a company with more than 5 employees

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/23JpGraphFeatures.html b/html/includes/jpgraph/docs/html/23JpGraphFeatures.html new file mode 100644 index 0000000000..53b0cff27f --- /dev/null +++ b/html/includes/jpgraph/docs/html/23JpGraphFeatures.html @@ -0,0 +1,86 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.3 JpGraph Features

+

JpGraph library is an OO graph library which makes it easy to both + draw a "quick and dirty" graph with a minimum of code and quite complex + graphs which requires a very fine grain of control. The library tries + to assign sensible default values for most parameters hence making the + learning curve quite flat since for most of the time very few commands + is required to draw graphs with a pleasing esthetic look.

+

Some highlights of available features are

+
    +
  • Flexible scales, supports text-lin, text-log, lin-lin, lin-log, + log-lin and log-log and integer scales.
  • +
  • Supports both PNG, GIF and JPG graphic formats. Note that the + available formats are dependent on the specific PHP installation where + the library is used.
  • +
  • Supports caching of generated graphs to lessen burden of a HTTP + server.
  • +
  • Supports batch mode to only generate images to a file
  • +
  • Supports client side image maps which makes it easy to produce drill + down images.
  • +
  • Intelligent auto-scaling which gravitates towards esthetic values, + i.e. multiples of 2:s and 5:s
  • +
  • Fully supports manual scaling, with fine grain control of position + of ticks.
  • +
  • Supports background images with different formatting options
  • +
  • Supports color and brightness adjustments of images directly in PHP.
  • +
  • User specified grace for auto-scaling
  • +
  • Supports up to two different y-scale, it is possible to have + different left and right y-scale and add plots to both
  • +
  • Supports, line-plots, filled line-plots, accumulated line-plots, bar + plots, accumulated bar plots, grouped bar plots, error plots, line + error plots, scatter plots, gantt-charts, radar plots, 2D and 3D pie + charts.
  • +
  • Supports unlimited number of plots in each graph, makes it easy to + compose complex graph which consists of several plot types
  • +
  • User specified position of axis
  • +
  • Supports color gradient fill in seven styles
  • +
  • Designed as a flexible OO framework which makes it easy to add new + types of plots
  • +
  • Supports automatic legend generation
  • +
  • Supports both vertical and horizontal grids
  • +
  • Supports anti-aliasing of lines
  • +
  • Supports background images as well as unlimited number of icons in + the graph
  • +
  • Supports rotation of linear graphs
  • +
  • More then 400 named colors
  • +
  • Designed modularly - you don't have to include code which isn't used
  • +
  • ...and many many more features
  • +
+

In addition to these high level features the library has been + designed to be orthogonal and consistent in its' naming convention. For + example, to specify color each object (i.e. axis, grids, texts, titles + etc) within the graph implements the method SetColor() with the same + signature.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/24Gettingthelatestversion.html b/html/includes/jpgraph/docs/html/24Gettingthelatestversion.html new file mode 100644 index 0000000000..48320d4a5b --- /dev/null +++ b/html/includes/jpgraph/docs/html/24Gettingthelatestversion.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.4 Getting the latest version

+

The latest version of jpgraph can always be found on +http://www.aditus.nu/jpgraph/

+

Information on version numbering schema

+
    +
  • 1.x -> 1.x.y, Bug fix release 'y' for version 1.x does not introduce + new features
  • +
  • 1.x -> 1.(x+1), Added functionality. Mostly keeping backwards + compatibility unless a very good reason not to. All SC breaks will be + well announced in release notes and might be small things like a + misspelled method name compared to the proper English spelling.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/25Plannedfutureaddition.html b/html/includes/jpgraph/docs/html/25Plannedfutureaddition.html new file mode 100644 index 0000000000..aa11849306 --- /dev/null +++ b/html/includes/jpgraph/docs/html/25Plannedfutureaddition.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.5 Planned future addition

+

For the latest update on planned future version see the web-site for + JpGraph at http://www.aditus.nu/jpgraph/

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/26Knownbugsandomissions.html b/html/includes/jpgraph/docs/html/26Knownbugsandomissions.html new file mode 100644 index 0000000000..1bddf30716 --- /dev/null +++ b/html/includes/jpgraph/docs/html/26Knownbugsandomissions.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.6 Known bugs and omissions

+

+
    +
  • For performance and quality reason background images are not rotated + along with graphs in rotated graphs.
  • +
+

For an overview of current issues that have been reported and are + unders investigation please see our DMS (Defect Management System) + available at +http://wwww.aditus.nu/bugtraq/

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/27Acknowledgments.html b/html/includes/jpgraph/docs/html/27Acknowledgments.html new file mode 100644 index 0000000000..c892a64c4c --- /dev/null +++ b/html/includes/jpgraph/docs/html/27Acknowledgments.html @@ -0,0 +1,55 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.7 Acknowledgments

+

The idea for writing this library grew out of our own need for a + high quality graph drawing library for PHP. When evaluating potential + existing libraries we found (at that time around 2000) these three

+
    +
  1. "chart 0.3" http://quimby.gnus.org/circus/chart/chart-0.3.tar.gz, + by Lars Magne Ingebrigtsen
  2. +
  3. "ykcee.php", http://ykcee.sourceforge.net
  4. +
  5. "phplot.php", http://www.phplot.com
  6. +
+

All these libraries implements some fine graphic features but + unfortunately none of those completely fulfilled our needs either for + available functionality (for example none of these supported both two + Y-scales, auto-scaling, and logarithmic scales), or general + flexibility. We especially needed the option of two Y-scales, which + none of the above packages supported. Our own preferences for design + was closest to "chart 0.3" so we started by fixing some bugs in that + package and adding some new features. However It was soon realized that + to add all the features and flexibility we needed to "chart 0.3" it + would require a complete rewrite since the original design wasn't + flexible enough, especially adding a second Y-scale would require a + more flexible OO architecture.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/28Reportingbugsandsuggestingimprovements.html b/html/includes/jpgraph/docs/html/28Reportingbugsandsuggestingimprovements.html new file mode 100644 index 0000000000..1c334eb0fd --- /dev/null +++ b/html/includes/jpgraph/docs/html/28Reportingbugsandsuggestingimprovements.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.8 Reporting bugs and suggesting improvements

+

Defects or suggestion for new features can be entered using the +JpGraph BugTracker available at +http://www.aditus.nu/bugtraq/

+

Before reporting bugs or feature suggestions may we ask that the + following facts are considered.

+
    +
  • The 1.x version of the library does not work with PHP 5.x
  • +
  • The 1.x version of the library is only guaranteed to work with PHP + versions >= 4.3
  • +
  • The 2.x version of the library does not work with PHP 4.x
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/29Gettingsupport.html b/html/includes/jpgraph/docs/html/29Gettingsupport.html new file mode 100644 index 0000000000..967c6ef8c3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/29Gettingsupport.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2.9 Getting support

+

Customers who have acquired the pro-version of the library are + entitled to prioritized e-mail support for a specific time after the + purchase. Support tickets may be created by first logging in to +http://www.aditus.nu/jpgraph/pro_login.php and then create a support + ticket.

+

For other users a public community forum is available at +http://jpgraph.intellit.nl/ where many common questions are answered + and discussed.

+

A collection of FAQ is available at +http://www.aditus.nu/jpgraph/jpgraphfaq.php

+

In addition there is a growing list of "HowTo" documents available + at +http://www.aditus.nu/jpgraph/jpgraphowto.php

+

Finally, we regret that we are unable to provide general support + regarding PHP/GD/TTF/Apache installation outside the specific scope of + the JpGraph library. Please see the corresponding documentation and + relevant FAQ for those products.

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/2Introduction.html b/html/includes/jpgraph/docs/html/2Introduction.html new file mode 100644 index 0000000000..06c72d9521 --- /dev/null +++ b/html/includes/jpgraph/docs/html/2Introduction.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

2 Introduction

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/311VerifyingthatyouhavetheGDlibraryinstalled.html b/html/includes/jpgraph/docs/html/311VerifyingthatyouhavetheGDlibraryinstalled.html new file mode 100644 index 0000000000..c3f44455c8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/311VerifyingthatyouhavetheGDlibraryinstalled.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.1.1 Verifying that you have the GD library + installed

+

In order to make sure that the GD installed the following example + would be run. The example creates a very simple image using just pure + GD calls and outputs an image in PNG format. This could be considered a + smoke-test to see that the GD library is available from PHP. Please + note that this is an absolute pre-requisite in order for the + JpGraph library to work at all.

+

Store the code snippet below somewhere in the document root and make + sure it runs correctly.

+  $im = @ +ImageCreate ( +150100) +
    or die (
+"Cannot create a new GD image."); +
$background_color  += ImageColorAllocate  +($im255 +255255); +
$text_color  += ImageColorAllocate  +($im233 +1491); +
ImageString  +($im1 +55,  "A Simple Text String"$text_color +); +
header ("Content-type: image/png"); +
ImagePng ($im); +

+

If the above script does not work or some error or warnings are + printed on the screen then it is necessary to correct those problems + before proceeding with the installation.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/312VerifyingthatyouhaveGD2installed.html b/html/includes/jpgraph/docs/html/312VerifyingthatyouhaveGD2installed.html new file mode 100644 index 0000000000..16898765a0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/312VerifyingthatyouhaveGD2installed.html @@ -0,0 +1,78 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.1.2 Verifying that you have GD2 installed

+

To access the more advanced features of JpGraph needs the GD 2.x + library. This will allow the use of features such as alpha-blending and + trucolor images.

+

The GD 2.x library is included in all standard PHP versions from + 4.2.x and above. To make sure that the GD 2.x library is installed the + following script must be working.

+  $im  +imagecreatetruecolor ( +300200);  +
$black imagecolorallocate ($im +000 +);  +
$white imagecolorallocate ($im +255255255 +);  +
+
imagefilledrectangle +($im,0, +0,399,99 +,$white);  +
imagerectangle +($im,20, +20,250,190 +,$black);  +
+
header ("Content-type: image/png" +);  +
imagepng ($im); +

+

After running this script you should now see a black rectangle in + your browser.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/313PreparingTrueTypeFontFiles.html b/html/includes/jpgraph/docs/html/313PreparingTrueTypeFontFiles.html new file mode 100644 index 0000000000..ff8f0b640e --- /dev/null +++ b/html/includes/jpgraph/docs/html/313PreparingTrueTypeFontFiles.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.1.3 Preparing True Type Font Files

+

JpGraph contains as default a standard set of bitmap fonts which + only supports the standard ASCII 7-bit character set. In order to use + accented characters, UTF-8, Chinese, Japanese, etc You need to download + TTF fonts. Due to various legal issues no TTF fonts are supplied in the + JpGraph package. To enable TTF fonts there are three alternatives:

+
    +
  1. If you are on a Windows platform you can just point to the TTF + directory in JpGraph to the standard fonts directory (e.g + C:\windows\fonts\)
  2. +
  3. If you are on a Unix platform you can download and install the core + MS WEB-initiative fonts from +http://corefonts.sourceforge.net/
  4. +
  5. It is also possible to use the Vera Bitstream TTF fonts available + from http://www.gnome.org/fonts/ +
  6. +
+

It is also necessary to make sure that the PHP installation supports + TTF fonts (either through FreeType 1 or FreeType 2 libraries). I n + addition some suitable TTF font files must also be available. To make + the font files available for the library the directory path to the + location of the font files must be specified in the configuration file, + jpg-config.inc.php

+

JpGraph uses a standard naming convention for the TTF font files in + order to be able to find the correct font files. This naming convention + follows the standard naming of the available font files.

+

If the installation of the library is made on a computer running MS + Windows then it is recommended to use the already available font files + in Windows (usually located in C:\WINDOWS\FONTS).

+

If the installation is made on a UNIX derivate running X11 then the + font location can differ between versions and UNIX brands. One commonly + used path is "/usr/X11R6/lib/X11/fonts/truetype/".

+

Finally we note that it is possible to install additional fonts not + natively supported by the library. Since this requires augmenting the + library files this is considered advanced use and not further discussed + in this introduction.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/314UsingnonlatinbasedfontswithJpGraph.html b/html/includes/jpgraph/docs/html/314UsingnonlatinbasedfontswithJpGraph.html new file mode 100644 index 0000000000..d03adc238c --- /dev/null +++ b/html/includes/jpgraph/docs/html/314UsingnonlatinbasedfontswithJpGraph.html @@ -0,0 +1,91 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.1.4 Using non-latin based fonts with JpGraph

+

In addition to European font it is also possible to use non-latin + based fonts such as Cyrillic, Japanese and Chinese.

+

In all cases a suitable TTF font that supports the non-latin based + language must be available.

+

For Cyrillic support the define LANGUAGE_CYRILLIC in jpg-config.php + must be set to true. It is then possible to use a suitable Cyrillic + font as replacement for the ordinary fonts.

+

For Chinese character set JpGraph supports both BIG5 and GB2312 + encoding. For BIG5 encoding the PHP installation must have support for + the "iconv()" function. Furthermore the define CHINESE_TTF_FONT must be + set to the name of the Chinese BIG5 font that is to be used. By default + this is set to "bkai00mp.ttf". To use the Chinese BIG5 font in the + scripts one must then specify the font family as FF_CHINESE.

+

To use the alternative font files "simsun.ttc" and "simhei.ttf" + (which uses the GB2312 encoding) the only step needed is to install + those fonts in the normal TTF font directory and then specify the font + family as FF_SIMSUN, the "simhei.ttf" is used when the font style is + specified as FS_BOLD.

+

3.1.4.1 Japanese character support

+ Using Japanese fonts are supported by the pre-defined font families +
    +
  • FF_MINCHO
  • +
  • FF_PMINCHO
  • +
  • FF_GOTHIC
  • +
  • FF_PGOTHIC
  • +
+ Please note that the actual font files is not included in the library. + The exact name of the font files to use for these families are defined + in the the configuration file "jpg-config.inc.php.php". +

Some care must be taken due to the encoding that the library + expects. The library TTF handling expects the fonts to be encoded in + UTF8 encoding. Since the most commonly used Japanese encoding is EUC-JP + some conversion must be done. The best way to do this is by using the + mbstring extension to PHP to handle the encoding. By default this + module is not included and to compile PHP with support for mbstring the + option "--enable-mbstring" must be given when compiling PHP. Your + installation of PHP might also provide mbstring as a PHP module that is + loaded at runtime.

+

To convert from EUC-JP the function mb_convert_encoding() is + used as the following example shows.

+
+$utf8-encoded-text = mb_convert_encoding($eucjp-encoded-txt, 'UTF-8','EUC-JP');
+
+ By enabling the define "ASSUME_EUCJP_ENCODING" (in + jpg-config.inc.php.php) this encoding is done automatically in the + library when one of the Japanese fonts have been enabled. By default + this automatic conversion is disabled. +

If this define is false then it is up to the client to make sure + that the proper utf8 encoded text is passed on to all the methods that + are use to specify text in the library given that one of the Japanese + fonts have been selected.

+

A different method also exists when it comes to Japanese font + support. By compiling PHP with the option "--enable-gd-jis-conv" this + will automatically convert Japanese characters to UTF8 when using the + FreeType libraries. However the method with the mbstring module is + preferred since the automatic conversion might on occasion fail to + detect the proper encoding.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/31Preparation.html b/html/includes/jpgraph/docs/html/31Preparation.html new file mode 100644 index 0000000000..0657ef6f64 --- /dev/null +++ b/html/includes/jpgraph/docs/html/31Preparation.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.1 Preparation

+

In order to make use of the library it is necessary to ensure that + the script files can correctly access the library include files (as + described below) and that the PHP installation supports at least one + graphic format, i.e. it supports the "image" extension in PHP.

+

This is easiest verified by either checking the output of the + phpinfo() standard PHP function or by making sure the PHP + installation make the 'imagecreate()' function available.

+

This means that the installation + + must have a working GD-library together with PHP before the library + JpGraph can be used. Please make sure you have version 4.3.x or above + of PHP since JpGraph is not actively tested with + versions prior to PHP 4.3.x Ideally you should use at least PHP 4.3.8

+

Please note that the 1.x version of the library do not + support PHP 5.x

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/32Customizingtheinstallation.html b/html/includes/jpgraph/docs/html/32Customizingtheinstallation.html new file mode 100644 index 0000000000..427622f8a1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/32Customizingtheinstallation.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.2 Customizing the installation

+

In order for JpGraph to work it is necessary to adjust the cache and + TTF directory to suit the specific installation. By default the TTF + directory is "/usr/X11R6/lib/X11/fonts/truetype/" and for the cache + "/tmp/jpgraph_cache/". These are defined as PHP defines at the top of + jpg-config.inc.php

+

Please make sure that PHP has write permissions to the cache + directory if the cache feature should be used. If this is not the case + a "Can't write file xxx.yyy" error will occur when a graph that uses + the cache feature are generate. More information regarding the cache + feature of JpGraph is available in the section Making sense of + caching system in JpGraph

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/331Plotextensionmodules.html b/html/includes/jpgraph/docs/html/331Plotextensionmodules.html new file mode 100644 index 0000000000..ff8400a831 --- /dev/null +++ b/html/includes/jpgraph/docs/html/331Plotextensionmodules.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.3.1 Plot extension modules

+

To add plots to the graph you will need one or more of the following + files plot extension files depending on what kind of graph you need to + create.

+
    +
  • jpgraph_log.php, Plot extension to support logarithmic X and Y + scales
  • +
  • jpgraph_line.php, Plot extension. Needed to draw various line plots
  • +
  • jpgraph_date.php, Plot extension to handle date scales.
  • +
  • jpgraph_bar.php, Plot extension. Needed to draw various bar plots
  • +
  • jpgraph_error.php, Plot extension. Needed to draw various error + plots
  • +
  • jpgraph_scatter.php, Plot extension. Needed to draw scatter and + impulse plots.
  • +
  • jpgraph_spider.php, Plot extension. Needed to draw spider plots.
  • +
  • jpgraph_pie.php, Plot extension. Needed to draw Pie plots
  • +
  • jpgraph_pie3d.php, Plot extension. Needed to draw 3D Pie plots
  • +
  • jpgraph_gantt.php, Plot extension. Needed to create gantt plots
  • +
  • jpgraph_radar.php, Plot extension. Needed for radar plots
  • +
  • jpgraph_polar.php, Plot extension. Needed for Polar plots
  • +
  • jpgraph_gantt.php, Plot extension. Needed for Gantt charts
  • +
  • jpgraph_mgraph.php, Utility class to combine several graphs in the + same image
  • +
  • jpgraph_regstat.php, Statistic extension. Needed to plot spline and + bezier curves
  • +
  • jpgraph_stock.php, Plot extension. Needed to plot stock charts
  • +
  • jpgraph_antispam.php, Special extension to generate anti-spam + images consisting of letters+images which are very hard to digitally + read with an OCR program
  • +
  • jpgraph_gradient.php, Internal module. Contains all color gradient
  • +
  • jpgraph_gb2312.php, Handling of gb2312 font encoding (used for some + Chinese fonts)
  • +
  • jpgraph_plotmark.inc, Handling of plotmarks in line and scatter + plot.
  • +
  • jpgraph_iconplot.php, Handling icons (small images) that can be + added to the plots
  • +
  • jpgraph_plotband.php, Handling of plotbands added to the graphs
  • +
  • jpgraph_flags.php, Handling of country flags used as plot marks or + as backgrounds.
  • +
  • jpgraph_utils.php, Various utility function
  • +
  • imgdata_*.inc, Encoded images for plotmarks
  • +
  • flags*.dat, Image data for flags. Pre-compiled data for country + flags.
  • +
  • jpgraph_canvas.php, Plot extension to make it possible to draw + arbitrary graphic on a canvas.
  • +
  • jpgraph_canvtools.php, Add on to the canvas graph to provide an + easier way to draw arbitrary shapes.
  • +
+

In the pro-version the following additional files are available

+
    +
  • jpgraph_windrose.php, Windrose plot extension
  • +
  • jpgraph_odo.php, Odometer plot extension
  • +
  • jpgraph_barcode.php, Linear barcode extension
  • +
  • jpgraph_pdf417.php, PDF417 2-Dimensional Barcode extension
  • +
  • jpgraph_table.php, Creation of Excel like graphic tables
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/33Requiredfiles.html b/html/includes/jpgraph/docs/html/33Requiredfiles.html new file mode 100644 index 0000000000..cda8b4861a --- /dev/null +++ b/html/includes/jpgraph/docs/html/33Requiredfiles.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.3 Required files

+

This is the base library files, which you must have

+
    +
  • jpgraph.php, base library, always needed
  • +
  • jpg-config.inc.php, Configuration file
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/34Imageformatsandexternalimagelibraries.html b/html/includes/jpgraph/docs/html/34Imageformatsandexternalimagelibraries.html new file mode 100644 index 0000000000..0f140f63f4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/34Imageformatsandexternalimagelibraries.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.4 Image formats and external image libraries

+

Per default the standard GD image library supports PNG graphic + formats. You will need to have that installed together with your PHP + module for this library to work at all. Please refer to PHP + documentation on specifics. Note that the newer versions of GD does not + support the GIF format due to copyright problems. Hence by default only + PNG is supported.

+

If you want JPEG support you will also need an additional library + for PHP, again please see PHP documentation for specifics. For most + practical purposes PNG is a better format since it normally achieves + better compression then GIF (typically by a factor of 2 for the types + of images generated by JpGraph). In comparison with JPEG format PNG is + also better for the type of images generated by this library. So, the + bottom line is, you should have a very good reason to choose any other + format then PNG.

+

By default the image format is set to "auto". This means that + JpGraph automatically chooses the best available graphic using the + preferred order "PNG", "GIF", "JPG".

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/35DetailedstepstoinstallJpGraph.html b/html/includes/jpgraph/docs/html/35DetailedstepstoinstallJpGraph.html new file mode 100644 index 0000000000..48109a1f66 --- /dev/null +++ b/html/includes/jpgraph/docs/html/35DetailedstepstoinstallJpGraph.html @@ -0,0 +1,67 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.5 Detailed steps to install JpGraph

+

+
    +
  1. If You are insatlling the 1.x branch then make sure the PHP version + used is at least 4.3.x (preferable 4.3.10 or higher) and that the PHP + version have compiled support for GD library. It is absolutely critical + that GD is fully working. Please see the earlier sections on how to + make sure. JpGraph supports both GD 1.x and GD 2.x However it is + strongly recommended to use GD 2.x since that will improve performance + and support true color images as well as alphablending. +

    If You are insatlling the 2.x branch then make sure the PHP version + used is at least 5.0.1 (preferable 5.0.5 or higher) and that the PHP + version have compiled support for GD 2.x library. Please note that the + 2.x branch will not work with PHP 4.x

    +
  2. +
  3. Unzip and copy the files to a directory of your choice.
  4. +
  5. Set up the directory paths in jpg-config.inc.php where the + cache directory should be and where your TTF directory is. Note that + Apache/PHP must have write permission in your cache directory.
  6. +
  7. Check that all rest of the DEFINE in the top of JpGraph.php is + setup to your preference. The default should be fine for most users. + (See also Note 5. below) Specifically check that the settings of + USE_GD2_LIBRARY reflects your installation, (should be true if you have + GD2 installed, false otherwise).
  8. +
  9. Make sure PHP have write privileges to your cache directory if you + plan on using the cache feature.
  10. +
  11. Some windows installations seems to have a problem with a PHP + script ending in a newline (This newline seems to be sent to the + browser and will cause a Header already sent error). If you have this + problem try remove all trailing newlines in the jpgraph* files
  12. +
  13. Read (really!) +the JpGraph FAQ.
  14. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/36Troubleshootingyourinstallation.html b/html/includes/jpgraph/docs/html/36Troubleshootingyourinstallation.html new file mode 100644 index 0000000000..ece605fa76 --- /dev/null +++ b/html/includes/jpgraph/docs/html/36Troubleshootingyourinstallation.html @@ -0,0 +1,75 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.6 Troubleshooting your installation

+

For 99% of the users this library will work directly with a recent + installation of PHP without any problem.

+

Experience shows that most of the trouble are caused by either an + old buggy version of the free-type TTF library or using an old + antiquated version of the GD library. In order to narrow it down the + problem the following steps is helpful.

+
    +
  1. If no background images are displayed (instead a solid black box + are displayed) chances are that GD 2.x is available but the + jpg-config.inc.php has been changed so that true color images are + disabled. Correct this by enabling the USE_TRUECOLOR define.
  2. +
  3. If background images does not work make sure the settings of + USE_GD2_LIBRARY corresponds to the actual installation, i.e. If the GD2 + library is not available then this define must be false!
  4. +
  5. If you are running IIS and Win2k and get the error "Can't find + font" when trying to use TTF fonts then try to change the paths to UNIX + style, i.e. "/usr/local/fonts/ttf/". Remember that the path is absolute + and not relative to the htdocs catalogue.
  6. +
  7. If no images and no error messages gets sent back to the browser + then there is a big chance that HTTP-Server PHP module (e.g. + Apache-PHP) has crashed. This is often due to a broken PHP installation + and more than often a problem with the True Type libraries. The best + way to track these types of problem down is to investigate the + HTTP-Server logs or the general system logs for evidence of a PHP + crash. The other reasons is that in some rare cases the auto detection + of the GD library could fail. If only the GD1 library is available and + the JpGraph library mistakenly detects the GD2 this could in rare cases + cause PHP to crash. Please try re-run the example by setting the DEFINE + USE_GD2_LIBRARY to "false".
  8. +
  9. If the system is running IIS on Windows and some images which uses + TTF fonts just return an empty page then try to set the TTF_DIR path + manually (in jpg-config.php) to the directory where all the TTF fonts + are stored (normally c:/WINDOWS/fonts)
  10. +
  11. If the cache is enabled please make sure that the permissions are + correctly set for the cache directory so that the process running + Apache/PHP has write access to the cache directory.
  12. +
  13. If the TTF fonts only shows up as yellow then you have a buggy + installation of the freetype font library and the only thing to do is + to re-install and setup PHP+GD again.
  14. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/37CompilingPHP4.html b/html/includes/jpgraph/docs/html/37CompilingPHP4.html new file mode 100644 index 0000000000..3304ecba68 --- /dev/null +++ b/html/includes/jpgraph/docs/html/37CompilingPHP4.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3.7 Compiling PHP 4

+

This is not meant to be a complete discussion about configuring + or compiling PHP. It is meant as an example of a configuration of PHP + that is known to work well with JpGraph.

+

Below is an example of a standard configuration that can be used to + configure and compile PHP for use with the JpGraph Library

+

Please note that depending on the specific installation requirements + other options might have to be specified, specifically the paths to + external libraries might need to be adjusted.

+
+./configure --prefix=/usr/share \
+--datadir=/usr/share/php \
+--with-apxs=/usr/sbin/apxs \
+--libdir=/usr/share \
+--includedir=/usr/include \
+--bindir=/usr/bin \
+--with-config-file-path=/etc \
+--enable-mbstring --enable-mbregex \
+--with-pdflib=/usr \
+--with-mysql  \
+--with-ttf-dir=/usr/lib \
+--with-freetype-dir=/usr/lib \
+--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
+--with-zlib-dir=/usr/lib \
+--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
+--with-tiff-dir=/usr/lib \
+--enable-ftp \
+--enable-memory-limit --enable-safe-mode \
+--bindir=/usr/bin \
+--enable-bcmath -enable-calendar \
+--enable-ctype --with-ftp \
+--enable-magic-quotes \
+--enable-inline-optimization \
+--with-bz2 \
+--with-iconv
+
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/3Installation.html b/html/includes/jpgraph/docs/html/3Installation.html new file mode 100644 index 0000000000..b2e75ba132 --- /dev/null +++ b/html/includes/jpgraph/docs/html/3Installation.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

3 Installation

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/411Whatyouwilllearninthischapter.html b/html/includes/jpgraph/docs/html/411Whatyouwilllearninthischapter.html new file mode 100644 index 0000000000..8e44c38359 --- /dev/null +++ b/html/includes/jpgraph/docs/html/411Whatyouwilllearninthischapter.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.1.1 What you will learn in this chapter

+

+
    +
  1. The principle of generating dynamic images in PHP
  2. +
  3. How to choose a specific image format (e.g. JPG, PNG, GIF)
  4. +
  5. Various ways of using the generated image, streaming it back to the + browser, sending it to a file or getting hold of the image handle for + further post processing
  6. +
  7. How to specify fonts (both bit-mapped and TTF) in JpGraph
  8. +
  9. How to extend JpGraph with your own fonts
  10. +
  11. How to work with Cyrillic fonts
  12. +
  13. How to specify colors in JpGraph
  14. +
  15. List all available named colors in JpGraph
  16. +
  17. How to effectively use the built in cache schema in JpGraph
  18. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/412WhatyouwillNOTlearninthischapter.html b/html/includes/jpgraph/docs/html/412WhatyouwillNOTlearninthischapter.html new file mode 100644 index 0000000000..7dbce8dbee --- /dev/null +++ b/html/includes/jpgraph/docs/html/412WhatyouwillNOTlearninthischapter.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.1.2 What you will NOT learn in this chapter

+

+
    +
  1. Any details on how to generate graphs with the JpGraph library
  2. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/41Scopeofthischapter.html b/html/includes/jpgraph/docs/html/41Scopeofthischapter.html new file mode 100644 index 0000000000..fe9f53a483 --- /dev/null +++ b/html/includes/jpgraph/docs/html/41Scopeofthischapter.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.1 Scope of this chapter

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/421UsingtheJpGraphlibrarytosendbackimages.html b/html/includes/jpgraph/docs/html/421UsingtheJpGraphlibrarytosendbackimages.html new file mode 100644 index 0000000000..da2e4a53e6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/421UsingtheJpGraphlibrarytosendbackimages.html @@ -0,0 +1,55 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.2.1 Using the JpGraph library to send back images +

+

To get access to the JpGraph library you will need to include at + least two files, the base library and one or more of the plot + extensions. So for example to create a basic line plot the top of your + PHP file must have the lines:

+   +
include ( +'jpgraph.php'); +
include (
'jpgraph_line.php' +); +
... +
 
// Code that uses the jpgraph library +
...
+

+

+

Note: You might also use the PHP directive + require. The difference is subtle in that include will only include + the code if the include statement is actually executed. While require() + will always be replaced by the file specified. See PHP documentation + for further explanation. For most practical purposes they are + identical.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/42HowtogenerateimageswithPHP.html b/html/includes/jpgraph/docs/html/42HowtogenerateimageswithPHP.html new file mode 100644 index 0000000000..a57ab7762a --- /dev/null +++ b/html/includes/jpgraph/docs/html/42HowtogenerateimageswithPHP.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.2 How to generate images with PHP

+

As a general rule each PHP script which generates an image must be + specified in a separate file which is then called in an HTML <IMG> tag. + For example, the following HTML excerpt includes the image generated by + the PHP script in "fig1.php".

+

<img src="fig1.php"  +border=0 align=center width +=300 height=200> +

+

+

Strictly speaking the "align", "width" and "height" are not + necessary but helps the browser position the image correctly before the + image has been fully sent back to the browser.

+

The library will automatically generate the necessary headers to be + sent back to the browser so that it correctly recognize the data stream + received as an image of either PNG/GIF/JPEG format. The browser can + then correctly decode the image

+

Observe that you can't return anything else than an + image from the image script. By definition each HTML page (or more + correctly each HTTP stream) can only consist of one mime type which is + determined by the header for that particular stream.

+

A common mistake is to have a space in the beginning of the image + script which the HTTP server will send back to the browser. The browser + now assumes that the data coming back from this script is text since it + hasn't received an explicit header. When then the image headers get + sent back to the browser to forewarn the browser of the forthcoming + image the browser will not like that as it has already assumed the data + stream was a text stream. The browser will then give the infamous + "Headers already sent error".

+

To include several images together with text on a page you need to + have a parent page with several <IMG> tags which each refers to an + image script (or the same image script with GET/POST data).

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/43UsingPHPdirectly.html b/html/includes/jpgraph/docs/html/43UsingPHPdirectly.html new file mode 100644 index 0000000000..69279be063 --- /dev/null +++ b/html/includes/jpgraph/docs/html/43UsingPHPdirectly.html @@ -0,0 +1,62 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.3 Using PHP directly

+

It is also possible to generate images directly using the command + line version of PHP. This works the same way as the normal "through the + browser" generation with the exception that no HTTP headers will be + generated. Only the binary image data.

+

Please make sure that you run the command line version of PHP (cli). + Using the CGI SAPI version will not work since then the HTTP headers + will be generated. Note: If the CGI version is used the generation of + headers may be suppressed by the '-q' option.

+

You can easily check the version installed by running

+
php --version
+

you should then get a response with something like

+
+PHP 4.3.8 (cli) (built: Aug 29 2004 22:48:10)
+Copyright (c) 1997-2004 The PHP Group
+Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
+
+

The important thing here is the

+
(cli)
+

marker. The JpGraph library check from what SAPI API it is invoked + from and adjusts the header generation accordingly.

+

If all the above requirements are met then images can be generated + directly on the command line and stored in a suitable file. For example + by

+
+$> php myimage.php > image.png
+
+

Please note that the file extension on the image file must match the + format in which the image is generated.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/44ThebasicprincipleofJpGraphandthecreationofimages.html b/html/includes/jpgraph/docs/html/44ThebasicprincipleofJpGraphandthecreationofimages.html new file mode 100644 index 0000000000..d7c4b4c100 --- /dev/null +++ b/html/includes/jpgraph/docs/html/44ThebasicprincipleofJpGraphandthecreationofimages.html @@ -0,0 +1,130 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.4 The basic principle of JpGraph and the creation of + images

+

The common pattern for creating graphs is

+
    +
  1. Create a script that constructs the image, type, colors size and so + on.
  2. +
  3. A wrapper script which contains one or more <IMG> tags to position + the graphs on the proper HTML page.
  4. +
+

Of course it is of perfectly possible to call the image script + directly in the browser to just display the generated image in the + browser.

+

You should remember that it is also possible to pass arguments to + the image script via the normal HTTP GET/POST arguments. For example

 <img src +="showgraph.php?a=1&b=2" +>

+

This could for example be used to control the appearance of the + image or perhaps send data to the image which will be displayed. Note + that this is probably not the best way to send large amount of data to + plot. Instead the only practical way, for large data sizes, is to get + all the data in the image script, perhaps from a DB. Another + alternative for large amount of data to be sent to the image script is + by creating a POST request to the image script.

+Note: Forcing the browser to update your image Some browser + may not send back a request to the web browser unless the user presses + "Refresh" (F5 - in most browsers). This can lead to problems that the + user is seeing old data. A simple trick is to add a dummy time argument + which is not used in the script. For example +
+echo '<img src="myimagescript.php?dummy='.now().'">';
+
+ It is also important to be aware of any internal caching the browser + might do. The general problem with dynamically generated images is that + the image generating script (file) remains the same. This makes the + browser believe that the data hasn't changed and if the browser already + has issues a previous GET request and has the data cached it will not + send a new GET if the timestamp on the file is the same since it then + believes it my use the old cached version.

+

When it comes to the structure of your imaging script they will + generally have the structure

+   +// ... Include necessary headers +
+
$graph  += new Graph($width, +$height, ...); +
+
+// ... code to construct the graph details +
+
$graph->Stroke(); +

+

JpGraph is completely Object oriented so all calls will be action on + specific instances of classes. One of the fundamental classes is the + Graph() class which represents the entire graph.

+

After the creation of the Graph() object all the code lines to + construct the details of the graph are added.

+

The final method called in an image script will most likely be the + Graph::Stroke() method. This will send the constructed image back + to the browser. A variation of this is used if the graph are supposed + to have image maps. In that case the final method will be + Graph::StrokeCSIM()

+

In addition to this standard usage pattern you can also choose to

+
    +
  • ... send the graph directly to a file
  • +
  • ... access the GD image handler for further image processing (also + needed to include the image in an PDF file)
  • +
  • ... make use of the builtin cache system to send back a previously + generated image
  • +
+

The cache system, which lessens the burden of the PHP server, works + by avoiding o run all the code that follows the initial Graph() call by + checking if the image has already been created and in that case + directly send back the previously created (and stored in a file) image + to the browser. When using the cache system a filename must be + specified in the initial Graph() call which is used to store the image + in the cache system and possibly also a timeout value to indicate how + long the image in the cache directory should be valid.

+

In many of the examples in this manual the following pattern will be + used

+ $graph = new  +Graph(300,200 +,"auto");

+

The two first parameters specify the width and height of the graph + and the third parameter the name of the image file in the cache + directory. The special name 'auto' indicates that the image file + will be given the same name as the image script but with the extension + changed to indicate the graphic format used, i.e '.jpg', '.png' and so + on.

+

Please note that the cache system by default is disabled and must be + enabled by setting the proper define in the file "jpg-config.inc.php"

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/45ChoosingtheimageformatforJpGraph.html b/html/includes/jpgraph/docs/html/45ChoosingtheimageformatforJpGraph.html new file mode 100644 index 0000000000..f8d532663c --- /dev/null +++ b/html/includes/jpgraph/docs/html/45ChoosingtheimageformatforJpGraph.html @@ -0,0 +1,58 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.5 Choosing the image format for JpGraph

+

By default JpGraph automatically chooses the image format to use in + the order PNG, JPEG and GIF. The exact format depends on what is + available on your system. There are two ways you can influence the way + the graphic format is chosen.

+
    +
  1. Change the default graphic format by changing the DEFINE
    +  DEFINE +("DEFAULT_GFORMAT" +,"auto");
    +

    +
  2. +
  3. Set the graphic format in your script by calling the method + SetImgFormat() For example, to force your script to use JPEG in one + specific image use
     $graph-> +img-> +SetImgFormat( +"jpeg") +
    +

    +
  4. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/46Alternativestostreamingbacktheimage.html b/html/includes/jpgraph/docs/html/46Alternativestostreamingbacktheimage.html new file mode 100644 index 0000000000..bca03a6d67 --- /dev/null +++ b/html/includes/jpgraph/docs/html/46Alternativestostreamingbacktheimage.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.6 Alternatives to streaming back the image

+

If you like to save the image directly to a file instead of + streaming it back to the browser then you just have to specify an + absolute filename in the final call to Graph::Stroke(), i.e.

+

+ $graph-> +Stroke( +"/usr/home/peter/images/result2002.png");

+

+

Please note that the user running as Apache/PHP must have write + access to the specified directory.

+

There are also two predefined filenames which have special meaning.

+
    +
  • "auto", This will create a file in the same directory as the script + with the same name as the script but with the correct image extension.
  • +
  • __IMG_HANDLER, (This is defined in jpgraph.php). Specifying this + filename will not create a an image to file or stram it back to the + browser. Instead it will instruct the Stroke() method to just return + the handle for the GD image. This is useful if you later want to + manipulate the image in ways that are not yet supported by Jpgraph. For + example include the image in generated PDF files. +
    Example:
     $handle  +$graph->Stroke(__IMG_HANDLER +);
    +

    +
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/471InstallingTrueTypefonts.html b/html/includes/jpgraph/docs/html/471InstallingTrueTypefonts.html new file mode 100644 index 0000000000..68e50adf19 --- /dev/null +++ b/html/includes/jpgraph/docs/html/471InstallingTrueTypefonts.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7.1 Installing TrueType fonts

+

Since Internally TrueType fonts are rendered by locating a font + specification file you must install the accompanying TrueType fonts in + directory of your choice. You must then tell JpGraph where these fonts + may be found by specifying the font-path in the FONT_PATH define (in + jpg-config.inc.php). Please note that this must be the absolute file + path and not relative to the htdocs directory. By default the path is + set to

+ DEFINE( +"TTF_DIR", +"/usr/local/fonts/ttf/"); +

+

Since JpGraph must be able to tell the difference between the italic + and bold versions of the same font family a standard naming convention + is used to name the files. The available fonts are also defined by + DEFINES and hence you can't just copy your own TTF files to the + directory and expect it to work. At the moment there is no "easy" way + to add new fonts but to make some (small) mods to the code. However + this is expected to change in future version of JpGraph.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/472VerifyingthattheTTFfontswork.html b/html/includes/jpgraph/docs/html/472VerifyingthattheTTFfontswork.html new file mode 100644 index 0000000000..6ca845e4b1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/472VerifyingthattheTTFfontswork.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7.2 Verifying that the TTF fonts work

+

In order to get TTF fonts working with JpGraph you should first + check that the following pure GD scripts work correctly. Please adjust + the font path according to your installation.

+  DEFINE +("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/" +);  +
+
$im imagecreatetruecolor (400 +100);  +
$black imagecolorallocate ($im +000 +);  +
$white imagecolorallocate ($im +255255255 +);  +
+
imagerectangle +($im,0, +0,399,99 +,$black);  +
imagefilledrectangle +($im,0, +0,399,99 +,$white);  +
+
imagettftext  +($im30 +01040 +, $blackTTF_DIR. +"arial.ttf" +"Hello World!");  +
+
header ("Content-type: image/png" +);  +
imagepng ($im); +

+

The above script assumes you have the GD2 library and will create an + image with the classical "Hello World!" text printed in black.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/473Specifyingfonts.html b/html/includes/jpgraph/docs/html/473Specifyingfonts.html new file mode 100644 index 0000000000..f0e4679059 --- /dev/null +++ b/html/includes/jpgraph/docs/html/473Specifyingfonts.html @@ -0,0 +1,105 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7.3 Specifying fonts

+

All graph objects that uses text allows you to specify the font to + be used by calling the SetFont() method and specifying three parameters

+
    +
  1. Font family, Specified with a FF_ define
  2. +
  3. Font style, Specified with a FS_ define
  4. +
  5. Font size, Numeric value (only used for TTF fonts)
  6. +
+

For the builtin fonts the third, size, parameter is ignored since + the size is fixed for the three builtin fonts. The available font + families and the corresponding name (in JpGraph 1.7) are listed in the + table below.

+

+ + + + + + + + + + + + + + + + + + + +
Font familyTypeNote
FF_FONT0Builtin fontA very small font, only + one style
FF_FONT1Builtin fontA medium sized font
FF_FONT2Builtin fontThe largest bit mapped + font
FF_ARIALTTF fontArial font
FF_VERDANATTF fontVerdana font
FF_COURIERTTF fontFix pitched courier
FF_BOOKTTF fontBookman
FF_COMICTTF fontComic sans
FF_TIMESTTF fontTimes New Roman
FF_GEORGIATTF fontGeorgia
FF_TREBUCHETTF fontTrebuche
FF_VERATTF fontGnome Vera font, Available from + http://www.gnome.org/fonts/
FF_VERAMONOTTF fontGnome Vera Mono font, + Available from http://www.gnome.org/fonts/
FF_VERASERIFTTF fontGnome Vera Serif font, + Available from http://www.gnome.org/fonts/
FF_CHINESETTF fontInstalled chinese font
FF_SIMSUNTTF fontInstalled chinese font
FF_BIG5TTF fontInstalled Chinese BIG5 font + (needs iconv())
+

Please note that not all font families support all styles. The + figure below illustrates each of the available font families and what + styles you may use.

+
+
Figure 1: Illustration of some of the available fonts in + JpGraph [src] +  +

+

+

+

We finally show some example of valid font specifications

+  $graph +->title->SetFont( +FF_FONT2); +
$graph->title-> +SetFont( +FF_FONT2, +FS_BOLD); +
$graph->title-> +SetFont( +FF_ARIAL); +
$graph->title-> +SetFont( +FF_ARIAL, +FS_BOLD,24);
+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/474AddingadditionalfontstoJpGraph.html b/html/includes/jpgraph/docs/html/474AddingadditionalfontstoJpGraph.html new file mode 100644 index 0000000000..8faa600728 --- /dev/null +++ b/html/includes/jpgraph/docs/html/474AddingadditionalfontstoJpGraph.html @@ -0,0 +1,50 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7.4 Adding additional fonts to JpGraph

+

Note: This information is only given here for very + advanced users. No free support will be given in the case you run into + difficulties trying to add new fonts. At the moment adding new fonts + require code modifications as outlined below.

+

In order to add you favorite fonts there are three steps you need to + follow :

+
    +
  1. Define a new "FF_" constant naming your font family with a suitable + high index number
  2. +
  3. Get the TTF file(s) and add it to your font directory. You need + separate files for each of the styles you want to support. You then + need to add the file names of the font as definitions in the class TTF. + Use the previous defined "FF_" name as index in the font specification + array.
  4. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/475UnderstandingtextalignmentinJpGraph.html b/html/includes/jpgraph/docs/html/475UnderstandingtextalignmentinJpGraph.html new file mode 100644 index 0000000000..7a730d5be0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/475UnderstandingtextalignmentinJpGraph.html @@ -0,0 +1,57 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7.5 Understanding text alignment in JpGraph

+

For everyday use of JpGraph understanding of the alignment of text + strings in not necessary. However, if you like to add arbitrary strings + to the graph (with Graph::AddText()) or when working directly on a + canvas it will help understand this.

+

Text is added to a graph with the creation of a +Text() object. And the alignment is specified with +Text::Align() Text alignment might actually be a misguiding name. + What you specify is rather the anchor point for the text, i.e. when you + specify that a text should be positioned at position (x,y) how + is that coordinate to be interpretated.

+

The image below shows a text string aligned in the 9 possible + combinations. In the image the red crosses indicate what coordinate + that text string was positioned at. The alignment used for each of the + cases is shown below.

+
+
Figure 2: Specifying alignment (anchor-point) for text + strings [src] +  +

+

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/47WorkingwithfontsinJpGraph.html b/html/includes/jpgraph/docs/html/47WorkingwithfontsinJpGraph.html new file mode 100644 index 0000000000..0b09b19662 --- /dev/null +++ b/html/includes/jpgraph/docs/html/47WorkingwithfontsinJpGraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.7 Working with fonts in JpGraph

+

JpGraph supports both a set of built in bit-mapped fonts as well as + True Type Fonts. For scale values on axis it is strongly recommended + that you just use the built in bitmap fonts for the simple reason that + they are, for most people, easier to read (they are also quicker to + render). Try to use TTF only for headlines and perhaps the title for a + graph and it's axis. By default the TTF will be drawn with + anti-aliasing turned on.

+

In many of the example you can see examples of both TrueType and + Bitmap fonts.

+

There are a number of subtle differences in the way builtin fonts + and TrueType fonts are rendered to the screen. However, JpGraph, + abstracts away 99.9% of the differences so it will be, for the user, + completely transparent to switch between the different fonts.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/481Adjustingthetransparency.html b/html/includes/jpgraph/docs/html/481Adjustingthetransparency.html new file mode 100644 index 0000000000..8f6c68d632 --- /dev/null +++ b/html/includes/jpgraph/docs/html/481Adjustingthetransparency.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.8.1 Adjusting the transparency

+

From version 1.10 JpGraph also supports the use of Alpha Blending + together with GD2.x This lets you specify how much of the underlying + color should be visible. You specify the amount of transparency for a + color by adding an extra parameter to the color specification separated + by an '@' (at) character.

+

For example to specify a red color which is 40% transparent you + write

+ SetColor( +"red@0.4"); +

+

or to specify 90% transparancy you write

+  SetColor +("red@0.9");

+

Below is an example of how a bar graph with a background image can + make use of transparency + +

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/482Availablenamedcolors.html b/html/includes/jpgraph/docs/html/482Availablenamedcolors.html new file mode 100644 index 0000000000..45c45f70d4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/482Availablenamedcolors.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.8.2 Available named colors

+

The chart below shows all available named colors. +
+
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/483Themecolorsforpies.html b/html/includes/jpgraph/docs/html/483Themecolorsforpies.html new file mode 100644 index 0000000000..0079440537 --- /dev/null +++ b/html/includes/jpgraph/docs/html/483Themecolorsforpies.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.8.3 Theme colors for pie's

+

For more on how to use the different themes to set the colors of Pie + plots please refer to "Working with 2D & 3D pie plots"

+

+
Theme 1: Earth

+

+
Theme 2: Pastel

+

+
Theme 3: Water

+

+
Theme 4: Sand

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/48SpecifyingcolorsinJpGraph.html b/html/includes/jpgraph/docs/html/48SpecifyingcolorsinJpGraph.html new file mode 100644 index 0000000000..4231074307 --- /dev/null +++ b/html/includes/jpgraph/docs/html/48SpecifyingcolorsinJpGraph.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4.8 Specifying colors in JpGraph

+

Colors can be specified in three different ways

+
    +
  1. By using one of the, roughly, 400 pre-defined color names, e.g
    +  SetColor +("khaki");
    +

    A named color can also be modified by adding a adjustment factor. An + adjustment factor, 0 < f < 1, a smaller value will give a darker + version and a value of 0 or 1 will return the original color. A value > + 1 will make the color brighter. A few examples

    +  SetColor +("khaki:0.5" +); // A darker version of "khaki" +
    SetColor("yellow:1.2");  +// A slightly lighter version of "yellow" +

    +

    +
  2. +
  3. By specifying a RGB triple, e.g.
    +  SetColor(array(65, +100,176));
    +

    +
  4. +
  5. By specifying the color as a hex string value
    +  SetColor +("#A16BFF");
    +

    +
  6. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/4QuickStartDynamicImageGeneration.html b/html/includes/jpgraph/docs/html/4QuickStartDynamicImageGeneration.html new file mode 100644 index 0000000000..c8d13a407b --- /dev/null +++ b/html/includes/jpgraph/docs/html/4QuickStartDynamicImageGeneration.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

4 Quick Start: Dynamic Image Generation

+

The purpose of this chapter is to put dynamic image generation in + perspective and illustrate how HTML tags is used to call image + generating scripts. Even if You are familiar with PHP it is strongly + recommended to quickly browse through this chapter to make sure all + concepts are known.

+

If You fully understand and can explain the concept of MIME types, + HTTP streams and why the "Headers already sent error" error is very + common when generating dynamic images with PHP it is probably safe to + skip this chapter. Otherwise it might be wise to read through this + chapter once.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/51Enablingthecachesystem.html b/html/includes/jpgraph/docs/html/51Enablingthecachesystem.html new file mode 100644 index 0000000000..684b39559c --- /dev/null +++ b/html/includes/jpgraph/docs/html/51Enablingthecachesystem.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.1 Enabling the cache system

+

The enabling disabling of the cache system is controlled by two + defines (in jpg-config.php)

+

+ DEFINE( +"USE_CACHE", +true); +
DEFINE("READ_CACHE", +true)
+

+

+

The first of these, USE_CACHE, is the master-switch which must be + set to true to enable the caching system. The second switch READ_CACHE + very seldom needs to be changed.

+

This second switch basically tells whether or not JpGraph should + ever look in the cache. Setting this to false and the master-switch to + true would then always generate an new updated image file in the cache + and this new image would be send back to the browser. The main use for + this (admittedly) strange setting is if you like to have the side + effect of the script that a fresh image is always stored in the cache + directory.

+

Once you have enabled the cache you must also make sure that a valid + cache directory is setup. The cache directory is specified with the + define

+

+ DEFINE( +"CACHE_DIR", +"/tmp/jpgraph_cache/"); +

+

+

You can of course change the default directory to whatever directory + you fancy. But, you must remember one important thing. The + cache directory must be writable for the user running Apache/PHP +.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/51Thespecialprodlocale.html b/html/includes/jpgraph/docs/html/51Thespecialprodlocale.html new file mode 100644 index 0000000000..932ba67be9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/51Thespecialprodlocale.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+ +

5.1 The special "prod" locale

+ Since error messages are really meant for developers and are on a quite + detailed technical level. For end users in a production setting this is + often not wanted. Instead it is common to give a generic error message + that the user needs to contact the IS support. +

For this reason one of the resource files included is the special + language "prod" which is meant to be used in a production site where to + give a generic error message. The generic error message can be tailored + by changing a define in the prod locale resource file.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/52Includedlocalizederrormessages.html b/html/includes/jpgraph/docs/html/52Includedlocalizederrormessages.html new file mode 100644 index 0000000000..ed57557463 --- /dev/null +++ b/html/includes/jpgraph/docs/html/52Includedlocalizederrormessages.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.2 Included localized error messages

+ As of version 1.20.4 the following locales are available +
    +
  • English, "en"
  • +
  • Special production version, "prod"
  • +
+ All resource files are named according to the ISO locale name with an + extension of ".inc.php"
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/52Usingthecacheinyourscript.html b/html/includes/jpgraph/docs/html/52Usingthecacheinyourscript.html new file mode 100644 index 0000000000..5abd496d53 --- /dev/null +++ b/html/includes/jpgraph/docs/html/52Usingthecacheinyourscript.html @@ -0,0 +1,75 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.2 Using the cache in your script

+

To use caching in your script you must supply a suitable file name + which will be used to store the image in the cache. You can also supply + a timeout value indicating how many minutes the cached image should be + considered valid.

+

These parameters are supplied in the initial Graph() method call + which should be among the first in your script. Instead of manually + specifying a file name to be used you could often use the special name + "auto". If the filename is specified as "auto" the cashed image will + then be named the same as the image script but with the correct + extension depending on what image format have been chosen.

+

If you don't specify a file name no caching will be used no matter + the settings of USE_CACHE (without a file name it is impossible!)

+

The following call to Graph() shows a typical use of the cache.

+

+ $graph = new  +Graph(300,200 +,"auto",60) +

+

+

The above code will use the automatic filename and a make the cache + valid for 60 minutes.

+

So, how does this all work now?

+

The first time you call your script (no cached image) everything + will be as usual, the script will run and you will in the end send back + the image to the browser. However if you have the caching enabled + JpGraph will automatically have stored a copy of the generated image in + the cache directory.

+

The next time you call the script the first thing that happens in + the initial Graph() is that it will go and check in the cache directory + if the named image exists there. If this is the case it will also + checks that the image isn't too old (as compared to the specified + timeout value). If the image is valid then the image will be streamed + straight back from the image file to the browser and the script will + end it's execution.

+

Hence, if the image is found in the cache no code lines + after the initial Graph() call will be executed

+

The design decision behind this is that your image script code never + has to include anything special to make full use of the cache. It will + just automatically work.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/53Creatingyourownlanguageresourcefile.html b/html/includes/jpgraph/docs/html/53Creatingyourownlanguageresourcefile.html new file mode 100644 index 0000000000..de6d3cd2cf --- /dev/null +++ b/html/includes/jpgraph/docs/html/53Creatingyourownlanguageresourcefile.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+ +

5.3 Creating your own language resource file

+ All error messages are stored in an array with a specific index that + cannot be changed. This index is used in the library to reference a + specific error message. Since error messages can also have additional + parameters the error messages also includes count that specifies how + many arguments can be handled. +

The arguments are formatted in the error text in the same way as + parameters in the printf() family of functions.

+

To create your own localized error resource file You should copy the + "en.inc.php" to a temporary file, rename it for localem and then + translate each error message to Your language of choice. Make sure the + file is stored under the lang/ catalogue and You are ready to use your + new locale.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/53UsingthecachewithClientSideImageMaps.html b/html/includes/jpgraph/docs/html/53UsingthecachewithClientSideImageMaps.html new file mode 100644 index 0000000000..873b6c0862 --- /dev/null +++ b/html/includes/jpgraph/docs/html/53UsingthecachewithClientSideImageMaps.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.3 Using the cache with Client Side Image Maps

+

You can also use the cache system for CSIM as well. The cache system + interface is slightly different in this case since the cache needs to + store both the cached image and the cached image-map. + It also needs to change due to the way CSIM HTML paradigm work. The two + major differences from the "standard" cache is

+
    +
  1. The cached version will not be stored in the + previous defined cache directory. See more below.
  2. +
  3. You must call an extra method, CheckCSIMCache(), to check the + cache, see more below.
  4. +
+

+

The performance benefits even for simple CSIM images is around 50% + if the cache can be used and can of course be several 1000% if + construction of the image requires DB calls and other complex + operations which can be avoided.

+

Before reading further you should have an understanding on how the + CSIM works by reading the section "sing Client side image maps".

+

Please remember that when using CSIM you must end your script with a + call to Graph::StrokeCSIM() method instead of the +Graph::Stroke() used for non-csim.

+

To use the cache with CSIM you have to call the +Graph::CheckCSIMCache(). As with the caching for non-CSIM you have + to supply a name to be used for the cached version as well as an + optional timeout value. The default timeout value if nothing else is + specified is 60 minutes.

+

The name argument requires some more explanations. You must specify + a relative name here. For example "myimage" or perhaps + "firstpage/image3". Depending on your installation of JpGraph this will + now end up in the directory specified in the CSIMCACHE_DIR define. This + must also be a directory accessible by the normal web server. By + default a directory called "csimcache" will be created in the same + directory as the image script itself.

+

This has the drawback that the directory from where the script is + executed must be writable by the process running PHP. Best practice for + this is to keep the number of writable directory for PHP down to a + minimum and re-use the same directory as is used for the standard + cache. This however, require that your system administrator setup that + cache directory so that it also accessible by the HTTP server from the + htdocs root.

+

The CheckCSIMCache() method checks the cache for an existing cached + version and if found it returns it and halts execution of the script. + So, this call should be the first call after the creation of the + Graph() and before any heavy work is done to create the image so that + you can minimize the execution of the script in the case a match is + found.

+

So, the general structure of a script that uses CSIM and the cache + is

+ $graph = new  +Graph(400,300 +); +
+
// Check cache, 10 min timeout +
$graph->CheckCSIMCache( +"image1",10); +
+
+// !! If cached version exists, execution halts here !! +
+
// +
// ... Construct the image with heavy DB calls etc, etc +
// +
+
$graph->StrokeCSIM(); +

+

Please note that you do not need to pass any + argument to the final call to StrokeCSIM() as you do when not using the + cache.

Note: The CSIM caching works by storing + two files in the cache directory. One file being the image and the + other file being the corresponding image map as a pure HTML file.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/54Somefinalcomments.html b/html/includes/jpgraph/docs/html/54Somefinalcomments.html new file mode 100644 index 0000000000..5b3caf1ce4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/54Somefinalcomments.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.4 Some final comments

+

+
    +
  • If you want the timeout value to be "forever" then you can specify a + 0 as the timeout value (or leave the parameter blank). To regenerate + the image you will have to remove the image files from the cache. This + removal could for example be handled by a nightly cron-job
  • +
  • If you use images where you have enabled the anti-aliasing you + should strongly consider using caching since anti-aliasing is quite + time consuming compared to standard line drawings.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/551Clipping.html b/html/includes/jpgraph/docs/html/551Clipping.html new file mode 100644 index 0000000000..9ef479c105 --- /dev/null +++ b/html/includes/jpgraph/docs/html/551Clipping.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.5.1 Clipping

+

By default all plots are clipped outside the plot area. This means + that if you manually specify a scale and then try to plot which has + values smaller/larger than the scale those values will not show.

+

The clipping algorithm is "perfect" in the sense that for example + line plots where the plot area cuts the line between two data points + the line will be drawn up to the edge of the plot area. The algorithm + used is O(1) in number of data points.

+

The disabling/enabling of clipping manually is controlled by +Graph::SetClipping()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/552Commonlyusedproperties.html b/html/includes/jpgraph/docs/html/552Commonlyusedproperties.html new file mode 100644 index 0000000000..cd484d3f56 --- /dev/null +++ b/html/includes/jpgraph/docs/html/552Commonlyusedproperties.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.5.2 Commonly used properties

+

+
    +
  1. Each graph can have three titles accessed through the properties + 'Graph::title', ''Graph::subtitle' and ''Graph::subsubtitle'
  2. +
  3. Each graph have a legend accessed through the 'Graph::legend' + property
  4. +
  5. Each graph can have a left, center and right footer accessed + through 'Graph::footer::left','Graph::footer::center' and + 'Graph::footer::right'
  6. +
  7. You access the axis through 'Graph::xaxis', 'Graph::yaxis' and + 'Graph::y2axis'
  8. +
  9. You access the grids through 'Graph::xgrid', 'Graph::ygrid' and + 'Graph::y2grid'
  10. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/553Commonlyusedmethods.html b/html/includes/jpgraph/docs/html/553Commonlyusedmethods.html new file mode 100644 index 0000000000..ece82b688a --- /dev/null +++ b/html/includes/jpgraph/docs/html/553Commonlyusedmethods.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.5.3 Commonly used methods

+

+
    +
  1. You add plot objects (bar plots, pie plots, texts, bands, lines + etc) with the 'Graph::Add() method.
  2. +
  3. Each graph can have a specified margin set by 'Graph::SetMargin()'
  4. +
  5. Each graph can have a fill color in the plot area + 'Graph::SetColor()'
  6. +
  7. The plot areas may have a box around it 'Graph::SetBox()'
  8. +
  9. Each graph can have a specified margin color + 'Graph::SetMarginColor()'
  10. +
  11. Each graph can have a frame or not 'Graph::SetFrame()'
  12. +
  13. Each graph can have a specified drop shadow 'Graph::SetShadow()'
  14. +
  15. The grid lines can be either behind or in front of the plots + 'Graph::SetGridDepth()'
  16. +
  17. The plot can be rotated an arbitrary angle with 'Graph::SetAngle()'
  18. +
  19. You can add a background image with 'Graph::SetBackgroundImage'
  20. +
  21. You can change the overall appearance of the axis with + 'Graph::SetAxisStyle'
  22. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/55Commonfeatureforallgraphs.html b/html/includes/jpgraph/docs/html/55Commonfeatureforallgraphs.html new file mode 100644 index 0000000000..0a97ebbdb0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/55Commonfeatureforallgraphs.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5.5 Common feature for all graphs

+

This is a summary of the available feature for all Graph based + charts, i.e. line plots, error plots, scatter plots, etc.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/5Localizingerrormessages.html b/html/includes/jpgraph/docs/html/5Localizingerrormessages.html new file mode 100644 index 0000000000..1d0b5355e1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/5Localizingerrormessages.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5 Localizing error messages

+

The library has a quite extensive set of error messages to give + hints and catch erroneous input to many of the controlling methods and + also do sanity check on the data to be plotted.

+

All error messages are collected in resource files which are + localized to a specific language. All resource files are located under + the "lang/" directory in the JpGraph installation directory. The + deafult locale to be used is defined in the configuration file with the + setting DEFAULT_ERR_LOCALE in the distribution this is set to English + locale.

+

The chosen locale is specified in the beginning of the script with a + call to the static method JpGraphError::SetErrLocale(). The + argument to this method is the ISO naming of the country/language to be + selected. For example to enable the special production locale the + following line should be added in the beginning of the script

+
+JpGraphError::SetErrLocale('prod');
+
+ If an unknown or unsupported locale is given the error message will + default to English.
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/5UnderstandingtheJpGraphcachingsystem.html b/html/includes/jpgraph/docs/html/5UnderstandingtheJpGraphcachingsystem.html new file mode 100644 index 0000000000..f9b23754a4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/5UnderstandingtheJpGraphcachingsystem.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

5 Understanding the JpGraph caching system

+

To reduce load on the web server JpGraph implements an advanced + caching system which avoids the burden of always having to run the full + image script.

+

Depending on the complexity of the image script (for example if it + is doing several DB lookups) this could significantly improve + performance.

+

The rationale behind this is of course performance, and the + observation that very few graphs are really real-time, i.e. needs to be + updated absolutely every time the graphing script is called.

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/61Enablingthecachesystem.html b/html/includes/jpgraph/docs/html/61Enablingthecachesystem.html new file mode 100644 index 0000000000..9f5e43aa11 --- /dev/null +++ b/html/includes/jpgraph/docs/html/61Enablingthecachesystem.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.1 Enabling the cache system

+

The enabling disabling of the cache system is controlled by two + defines (in jpg-config.php)

+

+ DEFINE( +"USE_CACHE", +true); +
DEFINE("READ_CACHE", +true)
+

+

+

The first of these, USE_CACHE, is the master-switch which must be + set to true to enable the caching system. The second switch READ_CACHE + very seldom needs to be changed.

+

This second switch basically tells whether or not JpGraph should + ever look in the cache. Setting this to false and the master-switch to + true would then always generate an new updated image file in the cache + and this new image would be send back to the browser. The main use for + this (admittedly) strange setting is if you like to have the side + effect of the script that a fresh image is always stored in the cache + directory.

+

Once you have enabled the cache you must also make sure that a valid + cache directory is setup. The cache directory is specified with the + define

+

+ DEFINE( +"CACHE_DIR", +"/tmp/jpgraph_cache/"); +

+

+

You can of course change the default directory to whatever directory + you fancy. But, you must remember one important thing. The + cache directory must be writable for the user running Apache/PHP +.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/61Thebasicstructureofanimagemapscript.html b/html/includes/jpgraph/docs/html/61Thebasicstructureofanimagemapscript.html new file mode 100644 index 0000000000..a774622ea1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/61Thebasicstructureofanimagemapscript.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.1 The basic structure of an image map script

+

The standard structure for an HTML page using client side image maps + would be something along the lines of

+

+
+// Image map specification with name "mapname"
+<MAP NAME=...>
+... specification ...
+</MAP>
+
+// Image tag
+<img src="..." ISMAP USEMAP="mapname">
+
+

This poses an interesting question.

+

Since we normally call the graphing script directly in the <img> tag + how do we get hold of the image map (which is available only in the + image script) in this "HTML wrapper" script?

+

In JpGraph there is actually two ways of solving this.

+
    +
  1. Use the preferred "builtin" way using the modified Stroke() method + Graph::StrokeCSIM() instead of the standard Graph::Stroke() method.
  2. +
  3. Directly use the Graph::GetHTMLImageMap() which gives you fine + control at the expense of more complex coding.
  4. +
+

The first (and preferred) way modifies the stroke method so that + instead of returning an image (like the standard Stroke() method) + StrokeCSIM() actually returns an HTML page containing both the image + map specification and the correct <IMG> tag.

+

This of course means that it is necessary to treat an image map + returning image script differently from a non-CSIM image script, for + example you can't use it directly as the target for the "src" attribute + of the <IMG> tag since it sends back an actual HTML page containing + both an image tag together with an image map.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/62Specifyingtargetsforimagemapplots.html b/html/includes/jpgraph/docs/html/62Specifyingtargetsforimagemapplots.html new file mode 100644 index 0000000000..83c7bc923f --- /dev/null +++ b/html/includes/jpgraph/docs/html/62Specifyingtargetsforimagemapplots.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.2 Specifying targets for image map plots

+

To turn a standard image script into a CSIM script the first thing + needed to do is to supply the appropriate URL targets for the hotspots + in the image.

+

What the hotspots represent depends on the type of plot you are + doing. The following plot types and graph areas support image maps.

+
    +
  • Line plots. Markers are hotspots.
  • +
  • Scatter plot. Markers are hotspots.
  • +
  • Pie Plots and 3D Pie plots. Each slice is a hotspot
  • +
  • All types of Bar graphs. Each bar is a hotspot
  • +
  • Legends
  • +
  • Text strings, for example titles and title of axis
  • +
+

To specify a link for each hotspot you have to use the + SetCSIMTargets() method for each plot (or specific area) in the + graph which should be a hotspot.

+

There are two arguments to this method

+
    +
  1. $aTargets, an array of valid URL targets. One URL per hot spot, for + example if you have a 10 values bar plot you need 10 URLs. If the + SetCSIMTarget() is applied to, for example, a text then of course only + one URL target should be specified.
  2. +
  3. $aAlts, an array of valid alt-texts. Many browsers (but not all) + will show this text string if the mouse hovers over a hotspot.
  4. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/62Usingthecacheinyourscript.html b/html/includes/jpgraph/docs/html/62Usingthecacheinyourscript.html new file mode 100644 index 0000000000..5ea2b399a6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/62Usingthecacheinyourscript.html @@ -0,0 +1,75 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.2 Using the cache in your script

+

To use caching in your script you must supply a suitable file name + which will be used to store the image in the cache. You can also supply + a timeout value indicating how many minutes the cached image should be + considered valid.

+

These parameters are supplied in the initial Graph() method call + which should be among the first in your script. Instead of manually + specifying a file name to be used you could often use the special name + "auto". If the filename is specified as "auto" the cashed image will + then be named the same as the image script but with the correct + extension depending on what image format have been chosen.

+

If you don't specify a file name no caching will be used no matter + the settings of USE_CACHE (without a file name it is impossible!)

+

The following call to Graph() shows a typical use of the cache.

+

+ $graph = new  +Graph(300,200 +,"auto",60) +

+

+

The above code will use the automatic filename and a make the cache + valid for 60 minutes.

+

So, how does this all work now?

+

The first time you call your script (no cached image) everything + will be as usual, the script will run and you will in the end send back + the image to the browser. However if you have the caching enabled + JpGraph will automatically have stored a copy of the generated image in + the cache directory.

+

The next time you call the script the first thing that happens in + the initial Graph() is that it will go and check in the cache directory + if the named image exists there. If this is the case it will also + checks that the image isn't too old (as compared to the specified + timeout value). If the image is valid then the image will be streamed + straight back from the image file to the browser and the script will + end it's execution.

+

Hence, if the image is found in the cache no code lines + after the initial Graph() call will be executed

+

The design decision behind this is that your image script code never + has to include anything special to make full use of the cache. It will + just automatically work.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/63UsingStrokeCSIM.html b/html/includes/jpgraph/docs/html/63UsingStrokeCSIM.html new file mode 100644 index 0000000000..1c16dd8c19 --- /dev/null +++ b/html/includes/jpgraph/docs/html/63UsingStrokeCSIM.html @@ -0,0 +1,107 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.3 Using StrokeCSIM()

+

The simplest way of creating a creating a CSIM image is with the + StrokeCSIM() method. As mentioned before this method actually returns a + (small) HTML page containing both the image-tag as well as the image + map specification. Hence it is not possible to use a script that + ends with this method in a standard image-tags src property.

+

There are two ways to create CSIM (or get hold of) the image maps

+
    +
  1. Use the CSIM image script as the target in a standard anchor + reference, for example +
    +<a href="mycsimscript.html">
    +
    +
    This has the drawback that the image page will only contain the + image and nothing else.
  2. +
  3. The other way will allow the image script to be included in an + arbitrary HTML page by just including the image script at the wanted + place in the HTML page using any of the standard "include" php + statement. For example +
    +<h2> This is an CSIM image </h2>
    +
    +<?php
    +include "mycsimscript.php"
    +?>
    +
    +
  4. +
+

Note: If there are several CSIM images on + the same page it is necessary to use "include_once" in the scripts for + the inclusion of "jpgraph.php" and the other jpgraph library files + since the files will be included multiple times on the same page and + one or more "Already defined error" will be displayed.

+

The process to replace Stroke() with StrokeCSIM() is strait forward. + Replace all existing calls to Stroke() with the equivalent calls to + StrokeCSIM().

+

The only difference is that it is necessary ti supply a minimum of + one file name in the StrokeCSIM() method. The first argument must be + the name of the actual image script file including the extension. So + for example if the image script is called "mycsimscript.php" it is + necessary to write +
 

+ $graph-> +StrokeCSIM( +'mycsimscript.php') +

+

+
However, it is possible to apply a small "trick" here. PHP maintain + a special variable called "__FILE__" which is always set to the current + file name. This means you could use the following construction:

+

+ $graph-> +StrokeCSIM( +basename( +__FILE__)) +

+

This is a better way since the script can now be renamed without + having to change any code in the file which otherwise would be needed.

Note: Why does the script name need to be used as + the first parameter? The reason is that in the creation of the HTML + page which is sent back we need to refer to the script in the image + tag. So why is it not possible to use the PHP_SELF reference? The + problem with PHP_SELF is that in the case where we include the + image-script in an HTML page and use the PHP_SELF we will get the name + of the HTML page and not the actual script in which the PHP_SELF is + used. We also can not use the __FILE__ trick in the library since in + the context __FILE__ is set to "jpgraph.php". Hence, this must be + specified by the client as shown above.

+

The other arguments to StrokeCSIM() are optional. Please note that + if several CSIM images are used in the same HTML page it is also + necessary to specify the image map name as the second parameter since + all image maps must be unique to properly match each image map against + each image. Please consult the class reference + StrokeCSIM() for more details.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/63UsingthecachewithClientSideImageMaps.html b/html/includes/jpgraph/docs/html/63UsingthecachewithClientSideImageMaps.html new file mode 100644 index 0000000000..4afe69583a --- /dev/null +++ b/html/includes/jpgraph/docs/html/63UsingthecachewithClientSideImageMaps.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.3 Using the cache with Client Side Image Maps

+

You can also use the cache system for CSIM as well. The cache system + interface is slightly different in this case since the cache needs to + store both the cached image and the cached image-map. + It also needs to change due to the way CSIM HTML paradigm work. The two + major differences from the "standard" cache is

+
    +
  1. The cached version will not be stored in the + previous defined cache directory. See more below.
  2. +
  3. You must call an extra method, CheckCSIMCache(), to check the + cache, see more below.
  4. +
+

+

The performance benefits even for simple CSIM images is around 50% + if the cache can be used and can of course be several 1000% if + construction of the image requires DB calls and other complex + operations which can be avoided.

+

Before reading further you should have an understanding on how the + CSIM works by reading the section "sing Client side image maps".

+

Please remember that when using CSIM you must end your script with a + call to Graph::StrokeCSIM() method instead of the +Graph::Stroke() used for non-csim.

+

To use the cache with CSIM you have to call the +Graph::CheckCSIMCache(). As with the caching for non-CSIM you have + to supply a name to be used for the cached version as well as an + optional timeout value. The default timeout value if nothing else is + specified is 60 minutes.

+

The name argument requires some more explanations. You must specify + a relative name here. For example "myimage" or perhaps + "firstpage/image3". Depending on your installation of JpGraph this will + now end up in the directory specified in the CSIMCACHE_DIR define. This + must also be a directory accessible by the normal web server. By + default a directory called "csimcache" will be created in the same + directory as the image script itself.

+

This has the drawback that the directory from where the script is + executed must be writable by the process running PHP. Best practice for + this is to keep the number of writable directory for PHP down to a + minimum and re-use the same directory as is used for the standard + cache. This however, require that your system administrator setup that + cache directory so that it also accessible by the HTTP server from the + htdocs root.

+

The CheckCSIMCache() method checks the cache for an existing cached + version and if found it returns it and halts execution of the script. + So, this call should be the first call after the creation of the + Graph() and before any heavy work is done to create the image so that + you can minimize the execution of the script in the case a match is + found.

+

So, the general structure of a script that uses CSIM and the cache + is

+ $graph = new  +Graph(400,300 +); +
+
// Check cache, 10 min timeout +
$graph->CheckCSIMCache( +"image1",10); +
+
+// !! If cached version exists, execution halts here !! +
+
// +
// ... Construct the image with heavy DB calls etc, etc +
// +
+
$graph->StrokeCSIM(); +

+

Please note that you do not need to pass any + argument to the final call to StrokeCSIM() as you do when not using the + cache.

Note: The CSIM caching works by storing + two files in the cache directory. One file being the image and the + other file being the corresponding image map as a pure HTML file.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/64ExamplesofImagemaps.html b/html/includes/jpgraph/docs/html/64ExamplesofImagemaps.html new file mode 100644 index 0000000000..85088eafda --- /dev/null +++ b/html/includes/jpgraph/docs/html/64ExamplesofImagemaps.html @@ -0,0 +1,58 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.4 Examples of Image maps

+

In the Example/ directory there are a number of examples of how to + setup the various types of image maps. The following examples are + currently available

+
    +
  • bar_csimex1.php
  • +
  • bar_csimex2.php
  • +
  • bar_csimex3.php
  • +
  • barline_csimex1.php
  • +
  • barlinefreq_csimex1.php
  • +
  • boxstockcsimex1.php
  • +
  • ganttcsimex01.php
  • +
  • ganttcsimex02.php
  • +
  • imgmarkercsimex1.php
  • +
  • pie3d_csimex1.php
  • +
  • piec_csimex1.php
  • +
  • pie_csimex1.php
  • +
  • scatter_csimex1.php
  • +
  • titlecsimex01.php
  • +
+

In order to easily access all of these examples it is possible to + call the testsuit.php example with an additional argument "t=2". + By following the link +testsuit.php?t=2 a separate window will open with all the possible + CSIM examples.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/64Somefinalcomments.html b/html/includes/jpgraph/docs/html/64Somefinalcomments.html new file mode 100644 index 0000000000..c51a321595 --- /dev/null +++ b/html/includes/jpgraph/docs/html/64Somefinalcomments.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.4 Some final comments

+

+
    +
  • If you want the timeout value to be "forever" then you can specify a + 0 as the timeout value (or leave the parameter blank). To regenerate + the image you will have to remove the image files from the cache. This + removal could for example be handled by a nightly cron-job
  • +
  • If you use images where you have enabled the anti-aliasing you + should strongly consider using caching since anti-aliasing is quite + time consuming compared to standard line drawings.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/651Clipping.html b/html/includes/jpgraph/docs/html/651Clipping.html new file mode 100644 index 0000000000..b7ac60b3b1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/651Clipping.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.5.1 Clipping

+

By default plots are not clipped outside the plot area for + performance reasons.

+

This means that if you have manually specified a scale range and + your data is outside that range the plot will be drawn outside the + scale and into the margin.

+

The clipping algorithm is "perfect" in the sense that for example + line plots where the plot area cuts the line between two data points + the line will be drawn up to the edge of the plot area. The algorithm + used is O(1) in number of data points.

+

The disabling/enabling of clipping manually is controlled by +Graph::SetClipping()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/652Commonlyusedproperties.html b/html/includes/jpgraph/docs/html/652Commonlyusedproperties.html new file mode 100644 index 0000000000..f7bd686670 --- /dev/null +++ b/html/includes/jpgraph/docs/html/652Commonlyusedproperties.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.5.2 Commonly used properties

+

+
    +
  1. Each graph can have three titles accessed through the properties + 'Graph::title', ''Graph::subtitle' and ''Graph::subsubtitle'
  2. +
  3. Each graph have a legend accessed through the 'Graph::legend' + property
  4. +
  5. Each graph can have a left, center and right footer accessed + through 'Graph::footer::left','Graph::footer::center' and + 'Graph::footer::right'
  6. +
  7. You access the axis through 'Graph::xaxis', 'Graph::yaxis' and + 'Graph::y2axis'
  8. +
  9. You access the grids through 'Graph::xgrid', 'Graph::ygrid' and + 'Graph::y2grid'
  10. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/653Commonlyusedmethods.html b/html/includes/jpgraph/docs/html/653Commonlyusedmethods.html new file mode 100644 index 0000000000..15ea6fc639 --- /dev/null +++ b/html/includes/jpgraph/docs/html/653Commonlyusedmethods.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.5.3 Commonly used methods

+

+
    +
  1. You add plot objects (bar plots, pie plots, texts, bands, lines + etc) with the 'Graph::Add() method.
  2. +
  3. Each graph can have a specified margin set by 'Graph::SetMargin()'
  4. +
  5. Each graph can have a fill color in the plot area + 'Graph::SetColor()'
  6. +
  7. The plot areas may have a box around it 'Graph::SetBox()'
  8. +
  9. Each graph can have a specified margin color + 'Graph::SetMarginColor()'
  10. +
  11. Each graph can have a frame or not 'Graph::SetFrame()'
  12. +
  13. Each graph can have a specified drop shadow 'Graph::SetShadow()'
  14. +
  15. The grid lines can be either behind or in front of the plots + 'Graph::SetGridDepth()'
  16. +
  17. The plot can be rotated an arbitrary angle with 'Graph::SetAngle()'
  18. +
  19. You can add a background image with 'Graph::SetBackgroundImage'
  20. +
  21. You can change the overall appearance of the axis with + 'Graph::SetAxisStyle'
  22. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/65Commonfeatureforallgraphs.html b/html/includes/jpgraph/docs/html/65Commonfeatureforallgraphs.html new file mode 100644 index 0000000000..ffd4235f0b --- /dev/null +++ b/html/includes/jpgraph/docs/html/65Commonfeatureforallgraphs.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.5 Common feature for all graphs

+

This is a summary of the available feature for all Graph based + charts, i.e. line plots, error plots, scatter plots, etc.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/65HowdoesStrokeCSIMwork.html b/html/includes/jpgraph/docs/html/65HowdoesStrokeCSIMwork.html new file mode 100644 index 0000000000..c88769714e --- /dev/null +++ b/html/includes/jpgraph/docs/html/65HowdoesStrokeCSIMwork.html @@ -0,0 +1,51 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.5 How does StrokeCSIM() work?

+

Knowledge of the exact technical details of the way StrokeCSIM() + works is probably not needed by many people but for completeness we + outline those details in this short section.

+

The fundamental issue we have to solve is that we must be able to + call the image script in two modes. When the user includes the image + script the StrokeCSIM() method should return the HTML page but when the + image script is later called directly in the image tag it must not + return an HTML page but rather the actual image.

+

The way this is solved is by using one HTTP argument which is passed + on automatically when we use the image script name in the image-tag.

+

If you look at the generated HTML you will see that the argument to + the src-property of the image tag is not simply the script name but the + script name with a additional argument.

+

In the JpGraph internal code this pre-defined argument is checked + for and if it exists the image is send back and not the HTML page.

+

The name of this argument is defined by a DEFINE() statement in + JpGraph. The define is _CSIM_DISPLAY.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/66Gettingholdoftheimagemap.html b/html/includes/jpgraph/docs/html/66Gettingholdoftheimagemap.html new file mode 100644 index 0000000000..4c6e7aaafc --- /dev/null +++ b/html/includes/jpgraph/docs/html/66Gettingholdoftheimagemap.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.6 Getting hold of the image map

+

In the case where you want to store the image on disk and later use + it in an img-tag you need to get hold of the image map. For this you + will have to use the function + Graph::GetHTMLImageMap()

+

An example of the use of this is shown below. With these lines the + image will be written to a file. The script then returns a HTML page + which contains the Client side image map and an img-tag which will + retrieve the previously stored file.

+  $graph->Stroke( +"/usr/local/httpd/htdocs/img/image001.png" +); +
echo 
$graph +->GetHTMLImageMap +("myimagemap001" +); +
echo 
+"<img src=\"img/image001.png\" ISMAP USEMAP=\"#myimagemap001\" border=0>" +;
+

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/67Imagemapsandthecachesystem.html b/html/includes/jpgraph/docs/html/67Imagemapsandthecachesystem.html new file mode 100644 index 0000000000..7d06a057ec --- /dev/null +++ b/html/includes/jpgraph/docs/html/67Imagemapsandthecachesystem.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6.7 Image maps and the cache system

+

For version 1.9 the cache system has been extended to include even + the CSIM maps. For each CSIM graph two files are stored in the cache, + the image file itself as well as the wrapper HTML with the actual image + map. For further information see the chapter on "Understanding the + Cache system"

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/6UnderstandingtheJpGraphcachingsystem.html b/html/includes/jpgraph/docs/html/6UnderstandingtheJpGraphcachingsystem.html new file mode 100644 index 0000000000..b2061acd00 --- /dev/null +++ b/html/includes/jpgraph/docs/html/6UnderstandingtheJpGraphcachingsystem.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6 Understanding the JpGraph caching system

+

To reduce load on the web server JpGraph implements an advanced + caching system which avoids the burden of always having to run the full + image script.

+

Depending on the complexity of the image script (for example if it + is doing several DB lookups) this could significantly improve + performance.

+

The rationale behind this is of course performance, and the + observation that very few graphs are really real-time, i.e. needs to be + updated absolutely every time the graphing script is called.

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/6UsingimagemapswithJpGraph.html b/html/includes/jpgraph/docs/html/6UsingimagemapswithJpGraph.html new file mode 100644 index 0000000000..f6a54734c1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/6UsingimagemapswithJpGraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

6 Using image maps with JpGraph

+

Image maps, or client side image (CSIM) as they are known is fully + supported in JpGraph. It gives you the opportunity to create hot-spots + in the graphs which allows you to build a set of "drill-down" graphs.

+

In the following section is based on the assumption that the reader + is familiar with the basic concepts of client side image map in HTML.

+

To shortly recapitulate. Client side image maps consists of two + parts. The first part is the actual image and the second part is a + mapping that gives the coordinates for areas in the image which should + be marked as hot spots (i.e. click-able by the user). The library can + automatically generate these coordinate maps from a given graph.

+

Through out the manual areas of the graph that may be used as a + hotspot is given in conjuction with the general description of that + area.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7101Usingtheautomaticdatetimescale.html b/html/includes/jpgraph/docs/html/7101Usingtheautomaticdatetimescale.html new file mode 100644 index 0000000000..3ddf5e42e1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7101Usingtheautomaticdatetimescale.html @@ -0,0 +1,216 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.10.1 Using the automatic date/time scale

+

The easiest way to get a date time scale for the X-axis is to use + the pre-defined "dat" scale. To be able to use that it is first + necessary to include the module "jpgraph_date.php" and the + specify the scale, for example as "datlin" in the call to SetScale() + as the following code snippet shows.

+  require_once("../jpgraph.php"); +
require_once(
"../jpgraph_line.php"); +
require_once(
"../jpgraph_date.php"); +
... +
$graph  += new Graph(540, +300); +
$graph->SetScale( +'datlin'); +
...

+

The above code snippet would create a date/linear scale for the + graph. We will first show a basic use of the date scale and then go on + to illustrate how it is possible to tailor the exact formatting of the + date axis.

+

When using the fully automatic formatting the library will use the + shortest possible string that uniquely identifieas a date/time. For + example if the entire intervall falls within the same day only the time + values will be displayed, if the intervall falls over several days then + also the date will be added to the label.

+

As usual it is also possible to manually force a certain label + formatting to be used this is illustrated below.

+

7.10.1.1 Specifying the input data

+

The first basic example below creates a data set that emulates a + sample rate every S second and falls over a total period of two days. + It is important to note that the input data on the X-axis must be a in + the form of timestamp data, i.e. the number of seconds from the system + epoch. In PHP the current timestamp value is returned by the function + time().

+

This means that it is always mandatory to specify two input vectors + for a plot. For example to specify a line plot

+  $line  += new LinePlot +($data,$xdata); +

+

The example below show this in practice

+
+
Figure 80: Using the special date X-axis with all default + values [src] +  +

+

+

Please review the script (by following the [src] link) that creates + this graph before continuing since we will base all further examples on + the above example.

+

7.10.1.2 Adjusting the start and end alignment

+

As can be seen from the above example the scale starts slightly + before the first data point. Why? This is of course by purpose in order + to make the first time label to start on an "even" value, in this case + on an hour. Depending on the entire interval of the graph the start + value will always be chosen to be the largest "even" time value, this + could for example be on an even minute, even 30min, even hour, even + day, even week and so on.

+

The alignment of the start (and end) vdate alignment can also be + adjusted manually by using the two methods

+
    +
  • SetTimeAlign($aStartAlign,$aEndAlign)
  • +
  • SetDateAlign($aStartAlign,$aEndAlign)
  • +
+

These method allow the alignment to be made by specifying one of the + following constants.

+

For the SetTimeAlign() the following symbolic constants can be used

+
    +
  1. Alignment on seconds +
      +
    • MINADJ_1, Align on a single second (This is the lowest resolution)
    • +
    • MINADJ_5, Align on the nearest 5 seconds
    • +
    • MINADJ_10, Align on the nearest 10 seconds
    • +
    • MINADJ_15, Align on the nearest 15 seconds
    • +
    • MINADJ_30, Align on the nearest 30 seconds
    • +
    +
  2. +
  3. Alignment on minutes +
      +
    • MINADJ_1, Align to the nearest minute
    • +
    • MINADJ_5, Align on the nearest 5 minutes
    • +
    • MINADJ_10, Align on the nearest 10 minutes
    • +
    • MINADJ_15, Align on the nearest 15 minutes
    • +
    • MINADJ_30, Align on the nearest 30 minutes
    • +
    +
  4. +
  5. Alignment on hours +
      +
    • HOURADJ_1, Align to the nearest hour
    • +
    • HOURADJ_2, Align to the nearest two hour
    • +
    • HOURADJ_3, Align to the nearest three hour
    • +
    • HOURADJ_4, Align to the nearest four hour
    • +
    • HOURADJ_6, Align to the nearest six hour
    • +
    • HOURADJ_12, Align to the nearest tolw hour
    • +
    +
  6. +
+

For the SetDateAlign() the following symbolic constants can + be used

+
    +
  1. Alignment on a day basis +
      +
    • DAYADJ_1, Align on the start of a day
    • +
    • DAYADJ_7, Align on the start of a week
    • +
    • DAYADJ_WEEK, Synonym to DAYADJ_7
    • +
    +
  2. +
  3. Alignment on a monthly basis +
      +
    • MONTHADJ_1, Align on a month start
    • +
    • MONTHADJ_6, Align on the start of halfyear
    • +
    +
  4. +
  5. Alignment on a yearly basis +
      +
    • YEARADJ_1, Align on a year
    • +
    • YEARADJ_2, Align on a bi-yearly basis
    • +
    • YEARADJ_5, Align on a 5 year basis
    • +
    +
  6. +
+

Some examples will calrify the use of these methods.

+

Example 1. We want the time adjustment to start on an even + quarter of an hour, i.e. an even 15 minute period.

+  $graph +->xaxis->scale-> +SetTimeAlign( +MINADJ_15); +

+

+

Example 2. We want the time to start on an even 2 hour

+  $graph +->xaxis->scale-> +SetTimeAlign( +HOURADJ_2); +

+

+

Example 3. We want the start to be on an even day

+  $graph +->xaxis->scale-> +SetDateAlign( +DAYADJ_1); +

+

+

7.10.1.3 Adjusting the label format

+

The default label format always tries to use the shortest possible + unique string. To manually set a manual scale the method + SetDateFormat() is used for example as in

+  $graph +->xaxis->scale-> +SetDateFormat( +'H:i'); +

+

The above example will force the labels to be displayed as hour (24h) + and minutes.

+
+
Figure 81: Using specific label format and align time axis to + start and end on an even 10min [src]  +

+

+

+

7.10.1.4 Adjusting the date scale density

+

As with the linear scale it is possible to indicate what density of + scale ticks is needed. This is specified as usual with a call to + Graph::SetTickDensity()

+  $graph->SetTickDensity( +TICKD_DENSE); +

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7102Specifyingadatetimescalewithamanualcallback.html b/html/includes/jpgraph/docs/html/7102Specifyingadatetimescalewithamanualcallback.html new file mode 100644 index 0000000000..b26e2f4a61 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7102Specifyingadatetimescalewithamanualcallback.html @@ -0,0 +1,236 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.10.2 Specifying a date/time scale with a manual + call-back

+

In the following we will assume that all data points are specified + by a tuple where the date/time is specified as a timestamp in second in + the same format as is returned by the PHP function time().

+

The trick here is to use a label formatting callback routine which + gets called to format each label on the scale.

+

What we do is that we specify that the X-scale should be an ordinary + "int" scale (remember that the data values are timestamps which are + integers). We then install our custom label callback (with a call to + SetLabelFormatCallback()) which given a timestamp formats it to a + suitable human readable form. In our example we will use the PHP + function Date() for this purpose.

+

The callback we use will be

+   +// The callback that converts timestamp to minutes and seconds +
function  +TimeCallback( +$aVal) { +
    return 
Date +('H:i:s',$aVal); +
}

+

Using some random data we can now generate the following graph

+
+
Figure 82: Example on how to format an axis to hold a + date/time scale using and integer scale and a callback routine [src]  +

+

+

In the above example we have specified the X-scale manually to make + sure that the min/max values on the X-axis exactly matches the min/max + x-data values.

+

SetLabelFormatCallback() will be called for each of the displayed + labels and the argument passed on to the supplied function is the + default label that the library is assigning that specific label.

+

This means that if the data to be displayed is based on, for + example, timestamps which are given in seconds the displayed value + might not be aligned to how time/date values normally should be + displayed.

+

Using integer scales this will not work very well since the library + determines label positions to be at even positions (e.g. every 2,5,10, + 20,50,100 etc) to suit the auto-scaling since the library will assume + that the data is integers and not timestamp values.

+

The best way to solve this is to use an integer X-scale together + with a a callback function with a manually specified scale. In order to + setup the scale a bit of manually work is needed. Depending on the data + to be displayed one should ensure that the scale starts and ends at + suitable times and that the tick interval chosen fits with an even + multiple of minutes, hours, days or what is best suited for the time + range that is to be displayed.

+

The following code example illustrates this. It creates some "fake" + data that is assumed to be sampled time based data and sets up some + suitable scales and tick interval. This script may be used as a basis + for more advanced handling of the time data.

+(File: timestampex01.php) +
<?php +
+// Example on how to treat and format timestamp as human readable labels +
require_once( +"../jpgraph.php"); +
require_once(
"../jpgraph_line.php"); +
+
// Number of "fake" data points +
DEFINE('NDATAPOINTS', +500); +
+
+// Assume data points are sample every 10th second +
DEFINE('SAMPLERATE', +10);  +
+
+// Callback formatting function for the X-scale to convert timestamps +
// to hour and minutes. +
function  +TimeCallback( +$aVal) { +
    return 
Date +('H:i'$aVal); +
} +
+
// Get start time +
$start time(); +
+// Set the start time to be on the closest minute just before the "start" timestamp +
$adjstart  += floor($start  +60); +
+
+// Create a data set in range (20,100) and X-positions +
+// We also apply a simple low pass filter on the data to make it less +
// random and a little smoother +
$data  += array(); +
$xdata  += array(); +
$data[0] =  +rand(20,100 +); +
$xdata[0] =  +$adjstart; +
for( 
$i=1 +$i  +NDATAPOINTS; ++ +$i ) { +
    
$data[$i] =  +rand(20,100 +)*0.2 $data[ +$i-1]*0.8 +; +
    
$xdata +[$i] = $adjstart  +$i  +SAMPLERATE; +
} +
+
+// Assume that the data points represents data that is sampled every 10s +
// when determing the end value on the scale. We also add some extra +
// length to end on an even label tick. +
$adjend $adjstart  + ( +NDATAPOINTS+10)*10 +; +
+
$graph  += new Graph(500, +250); +
$graph->SetMargin( +40,20,30 +,50); +
+
+// Now specify the X-scale explicit but let the Y-scale be auto-scaled +
$graph->SetScale( +"intlin",0,0 +,$adjstart,$adjend); +
$graph->title-> +Set( +"Example on TimeStamp Callback"); +
+
+// Setup the callback and adjust the angle of the labels +
$graph->xaxis-> +SetLabelFormatCallback( +'TimeCallback'); +
$graph->xaxis-> +SetLabelAngle( +90); +
+
+// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute +
$graph->xaxis-> +scale->ticks->Set +(300,60); +
+
$line  += new LinePlot +($data,$xdata); +
$line->SetColor( +'lightblue'); +
$graph->Add( +$line); +
+
$graph->Stroke(); +
?> +

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/710Handlingdatetimescales.html b/html/includes/jpgraph/docs/html/710Handlingdatetimescales.html new file mode 100644 index 0000000000..ee47166427 --- /dev/null +++ b/html/includes/jpgraph/docs/html/710Handlingdatetimescales.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.10 Handling date/time scales

+

With date/time scale we refer to the plotting of data where the + independent variable (X-axis) de-nominates a time value. This could for + example be the temperature measured in intervals during a day.

+

From version 1.18 and onwards there are two principal ways of + handling date/time scales. The manual way and fully automatic using the + special "dat" scale. For most cases the automatic "dat" scale is the + preferred choice but in rare circumstances it might be more appropriate + to use the manual way since it gives slightly more control (but not + that much) of the overall handling of scales.

+

To be able to use a date/time scale at all we will assume that the + data points are represented by both an X coordinate (time-value) and a + Y-value (anything else wouldn't make sense).

+

We first start by describing the use of the "dat" scale.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7110Adjustingthegridlinesintheplot.html b/html/includes/jpgraph/docs/html/7110Adjustingthegridlinesintheplot.html new file mode 100644 index 0000000000..c813612f39 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7110Adjustingthegridlinesintheplot.html @@ -0,0 +1,84 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.10 Adjusting the grid lines in the plot

+

By default only the Y-axis have grid lines and then only on major + ticks, i.e. ticks which have a label. It is of course possible to + change this. Both the X , Y and Y2 can have grid lines. It is also + possible to let the gridlines also be drawn on the minor tick marks, + i.e. ticks without a label. Lets see how we can apply this to the graph + above.

+

The grid is modified by accessing the xgrid (or ygrid) component of + the graph. So to display minor grid lines for the Y graph we make the + call

+ $graph->ygrid->Show +(true,true) +

+

The first parameter determines if the grid should be displayed at + all and the second parameter determines whether or not the minor grid + lines should be displayed.

+

If you also wanted the grid lines to be displayed for the Y2 axis + you would call

+ $graph-> +y2grid->Show(true +,true)

+

Note. In general it is not a good idea to display + both the Y and Y2 grid lines since the resulting image becomes + difficult to read for a viewer.

+

We can also enable the X-grid lines with the call

+  $graph +->xgrid->Show( +true) +

+

+

In the above line we will of course only just enable the major grid + lines.

+

To bring all this together we will display a graph with grid lines + for both Y and X axis enabled.

+
+
Figure 20: Enabling major and minor gridlines for Y-axis and + major grid lines for the X-axis +[src]  +

+

+

Note: If you think the first value of the + Y-axis is to close to the first label of the X-axis you have the option + of either increasing the margin (with a call to + SetLabelMargin() ) or to hide the first label (with a call to + HideFirstTickLabel() )

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7111Usingfilledgridlines.html b/html/includes/jpgraph/docs/html/7111Usingfilledgridlines.html new file mode 100644 index 0000000000..f11139a1d5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7111Usingfilledgridlines.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.11 Using filled grid lines

+

Another option for the grid lines is the possibility to have the + area between the grid lines filled with alternating two colors. The + example below illustrates this.

+
+
Figure 21: Using two alternating colors between the gridlines + [src]  +

+

+

In the example above we have also made use of alpha-blending + (requires GD 2.x or higher). By default the filled grid lines are + disabled. To enable this style you have to call the +Grid::SetFill() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7112SpecifyingtextlabelsfortheXaxis.html b/html/includes/jpgraph/docs/html/7112SpecifyingtextlabelsfortheXaxis.html new file mode 100644 index 0000000000..38dbe32ed7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7112SpecifyingtextlabelsfortheXaxis.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.12 Specifying text labels for the X-axis

+

You might want to have specific labels you want to use for the + X-axis when this has been specified as a "text" scale. In the previous + example each Y-point might represent a specific measurement for each of + the first 10 month. We might then want to display the name of the + months as X-scale.

+

To specify the labels on the scale you make use of the + SetTickLabels() method.

+

To get a localized version of the name of the month you can use a + nice feature in JpGraph, the global '$gDateLocal' object which is an + instance of the + DateLocale

+

This class has a number of methods to get localized versions of + relevant names for dates, (months and weekdays).

+

So to specify the X-axis with the short form of the month names we + use the construction

+  $a  +$gDateLocale-> +GetShortMonth(); +
$graph->xaxis-> +SetTickLabels( +$a);
+

+

This will, now result in the image displayed below

+
+
Figure 22: Specifying text labels for the X-axis [src]  +

+

+

Note: It is also perfectly legal to override + the default labels for the Y (and Y2) axis in the same way, however + there is seldom need for that. Please note that the supplied labels + will be applied to each major tick label. If there are insufficient + number of supplied labels the non-existent positions will have empty + labels.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7113Adjustingtheticksonatextscale.html b/html/includes/jpgraph/docs/html/7113Adjustingtheticksonatextscale.html new file mode 100644 index 0000000000..e82658930e --- /dev/null +++ b/html/includes/jpgraph/docs/html/7113Adjustingtheticksonatextscale.html @@ -0,0 +1,63 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.13 Adjusting the ticks on a text scale

+

As can be seen in the previous example the X-axis is slightly + cluttered with the labels very close to each other. We might rectify + this by either enlarging the image or just displaying fewer tick label + on the x-axis.

+

Specifying that we only want, for example, to print every second + label on the axis is done by a call to the method + SetTextLabelInterval() Which would result in the graph

+
+
Figure 23: Just printing every second label on the X-axis [src]  +

+

+

+

If the text labels are long (for example full dates) then another + way might be to adjust the angle of the text. We could for example + choose to rotate the labels on the X-axis by 90 degrees. With the help + of the SetLabelAngle() +

+

Which would then result in the image below

+
+
Figure 24: Rotating the X-labels 90 degrees [src]  +

+

+

Note: The internal fonts which we have been + using so only supports 0 or 90 degrees rotation. To use arbitrary + angles you must specify TTF fonts. More on fonts later.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7114Usingfilledlinegraphs.html b/html/includes/jpgraph/docs/html/7114Usingfilledlinegraphs.html new file mode 100644 index 0000000000..12057df925 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7114Usingfilledlinegraphs.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.14 Using filled line graphs

+

Using a filled line plot is not much different from using a normal + line plot, in fact the only difference is that you must call the method + SetFillColor() + on a normal line plot. This will then fill the area under the line + graph with the chosen color.

+

In the example below we have also, as an example, specified plot + marks (see previous sections).

+
+
Figure 25: Filled line graph with plot marks [src]  +

+

+

Note 1. If you add multiple filled line plots to + one graph make sure you add the one with the highest Y-values first + since it will otherwise overwrite the other plots and they will not be + visible. Plots are stroked in the order they are added to the graph, so + the graph you want front-most must be added last.

+

Note 2. When using legends with filled line plot + the legend will show the fill color and not the bounding line color.

+

Note 3. Filled line plots is only supposed to be + used with positive values. Filling line plots which have negative data + values will probably not have the appearance you expect.

+

As you can see from the graph above the grid lines are below the + filled line graph. If you want the grid lines in front of the graph you + can adjust the depth with call to + Graph::SetGridDepth() As the following example shows

+
+
Figure 26: Adjusting the depth of the gridlines [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7115Usingaccumulatedlinegraphs.html b/html/includes/jpgraph/docs/html/7115Usingaccumulatedlinegraphs.html new file mode 100644 index 0000000000..fbd53a7577 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7115Usingaccumulatedlinegraphs.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.15 Using accumulated line graphs

+

Accumulated line graphs are line graphs that are "stacked" on top of + each other. That is, the values in the supplied data for the Y-axis is + not the absolute value but rather the relative value from graph below. + For example if you have two line graphs with three points each, say + [3,7,5] and [6,9,7]. The first graph will be plotted on the absolute + Y-values [3,7,5] the second plot will be plotted at [3+6, 7+9, 5+7], + hence the values of the previous graphs will be used as offsets.

+

You may add any number of ordinary line graphs together. If you want + to use three line plots in an accumulated line plot graph you write the + following code

+

// First create the individual plots +
$p1 = new LinePlot( +$datay_1); +
$p2 = new LinePlot( +$datay_2); +
$p3 = new LinePlot( +$datay_3); +
+
+// Then add them together to form a accumulated plot +
$ap = new AccLinePlot(array($p1, +$p2,$p3)); +
+
+// Add the accumulated line plot to the graph +
$graph->Add( +$ap);
+

+

You might of course also fill each line plot by adding the lines

+  $p1 +->SetFillColor +("red"); +
$p2->SetFillColor( +"blue"); +
$p3->SetFillColor( +"green"); +

+

Using some appropriate data this might then give a graph perhaps + like the one showed in the figure below

+
+
Figure 27: Accumulated filled line graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7116ConstructingsmoothlineplotswithCubicSplines.html b/html/includes/jpgraph/docs/html/7116ConstructingsmoothlineplotswithCubicSplines.html new file mode 100644 index 0000000000..2ee005e2d1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7116ConstructingsmoothlineplotswithCubicSplines.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.16 Constructing smooth line plots with Cubic + Splines

+

If you only have access to a few data points but still want a smooth + curve between those data points JpGraph can help you achieving that by + letting you construct cubic splines. If you never have heard of cubic + splines before, don't worry. You only have to supply the data points + you know tell JpGraph how many interpolated points in total you want in + the graph. JpGraph will now take care of constructing a smooth curve + between all you data points. The new, smooth, curve will be made up of + exactly as many interpolated points as you have specified.

+

To construct a spline you need both the X and Y coordinates for the + known data points.

+

You start by constructing a new Spline instance. To + get access to the Spline class you must first remember to include the + file "jpgraph_regstat.php". You instantiate this class by calling it + with your two known data arrays (X and Y) as follows.

+  $spline  += new Spline($xdata, +$ydata); +

+

This call initializes the spline with the data points you have. These + data points are also known as Control points for the spline. + This helper class doesn't draw any line itself. Instead it is merely + used to get a new (larger) data array which have all the interpolated + values. You then use these new value in your plot. This way give you + great flexibility in how you want to use this interpolated data.

+

Continuing the above line we now use the Spline::Get() + method to get an interpolated array containing a specified number of + points. So for example the line

+  list( +$sdatax, +$sdatay) =  +$spline->Get(50 +);

+

Will construct the two new data arrays '$sdatax' and '$sdatay' which + contains 50 data points. These two arrays are constructed from the + control point we specified when we created the '$spline' object.

+

You would then use these two new data array in exactly the same way + as you would form ordinary data vectors.

+

The following example illustrates this

+
+
Figure 28: Using spline to get a smooth curve between the + control points. +[src]  +

+

+

In order to make the example more interesting we actually use two + plots. First a line plot to get the smooth curve and then a standard + scatter plot which is used to illustrate where the control points are.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7117Addingplotmarkstoalineplot.html b/html/includes/jpgraph/docs/html/7117Addingplotmarkstoalineplot.html new file mode 100644 index 0000000000..1ba7d21fc4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7117Addingplotmarkstoalineplot.html @@ -0,0 +1,155 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.17 Adding plot marks to a line plot

+

To emphasize the specific data points it is possible to add plot + marks at each data point. Plot marks can be either

+
    +
  • Simple shapes, (e.g. square, circle, cross, etc)
  • +
  • Arbitrary images loaded from a file
  • +
  • One of the built-in images
  • +
+

You access the plot mark through the "mark" instance variable in the + plot, as in

+ $lineplot-> +mark->SetColor("red" +);

+

To choose between the different plot marks you call the +PlotMark::SetType() method with the correct define to choose the + plot type you want to use.

+

The simple shape type of plot marks are

+
    +
  • MARK_SQUARE
  • +
  • MARK_UTRIANGLE
  • +
  • MARK_DTRIANGLE
  • +
  • MARK_DIAMOND
  • +
  • MARK_CIRCLE
  • +
  • MARK_FILLEDCIRCLE
  • +
  • MARK_CROSS
  • +
  • MARK_STAR
  • +
  • MARK_X
  • +
  • MARK_LEFTTRIANGLE
  • +
  • MARK_RIGHTTRIANGLE
  • +
  • MARK_FLASH
  • +
+

To specify an arbitrary image you use the special define

+
    +
  • MARK_IMG
  • +
+

In this case you must also specify a image file name and an optional + scaling constant. For example as in

+  $lineplot->mark-> +SetTYPE( +MARK_IMG, +"myimage.jpg", +1.5); +

+

+

If you want to use one of the built-in images the following images + are available. Please note that not all images are available in all + possible colors. The available colors for each image is listed below.

+

The following shape (the first class) plot marks are available

+
    +
  1. MARK_SQUARE, A filled square
  2. +
  3. MARK_UTRIANGLE, A triangle pointed upwards
  4. +
  5. MARK_DTRIANGLE, A triangle pointed downwards
  6. +
  7. MARK_DIAMOND, A diamond
  8. +
  9. MARK_CIRCLE, A circle
  10. +
  11. MARK_FILLEDCIRCLE, A filled circle
  12. +
  13. MARK_CROSS, A cross
  14. +
  15. MARK_STAR, A star
  16. +
  17. MARK_X, An 'X'
  18. +
  19. MARK_FLASH, A "flash" shape
  20. +
  21. MARK_IMAGE, Use the image specified with the filename and scale as + the second and third argument as the mark.
  22. +
+

+

For the second class (built-in images) the following table list the + different images as well as what color they are available in. For the + built-in images you specify the color with the second argument.

+

Note that some of the images are available in different sizes. The + reason is that even though you can scale them by the third argument + there is a visual degradation to scale an image larger than it's + original size since some pixels needs to be interpolated. Reducing the + size with a scale < 1.0 gives much better visual apperance.

+

The scaling works with both GD 1 and GD 2 but with GD 2 the quality + of the scaling is much better.

+

Built-in images and available colors:

+ + + + + + + + + + + + + + + +
TypeDescriptionColors
MARK_IMG_PUSHPIN, MARK_IMG_SPUSHPIN Push-pin image +'red','blue','green','pink','orange'
MARK_IMG_LPUSHPIN A larger Push-pin image +'red','blue','green','pink','orange'
MARK_IMG_BALL, MARK_IMAGE_SBALLA round 3D rendered ball +'bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'
MARK_IMAGE_MBALLA medium sized round 3D rendered ball + 'blue','bluegreen','brown','cyan', + 'darkgray','greengray','gray','green', + 'greenblue','lightblue','lightred', 'purple','red','white','yellow'
MARK_IMAGE_LBALLA large sized round 3D rendered ball + 'blue','lightblue','brown','darkgreen', + 'green','purple','red','gray','yellow','silver','gray'
MARK_IMAGE_SQUAREA 3D rendered square +'bluegreen','blue','green', 'lightblue','orange','purple','red','yellow'
MARK_IMG_STARA 3D rendered star image +'bluegreen','lightblue','purple','blue','green','pink','red','yellow'
MARK_IMG_DIAMONDA 3D rendered diamond +'lightblue','darkblue','gray', 'blue','pink','purple','red','yellow'
MARK_IMG_BEVELA 3D rendered bevel style round ring +'green','purple','orange','red','yellow'
+ Below we give two examples of images using these features.
+
+
Figure 29: Using an arbitrary image as plot mark [src]  +

+
+

+

+
+
Figure 30: Using the built-in images [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/711AddingplotmarkstolineplotsXXX.html b/html/includes/jpgraph/docs/html/711AddingplotmarkstolineplotsXXX.html new file mode 100644 index 0000000000..902b7f0928 --- /dev/null +++ b/html/includes/jpgraph/docs/html/711AddingplotmarkstolineplotsXXX.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.1 Adding plot marks to line-plots XXX

+

It might sometimes be desirable to highlight the data-points with + marks in the intersection between the given x and Y-coordinates. This + is accomplished by specifying the wanted plot mark type for the "mark" + property of the line graph. A full list of all available marks is given + in the class reference +PlotMarks

+

For now let's just add a triangle shape marker to our previous graph + by adding the line

 $lineplot-> +mark->SetType(MARK_UTRIANGLE +);

+

This will give the graph as shown below

+
+
Figure 7: Adding markers to the previous example [src]  +

+

+

+

If you like you can of course both change the size, fill-color and + frame color of the chosen plot mark.

+

The colors of the marks will, if you don't specify them explicitly, + follow the line color. Please note that if you want different colors + for the marks and the line the call to SetColor() for the marks must be + done after the call to the line since the marks color will always be + reset to the lines color when you set the line.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/711Adjustinglabelsonatextscale.html b/html/includes/jpgraph/docs/html/711Adjustinglabelsonatextscale.html new file mode 100644 index 0000000000..2011fdc285 --- /dev/null +++ b/html/includes/jpgraph/docs/html/711Adjustinglabelsonatextscale.html @@ -0,0 +1,131 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.11 Adjusting labels on a text scale

+

In the following section we will work through an number of examples + on how to manipulate labels on a text scale. Primarily we will + investigate how to best handle the case where you have a large number + of values.

+

As a remainder; Text scale is meant to be used on the X-axis when + the X-axis doesn't have a numeric value, i.e you are only interested in + linear ordering of the data. If you don't specify the labels manually + they will be set automatically starting from 1 as the example below + shows.

+

+
+
Figure 83: A simple bar plot using an automatic text scale [src]  +

+

+

+

To specify the labels on the X-axis as suitable text strings you + call the method + Axis::SetTickLabels() with an array containing the text-labels. If + there are more data points than labels the non-specified labels will be + given their ordinal number. If we augment the previous example with the + name of the month we get the following new example

+

+
+
Figure 84: Manually specifying the text scale labels [src]  +

+

+

+

+
Tip: To get hold of localized version of + the month names (or weekdays) you can use the + DateLocal class available in the global variable $gDateLocale If no + locale has been specified the default locale for the installation will + be used. +
+

What happen now if we have a larger number of bars? Let's try with + 25 bars and see what result we get.

+

+
+
Figure 85: A larger data set [src]  +

+

+

+

Not all to impressive. The labels are to close and they overlap. + Hence it is not a good idea to display every label. To adjust what + labels are to be displayed you use the + SetTextLabelInterval() method. The argument to this method is the + interval between text labels. So to display only every 3 month you + would add the line

+

+ $graph->xaxis->SetTextLabelIntervall(3 +)

+

+

Which would give the result shown below

+
+
Figure 86: Displaying only every third label [src]  +

+

+

+

Much better, quite readable.

+

If we have an even larger data set it might not longer be meaningful + to display all the tick marks since they would simple become to close. + In JpGraph there is a possibility to specify that you only would like + every n:th tick mark to be visible ( + SetTextTickIntervall() ). For bar graphs using text scale however, + that might not be such a good idea since the tick marks are between the + bars and the labels centered under the bars. If we only were to + display, say, every 3 tick mark it wouldn't look to good. Not that we + can't do it, as the example below shows, but it just doesn't look very + good.

+
+
Figure 87: Displaying just every third tick mark. [src]  +

+

+

+

A better way to handle large data set is simply to hide the tick + marks all together. Tick marks may be hidden by calling the method + Axis::HideTicks(); If we hide all the ticks on the X-axis we will + get the result shown below

+
+
Figure 88: Hiding all tick mark. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/712Addingarbitrarytextstringstothegraph.html b/html/includes/jpgraph/docs/html/712Addingarbitrarytextstringstothegraph.html new file mode 100644 index 0000000000..5d8de0ed49 --- /dev/null +++ b/html/includes/jpgraph/docs/html/712Addingarbitrarytextstringstothegraph.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.12 Adding arbitrary text strings to the graph

+

To add clarification or other information text strings to the graph + you can add arbitrary lines of text anywhere you like onto the graph. + The text might have multiple lines and you can choose the paragraph + alignment.

+

To add text you have to create one or more instances of the + Text() object and then add the text object to the graph with the + AddText() method.

+

The position of these text boxes are given as fraction of the width + and height of the graph. When you are positioning these text boxes you + might also choose what part of the text box should be considered the + anchor point for the position you specify.

+

By default the anchor point is the upper left corner of the bounding + box for the text.

+

To show some ways of positioning the text we use a very simple bar + graph not to distract from the text. We first just add a single text + line with most of the settings their default value by adding the + following lines to the graph

+  $txt=new Text( +"This is a text"); +
$txt->Pos( +0,0); +
$txt->SetColor( +"red"); +
$graph->AddText( +$txt);
+

+

The result is shown below.

+
+
Figure 89: Adding a single text string in the upper left + corner [src] +  +

+

+

Not too exiting. Let's make it more interesting by having a + background color, using larger fonts and framing the text box and + adding a drop shadow to the text box by using the methods + SetBox() and SetBox()

+
+
Figure 90: Making the text more interesting [src]  +

+

+

That's better. Now we get some attention. If you want to add a text + with several lines you just need to separate the lines with a newline + ('\n' character). The default paragraph alignment is left edge but you + can also use right and center alignment.

+

As an illustration let's add a couple of more lines to the previous + text, center the text box in the middle of the graph and also use + centered paragraph alignment for the text. To adjust the paragraph + alignment of the text you have to use the + Text::ParagraphAlign()

+
+
Figure 91: Text with multiple lines and centered paragraph + alignment +[src]  +

+

+

Of course there is no limit to the number of text string you can add + to the graph.

+

From version 1.12 it is also possible to add text strings to a graph + using the scale coordinates instead. This is accomplished by using the Text::SetScalePos() Which + is completely analog to SetPos() with the only difference that the + positions given are interpretated as scale values instead of fractions + of the width and height.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/712Displayingthevaluesforeachdatapoint.html b/html/includes/jpgraph/docs/html/712Displayingthevaluesforeachdatapoint.html new file mode 100644 index 0000000000..e48e59d758 --- /dev/null +++ b/html/includes/jpgraph/docs/html/712Displayingthevaluesforeachdatapoint.html @@ -0,0 +1,83 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.2 Displaying the values for each data point

+

As a final easy modification we can enable the display of the data + value above each data point. The value is represented by the 'value' + property in the plot. (You can read more about the possibilities of the + display value + in the class reference.)

+

To enable the display of the value you just need to call the Show() + method of the value as in

+  $lineplot->value-> +Show() +

+

Adding that line to the previous line plot would give the result + shown below.

+
+
Figure 8: Displaying the value for each data point [src]  +

+

+

We can of course change both color, font and format of the displayed + value. So for example if we wanted the display values to be dark red, + use a bold font and have a '$' in front we need to add the lines

+  $lineplot->value +->SetColor("darkred"); +
$lineplot +->value->SetFont( +FF_FONT1, +FS_BOLD); +
$lineplot +->value->SetFormat( +"$ %0.1f"); +

+

This would then result in the following image

+
+
Figure 9: Making the display values a little bit more + interesting +[src]  +

+

+

Note: You can achieve more advanced + formatting by using not just the printf() style format string by a + format callback function. This could allow you to change the displayed + value with more advanced formatting such as displaying money values + with "," to separate thousands.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/713Addingseveralplotstothesamegraph.html b/html/includes/jpgraph/docs/html/713Addingseveralplotstothesamegraph.html new file mode 100644 index 0000000000..5dfb31d183 --- /dev/null +++ b/html/includes/jpgraph/docs/html/713Addingseveralplotstothesamegraph.html @@ -0,0 +1,88 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.3 Adding several plots to the same graph

+

What if we want to add a second plot to the graph we just produced? + Well, this is quite straightforward and just requires two simple step:

+
    +
  1. Create the second plot
  2. +
  3. Add it to the graph
  4. +
+

To create the second plot we need some data (we could of course use + the same data as for the first plot but then we wouldn't be able to see + the new plot!)

+

The following lines show how to create the new plot and add it to + the graph (we only show the new lines - not the full script)

+  $ydata2  += array(1,19, +15,7,22 +,14,5, +9,21,13 +); +
$lineplot2 +=new LinePlot($ydata2); +
$lineplot2 +->SetColor("orange"); +
$lineplot2 +->SetWeight(2); +
+
$graph->Add( +$lineplot2); +

+

Making these changes to the previous graph script would generate a + new graph as illustrated below.

+
+
Figure 10: Adding a second plot to the previous graph [src]  +

+

+

There is a few things worth noting here

+
    +
  • The Y-scale has changed to accommodate the larger range of Y-values + for the second graph.
  • +
  • If you add several plots to the same graph they should contain the + same number of data points. This is not a requirement (the graph will + be automatically scaled to accommodate the plot with the largest number + of points) but it will not look very good since one of the plot end in + the middle of the graph.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/713AddingtitlesandfooterstotheGraph.html b/html/includes/jpgraph/docs/html/713AddingtitlesandfooterstotheGraph.html new file mode 100644 index 0000000000..5c9a9da6db --- /dev/null +++ b/html/includes/jpgraph/docs/html/713AddingtitlesandfooterstotheGraph.html @@ -0,0 +1,104 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.13 Adding titles and footers to the Graph

+

Each graph can have up to three different titles accessed by the + three properties

+
    +
  1. title
  2. +
  3. subtitle
  4. +
  5. subsubtitle
  6. +
+

All of these three properties is a standard text object which means + that you can have individual font, colors, margins and sizes of these + tree titles.

+

The only thing you need to think of is that you probably want to add + some extra margin to make room for the titles (using + Graph::SetMargin() )

+

The individual positioning of these titles are done automatically + and will adjust to the font size being used.

+

If you for, esthetic reasons, would like increase the distance from + the top where the title is positioned (or the intra distance between + title and sub title) you can use the + Text::SetMargin() method. For example the line

+

+ $graph->title->SetMargin +(20);

+

will set the distance between the top of the title string and the top + of the graph to 20 pixels. If you instead call the SetMargin() method + for the subtitle it will adjust the distance between the top of the + subtitle and the bottom of the title.

+

The titles will be positioned at the top and be centered in the + graph. Each of these titles may have multiple lines each separated by a + "\n" (newline) character. By default the paragraph alignment for each + title is centered but may of course be changed (using the + ParagraphAlign()) method.

+

Each graph can also have a footer. This footer is actually three + footers. Left, center and right. The 'left' footer is aligned to the + left, the 'center' at the bottom center and the right to the right.

+

Each of these three positions is a standard Text object which means + you can change color, font and size as you please individually on each + of these footer positions.

+

You access the footer through the Graph::footer property as the + following example shows

+

+ $graph-> +footer->left->Set +("(C) 2002 KXY" +); +
$graph->footer-> +center->Set("CONFIDENTIAL" +); +
$graph->footer-> +center-> +SetColor("red"); +
$graph->footer-> +center-> +SetFont( +FF_FONT2, +FS_BOLD); +
$graph->footer-> +right->Set("19 Aug 2002" +);

+

Note: If you enable the brand timing + argument you should leave the left footer empty.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/714AddingasecondYscale.html b/html/includes/jpgraph/docs/html/714AddingasecondYscale.html new file mode 100644 index 0000000000..0ecb7656cb --- /dev/null +++ b/html/includes/jpgraph/docs/html/714AddingasecondYscale.html @@ -0,0 +1,77 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.4 Adding a second Y-scale

+

As you saw in the preceding example you could add multiple plots to + the same graph and Y-axis. However what if the two plots you want to + display in the graph has very different ranges. One might for example + have Y-values like above but the other might have Y-values in the + 100:s. Even though it is perfectly possible to add them as above the + graph with the smallest values will have a very low dynamic range since + the scale must accomplish the bigger dynamic range of the second plot.

+

The solution to this is to use a second Y-axis with a different + scale and add the second plot to this Y-axis instead. Let's take a look + at how that is accomplished.

+

First we need to create a new data array with large values and + secondly we need to specify a scale for the Y2 axis. This is done by + the lines

+ $y2data = array( +354,200,265 +,99,111, +91,198,225 +,293,251); +
$graph->SetY2Scale( +"lin");
+

+

and finally we create a new line plot and add that to the second + Y-axis. Note that we here use a new method, AddY2(), since we want this + plot to be added to the second Y-axis. Note that JpGraph will only + support two different Y-axis. This is not considered a limitation since + using more than two scales in the same graph would make it very + difficult to interpret the meaning of the graph.

+

To make the graph a little bit more esthetic pleasing we use + different colors for the different plots and let the two different + Y-axis get the same colors as the plots.

+

The resulting graph is shown below. source)

+
+
Figure 11: Adding a second Y-scale plot to the same graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/714Addingatabtitle.html b/html/includes/jpgraph/docs/html/714Addingatabtitle.html new file mode 100644 index 0000000000..6f93f01382 --- /dev/null +++ b/html/includes/jpgraph/docs/html/714Addingatabtitle.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.14 Adding a tab title

+

A variant of the titles is the tab title. This is just + another option you have of putting a name on the graph. The appearance + of this type is a tab on top of the plot area with text inside.

+

You can access the tab using the 'tabtitle' property of the graph.

+

The following figure shows an example of how this can look.

+
+
Figure 92: Using the tabbed title style [src]  +

+

+

As usual you have full freedom to specify font and colors for this + type of title. Please see the class reference regarding +GraphTabTitle() for more information.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/715Addingalegendtothegraph.html b/html/includes/jpgraph/docs/html/715Addingalegendtothegraph.html new file mode 100644 index 0000000000..6263bb061a --- /dev/null +++ b/html/includes/jpgraph/docs/html/715Addingalegendtothegraph.html @@ -0,0 +1,125 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.5 Adding a legend to the graph

+

With more than one plot on the same graph it is necessary to somehow + indicate which plot is which. This is normally done by adding a legend + to the graph.

+

You will see that each plot type has a 'SetLegend()' method which is + used to name that plot in the legend. SO to name the two plots in the + example we have been working with so far we need to add the lines

+  $lineplot->SetLegend +("Plot 1"); +
$lineplot2 +->SetLegend("Plot 2"); +

+

to the previous code. The resulting graph is shown below

+
+
Figure 12: Adding a legend to the graph [src]  +

+

+

As you can see the legend gets automatically sized depending on how + many plots there are that have legend texts to display. By default it + is placed with it's top right corner close to the upper right edge of + the image. Depending on the image you might want to adjust this or you + might want to add a larger margin which is big enough to accompany the + legend. Let's do both.

+

First we increase the right margin and then we place the legend so + that it is roughly centered. We will also enlarge the overall image so + the plot area doesn't get too squeezed.

+

To modify the legend you access the 'legend' property of the graph. + For a full reference on all the possibilities (changing colors, layout, + etc) see class legend in + the class reference

+

For this we use the legends 'SetPos()' method as in

+  $graph +->legend->Pos( +0.05,0.5,"right" +,"center");

+

+

Doing this small modification will give the result shown below

+
+
Figure 13: Adjusting the layout to give more rooms for the + legend [src]  +

+

+

The above method 'SetPos()' deserves some explanation since it might + not be obvious. You specify the position as a fraction of the overall + width and height of the entire image. This makes it possible for you to + resize the image within disturbing the relative position of the legend. + We will later see that the same method is just to place arbitrary text + in the image.

+

To give added flexibility one must also specify to what edge of the + legend the position given should be relative to. In the example above + we have specified "right" edge on the legend for the for the horizontal + positioning and "center" for the vertical position.

+

This means that the right edge of the legend should be position 5 % + of the image width from the right. If you had specified "left" the the + legends left edge would be positioned 5 % of the image width from the + image left side.

+

By default the legends in the legend box gets stacked on top of each + other. The other possibility is to have them sideways. To adjust this + you use the SetLayout() + method. Using a horizontal layout with the previous example give the + following result.

+
+
Figure 14: Using a horizontal layout for the legends [src]  +

+

+

+

7.1.5.1 Adjusting the layout of the legend

+

For more advanced fomatting of the legend it is possible to adjust

+
    +
  • The number of columns in the legend
  • +
  • Specify vertical / horizontal margins for legend columns
  • +
+

In order to adjust the number of columns used in the legend the + method Legend::SetColumns is used. So for example to have the + legend lined up using three columns the follwing lines have to be added + to teh script

+ $graph-> +legend-> +SetColumns(3);
+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/715Usingbackgroundimages.html b/html/includes/jpgraph/docs/html/715Usingbackgroundimages.html new file mode 100644 index 0000000000..1190f856c1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/715Usingbackgroundimages.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.15 Using background images

+

Instead of having a single color background you can easily have an + arbitrary image as the background. The image may be in either PNG, JPG + or GIF format depending on what your installation supports.

+

+
+

A note on GD: If you are using GD 2.xx you must + make sure that the define USE_TRUECOLOR is set to true. This is also + the default. Failure to do so in combination with GD 2.xx will make the + background image just look like a solid black square.

+
+
+

To use a specific image as the background you just have to use the + method + Graph::SetBackgroundImage() The arguments specify file-name, how + the image should be positioned in the graph and finally the format of + the image (if it is in JPG, PNG or GIF) format. If the format is + specified as "auto" (the default) then the appropriate image format + will be determined from the extension of the image file.

+

The file name is of course obvious but the second argument might not + be. This arguments determine how the image should be copied onto the + graph image. You can specify three different variants here

+
    +
  1. BGIMG_ COPY This will just copy the image unchanged onto the graph + from the top left corner.
  2. +
  3. BGIMG_CENTER This will just copy the image unchanged onto the graph + but it will center the image in the graph.
  4. +
  5. BGIMG_FILLFRAME This will scale the image to exactly fit the whole + graph image.
  6. +
  7. BGIMG_FILLPLOT This will scale the image to exactly fit just the + plot area of the graph.
  8. +
+

+

+
The following section only applies to palette based images. + True color images can NOT be manipulated this way. Applying the + following sections to true-color images will have no affect. +
+

You might often find yourself wanting to use a background image as a + "waterstamp". This usually means taking the original image, import it + to some image editing program and then "bleaching" the color + saturation, reducing the contrast and so on. Finally you save the + modified image which you then use as a background image.

+

This whole process can be automatically accomplished in JpGraph by + using the method + Graph::AdjBackgroundImage() which allow you to adjust color + saturation, brightness and contrast of the background image.

+

+ $graph-> +AdjBackgroundImage(...) +

+

+

to achieve the "watercolor" effect to avoid the image being too + intrusive in the graph.

+
+
Figure 93: Example on using a watermark type background image + [src]  +

+

+

Note: The background image depicts a 1998 + Triumph Tiger. This bike is a 900cc off-road bike.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/716Handlingnullvaluesinlineplots.html b/html/includes/jpgraph/docs/html/716Handlingnullvaluesinlineplots.html new file mode 100644 index 0000000000..ab9f9ee18c --- /dev/null +++ b/html/includes/jpgraph/docs/html/716Handlingnullvaluesinlineplots.html @@ -0,0 +1,50 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.6 Handling null-values in line plots

+

JpGraph offers two ways of handling null values (or discontinuities) + in the data. You can either have a "whole" in the data or the line may + be extended between the previous and next data point in the graph.

+

If the data value is null ("") or the special value "x" then the + data point will not be plotted and will leave a gap in the line.

+

If the data value is "-" then the line will be drawn between the + previous and next point in the data ignoring the "-" point.

+

The following example shows both these possibilities.

+

+
+
Figure 15: Handling null values in line graphs [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/716Usingabackgroundgradient.html b/html/includes/jpgraph/docs/html/716Usingabackgroundgradient.html new file mode 100644 index 0000000000..f549c49b15 --- /dev/null +++ b/html/includes/jpgraph/docs/html/716Usingabackgroundgradient.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.16 Using a background gradient

+

In addition to the background image you can also add a background + color gradient. This gradient can be covering the entire graph, just + the plot area or just the margins. This flexibility allows you to + combine a background image with a background color gradient. You can + for example use a background image in the plot area and a color + gradient out in the margins.

+

You specify a color gradient background by calling the + Graph::SetBackgroundGradient() method. All details are available in + the class reference (follow the link above). We finally give a quick + example on what kind of effect you can achieve using this feature.

+
+
Figure 94: Using a background color gradient with the + SetBackgroundGradient() method +[src]  +

+

+

+

Finally we like to mention that in the "/utils/misc/" directory you + will find a small utility script called "mkgrad.php". Running this + script presents you with a UI that makes it a breeze to create a + gradient image on it's own.

+

The UI for the utility is so obvious that we won't discuss it + further, we just show it below. The UI for the mkgrad.php utility The UI for the mkgrad.php utility

+

In the example below this utility is used to get a more interesting + plot area.

+

+
+
Figure 95: Example of the use of a gradient background [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/717UsingcallbacksforPlotmarks.html b/html/includes/jpgraph/docs/html/717UsingcallbacksforPlotmarks.html new file mode 100644 index 0000000000..53114665df --- /dev/null +++ b/html/includes/jpgraph/docs/html/717UsingcallbacksforPlotmarks.html @@ -0,0 +1,92 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.17 Using callbacks for Plot marks

+

An interesting enhancement when using Plotmarks is the possibility + to add a callback function to control the size and color of the + plotmarks.

+

This callback function will get called with the current Y-value (for + the plotmark) as it's argument. As return value the callback function + must return an array containing three (possible null) values. The + values returned must be

+
    +
  1. Plot mark Weight
  2. +
  3. Plot mark Color
  4. +
  5. Plot mark Fill color
  6. +
+

The exact meaning of the parameters will of course depend on the + type of plot marks being used.

+

The callback must be a global function and is installed with a call + to + PlotMark::SetCallback()

+

So for example to install a callback that changes the fill color for + all marks with a (Y) value higher than 90 you could add the lines

+

function  +MarkCallback( +$aVal) { +
    if( 
$aVal  +> 90)  +
        
$fcolor +="red" +
    
else +
        
$fcolor +=""; +
    return array(
"" +,"",$fcolor); +
} +
... +
$plot->mark-> +SetCallback( +"MarkCallback"); +
...

+

+

As you can see in the above example we have left some of the return + values blank. Doing this will just ignore any change of these value and + use the global settings for the plotmarks.

+

If you also let the (Y) value affect the size of the plot marks you + can get what is sometimes known as a "balloon plot". The example below + is basically a scatter plot that uses filled circles to mark the + points. A format callback is then used to change the color and size + depending on the Y-value for each plot.

+

+
+
Figure 96: Creating a balloon plot by using plot mark + callback function +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/717Usingthestepstyletorenderlineplots.html b/html/includes/jpgraph/docs/html/717Usingthestepstyletorenderlineplots.html new file mode 100644 index 0000000000..f21b7c8b57 --- /dev/null +++ b/html/includes/jpgraph/docs/html/717Usingthestepstyletorenderlineplots.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.7 Using the step-style to render line plots

+

Step style refers to an alternate way of rendering line plots by not + drawing a direct line between two adjacent points but rather draw two + segments. The first segment being a horizontal line to the next X-value + and then a vertical line from that point to the correct Y-value. This + is perhaps easier demonstrated by an example as seen below.

+

You specify that you want the plot to be rendered with this style by + calling the method +SetStepStyle() on the lineplot.

+
+
Figure 16: Rendering a line plot with the step style [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/718Rotatinggraphs90degrees.html b/html/includes/jpgraph/docs/html/718Rotatinggraphs90degrees.html new file mode 100644 index 0000000000..6297e5f12c --- /dev/null +++ b/html/includes/jpgraph/docs/html/718Rotatinggraphs90degrees.html @@ -0,0 +1,58 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.18 Rotating graphs 90 degrees

+

In section 10.2 you can read about + arbitrary rotation of the graphs. For most practical purposes rotation + of 90 degrees is most useful. This could for example be used to plot + horizontal bar graphs.

+

The slight complication with general rotation is that the margins + also rotates, this means that if you rotate a graph 90 degrees the left + margin in the image was originally the bottom margin. In additional by + default the center of the rotation is the center of the plot area and + not the entire image (if all the margins are symmetrical then they will + of course coincide). This means that depending on your margin the + center of the rotation will move. You can read more about this and how + to manually set the center for rotation in the section about rotation, 10.2

+

This is just a slight inconvenience which you have to take into + account when you need to set an explicit margin with a call to +Graph::SetMargin()

+

However, in order to make a rotation of 90 degrees much easier you + can easily rotate a graph 90 degrees and set the correct margin with a + call to +Graph::Set90AndMargin() The parameter to this method lets you + specify the margins as you will see them in the image without having to + think of what becomes what after the rotation.

+

So, the only thing you need to do is call this method and then the + graph will have been rotated 90 degrees.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/718Usinglogarithmicscale.html b/html/includes/jpgraph/docs/html/718Usinglogarithmicscale.html new file mode 100644 index 0000000000..4c91eeee9b --- /dev/null +++ b/html/includes/jpgraph/docs/html/718Usinglogarithmicscale.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.8 Using logarithmic scale

+

Using a logarithmic scale requires you to include the logarithmic + add on module in "jpgraph_log.php". So you must have the line

+   +include("jpgraph_log.php" +);

+

on the top of your code. To Illustrate how to use a logarithmic scale + let's make the right Y scale in the previous example a logarithmic + scale. This is done by the line

+  $graph->SetY2Scale( +"log"); +

+

This will then give the following result

+
+
Figure 17: Using a logarithmic scale for both the Y2 axis [src]  +

+

+

+

You can of course also use a logarithmic X-scale as well. The + following example shows this.

+
+
Figure 18: Example of using log scale on both X and Y axis + together with a linear Y2 scale +[src]  +

+

+

Even though we have so far only shown line graphs logarithmic scale + can also be used for bar, error, scatter plots as well. Even radar + plots supports the use of logarithmic plots. The following example + shows how to use a logarithmic scale for a bar graph.

+

+
+
Figure 19: Example of using logarithmic scale togther with + bar plots [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7191Standardtwoaxisgraphs.html b/html/includes/jpgraph/docs/html/7191Standardtwoaxisgraphs.html new file mode 100644 index 0000000000..02743c0953 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7191Standardtwoaxisgraphs.html @@ -0,0 +1,132 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19.1 Standard two axis graphs

+

Assuming we start with the traditional two axis graph, one X and one + Y axis. You may then change the position of each axis by calling + Axis::SetPos($aPosition) You have to remember that you need to + specify the position on the other axis. SO you need to specify the + world-coordinate for the position. By default the axis are each + positioned at the 0-point on the other axis, i.e. the axis will cross + at the 0,0 point in the graph.

+

In addition to the standard positioning you may also use the two + special position markers "min" and "max". This will position the axis + at the minimum (or maximum) position of the other axis.

+

For example, to make sure that the X-axis is always at the bottom of + the graph (at lowest possible Y-value) you would have to add the line

+

+ $graph->xaxis->SetPos +("min");

+

+

To change the color and width of the axis you have to make use of + the Axis::SetColor() and + Axis::SetWeight() + methods.

+
Invisible axis Even though JpGraph (1.7) + doesn't directly support "hidden" axis where the labels are still drawn + it is very easy to achieve this effect by setting the colors of the + axis to be the same as the background. See the example barintex2.php in + the Example directory. To completely hide an axis you can make use of + the Hide() +
+

You might also want to add titles to the axis. This is done through + the Axis::SetTitle() + method. This is actually just a shortcut for accessing the title + property direct. Axis::title::Set() which also allow you to set the + alignment in one call.

+

By default the position of the title is to the far right for the + X-axis and in the middle (and 90 degrees rotated) for the Y-axis.

+

You can adjust the position of the title with the help of the second + argument to the + Axis::SetTitle() method.

+

The possible positions are "high","middle" and "low" which refers to + the scale values on the axis.

+

One common modification you might want to do to the title is to + increase the margin between the axis and the actual title. This is + often necessary to do for the Y-axis if the values displayed are large. + You may adjust the distance (in pixels) between the axis and the title + by using the method + Axis::SetTitleMargin()

+

So for example to increase the margin on the Y-axis you might add + the line

+

+ $graph->yaxis->SetTitleMargin(40 +);

+

+

to your code.

+

Finally we mention something about the positioning of tick marks and + labels on the axis. You have the possibility to choose what side of the + axis the tick marks and the labels should be at. For the X-axis this + can be specified as either on the the top (inside the plot area) or at + bottom (outside of the plotarea). In the same way you can specify for + the Y-axis if the labels ( or ticks) should be on the left or right + side.

+

To adjust the label positioning you have to use the method + Axis::SetTitleSide() and to adjust the position of the tick mark + you have to use the method + SetTickSide()

Note: There is also an alias + for this method, SetTickDirection() which is deprecated from version + 1.7 but kept for backwards compatibility.
Valid arguments for + these methods are

+
    +
  • SIDE_UP
  • +
  • SIDE_DOWN
  • +
  • SIDE_LEFT
  • +
  • SIDE_RIGHT
  • +
+

For example, the following lines added to a script would change side + of the labels and tickmarks for the X-axis.

+

+ $graph->xaxis->SetLabelPos +(SIDE_UP); +
$graph->xaxis-> +SetTickSide( +SIDE_DOWN); +

+

+

This technique is for example used if you position the X-axis at the + top of the graph as the following example shows.

+
+
Figure 97: Example of both how to adjust the position of the + X-axis as well as adjusting the side for the tick and axis title [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7192Scientificstyleaxis.html b/html/includes/jpgraph/docs/html/7192Scientificstyleaxis.html new file mode 100644 index 0000000000..a53ddab118 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7192Scientificstyleaxis.html @@ -0,0 +1,63 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19.2 Scientific style axis

+

In scientific style plots it is often common to duplicate each axis + so that all sides of the graph have a labeled axis. This is of course + also fully supported by JpGraph.

+

Before we continue we show a small example to illustrate this + feature

+

+
+
Figure 98: Example of scientific axis [src]  +

+

+

+

The example above shows the basic configuration. There are now + several modifications you may do to these axis like

+
    +
  • Choose if the labels should be inside or outside the plot area
  • +
  • Choose if the tickmarks should be inside or outside the plot area
  • +
+

The style of axis is determined by the method + Graph::SetAxisStyle() The available type of axis are

+
    +
  • AXSTYLE_SIMPLE, The standard two axis graph
  • +
  • AXSTYLE_BOXIN, Four axis scientific style with labels and tickmarks + on the inside
  • +
  • AXSTYLE_BOXOUT, Four axis scientific style with labels and + tickmarks on the outside
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7193Adjustingthepositionofthescalelabels.html b/html/includes/jpgraph/docs/html/7193Adjustingthepositionofthescalelabels.html new file mode 100644 index 0000000000..4744b3d546 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7193Adjustingthepositionofthescalelabels.html @@ -0,0 +1,57 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19.3 Adjusting the position of the scale labels +

+

How to adjust the actual labels are discussed elsewhere in this + manual (see ???,???). However we like to mention here that you can + adjust the label margin (distance between the axis and the labels) with + the method + Axis::SetLabelMargin()

+

to adjust the actual label format (like font, color, angle) you need + to access the Axis::SetFont() + and the Axis::SetColor() + methods. If you investigate the + Axis class you will discover more methods to adjust the many + aspects of the axis layout.

+

As a final note we also mention the methods + Axis::SetLabelAlign() and + Axis::SetLabelAngle() This first method is really only mentioned + here for completeness since it is mostly used for internal purposes. + However on some occasion you might want to adjust the alignment of the + labels. By default they are centered in respect to the tick mark. By + using the method you might override this positioning should you choose + to do so.

+

The second of these methods adjusts the angle of the label in + regards to the axis. This is very useful for X-axis that have long + labels.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7194Formattingthescalelabels.html b/html/includes/jpgraph/docs/html/7194Formattingthescalelabels.html new file mode 100644 index 0000000000..9ddbdc19cb --- /dev/null +++ b/html/includes/jpgraph/docs/html/7194Formattingthescalelabels.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19.4 Formatting the scale labels

+

In order to have full control over the way that the labels are + displayed it is possible to define a callback function that will be + applied to all labels. The callback function will be called with the + label as the only argument and should return the value that will be + displayed in the graph. This could for example be used to turn seconds + (used to position data points) into hour and minutes on the scale. For + further reference see the two methods: + Graph::SetLabelFormatCallback(); and + Graph::SetLabelFormat();

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7195InvertingtheYaxis.html b/html/includes/jpgraph/docs/html/7195InvertingtheYaxis.html new file mode 100644 index 0000000000..7b5840b986 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7195InvertingtheYaxis.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19.5 Inverting the Y-axis

+

One good way of illustrate the usefulness of label callbacks in a + slightly different context is to show how we can achieve the effect of + an inverted Y-scale.

+

An inverted Y-scale has the lowest number at the top and the scale + values increases downwards.

+

Even though JpGraph doesn't directly support this feature it is + quite easy to achieve with just a few extra lines of code in your image + script.

+

Before we continue we give an example of what we are referring to.

+

+
+
Figure 99: Inverted Y-axis [src]  +

+

+

+

Two achieve this effect there are two simple steps to take:

+
    +
  1. Negate all you Y-value in the data
  2. +
  3. Create a callback that negates the scale labels so they appear to + be positive.
  4. +
+

And that's it! We refer you to the code in the example above for the + details.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/719Formattingtheaxis.html b/html/includes/jpgraph/docs/html/719Formattingtheaxis.html new file mode 100644 index 0000000000..a23972035b --- /dev/null +++ b/html/includes/jpgraph/docs/html/719Formattingtheaxis.html @@ -0,0 +1,38 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.19 Formatting the axis

+

To get the exact type of axis you want in your graph there are a + number of adjustments available for you. You may change, color, size, + position and general appearance.

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/719Moreonscales.html b/html/includes/jpgraph/docs/html/719Moreonscales.html new file mode 100644 index 0000000000..7902940976 --- /dev/null +++ b/html/includes/jpgraph/docs/html/719Moreonscales.html @@ -0,0 +1,87 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1.9 More on scales

+

As you saw in the previous example it is possible to use different + types of scales. In JpGraph you can use the following scales

+
    +
  • Linear scale, the standard "scale"
  • +
  • Logarithmic scale
  • +
  • Integer scale, very similar to linear scale but restricts the scale + values (and labels) to integer values.
  • +
  • Text scale, Similar to integer scale and used when only the + numbering of items is relevant. A text scale is almost exclusively used + for the X-axis. A typical example for this is the X-axis for a bar + plot. The labels for the text scale is usually replaced by user + supplied texts. Text scales can only be used for the X-axis (it doesn't + make sense for the Y-scale).
  • +
+

Any combination of these may be used. Linear and logarithmic scales + are pretty straightforward. The text scale might deserve some + explanation. The easiest way to think of the text scale is as a linear + scale consisting of only natural numbers, i.e. 0,1,2,3,4,... . This + scale is used when you just have a number of Y-values you want to plot + in a consecutive order and don't care about the X-values. For the above + example it will also work fine to use a linear X-scale (try it!). + However, the scale is now treated as consisting or real numbers so the + auto scaling, depending on the size of the image an the number of data + points, might decide to display other labels then the natural numbers., + i.e. a label might be 2.5 say. This is not going to happen if you use a + text scale.

+

The normal practice for text scale is to specify text strings as + labels instead as the default natural numbers. You can specify text + strings for the labels by calling the + SetTickLabels() method on the Axis.

+

To specify the scale you use the + SetScale() method. A few examples might help clarify this.

+
    +
  • "textlin", text-scale for X-axis, Linear scale for Y-axis
  • +
  • "linlin", linear-scale for X-axis, Linear scale for Y-axis
  • +
  • "linlog", linear-scale for X-axis, Logarithmic scale for Y-axis
  • +
  • "loglog", Logarithmic scale for X-axis, Logarithmic scale for + Y-axis
  • +
  • "textint", text-scale for X-axis, Integer scale for Y-axis
  • +
  • "textlog", Text scale for X-axis, Logarithmic scale for Y-axis
  • +
+

As you can see all your graphs will require at least one call to + SetScale() in the beginning of your script. Normally it will come right + after the creation of the Graph().

+

To specify the scale for the Y2 axis you use the + SetY2Scale() Since you only specify one axis you only specify + "half" of the string in the previous examples. So to set a logarithmic + Y2 scale you will call

+  $graph->SetY2Scale( +"log"); +

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/71Lineplots.html b/html/includes/jpgraph/docs/html/71Lineplots.html new file mode 100644 index 0000000000..170a0aba4e --- /dev/null +++ b/html/includes/jpgraph/docs/html/71Lineplots.html @@ -0,0 +1,220 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1 Line plots

+

The first example draws a line graph consisting of 10 Y-values. In + this first example we show the full code. In the following examples we + will only show interesting piece of the code.

+(File: example0.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_line.php"); +
+
// Some data +
$ydata  += array(11,3, +8,12,5 +,1,9, +13,5,7 +); +
+
+// Create the graph. These two calls are always required +
$graph  += new Graph(350, +250,"auto");     +
$graph->SetScale( +"textlin"); +
+
// Create the linear plot +
$lineplot +=new LinePlot($ydata); +
$lineplot +->SetColor("blue"); +
+
// Add the plot to the graph +
$graph->Add( +$lineplot); +
+
// Display the graph +
$graph->Stroke(); +
?> +
+
+
Figure 4: A simple line graph [src]  +

+

+

+

You might note a few things

+
    +
  • Both the X and Y axis have been automatically scaled. We will later + on show how you might control the auto scaling how it determines the + number of ticks which is displayed.
  • +
  • By default the Y-grid is displayed in a "soft" color
  • +
  • By default the image is bordered and the margins are slightly gray.
  • +
  • By default the 0 label on the Y-axis is not displayed
  • +
+

This is a perfect fine graph but looks a little bit "sparse". To + make it more interesting we might want to add a few things like

+
    +
  • A title for the graph
  • +
  • Title for the axis
  • +
  • Increase the margins to account for the title of the axis
  • +
+

From looking at the previous example you can see that you access all + properties of JpGraph through the objects you create. Graph(), + LinePlot() and so on. In general all objects you can see in the graph + is accessed through a named instance.

+

For example the title of the graph is accessed through the + 'Graph::title' property. So to specify a title string you make a call + to the 'Set()' method on the title property as in:

+

+ $graph->title->Set +('Example 2');

+

So by adding just a few more lines to the previous code we get a + graph as shown below.

+
+
Figure 5: Same basic graph as in previous figure but with a + titles for graph and axis. +[src]  +

+

+

To achieve this we just needed to add a few more lines. (We only show + the part of example 1 we changed, to look at the full source just click + the [src] link in the caption. )

+   +// Setup margin and titles +
$graph->img-> +SetMargin(40,20 +,20,40); +
$graph->title-> +Set( +"Example 2"); +
$graph->xaxis-> +title->Set("X-title" +); +
$graph->yaxis-> +title->Set("Y-title" +); +

+

+

Again there are a couple of things you should note here

+
    +
  • A default font and size is used for the text
  • +
  • The default position for the title of the graph is to be centered at + the top
  • +
  • The default position for the title of the x-axis is the far right + and for the y-axis centered and rotated in a 900 angle.
  • +
+

+

A nice change would now be to have all the titles in a bold font and + the line plot a little bit thicker and in blue color. Let's do that by + adding the lines

 $graph-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$graph->yaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$graph->xaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$lineplot +->SetColor("blue"); +
$lineplot +->SetWeight(2);   +// Two pixel wide
+

+

Again please note the consistent interface. To change font you just + have to invoke the SetFont() method on the appropriate object. This + principle is true for most methods you will learn. The methods may be + applied to a variety of objects in JpGraph. So for example it might not + come as a big surprise that to have the Y-axis in red you have to say:

+ $graph->yaxis->SetColor +("red")

+

or perhaps we also want to make the Y-axis a bit wider by

+  $graph +->yaxis->SetWidth( +2) +

+

As a final touch let's add a frame and a drop shadow around the + image since this is by default turned off. This is done with

+  $graph +->SetShadow()

+

The result of all these modifications are shown below.

+
+
Figure 6: Making the image a little bit more interesting by + adding som colors and changing the fonts [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/71Thebasicstructureofanimagemapscript.html b/html/includes/jpgraph/docs/html/71Thebasicstructureofanimagemapscript.html new file mode 100644 index 0000000000..e6b07ca10b --- /dev/null +++ b/html/includes/jpgraph/docs/html/71Thebasicstructureofanimagemapscript.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.1 The basic structure of an image map script

+

The standard structure for an HTML page using client side image maps + would be something along the lines of

+

+
+// Image map specification with name "mapname"
+<MAP NAME=...>
+... specification ...
+</MAP>
+
+// Image tag
+<img src="..." ISMAP USEMAP="mapname">
+
+

This poses an interesting question.

+

Since we normally call the graphing script directly in the <img> tag + how do we get hold of the image map (which is available only in the + image script) in this "HTML wrapper" script?

+

In JpGraph there is actually two ways of solving this.

+
    +
  1. Use the preferred "builtin" way using the modified Stroke() method + Graph::StrokeCSIM() instead of the standard Graph::Stroke() method.
  2. +
  3. Directly use the Graph::GetHTMLImageMap() which gives you fine + control at the expense of more complex coding.
  4. +
+

The first (and preferred) way modifies the stroke method so that + instead of returning an image (like the standard Stroke() method) + StrokeCSIM() actually returns an HTML page containing both the image + map specification and the correct <IMG> tag.

+

This of course means that it is necessary to treat an image map + returning image script differently from a non-CSIM image script, for + example you can't use it directly as the target for the "src" attribute + of the <IMG> tag since it sends back an actual HTML page containing + both an image tag together with an image map.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/720Adjustingtheautoscalinglimitsgracevalue.html b/html/includes/jpgraph/docs/html/720Adjustingtheautoscalinglimitsgracevalue.html new file mode 100644 index 0000000000..30bf7de262 --- /dev/null +++ b/html/includes/jpgraph/docs/html/720Adjustingtheautoscalinglimitsgracevalue.html @@ -0,0 +1,93 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.20 Adjusting the auto-scaling limits - grace value +

+

By default the auto-scaling algorithm tries to make best possible + use of screen estate by making the scale as large as possible, i.e. the + extreme values (min/max) will be on the top and bottom of the scale if + they happen to fall on a scale-tick. So for example doing a simple line + plot could look like the plot shown in the below.

+
+
Figure 100: A typical graph with autoscaling and grace=0 [src]  +

+

+

However you might sometime want to add some extra to the minimum and + maximum values so that there is some "air" in the graph between the end + of the scale values and the extreme points in the graphs. This can be + done by adding a "grace" percentage to the scale. So for example adding + 10% to the y-scale in the image above is done by calling the + SetGrace() method on the yscale as in

+

+ $graph->yaxis->scale +->SetGrace(10, +10); +

+

These lines add a minimum of 10% to the top and bottom values of the + scale. Note that we say "minimum" since depending on the specific tick + values choose this might be a little bit more to make the end of the + scale fall on an even tick mark.

+

Adding this line to the previous graph will result in the following + example

+

+
+
Figure 101: Adding 10% grace value to top and bottom of the + Y-scale [src] +  +

+

+

Since we haven't adjusted the position of the X-axis it will remain + at Y=0 which might not necessary be what we would like so we therefor + also add the line

+

+ $graph->xaxis->SetPos +("min");

+

+

So that the X-axis always will remain at the lowest possible + Y-value. Doing this will then result in the example below

+

+
+
Figure 102: Using grace but also adjusting the position of + the X-axis +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7210Creatingsemifilledbargraphs.html b/html/includes/jpgraph/docs/html/7210Creatingsemifilledbargraphs.html new file mode 100644 index 0000000000..9551e59009 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7210Creatingsemifilledbargraphs.html @@ -0,0 +1,50 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.10 Creating semi-filled bar graphs

+

Semi filled bar graphs are in principle the same as normal filled + bar graphs but with the additional feature that you can choose to only + fill a specified range (or ranges) of X-coordinates. The figure below + illustrates this

+

+
+ + +
Figure 56: Semi-filled line graph [src]  +

+

+

+

In this example we defined two areas along the X-axis to be filled. + You can add filled areas by using the method + AddArea() and specifying range and color for the filled area.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7211Customizingthepatterns.html b/html/includes/jpgraph/docs/html/7211Customizingthepatterns.html new file mode 100644 index 0000000000..3806a67297 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7211Customizingthepatterns.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.21.1 Customizing the patterns

+

All patterns can be customized by

+
    +
  • ... altering the colors of the band +
     
  • +
  • ... altering the density of the patterns using the method + PlotBand::SetDensity() The density is specified as an integer in + range 1 to 100 where a higher number means a higher density (smaller + distance between the lines). For example setting the density of the 3D + plane above to 60 gives the result
    +
    +
    Figure 111: Increasing the desnity in a pattern [src]  +

    +
    +

    +
     

    +
  • +
  • ... enabling or disabling a frame around the pattern by using the + method + PlotBand::ShowFrame() The band will be given the same color as the + band. +
     
  • +
  • ... finally you can change whether the band should be drawn on top + of the plots or beneath, (by default the bands are under the plots), + using the + PlotBand::SetOrder() as the following example show
    +
    +
    Figure 112: Stroking the pattern on top of the plots [src]  +

    +
    +

    +
  • +
+

Note: 3D planes actually carry another + possible modification. You can specify the vanish point to change the + perspective used. You can't access the method to change the horizon + directly but you can access it through
+  $band +->prect->SetHorizon( +$aHorizon) +

+

+

assuming that the band is a 3D plane.

+

To finish this section we give one final, more creative, example on + how to use the bands.

+
+
Figure 113: Combining 3D plane, solid band and a sttaic line [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/721Addingbandsofpatternandcolortographs.html b/html/includes/jpgraph/docs/html/721Addingbandsofpatternandcolortographs.html new file mode 100644 index 0000000000..6a66337a65 --- /dev/null +++ b/html/includes/jpgraph/docs/html/721Addingbandsofpatternandcolortographs.html @@ -0,0 +1,130 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.21 Adding bands of pattern and color to graphs

+

As an additional way of emphasizing certain areas of the graph it is + possible to add bands (either vertical or horizontal) to any one of the + standard X-Y coordinate system based graphs. A band is a rectangular + area that stretches one entire axis. This means that if you define a + band between X-coordinates 3 and 5 the band area will occupy an area + between the X-coordinates and the entire Y-range.

+

In order to access this functionality you must first make sure that + you include the additional library file jpgraph_plotband.php

+

At the time of this writing (current as of JpGraph 1.8) the table + below illustrates the 8 basic types of patterns available. We will + shortly show you how you can customize these patterns, To keep these + examples clear we have only used one pattern in each figure.

+

+ + + + + +
+
+
Figure 103: +[src]  +

+
+

+
+
+
Figure 104: +[src]  +

+
+

+
+
+
Figure 105: +[src]  +

+
+

+
+
+
Figure 106: +[src]  +

+
+

+
+
+
Figure 107: +[src]  +

+
+

+
+
+
Figure 108: [src]  +

+
+

+
+
+
Figure 109: +[src]  +

+
+

+
+
+
Figure 110: +[src]  +

+
+

+
+

To add a one of these patterns to your graph you need to call the + method + PlotBand::PlotBand() The arguments is fairly easy to understand. + The pattern you would like to use is specified by using the correct + constant. You can see the name of the correct constants in the figures + above. You also need to specify if the band should stretch along the + vertical or horizontal axis as well as the min and max coordinates for + the band. As coordinates you may also use the special values "min" and + "max" which automatically sets the value to the minimum/maximum value + of the scale. The specified numeric value will be automatically + truncated to fit within the plot area.

+

We don't discuss the other arguments further here, instead we refer + you to the class reference.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/721Adjustingthewidthofthebars.html b/html/includes/jpgraph/docs/html/721Adjustingthewidthofthebars.html new file mode 100644 index 0000000000..41d3f2e6f2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/721Adjustingthewidthofthebars.html @@ -0,0 +1,51 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.1 Adjusting the width of the bars

+

JpGraph allows you to easy customize the appearance of the bar + graph, for example to change the width of each bar. The width of each + bar can be specified either as a fraction of the width between each + major tick or as an absolute width (in pixels).

+

To set the width in fraction you use the method + SetWidth() and to set the width in pixels you use the + SetAbsWidth()

+

As an example let's take the previous example and set the width to + 100% of the distance between the ticks. The example will now become

+

+
+
Figure 34: Setting the width of the bars to 100% of the tick + width [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/722Addingstaticlinestotheplot.html b/html/includes/jpgraph/docs/html/722Addingstaticlinestotheplot.html new file mode 100644 index 0000000000..0246ff0721 --- /dev/null +++ b/html/includes/jpgraph/docs/html/722Addingstaticlinestotheplot.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.22 Adding static lines to the plot

+

In addition to the bands you can also add static lines to the graph. + An example of that is actually shown in figure 11 above. You create a + line as an instance of + class PlotLine . So for example the lines

+  $sline  += new PlotLine +(HORIZONTAL,0, +"black",2); +
$graph->Add( +$sline); +

+

will add a 2-pixel wide horizontal static line at Y-position zero.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/722Displayingthevalueofeachbar.html b/html/includes/jpgraph/docs/html/722Displayingthevalueofeachbar.html new file mode 100644 index 0000000000..6f6a088819 --- /dev/null +++ b/html/includes/jpgraph/docs/html/722Displayingthevalueofeachbar.html @@ -0,0 +1,104 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.2 Displaying the value of each bar

+

You can easily choose to display the value (and it's format) on top + of each bar by accessing the bar's 'value' property. So for example by + just adding the line

+  $barplot->value-> +Show(); +

+

Will enable the values in it's simplest form and will give the + result

+
+
Figure 35: Showing the values for each bar [src]  +

+

+

You cane see a small nuisance in this graph. The auto scaling + algorithm chooses quite tight limits for the scale so that the bars + just fit. Adding the value on top of the bar makes it collide with the + top of the graph. To remedy this we tell the auto scaling algorithm to + allow for more "grace" space at the top of the scale by using the + method + SetGrace() which is used to tell the scale to add a percentage (of + the total scale span) more space to either one end or both ends of the + scale. In this case we add 20% more space at the top to make more room + for the values with the line

+  $graph->yaxis-> +scale-> +SetGrace(20);
+

+

+

This will then give the graph as shown below

+
+
Figure 36: Adding some grace space to the top of the Y-scale [src]  +

+

+

+

You can also adjust the general position of the value in respect to + the bar by using the + BarPlot::SetValuePos() method. You can set the position to either + 'top' (the default) , 'center' or 'bottom'. The graph below shows the + value being positioned in the center. In this example we have also + adjusted the format to just display the value as an integer without any + decimals.

+
+
Figure 37: Putting the values in the middle of the bar. [src]  +

+

+

It is also possible to specify a more fine grained control on how + you want the values presented. You can for example, rotate them, change + font, change color. It is also possible to adjust the actual value + displayed by either using a printf()-type format string or with the + more advanced technique of a format callback routine.

+

To show what you can do we just give another example for you to + examine without much further explanations. Just remember that to have + text at an angle other than 0 or 90 degrees we have to use TTF fonts. + Even though we haven't explained the SetFont() method it should be + fairly obvious.

+
+
Figure 38: Making the displayed values more interesting [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/723Addingadropshadowtothebar.html b/html/includes/jpgraph/docs/html/723Addingadropshadowtothebar.html new file mode 100644 index 0000000000..06610a1c4a --- /dev/null +++ b/html/includes/jpgraph/docs/html/723Addingadropshadowtothebar.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.3 Adding a drop shadow to the bar

+

One simple way of making the bar graph more attracting is to add a + drop shadow to each bar. This is done by calling the + SetShadow() method. An example will clarify this.

+
+
Figure 39: Adding a drop shadow to each bar [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/724Adjustingthealignmentofbarsonatextscale.html b/html/includes/jpgraph/docs/html/724Adjustingthealignmentofbarsonatextscale.html new file mode 100644 index 0000000000..d640f06c11 --- /dev/null +++ b/html/includes/jpgraph/docs/html/724Adjustingthealignmentofbarsonatextscale.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.4 Adjusting the alignment of bars on a text + scale

+

As you have seen from the previous examples bar graphs are normally + centered between the trick marks on a text scale. However, you can + modify this behavior by calling the method + BarPlot::SetAlign()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/725Usinggroupedbarplots.html b/html/includes/jpgraph/docs/html/725Usinggroupedbarplots.html new file mode 100644 index 0000000000..ba994ef440 --- /dev/null +++ b/html/includes/jpgraph/docs/html/725Usinggroupedbarplots.html @@ -0,0 +1,87 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.5 Using grouped bar plots

+

These types of bar graph is used to easy group two or more bars + together around each tick (X-value). The bars will be placed + immediately beside each other and as a group centered on each tick + mark. A grouped bar is created by aggregating two or more ordinary bar + graphs and creating a + GroupBarPlot() From two ordinary bar graphs along the lines of

+   +// Create the bar plots +
$b1plot  += new BarPlot($data1y); +
$b1plot->SetFillColor( +"orange"); +
+
$b2plot  += new BarPlot($data2y); +
$b2plot->SetFillColor( +"blue"); +
+
// Create the grouped bar plot +
$gbplot  += new GroupBarPlot +(array($b1plot +,$b2plot)); +
+
// ...and add it to the graPH +
$graph->Add( +$gbplot); +

+

The following example illustrates this type of graph

+
+
Figure 40: A grouped bar plot [src]  +

+

+

There is no limit on the number of plots you may group together.

+

If you use the SetWidth() method on the GroupBarPlot() this will + affect the total width used by all the added plots. Each individual bar + width will be the same for all added bars. The default width for + grouped bar is 70%.

+

Setting the grouped with to 0.9 would result in the image below.

+
+
Figure 41: Adjusting the width for a gropued bar plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/726Usingaccumulatedbarplots.html b/html/includes/jpgraph/docs/html/726Usingaccumulatedbarplots.html new file mode 100644 index 0000000000..f3b8a53e17 --- /dev/null +++ b/html/includes/jpgraph/docs/html/726Usingaccumulatedbarplots.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.6 Using accumulated bar plots

+

The final variety of group bars you can have are accumulated bars. + They work in much the same way as accumulated line plots described + above. Each plot is stacked on top of each other.

+

You create accumulated bar plots in the same way as grouped bar + plots by first creating a number of ordinary bar plots that are then + aggregated with a call to + AccBarPlot();

+

An example makes this clear. Let's use the same data as in the two + examples above but instead of grouping the bars we accumulate (or + stack) them. The code would be very similar (actually only one line has + to change)

+
+
Figure 42: Accumulated bar plots [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/727Usinggroupedaccumulatedbargraphs.html b/html/includes/jpgraph/docs/html/727Usinggroupedaccumulatedbargraphs.html new file mode 100644 index 0000000000..d1616cf84c --- /dev/null +++ b/html/includes/jpgraph/docs/html/727Usinggroupedaccumulatedbargraphs.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.7 Using grouped accumulated bar graphs

+

It is perfectly possible to combine the previous bar types to have + grouped accumulated bar plots. This is done by just adding the + different accumulated plots to a group bar plot, for example the + following code would do that.

+   +// Create all the 4 bar plots +
$b1plot  += new BarPlot($data1y); +
$b1plot->SetFillColor( +"orange"); +
$b2plot  += new BarPlot($data2y); +
$b2plot->SetFillColor( +"blue"); +
$b3plot  += new BarPlot($data3y); +
$b3plot->SetFillColor( +"green"); +
$b4plot  += new BarPlot($data4y); +
$b4plot->SetFillColor( +"brown"); +
+
// Create the accumulated bar plots +
$ab1plot  += new AccBarPlot +(array($b1plot +,$b2plot)); +
$ab2plot  += new AccBarPlot +(array($b3plot +,$b4plot)); +
+
// Create the grouped bar plot +
$gbplot  += new GroupBarPlot +(array($ab1plot +,$ab2plot)); +
+
// ...and add it to the graph +
$graph->Add( +$gbplot); +

+

Putting this together in an example would then produce the graph as + shown below

+
+
Figure 43: Combining grouped and accumulated bar plots [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/728Horizontalbargraphs.html b/html/includes/jpgraph/docs/html/728Horizontalbargraphs.html new file mode 100644 index 0000000000..17fa365731 --- /dev/null +++ b/html/includes/jpgraph/docs/html/728Horizontalbargraphs.html @@ -0,0 +1,98 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.8 Horizontal bar graphs

+

It can often come in handy to have horizontal bar graphs especially + if you have a large number of values to display. Even though JpGraph + doesn't directly support horizontal bar graphs this is easy achieved by + constructing a normal vertical bar graph which is then rotated 90 + degrees.

+

The example below shows a simple example of this

+
+
Figure 44: A typical horizontal bar graph with the Y-axis at + the bottom +[src]  +

+

+

+

In order to achieve this effect you should study the above example + carefully and you might notice two things

+
    +
  • We don't simply rotate the graph we also specify that we want the + rotation center to be the middle of the entire image. The reason for + this is that by default (See the section on rotating plots) the pivot + point for rotation is the center of the plot area. + Since the center of the plot area is not necessary the center of the + entire image the rotation might be a little bit difficult to predict + since it will depend on the margins specified. <
  • +
  • The size of the plot area is determined from the original width and + height of the image taking the specified margin into account. When the + the plot area is rotated 90 degrees clockwise what was the left margin + now in effect become the upper margin and so on. This is a small nuance + since we conceptually want to specify the margins directly in the + rotated plot. +
    In order to more easily handle the margin with rotated images it is + recommended that the method "Set90AndMargin()" is used. This allows the + image to be rotated as well as specifying the margins in an obvious + way.
  • +
+

We finally show three more examples of horizontal bar plots. In the + first plot we have hidden the Y-axis and in the second we have + positioned the Y - axis at top as opposed to the bottom as the first + example shows.

+

+
+
Figure 45: Horizontal bar graph with hidden Y axis [src]  +

+

+

+
+
Figure 46: Horizontal bar graph with Y axis at the top [src]  +

+

+

+

In the final example which is almost similar to the two first we + illustrate the use of labels with more than one line.

+
+
Figure 47: Horizontal bar graph with manual integer scale as + well as multiple line labels +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/729Usinggradientfillforbargraphs.html b/html/includes/jpgraph/docs/html/729Usinggradientfillforbargraphs.html new file mode 100644 index 0000000000..f6f4f37d02 --- /dev/null +++ b/html/includes/jpgraph/docs/html/729Usinggradientfillforbargraphs.html @@ -0,0 +1,126 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2.9 Using gradient fill for bar graphs

+

It is possible to use color gradient fill for the individual bars in + the bar graph.

+

Color gradient fill fills a rectangle with a smooth transition + between two colors. In what direction the transition goes (from left to + right, down and up, from the middle and out etc) is determined by the + style of the gradient fill. JpGraph currently supports 8 different + styles. All supported styles are displayed in the figure below.

+
+
Figure 48: +[src]  +

+

+

+
+
Figure 49: +[src]  +

+

+

+
+
Figure 50: +[src]  +

+

+

+
+
Figure 51: +[src]  +

+

+

+
+
Figure 52: +[src]  +

+

+

+
+
Figure 53: +[src]  +

+

+

+
+
Figure 54: +[src]  +

+

+

+
+
Figure 55: +[src]  +

+

+

+

To specify a gradient fill for the bar plots you make use of the + method + BarPlot::SetFillGradient() . See the class reference for details of + this function.

+

When using gradient fills there are a couple of caveats you should + be aware of:

+
    +
  • gradient filling is computational expensive. Large plots with + gradient fill will take in the order of 6 times longer to fill then for + a normal one-color fill. This might to some extent be helped by making + use of the cache feature of JpGraph so that the graph is only generated + a few times.
  • +
  • gradient filling will make use of much more colors (by definition) + this will make the color palette for the image bigger and hence make + the overall image larger. It might also have some severe effect on + using anti-aliased line in the same image as color gradient filling + since anti-aliased lines also have the possibility to make use of many + colors. Hence the color palette might not be big enough for all the + colors you need. So if you use gradient fills you should also be using + a true-color image since you otherwise run out of colors. +
    This problem is often seen as that for no apparent reason some + color you have specified in the image does appear as another color. + (This is not a bug in JpGraph!) This is something to especially watch + out for when enabling anti-aliasing since that also uses a lot of + colors. Since the numbers of colors used with anti-aliasing depends on + the angle on the lines it is impossible to foresee the number of colors + used for this.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/72Bargraphs.html b/html/includes/jpgraph/docs/html/72Bargraphs.html new file mode 100644 index 0000000000..afbf33932a --- /dev/null +++ b/html/includes/jpgraph/docs/html/72Bargraphs.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2 Bar graphs

+

Jpgraph also supports 2D vertical bar plots. Before you can use any + bar plots you must make sure that you included the file + "jpgraph_bar.php" in your script.

+

Using bar plots is quite straightforward and works in much the same + way as line plots which you are already familiar with from the previous + examples. Assuming you have a data array consisting of the values + [12,8,19,3,10,5] and you want to display them as a bar plot. This is + the simplest way to do this:

+  $datay=array(12, +8,19,3 +,10,5); +
$bplot  += new BarPlot($datay); +
$graph->Add( +$bplot); +

+

If you compare this to the previous line examples you can see that + the only change necessary was that instead of creating a new line plot + (via the new LinePlot(...) call) we used the statement new + BarPplot().

+

The other change we should do is to make sure the X-axis have an + text-scale (it is perfectly fine to use a linear X-scale but in most + cases this is not the effect you want when you use a bar graph, see + more below). With this two simple change we will now get a bar graph as + displayed in the following image

+
+
Figure 31: A very simple bar graph [src]  +

+

+

You can of course modify the appearance of the bar graph. So for + example to change the fill color you would use the + BarPlot::SetFillColor() method. Making this small change to the + previous example would give the expected effect as can be seen in the + next example.

+
+
Figure 32: A very simple bar graph with changed fill color [src]  +

+

+

Note: You should note from the previous two + graphs that slight change in appearance for the X-scale. The bar graphs + gets automatically centered between the tick marks when using as text + x-scale. If you were to use a linear scale they would instead start at + the left edge of the X-axis and the X-axis would be labeled with a + linear scale. As is illustrated in the (small) example below.
+
+
Figure 33: A small example with a bar graph using a linear + X-scale [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/72Specifyingtargetsforimagemapplots.html b/html/includes/jpgraph/docs/html/72Specifyingtargetsforimagemapplots.html new file mode 100644 index 0000000000..1de695b81f --- /dev/null +++ b/html/includes/jpgraph/docs/html/72Specifyingtargetsforimagemapplots.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.2 Specifying targets for image map plots

+

To turn a standard image script into a CSIM script the first thing + needed to do is to supply the appropriate URL targets for the hotspots + in the image.

+

What the hotspots represent depends on the type of plot you are + doing. The following plot types and graph areas support image maps.

+
    +
  • Line plots. Markers are hotspots.
  • +
  • Scatter plot. Markers are hotspots.
  • +
  • Pie Plots and 3D Pie plots. Each slice is a hotspot
  • +
  • All types of Bar graphs. Each bar is a hotspot
  • +
  • Legends
  • +
  • Text strings, for example titles and title of axis
  • +
+

To specify a link for each hotspot you have to use the + SetCSIMTargets() method for each plot (or specific area) in the + graph which should be a hotspot.

+

There are two arguments to this method

+
    +
  1. $aTargets, an array of valid URL targets. One URL per hot spot, for + example if you have a 10 values bar plot you need 10 URLs. If the + SetCSIMTarget() is applied to, for example, a text then of course only + one URL target should be specified.
  2. +
  3. $aAlts, an array of valid alt-texts. Many browsers (but not all) + will show this text string if the mouse hovers over a hotspot.
  4. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/731Usinglineerrorplots.html b/html/includes/jpgraph/docs/html/731Usinglineerrorplots.html new file mode 100644 index 0000000000..e19cdf545f --- /dev/null +++ b/html/includes/jpgraph/docs/html/731Usinglineerrorplots.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.3.1 Using line error plots

+

A line error plot is an error plot with the addition that a line is + drawn between the average value of each error pair. You use this type + of plot the exact same way you would use an error plot. The only change + is that you must instantiated an + ErrorLinePlot() instead and make sure you have included the + "jpgraph_line.php" since the line error plot makes use of the line plot + class to stroke the line.

+

To control the various properties of the line drawn the "line" + property of the error line plot may be accessed. So, for example, if + you want the line to be 2 pixels wide and blue you would have to add + the following two lines

+  $elplot->line-> +SetWeight(2); +
$elplot->line-> +SetColor( +"blue"); +

+

to generate the graph as shown below

+
+
Figure 59: Linear error plot [src]  +

+

+

You may of course add legends to none, one or both of the line types + in the above graph. So for example if we wanted the legend "Min/Max" + for the red error bars and a legend "Average" for the blue line you + would have to add the lines

+  $errplot->SetLegend( +"Min/Max"); +
$errplot->line-> +SetLegend( +"Average"); +

+

The resulting graph will now look like (note that we are using the + default placement of the legend box)

+
+
Figure 60: Addding a legend box to the line error plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/73Errorplots.html b/html/includes/jpgraph/docs/html/73Errorplots.html new file mode 100644 index 0000000000..007fe74b74 --- /dev/null +++ b/html/includes/jpgraph/docs/html/73Errorplots.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.3 Error plots

+

Error plots are used to visually indicate uncertainty in data + points. This is done by for each X value by giving both a minimum and a + maximum Y-value.

+

Before you can use error plots you must remember to include the file + "jpgraph_error.php" in your script.

+

The following example illustrates a simple error bar. We will have 5 + points, so we need 10 Y-values. We also would like the error bars to be + red and 2 pixels wide. All this is accomplished by creating an + ErrorPlot() in much the same way as, for example, a normal line + plot. Doing this would now give the example shown below.

+

+
+
Figure 57: A simple error bar [src]  +

+

+

You might notice that there is one displeasing esthetic quality of + this graph. The X-scale is just wide enough to just accompany the + number of error bars and hence the first bar is drawn on the Y-axis and + the and last bar just at the edge of the plot area. To adjust this you + might call the SetCenter() + method which will adjust the X-scale so it does not use the full width + of the X-axis.

+

The following example illustrates the use of this feature by + applying this technique to the previous example

+
+
Figure 58: Adjusting the X-scale not to use the full width of + the X-axis. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/73UsingStrokeCSIM.html b/html/includes/jpgraph/docs/html/73UsingStrokeCSIM.html new file mode 100644 index 0000000000..ed4618aa46 --- /dev/null +++ b/html/includes/jpgraph/docs/html/73UsingStrokeCSIM.html @@ -0,0 +1,107 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.3 Using StrokeCSIM()

+

The simplest way of creating a creating a CSIM image is with the + StrokeCSIM() method. As mentioned before this method actually returns a + (small) HTML page containing both the image-tag as well as the image + map specification. Hence it is not possible to use a script that + ends with this method in a standard image-tags src property.

+

There are two ways to create CSIM (or get hold of) the image maps

+
    +
  1. Use the CSIM image script as the target in a standard anchor + reference, for example +
    +<a href="mycsimscript.html">
    +
    +
    This has the drawback that the image page will only contain the + image and nothing else.
  2. +
  3. The other way will allow the image script to be included in an + arbitrary HTML page by just including the image script at the wanted + place in the HTML page using any of the standard "include" php + statement. For example +
    +<h2> This is an CSIM image </h2>
    +
    +<?php
    +include "mycsimscript.php"
    +?>
    +
    +
  4. +
+

Note: If there are several CSIM images on + the same page it is necessary to use "include_once" in the scripts for + the inclusion of "jpgraph.php" and the other jpgraph library files + since the files will be included multiple times on the same page and + one or more "Already defined error" will be displayed.

+

The process to replace Stroke() with StrokeCSIM() is strait forward. + Replace all existing calls to Stroke() with the equivalent calls to + StrokeCSIM().

+

The only difference is that it is necessary ti supply a minimum of + one file name in the StrokeCSIM() method. The first argument must be + the name of the actual image script file including the extension. So + for example if the image script is called "mycsimscript.php" it is + necessary to write +
 

+ $graph-> +StrokeCSIM( +'mycsimscript.php') +

+

+
However, it is possible to apply a small "trick" here. PHP maintain + a special variable called "__FILE__" which is always set to the current + file name. This means you could use the following construction:

+

+ $graph-> +StrokeCSIM( +basename( +__FILE__)) +

+

This is a better way since the script can now be renamed without + having to change any code in the file which otherwise would be needed.

Note: Why does the script name need to be used as + the first parameter? The reason is that in the creation of the HTML + page which is sent back we need to refer to the script in the image + tag. So why is it not possible to use the PHP_SELF reference? The + problem with PHP_SELF is that in the case where we include the + image-script in an HTML page and use the PHP_SELF we will get the name + of the HTML page and not the actual script in which the PHP_SELF is + used. We also can not use the __FILE__ trick in the library since in + the context __FILE__ is set to "jpgraph.php". Hence, this must be + specified by the client as shown above.

+

The other arguments to StrokeCSIM() are optional. Please note that + if several CSIM images are used in the same HTML page it is also + necessary to specify the image map name as the second parameter since + all image maps must be unique to properly match each image map against + each image. Please consult the class reference + StrokeCSIM() for more details.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/74ExamplesofImagemaps.html b/html/includes/jpgraph/docs/html/74ExamplesofImagemaps.html new file mode 100644 index 0000000000..2f34dbe468 --- /dev/null +++ b/html/includes/jpgraph/docs/html/74ExamplesofImagemaps.html @@ -0,0 +1,58 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.4 Examples of Image maps

+

In the Example/ directory there are a number of examples of how to + setup the various types of image maps. The following examples are + currently available

+
    +
  • bar_csimex1.php
  • +
  • bar_csimex2.php
  • +
  • bar_csimex3.php
  • +
  • barline_csimex1.php
  • +
  • barlinefreq_csimex1.php
  • +
  • boxstockcsimex1.php
  • +
  • ganttcsimex01.php
  • +
  • ganttcsimex02.php
  • +
  • imgmarkercsimex1.php
  • +
  • pie3d_csimex1.php
  • +
  • piec_csimex1.php
  • +
  • pie_csimex1.php
  • +
  • scatter_csimex1.php
  • +
  • titlecsimex01.php
  • +
+

In order to easily access all of these examples it is possible to + call the testsuit.php example with an additional argument "t=2". + By following the link +testsuit.php?t=2 a separate window will open with all the possible + CSIM examples.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/74Scatterplots.html b/html/includes/jpgraph/docs/html/74Scatterplots.html new file mode 100644 index 0000000000..62797e9b6a --- /dev/null +++ b/html/includes/jpgraph/docs/html/74Scatterplots.html @@ -0,0 +1,113 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.4 Scatter plots

+

Scatter plots are very simple; they plot a number of points + specified by their X- and Y-coordinate. Each point is stroked on the + image with a mark as with line plots. The stroked marks can also be + connected with an optional line.

Note: Even + though it is only scatter plot that was designed to be used with X,Y + plots it is perfectly possible to use use both X,Y coordinates for bar + and line plots as well.

+

Even though you would normally supply X-coordinates it is still + perfectly possible to use a text-scale for X-coordinates to just + enumerate the points. This is especially useful when using the + "Impulse" type of scatter plot as is shown below.

+

Scatter pots are created by including the jpgraph extension + "jpgraph_scatter.php" and then creating an instance of plot type of + ScatterPlot(). To specify the mark you want to use you access the mark + with the instance variable "mark" in the scatter plot. The default is + to use an unfilled small circle.

+

To create a scatter plot you will create an instance

+

A simple example using just default values will illustrate this

+

+
+
Figure 61: The simplest possible scatter plot [src]  +

+

+

We can easily adjust the size and colors for the markers to get + another effect as shown below

+
+
Figure 62: The simplest possible scatter plot with adjusted + marks [src] +  +

+

+

Another possible variant of scatter plot is impulse-scatter plots. + This is a variant of normal scatter plot where each mark have a line + from the mark to the Y=0 base line. To change a scatter plot into an + impulse scatter plot you have to call the method + SetImpuls() on the scatter plot.

+

This type of plots are often used to illustrate signals in + conjunction with digital signal processing. The following two examples + illustrates simple use of impulse plots.

+
+
Figure 63: A simple impuls plot [src]  +

+

+

The next example shows how to modify the color and width of the + impulse plot

+
+
Figure 64: A modified impuls plot [src]  +

+

+

Note: You may draw impulse graphs without + any mark by specifying the mark type as (-1) . That way only the + impulse lines will be drawn.

+

As a final touch we show two more advanced impulse graphs . In these + graphs we have used more advanced formatting for the Y-axis labels as + well as adjusted the position of the axis position.

+
+
Figure 65: In this imuplsplot we have adjusted the position + of the X-axis to the bottom and also added more decimals to the labels + on the Y-axis +[src]  +

+

+

+
+
Figure 66: In this impuls plot we have also added a lineplot + with a dotted line style. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/75Fieldplots.html b/html/includes/jpgraph/docs/html/75Fieldplots.html new file mode 100644 index 0000000000..c04721348d --- /dev/null +++ b/html/includes/jpgraph/docs/html/75Fieldplots.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.5 Field plots

+

A variant of scatter plot is the so called Field Plots this + is basically a scatter plot where each scatter point is an arrow with a + direction between 0 to 359 degrees. This effectively allows the + visualization of 3 parameters at each point (x,y,angle). As an + additional bonus there is also possible to define a callback for each + scatter plot to also define the color for each point.

+

To create a field plot you create an instance of +FieldPlot in the same way as you created a normal scatter plot. The + arguments to this method are Y-coordinate, X-coordinate and angle. To + specify a callback you use +FieldPlot::SetCallback()

+

The following example (and code) illustrates the usage of the field + plot type.

+

+
+
Figure 67: Example of the Field plot type [src]  +

+

+

In addition to the parameters mentioned above you can also adjust + both the general size of the arrow and also the specific size of the + arrowhead. The arrow size is specified in pixels and the arrow head is + specified as an integers between 0 and 10. These sizes are specified + with a call to +FieldPlot::arrow::SetSize()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/75HowdoesStrokeCSIMwork.html b/html/includes/jpgraph/docs/html/75HowdoesStrokeCSIMwork.html new file mode 100644 index 0000000000..6f32ef63e1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/75HowdoesStrokeCSIMwork.html @@ -0,0 +1,51 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.5 How does StrokeCSIM() work?

+

Knowledge of the exact technical details of the way StrokeCSIM() + works is probably not needed by many people but for completeness we + outline those details in this short section.

+

The fundamental issue we have to solve is that we must be able to + call the image script in two modes. When the user includes the image + script the StrokeCSIM() method should return the HTML page but when the + image script is later called directly in the image tag it must not + return an HTML page but rather the actual image.

+

The way this is solved is by using one HTTP argument which is passed + on automatically when we use the image script name in the image-tag.

+

If you look at the generated HTML you will see that the argument to + the src-property of the image tag is not simply the script name but the + script name with a additional argument.

+

In the JpGraph internal code this pre-defined argument is checked + for and if it exists the image is send back and not the HTML page.

+

The name of this argument is defined by a DEFINE() statement in + JpGraph. The define is _CSIM_DISPLAY.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/761StockCharts.html b/html/includes/jpgraph/docs/html/761StockCharts.html new file mode 100644 index 0000000000..6ba6c68eb8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/761StockCharts.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.6.1 Stock Charts

+

Stock charts is used to display data values where one is interested + in 4 different values for each data point. This could for example be + used to display a stocks open,close, min and max value during a + specific day. Hence the name Stock chart (or Stock plot).

+

The figure below illustrates a sample Stock chart plot

+
+
Figure 68: A simple stock plot [src]  +

+

+

For this type of plot the Y-data array must be consist of a number + of quadruples of data where each quadruple consists of + (open,close,min,max). The open and close values determine the min max + for the middle bar and the min,max determine the end points of the + "error-lines" at the top and bottom of of each bar.

+

Note that the data follows the following rules

+
    +
  • min < max
  • +
  • min < min(open.close)
  • +
  • max > max(open,close)
  • +
+

To separate the two cases where "open > close" or "open < close " + different colors are used. These colors are specified with the +SetColor() method. By default a positive bar (close > open) have a + fill color of white and for the negative case where (close < open) the + bars have a red color.

+

You can specify the width of the bar by setting the width (in + pixels) with a call to the method +SetWidth()

+

The final variation of stock plots you can have is to determine + whether or not the end point for the min,max lines should have the + horizontal line marking the end of the line or not. This can be + adjusted with a call to method +HideEndLine().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/762BoxPLotsStockchartswithamedianline.html b/html/includes/jpgraph/docs/html/762BoxPLotsStockchartswithamedianline.html new file mode 100644 index 0000000000..1574ef1b2e --- /dev/null +++ b/html/includes/jpgraph/docs/html/762BoxPLotsStockchartswithamedianline.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.6.2 BoxPLots : Stock charts with a median line

+

A minor variation of stock charts is the "BoxPlot()" this is almost + the same as StockPlot() but with the very small difference that in + addition to the open,close,min, max values you also specify a median + value . The median lies between the open and close value and is + illustrated as a horizontal line within the bar.

+
+
Figure 69: A simple box type stock plot [src]  +

+

+

You may modify the median line color for positive and negative data + points / bars by using the +SetMedianColor() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/763ImagemapsforBoxandStockcharts.html b/html/includes/jpgraph/docs/html/763ImagemapsforBoxandStockcharts.html new file mode 100644 index 0000000000..ed21c67946 --- /dev/null +++ b/html/includes/jpgraph/docs/html/763ImagemapsforBoxandStockcharts.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.6.3 Image maps for Box and Stock charts

+

In the same way as for other plots you may associate an image map + with these plots. The "hot" area for each plot is the mid "bar" + section. In the same way as other plot types you use the + SetCSIMTargets() to set the URLs you want to use.

+

These plot types, though normally used without explicit X-values, + can of course handle a supplied X-coordinate array without any problem.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/76BoxandStockcharts.html b/html/includes/jpgraph/docs/html/76BoxandStockcharts.html new file mode 100644 index 0000000000..d49029af47 --- /dev/null +++ b/html/includes/jpgraph/docs/html/76BoxandStockcharts.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.6 Box and Stock charts

+

JpGraph offers two variation on what is usually known as stock + charts, candle-charts or box plot.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/76Gettingholdoftheimagemap.html b/html/includes/jpgraph/docs/html/76Gettingholdoftheimagemap.html new file mode 100644 index 0000000000..5d26ee2ef3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/76Gettingholdoftheimagemap.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.6 Getting hold of the image map

+

In the case where you want to store the image on disk and later use + it in an img-tag you need to get hold of the image map. For this you + will have to use the function + Graph::GetHTMLImageMap()

+

An example of the use of this is shown below. With these lines the + image will be written to a file. The script then returns a HTML page + which contains the Client side image map and an img-tag which will + retrieve the previously stored file.

+  $graph->Stroke( +"/usr/local/httpd/htdocs/img/image001.png" +); +
echo 
$graph +->GetHTMLImageMap +("myimagemap001" +); +
echo 
+"<img src=\"img/image001.png\" ISMAP USEMAP=\"#myimagemap001\" border=0>" +;
+

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/77Combiningdifferentgraphtypes.html b/html/includes/jpgraph/docs/html/77Combiningdifferentgraphtypes.html new file mode 100644 index 0000000000..58ba2f9686 --- /dev/null +++ b/html/includes/jpgraph/docs/html/77Combiningdifferentgraphtypes.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.7 Combining different graph types

+

It is perfectly legal to add several different plot types to the + same graph. It is therefore possible to mix line plots with (for + example) filled bar graphs. What you should keep in mind doing this is + the order in which these plots are stroked to the image since a later + stroke will overwrite a previous one. All plots are stroked in the + order you add them, i.e. the first plot added will be stroked first. + You can therefore control which plot is placed in the background and + which one is placed in the foreground by the order you add them to the + plot.

+

To start simple we just mix a filled line plot with a non-filled + line plot as the following example shows.

+

+
+
Figure 70: Mixing filled and non-filled line plots in the + same graph +[src]  +

+

+

+

Let's now go to something a little bit more complicated. How to mix + bar and line graphs. Let's just take one of our previous bar graphs and + add a line plot to it and see what happens.

+

+
+
Figure 71: Adding a line to a bar graph [src]  +

+

+

Not too bad. But we can't see the line so we change the order in + which we add the lines to the graph and sees what happens.

+
+
Figure 72: Adding a line to a bar graph, in different orderv2 + [src]  +

+

+

+

If you want the line points to be aligned in the center of the bars + you can accomplish this is two ways.

+

If you use a text scale then you need to call the + LinePlot::SetBarCenter()

+
+
Figure 73: Centering the line point in the middle of the bars + using LinePlot::SetBarCenter() [src]  +

+

+

+

You can also use an integer scale. This places both + the bar and the line points centered at the tick marks. As the + following example will show

+

+
+
Figure 74: Using a linear scale [src]  +

+

+

Note: In this example we also have + illustrated the fact that it is possible to add text labels to a linear + (or integer) scales as well.

+

As a final example we show how you can combine a scatter plot and a + line plot which could be used to illustrate a regression line fitting.

+
+
Figure 75: Combining a scatter plot and a line plot [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/77Imagemapsandthecachesystem.html b/html/includes/jpgraph/docs/html/77Imagemapsandthecachesystem.html new file mode 100644 index 0000000000..2e1598d6bb --- /dev/null +++ b/html/includes/jpgraph/docs/html/77Imagemapsandthecachesystem.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.7 Image maps and the cache system

+

For version 1.9 the cache system has been extended to include even + the CSIM maps. For each CSIM graph two files are stored in the cache, + the image file itself as well as the wrapper HTML with the actual image + map. For further information see the chapter on "Understanding the + Cache system"

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/78Specifyingthescalemanually.html b/html/includes/jpgraph/docs/html/78Specifyingthescalemanually.html new file mode 100644 index 0000000000..6164f962d4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/78Specifyingthescalemanually.html @@ -0,0 +1,106 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.8 Specifying the scale manually

+

Normally the automatic scaling should be doing an adequate job in + most circumstances but there might be cases where you like to manually + set the scale. For example if you have several graphs where you like to + be able to easily compare them and therefore want them all to have the + same scale.

+

To specify a manual scale you have to add arguments to the standard Graph::SetScale() method. + So to specify that you want an Y-scale between 0 and 100 you need to + write

+ $graph-> +SetScale( +"textlin",0,100 +);

+

When you specify a scale manually there is one additional thing you + need to decide. How the tick marks should be positioned. You have three + choices

+
    +
  1. Let JpGraph decide suitable tick marks honoring the exact scale you + specified. This is the default behavior if you don't do anything + else.
  2. +
  3. Allow JpGraph to slightly adjust your specified min and max values. + With the default method, depending on the min and max values, the end + and start of the scale might not fall on an exact tick mark. For + esthetic reasons you might still want the last/first tick mark to fall + on the edges of the scale. By calling + LinearScale::SetAutoTicks() you tell JpGraph to make the smallest + necessary adjustment of the end/start points so that they fall on an + exact tick mark.
  4. +
  5. Manually specify the tick marks with a call to + LinearTicks::Set() For example
    +  $graph->SetScale( +"textlin",0,100 +); +
    $graph->yscale-> +ticks->Set(10 +,5);
    +

    Will set the major tick marks every at 0,10,20,.. And every minor + tick mark in between (0,5,10,15,20,25,...).

    +
  6. +
+

The three images below illustrates the difference between the + possibilities of ticks for a manual scale.

+
+
Figure 76: Manual scale, manual ticks major=7 minor=2 [src]  +

+

+

+

+
+
Figure 77: Manual scale, automatic ticks with exact limits [src]  +

+

+

+

+
+
Figure 78: Manual scale, automatic ticks where we allow + adjustments of the limits +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/79Adjustingtheautomatictickmarks.html b/html/includes/jpgraph/docs/html/79Adjustingtheautomatictickmarks.html new file mode 100644 index 0000000000..6d9775fe65 --- /dev/null +++ b/html/includes/jpgraph/docs/html/79Adjustingtheautomatictickmarks.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7.9 Adjusting the automatic tick marks

+

You can adjust the automatic tick marks by telling JpGraph how dense + you want them to be. You use the + Graph::SetTickDensity() method. You can set the density setting in + four steps

+
    +
  • TICKD_VERYSPARSE, Very few ticks
  • +
  • TICKD_SPARSE, Few ticks
  • +
  • TICKD_NORMAL, Standard number of ticks
  • +
  • TICKD_DENSE, Large number of ticks
  • +
+

Taking the previous example with the manual scale but automatic + ticks and using a denser ticks setting gives the following result

+
+
Figure 79: Manual scale with automatic ticks but with a + denser tick settings. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7UsingimagemapswithJpGraph.html b/html/includes/jpgraph/docs/html/7UsingimagemapswithJpGraph.html new file mode 100644 index 0000000000..8c2c73d166 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7UsingimagemapswithJpGraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7 Using image maps with JpGraph

+

Image maps, or client side image (CSIM) as they are known is fully + supported in JpGraph. It gives you the opportunity to create hot-spots + in the graphs which allows you to build a set of "drill-down" graphs.

+

In the following section is based on the assumption that the reader + is familiar with the basic concepts of client side image map in HTML.

+

To shortly recapitulate. Client side image maps consists of two + parts. The first part is the actual image and the second part is a + mapping that gives the coordinates for areas in the image which should + be marked as hot spots (i.e. click-able by the user). The library can + automatically generate these coordinate maps from a given graph.

+

Through out the manual areas of the graph that may be used as a + hotspot is given in conjuction with the general description of that + area.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/7WorkingwithorthogonalXYplots.html b/html/includes/jpgraph/docs/html/7WorkingwithorthogonalXYplots.html new file mode 100644 index 0000000000..fc9186e462 --- /dev/null +++ b/html/includes/jpgraph/docs/html/7WorkingwithorthogonalXYplots.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

7 Working with orthogonal X,Y-plots

+

The purpose of this chapter is to introduce the basic concepts of + creating scripts with JpGraph that will generate various types of basic + plots. Throughout the text it is possible to view the exact source for + all the graphs by clicking on the "[src]" link in the caption of the + image shown. This will open the image together with the source in a + separate window. This way it is easy to compare the actual image with + the script that generated the image.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8101Usingtheautomaticdatetimescale.html b/html/includes/jpgraph/docs/html/8101Usingtheautomaticdatetimescale.html new file mode 100644 index 0000000000..8f68180cc3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8101Usingtheautomaticdatetimescale.html @@ -0,0 +1,216 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.10.1 Using the automatic date/time scale

+

The easiest way to get a date time scale for the X-axis is to use + the pre-defined "dat" scale. To be able to use that it is first + necessary to include the module "jpgraph_date.php" and the + specify the scale, for example as "datlin" in the call to SetScale() + as the following code snippet shows.

+  require_once("../jpgraph.php"); +
require_once(
"../jpgraph_line.php"); +
require_once(
"../jpgraph_date.php"); +
... +
$graph  += new Graph(540, +300); +
$graph->SetScale( +'datlin'); +
...

+

The above code snippet would create a date/linear scale for the + graph. We will first show a basic use of the date scale and then go on + to illustrate how it is possible to tailor the exact formatting of the + date axis.

+

When using the fully automatic formatting the library will use the + shortest possible string that uniquely identifieas a date/time. For + example if the entire intervall falls within the same day only the time + values will be displayed, if the intervall falls over several days then + also the date will be added to the label.

+

As usual it is also possible to manually force a certain label + formatting to be used this is illustrated below.

+

8.10.1.1 Specifying the input data

+

The first basic example below creates a data set that emulates a + sample rate every S second and falls over a total period of two days. + It is important to note that the input data on the X-axis must be a in + the form of timestamp data, i.e. the number of seconds from the system + epoch. In PHP the current timestamp value is returned by the function + time().

+

This means that it is always mandatory to specify two input vectors + for a plot. For example to specify a line plot

+  $line  += new LinePlot +($data,$xdata); +

+

The example below show this in practice

+
+
Figure 76: Using the special date X-axis with all default + values [src] +  +

+

+

Please review the script (by following the [src] link) that creates + this graph before continuing since we will base all further examples on + the above example.

+

8.10.1.2 Adjusting the start and end alignment

+

As can be seen from the above example the scale starts slightly + before the first data point. Why? This is of course by purpose in order + to make the first time label to start on an "even" value, in this case + on an hour. Depending on the entire interval of the graph the start + value will always be chosen to be the largest "even" time value, this + could for example be on an even minute, even 30min, even hour, even + day, even week and so on.

+

The alignment of the start (and end) vdate alignment can also be + adjusted manually by using the two methods

+
    +
  • SetTimeAlign($aStartAlign,$aEndAlign)
  • +
  • SetDateAlign($aStartAlign,$aEndAlign)
  • +
+

These method allow the alignment to be made by specifying one of the + following constants.

+

For the SetTimeAlign() the following symbolic constants can be used

+
    +
  1. Alignment on seconds +
      +
    • MINADJ_1, Align on a single second (This is the lowest resolution)
    • +
    • MINADJ_5, Align on the nearest 5 seconds
    • +
    • MINADJ_10, Align on the nearest 10 seconds
    • +
    • MINADJ_15, Align on the nearest 15 seconds
    • +
    • MINADJ_30, Align on the nearest 30 seconds
    • +
    +
  2. +
  3. Alignment on minutes +
      +
    • MINADJ_1, Align to the nearest minute
    • +
    • MINADJ_5, Align on the nearest 5 minutes
    • +
    • MINADJ_10, Align on the nearest 10 minutes
    • +
    • MINADJ_15, Align on the nearest 15 minutes
    • +
    • MINADJ_30, Align on the nearest 30 minutes
    • +
    +
  4. +
  5. Alignment on hours +
      +
    • HOURADJ_1, Align to the nearest hour
    • +
    • HOURADJ_2, Align to the nearest two hour
    • +
    • HOURADJ_3, Align to the nearest three hour
    • +
    • HOURADJ_4, Align to the nearest four hour
    • +
    • HOURADJ_6, Align to the nearest six hour
    • +
    • HOURADJ_12, Align to the nearest tolw hour
    • +
    +
  6. +
+

For the SetDateAlign() the following symbolic constants can + be used

+
    +
  1. Alignment on a day basis +
      +
    • DAYADJ_1, Align on the start of a day
    • +
    • DAYADJ_7, Align on the start of a week
    • +
    • DAYADJ_WEEK, Synonym to DAYADJ_7
    • +
    +
  2. +
  3. Alignment on a monthly basis +
      +
    • MONTHADJ_1, Align on a month start
    • +
    • MONTHADJ_6, Align on the start of halfyear
    • +
    +
  4. +
  5. Alignment on a yearly basis +
      +
    • YEARADJ_1, Align on a year
    • +
    • YEARADJ_2, Align on a bi-yearly basis
    • +
    • YEARADJ_5, Align on a 5 year basis
    • +
    +
  6. +
+

Some examples will calrify the use of these methods.

+

Example 1. We want the time adjustment to start on an even + quarter of an hour, i.e. an even 15 minute period.

+  $graph +->xaxis->scale-> +SetTimeAlign( +MINADJ_15); +

+

+

Example 2. We want the time to start on an even 2 hour

+  $graph +->xaxis->scale-> +SetTimeAlign( +HOURADJ_2); +

+

+

Example 3. We want the start to be on an even day

+  $graph +->xaxis->scale-> +SetDateAlign( +DAYADJ_1); +

+

+

8.10.1.3 Adjusting the label format

+

The default label format always tries to use the shortest possible + unique string. To manually set a manual scale the method + SetDateFormat() is used for example as in

+  $graph +->xaxis->scale-> +SetDateFormat( +'H:i'); +

+

The above example will force the labels to be displayed as hour (24h) + and minutes.

+
+
Figure 77: Using specific label format and align time axis to + start and end on an even 10min [src]  +

+

+

+

8.10.1.4 Adjusting the date scale density

+

As with the linear scale it is possible to indicate what density of + scale ticks is needed. This is specified as usual with a call to + Graph::SetTickDensity()

+  $graph->SetTickDensity( +TICKD_DENSE); +

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8102Specifyingadatetimescalewithamanualcallback.html b/html/includes/jpgraph/docs/html/8102Specifyingadatetimescalewithamanualcallback.html new file mode 100644 index 0000000000..f9259224d3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8102Specifyingadatetimescalewithamanualcallback.html @@ -0,0 +1,236 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.10.2 Specifying a date/time scale with a manual + call-back

+

In the following we will assume that all data points are specified + by a tuple where the date/time is specified as a timestamp in second in + the same format as is returned by the PHP function time().

+

The trick here is to use a label formatting callback routine which + gets called to format each label on the scale.

+

What we do is that we specify that the X-scale should be an ordinary + "int" scale (remember that the data values are timestamps which are + integers). We then install our custom label callback (with a call to + SetLabelFormatCallback()) which given a timestamp formats it to a + suitable human readable form. In our example we will use the PHP + function Date() for this purpose.

+

The callback we use will be

+   +// The callback that converts timestamp to minutes and seconds +
function  +TimeCallback( +$aVal) { +
    return 
Date +('H:i:s',$aVal); +
}

+

Using some random data we can now generate the following graph

+
+
Figure 78: Example on how to format an axis to hold a + date/time scale using and integer scale and a callback routine [src]  +

+

+

In the above example we have specified the X-scale manually to make + sure that the min/max values on the X-axis exactly matches the min/max + x-data values.

+

SetLabelFormatCallback() will be called for each of the displayed + labels and the argument passed on to the supplied function is the + default label that the library is assigning that specific label.

+

This means that if the data to be displayed is based on, for + example, timestamps which are given in seconds the displayed value + might not be aligned to how time/date values normally should be + displayed.

+

Using integer scales this will not work very well since the library + determines label positions to be at even positions (e.g. every 2,5,10, + 20,50,100 etc) to suit the auto-scaling since the library will assume + that the data is integers and not timestamp values.

+

The best way to solve this is to use an integer X-scale together + with a a callback function with a manually specified scale. In order to + setup the scale a bit of manually work is needed. Depending on the data + to be displayed one should ensure that the scale starts and ends at + suitable times and that the tick interval chosen fits with an even + multiple of minutes, hours, days or what is best suited for the time + range that is to be displayed.

+

The following code example illustrates this. It creates some "fake" + data that is assumed to be sampled time based data and sets up some + suitable scales and tick interval. This script may be used as a basis + for more advanced handling of the time data.

+(File: timestampex01.php) +
<?php +
+// Example on how to treat and format timestamp as human readable labels +
require_once( +"../jpgraph.php"); +
require_once(
"../jpgraph_line.php"); +
+
// Number of "fake" data points +
DEFINE('NDATAPOINTS', +500); +
+
+// Assume data points are sample every 10th second +
DEFINE('SAMPLERATE', +10);  +
+
+// Callback formatting function for the X-scale to convert timestamps +
// to hour and minutes. +
function  +TimeCallback( +$aVal) { +
    return 
Date +('H:i'$aVal); +
} +
+
// Get start time +
$start time(); +
+// Set the start time to be on the closest minute just before the "start" timestamp +
$adjstart  += floor($start  +60); +
+
+// Create a data set in range (20,100) and X-positions +
+// We also apply a simple low pass filter on the data to make it less +
// random and a little smoother +
$data  += array(); +
$xdata  += array(); +
$data[0] =  +rand(20,100 +); +
$xdata[0] =  +$adjstart; +
for( 
$i=1 +$i  +NDATAPOINTS; ++ +$i ) { +
    
$data[$i] =  +rand(20,100 +)*0.2 $data[ +$i-1]*0.8 +; +
    
$xdata +[$i] = $adjstart  +$i  +SAMPLERATE; +
} +
+
+// Assume that the data points represents data that is sampled every 10s +
// when determing the end value on the scale. We also add some extra +
// length to end on an even label tick. +
$adjend $adjstart  + ( +NDATAPOINTS+10)*10 +; +
+
$graph  += new Graph(500, +250); +
$graph->SetMargin( +40,20,30 +,50); +
+
+// Now specify the X-scale explicit but let the Y-scale be auto-scaled +
$graph->SetScale( +"intlin",0,0 +,$adjstart,$adjend); +
$graph->title-> +Set( +"Example on TimeStamp Callback"); +
+
+// Setup the callback and adjust the angle of the labels +
$graph->xaxis-> +SetLabelFormatCallback( +'TimeCallback'); +
$graph->xaxis-> +SetLabelAngle( +90); +
+
+// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute +
$graph->xaxis-> +scale->ticks->Set +(300,60); +
+
$line  += new LinePlot +($data,$xdata); +
$line->SetColor( +'lightblue'); +
$graph->Add( +$line); +
+
$graph->Stroke(); +
?> +

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/810Handlingdatetimescales.html b/html/includes/jpgraph/docs/html/810Handlingdatetimescales.html new file mode 100644 index 0000000000..c703f025d1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/810Handlingdatetimescales.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.10 Handling date/time scales

+

With date/time scale we refer to the plotting of data where the + independent variable (X-axis) de-nominates a time value. This could for + example be the temperature measured in intervals during a day.

+

From version 1.18 and onwards there are two principal ways of + handling date/time scales. The manual way and fully automatic using the + special "dat" scale. For most cases the automatic "dat" scale is the + preferred choice but in rare circumstances it might be more appropriate + to use the manual way since it gives slightly more control (but not + that much) of the overall handling of scales.

+

To be able to use a date/time scale at all we will assume that the + data points are represented by both an X coordinate (time-value) and a + Y-value (anything else wouldn't make sense).

+

We first start by describing the use of the "dat" scale.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8110Adjustingthegridlinesintheplot.html b/html/includes/jpgraph/docs/html/8110Adjustingthegridlinesintheplot.html new file mode 100644 index 0000000000..ed346f26c7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8110Adjustingthegridlinesintheplot.html @@ -0,0 +1,84 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.10 Adjusting the grid lines in the plot

+

By default only the Y-axis have grid lines and then only on major + ticks, i.e. ticks which have a label. It is of course possible to + change this. Both the X , Y and Y2 can have grid lines. It is also + possible to let the gridlines also be drawn on the minor tick marks, + i.e. ticks without a label. Lets see how we can apply this to the graph + above.

+

The grid is modified by accessing the xgrid (or ygrid) component of + the graph. So to display minor grid lines for the Y graph we make the + call

+ $graph->ygrid->Show +(true,true) +

+

The first parameter determines if the grid should be displayed at + all and the second parameter determines whether or not the minor grid + lines should be displayed.

+

If you also wanted the grid lines to be displayed for the Y2 axis + you would call

+ $graph-> +y2grid->Show(true +,true)

+

Note. In general it is not a good idea to display + both the Y and Y2 grid lines since the resulting image becomes + difficult to read for a viewer.

+

We can also enable the X-grid lines with the call

+  $graph +->xgrid->Show( +true) +

+

+

In the above line we will of course only just enable the major grid + lines.

+

To bring all this together we will display a graph with grid lines + for both Y and X axis enabled.

+
+
Figure 18: Enabling major and minor gridlines for Y-axis and + major grid lines for the X-axis +[src]  +

+

+

Note: If you think the first value of the + Y-axis is to close to the first label of the X-axis you have the option + of either increasing the margin (with a call to + SetLabelMargin() ) or to hide the first label (with a call to + HideFirstTickLabel() )

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8111Usingfilledgridlines.html b/html/includes/jpgraph/docs/html/8111Usingfilledgridlines.html new file mode 100644 index 0000000000..2db7fd0f96 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8111Usingfilledgridlines.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.11 Using filled grid lines

+

Another option for the grid lines is the possibility to have the + area between the grid lines filled with alternating two colors. The + example below illustrates this.

+
+
Figure 19: Using two alternating colors between the gridlines + [src]  +

+

+

In the example above we have also made use of alpha-blending + (requires GD 2.x or higher). By default the filled grid lines are + disabled. To enable this style you have to call the +Grid::SetFill() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8112SpecifyingtextlabelsfortheXaxis.html b/html/includes/jpgraph/docs/html/8112SpecifyingtextlabelsfortheXaxis.html new file mode 100644 index 0000000000..a26e354ef1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8112SpecifyingtextlabelsfortheXaxis.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.12 Specifying text labels for the X-axis

+

You might want to have specific labels you want to use for the + X-axis when this has been specified as a "text" scale. In the previous + example each Y-point might represent a specific measurement for each of + the first 10 month. We might then want to display the name of the + months as X-scale.

+

To specify the labels on the scale you make use of the + SetTickLabels() method.

+

To get a localized version of the name of the month you can use a + nice feature in JpGraph, the global '$gDateLocal' object which is an + instance of the + DateLocale

+

This class has a number of methods to get localized versions of + relevant names for dates, (months and weekdays).

+

So to specify the X-axis with the short form of the month names we + use the construction

+  $a  +$gDateLocale-> +GetShortMonth(); +
$graph->xaxis-> +SetTickLabels( +$a);
+

+

This will, now result in the image displayed below

+
+
Figure 20: Specifying text labels for the X-axis [src]  +

+

+

Note: It is also perfectly legal to override + the default labels for the Y (and Y2) axis in the same way, however + there is seldom need for that. Please note that the supplied labels + will be applied to each major tick label. If there are insufficient + number of supplied labels the non-existent positions will have empty + labels.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8113Adjustingtheticksonatextscale.html b/html/includes/jpgraph/docs/html/8113Adjustingtheticksonatextscale.html new file mode 100644 index 0000000000..93488756fc --- /dev/null +++ b/html/includes/jpgraph/docs/html/8113Adjustingtheticksonatextscale.html @@ -0,0 +1,63 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.13 Adjusting the ticks on a text scale

+

As can be seen in the previous example the X-axis is slightly + cluttered with the labels very close to each other. We might rectify + this by either enlarging the image or just displaying fewer tick label + on the x-axis.

+

Specifying that we only want, for example, to print every second + label on the axis is done by a call to the method + SetTextLabelInterval() Which would result in the graph

+
+
Figure 21: Just printing every second label on the X-axis [src]  +

+

+

+

If the text labels are long (for example full dates) then another + way might be to adjust the angle of the text. We could for example + choose to rotate the labels on the X-axis by 90 degrees. With the help + of the SetLabelAngle() +

+

Which would then result in the image below

+
+
Figure 22: Rotating the X-labels 90 degrees [src]  +

+

+

Note: The internal fonts which we have been + using so only supports 0 or 90 degrees rotation. To use arbitrary + angles you must specify TTF fonts. More on fonts later.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8114Usingfilledlinegraphs.html b/html/includes/jpgraph/docs/html/8114Usingfilledlinegraphs.html new file mode 100644 index 0000000000..c546daddb8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8114Usingfilledlinegraphs.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.14 Using filled line graphs

+

Using a filled line plot is not much different from using a normal + line plot, in fact the only difference is that you must call the method + SetFillColor() + on a normal line plot. This will then fill the area under the line + graph with the chosen color.

+

In the example below we have also, as an example, specified plot + marks (see previous sections).

+
+
Figure 23: Filled line graph with plot marks [src]  +

+

+

Note 1. If you add multiple filled line plots to + one graph make sure you add the one with the highest Y-values first + since it will otherwise overwrite the other plots and they will not be + visible. Plots are stroked in the order they are added to the graph, so + the graph you want front-most must be added last.

+

Note 2. When using legends with filled line plot + the legend will show the fill color and not the bounding line color.

+

Note 3. Filled line plots is only supposed to be + used with positive values. Filling line plots which have negative data + values will probably not have the appearance you expect.

+

As you can see from the graph above the grid lines are below the + filled line graph. If you want the grid lines in front of the graph you + can adjust the depth with call to + Graph::SetGridDepth() As the following example shows

+
+
Figure 24: Adjusting the depth of the gridlines [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8115Usingaccumulatedlinegraphs.html b/html/includes/jpgraph/docs/html/8115Usingaccumulatedlinegraphs.html new file mode 100644 index 0000000000..25ba44e17d --- /dev/null +++ b/html/includes/jpgraph/docs/html/8115Usingaccumulatedlinegraphs.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.15 Using accumulated line graphs

+

Accumulated line graphs are line graphs that are "stacked" on top of + each other. That is, the values in the supplied data for the Y-axis is + not the absolute value but rather the relative value from graph below. + For example if you have two line graphs with three points each, say + [3,7,5] and [6,9,7]. The first graph will be plotted on the absolute + Y-values [3,7,5] the second plot will be plotted at [3+6, 7+9, 5+7], + hence the values of the previous graphs will be used as offsets.

+

You may add any number of ordinary line graphs together. If you want + to use three line plots in an accumulated line plot graph you write the + following code

+

// First create the individual plots +
$p1 = new LinePlot( +$datay_1); +
$p2 = new LinePlot( +$datay_2); +
$p3 = new LinePlot( +$datay_3); +
+
+// Then add them together to form a accumulated plot +
$ap = new AccLinePlot(array($p1, +$p2,$p3)); +
+
+// Add the accumulated line plot to the graph +
$graph->Add( +$ap);
+

+

You might of course also fill each line plot by adding the lines

+  $p1 +->SetFillColor +("red"); +
$p2->SetFillColor( +"blue"); +
$p3->SetFillColor( +"green"); +

+

Using some appropriate data this might then give a graph perhaps + like the one showed in the figure below

+
+
Figure 25: Accumulated filled line graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8116ConstructingsmoothlineplotswithCubicSplines.html b/html/includes/jpgraph/docs/html/8116ConstructingsmoothlineplotswithCubicSplines.html new file mode 100644 index 0000000000..9da126d972 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8116ConstructingsmoothlineplotswithCubicSplines.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.16 Constructing smooth line plots with Cubic + Splines

+

If you only have access to a few data points but still want a smooth + curve between those data points JpGraph can help you achieving that by + letting you construct cubic splines. If you never have heard of cubic + splines before, don't worry. You only have to supply the data points + you know tell JpGraph how many interpolated points in total you want in + the graph. JpGraph will now take care of constructing a smooth curve + between all you data points. The new, smooth, curve will be made up of + exactly as many interpolated points as you have specified.

+

To construct a spline you need both the X and Y coordinates for the + known data points.

+

You start by constructing a new Spline instance. To + get access to the Spline class you must first remember to include the + file "jpgraph_regstat.php". You instantiate this class by calling it + with your two known data arrays (X and Y) as follows.

+  $spline  += new Spline($xdata, +$ydata); +

+

This call initializes the spline with the data points you have. These + data points are also known as Control points for the spline. + This helper class doesn't draw any line itself. Instead it is merely + used to get a new (larger) data array which have all the interpolated + values. You then use these new value in your plot. This way give you + great flexibility in how you want to use this interpolated data.

+

Continuing the above line we now use the Spline::Get() + method to get an interpolated array containing a specified number of + points. So for example the line

+  list( +$sdatax, +$sdatay) =  +$spline->Get(50 +);

+

Will construct the two new data arrays '$sdatax' and '$sdatay' which + contains 50 data points. These two arrays are constructed from the + control point we specified when we created the '$spline' object.

+

You would then use these two new data array in exactly the same way + as you would form ordinary data vectors.

+

The following example illustrates this

+
+
Figure 26: Using spline to get a smooth curve between the + control points. +[src]  +

+

+

In order to make the example more interesting we actually use two + plots. First a line plot to get the smooth curve and then a standard + scatter plot which is used to illustrate where the control points are.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8117Addingplotmarkstoalineplot.html b/html/includes/jpgraph/docs/html/8117Addingplotmarkstoalineplot.html new file mode 100644 index 0000000000..091e7f03d7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8117Addingplotmarkstoalineplot.html @@ -0,0 +1,155 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.17 Adding plot marks to a line plot

+

To emphasize the specific data points it is possible to add plot + marks at each data point. Plot marks can be either

+
    +
  • Simple shapes, (e.g. square, circle, cross, etc)
  • +
  • Arbitrary images loaded from a file
  • +
  • One of the built-in images
  • +
+

You access the plot mark through the "mark" instance variable in the + plot, as in

+ $lineplot-> +mark->SetColor("red" +);

+

To choose between the different plot marks you call the +PlotMark::SetType() method with the correct define to choose the + plot type you want to use.

+

The simple shape type of plot marks are

+
    +
  • MARK_SQUARE
  • +
  • MARK_UTRIANGLE
  • +
  • MARK_DTRIANGLE
  • +
  • MARK_DIAMOND
  • +
  • MARK_CIRCLE
  • +
  • MARK_FILLEDCIRCLE
  • +
  • MARK_CROSS
  • +
  • MARK_STAR
  • +
  • MARK_X
  • +
  • MARK_LEFTTRIANGLE
  • +
  • MARK_RIGHTTRIANGLE
  • +
  • MARK_FLASH
  • +
+

To specify an arbitrary image you use the special define

+
    +
  • MARK_IMG
  • +
+

In this case you must also specify a image file name and an optional + scaling constant. For example as in

+  $lineplot->mark-> +SetTYPE( +MARK_IMG, +"myimage.jpg", +1.5); +

+

+

If you want to use one of the built-in images the following images + are available. Please note that not all images are available in all + possible colors. The available colors for each image is listed below.

+

The following shape (the first class) plot marks are available

+
    +
  1. MARK_SQUARE, A filled square
  2. +
  3. MARK_UTRIANGLE, A triangle pointed upwards
  4. +
  5. MARK_DTRIANGLE, A triangle pointed downwards
  6. +
  7. MARK_DIAMOND, A diamond
  8. +
  9. MARK_CIRCLE, A circle
  10. +
  11. MARK_FILLEDCIRCLE, A filled circle
  12. +
  13. MARK_CROSS, A cross
  14. +
  15. MARK_STAR, A star
  16. +
  17. MARK_X, An 'X'
  18. +
  19. MARK_FLASH, A "flash" shape
  20. +
  21. MARK_IMAGE, Use the image specified with the filename and scale as + the second and third argument as the mark.
  22. +
+

+

For the second class (built-in images) the following table list the + different images as well as what color they are available in. For the + built-in images you specify the color with the second argument.

+

Note that some of the images are available in different sizes. The + reason is that even though you can scale them by the third argument + there is a visual degradation to scale an image larger than it's + original size since some pixels needs to be interpolated. Reducing the + size with a scale < 1.0 gives much better visual apperance.

+

The scaling works with both GD 1 and GD 2 but with GD 2 the quality + of the scaling is much better.

+

Built-in images and available colors:

+ + + + + + + + + + + + + + + +
TypeDescriptionColors
MARK_IMG_PUSHPIN, MARK_IMG_SPUSHPIN Push-pin image +'red','blue','green','pink','orange'
MARK_IMG_LPUSHPIN A larger Push-pin image +'red','blue','green','pink','orange'
MARK_IMG_BALL, MARK_IMAGE_SBALLA round 3D rendered ball +'bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'
MARK_IMAGE_MBALLA medium sized round 3D rendered ball + 'blue','bluegreen','brown','cyan', + 'darkgray','greengray','gray','green', + 'greenblue','lightblue','lightred', 'purple','red','white','yellow'
MARK_IMAGE_LBALLA large sized round 3D rendered ball + 'blue','lightblue','brown','darkgreen', + 'green','purple','red','gray','yellow','silver','gray'
MARK_IMAGE_SQUAREA 3D rendered square +'bluegreen','blue','green', 'lightblue','orange','purple','red','yellow'
MARK_IMG_STARA 3D rendered star image +'bluegreen','lightblue','purple','blue','green','pink','red','yellow'
MARK_IMG_DIAMONDA 3D rendered diamond +'lightblue','darkblue','gray', 'blue','pink','purple','red','yellow'
MARK_IMG_BEVELA 3D rendered bevel style round ring +'green','purple','orange','red','yellow'
+ Below we give two examples of images using these features.
+
+
Figure 27: Using an arbitrary image as plot mark [src]  +

+
+

+

+
+
Figure 28: Using the built-in images [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/811AddingplotmarkstolineplotsXXX.html b/html/includes/jpgraph/docs/html/811AddingplotmarkstolineplotsXXX.html new file mode 100644 index 0000000000..cebc80a65b --- /dev/null +++ b/html/includes/jpgraph/docs/html/811AddingplotmarkstolineplotsXXX.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.1 Adding plot marks to line-plots XXX

+

It might sometimes be desirable to highlight the data-points with + marks in the intersection between the given x and Y-coordinates. This + is accomplished by specifying the wanted plot mark type for the "mark" + property of the line graph. A full list of all available marks is given + in the class reference +PlotMarks

+

For now let's just add a triangle shape marker to our previous graph + by adding the line

 $lineplot-> +mark->SetType(MARK_UTRIANGLE +);

+

This will give the graph as shown below

+
+
Figure 6: Adding markers to the previous example [src]  +

+

+

+

If you like you can of course both change the size, fill-color and + frame color of the chosen plot mark.

+

The colors of the marks will, if you don't specify them explicitly, + follow the line color. Please note that if you want different colors + for the marks and the line the call to SetColor() for the marks must be + done after the call to the line since the marks color will always be + reset to the lines color when you set the line.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/811Adjustinglabelsonatextscale.html b/html/includes/jpgraph/docs/html/811Adjustinglabelsonatextscale.html new file mode 100644 index 0000000000..7ab45a6184 --- /dev/null +++ b/html/includes/jpgraph/docs/html/811Adjustinglabelsonatextscale.html @@ -0,0 +1,131 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.11 Adjusting labels on a text scale

+

In the following section we will work through an number of examples + on how to manipulate labels on a text scale. Primarily we will + investigate how to best handle the case where you have a large number + of values.

+

As a remainder; Text scale is meant to be used on the X-axis when + the X-axis doesn't have a numeric value, i.e you are only interested in + linear ordering of the data. If you don't specify the labels manually + they will be set automatically starting from 1 as the example below + shows.

+

+
+
Figure 79: A simple bar plot using an automatic text scale [src]  +

+

+

+

To specify the labels on the X-axis as suitable text strings you + call the method + Axis::SetTickLabels() with an array containing the text-labels. If + there are more data points than labels the non-specified labels will be + given their ordinal number. If we augment the previous example with the + name of the month we get the following new example

+

+
+
Figure 80: Manually specifying the text scale labels [src]  +

+

+

+

+
Tip: To get hold of localized version of + the month names (or weekdays) you can use the + DateLocal class available in the global variable $gDateLocale If no + locale has been specified the default locale for the installation will + be used. +
+

What happen now if we have a larger number of bars? Let's try with + 25 bars and see what result we get.

+

+
+
Figure 81: A larger data set [src]  +

+

+

+

Not all to impressive. The labels are to close and they overlap. + Hence it is not a good idea to display every label. To adjust what + labels are to be displayed you use the + SetTextLabelInterval() method. The argument to this method is the + interval between text labels. So to display only every 3 month you + would add the line

+

+ $graph->xaxis->SetTextLabelIntervall(3 +)

+

+

Which would give the result shown below

+
+
Figure 82: Displaying only every third label [src]  +

+

+

+

Much better, quite readable.

+

If we have an even larger data set it might not longer be meaningful + to display all the tick marks since they would simple become to close. + In JpGraph there is a possibility to specify that you only would like + every n:th tick mark to be visible ( + SetTextTickIntervall() ). For bar graphs using text scale however, + that might not be such a good idea since the tick marks are between the + bars and the labels centered under the bars. If we only were to + display, say, every 3 tick mark it wouldn't look to good. Not that we + can't do it, as the example below shows, but it just doesn't look very + good.

+
+
Figure 83: Displaying just every third tick mark. [src]  +

+

+

+

A better way to handle large data set is simply to hide the tick + marks all together. Tick marks may be hidden by calling the method + Axis::HideTicks(); If we hide all the ticks on the X-axis we will + get the result shown below

+
+
Figure 84: Hiding all tick mark. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/811Simpleradarplots.html b/html/includes/jpgraph/docs/html/811Simpleradarplots.html new file mode 100644 index 0000000000..24d1ac1aa6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/811Simpleradarplots.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.1 Simple radar plots

+

Let's start by creating a very simple radar plot based on 5 data + points using mostly default values.

+

As the first thing you must remember to include the extension module + that contains the radar plot. "jpgraph_radar.php".

+

A very simple radar plot is created by the code

+(File: radarex1.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_radar.php"); +
     +
// Some data to plot +
$data  += array(55,80, +46,71,95 +); +
     +
// Create the graph and the plot +
$graph  += new RadarGraph +(250,200, +"auto"); +
$plot  += new RadarPlot +($data); +
+
// Add the plot and display the graph +
$graph->Add( +$plot); +
$graph->Stroke(); +
?>

+

and would give the result

+
+
Figure 115: A first very simple radar plot using default + settings [src] +  +

+

+

To change the size and position of the radar graph is similar to the + pie plot and you do it by using the methods + SetSize() and + SetCenter()

+

If you want a filled radar plot you need to specify the fill color + with the method + SetFillColor() The following example shows these methods in action

+
+
Figure 116: Changing size, position and adding fill color to + the radar plot. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/812Addingarbitrarytextstringstothegraph.html b/html/includes/jpgraph/docs/html/812Addingarbitrarytextstringstothegraph.html new file mode 100644 index 0000000000..dbc60e6c05 --- /dev/null +++ b/html/includes/jpgraph/docs/html/812Addingarbitrarytextstringstothegraph.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.12 Adding arbitrary text strings to the graph

+

To add clarification or other information text strings to the graph + you can add arbitrary lines of text anywhere you like onto the graph. + The text might have multiple lines and you can choose the paragraph + alignment.

+

To add text you have to create one or more instances of the + Text() object and then add the text object to the graph with the + AddText() method.

+

The position of these text boxes are given as fraction of the width + and height of the graph. When you are positioning these text boxes you + might also choose what part of the text box should be considered the + anchor point for the position you specify.

+

By default the anchor point is the upper left corner of the bounding + box for the text.

+

To show some ways of positioning the text we use a very simple bar + graph not to distract from the text. We first just add a single text + line with most of the settings their default value by adding the + following lines to the graph

+  $txt=new Text( +"This is a text"); +
$txt->Pos( +0,0); +
$txt->SetColor( +"red"); +
$graph->AddText( +$txt);
+

+

The result is shown below.

+
+
Figure 85: Adding a single text string in the upper left + corner [src] +  +

+

+

Not too exiting. Let's make it more interesting by having a + background color, using larger fonts and framing the text box and + adding a drop shadow to the text box by using the methods + SetBox() and SetBox()

+
+
Figure 86: Making the text more interesting [src]  +

+

+

That's better. Now we get some attention. If you want to add a text + with several lines you just need to separate the lines with a newline + ('\n' character). The default paragraph alignment is left edge but you + can also use right and center alignment.

+

As an illustration let's add a couple of more lines to the previous + text, center the text box in the middle of the graph and also use + centered paragraph alignment for the text. To adjust the paragraph + alignment of the text you have to use the + Text::ParagraphAlign()

+
+
Figure 87: Text with multiple lines and centered paragraph + alignment +[src]  +

+

+

Of course there is no limit to the number of text string you can add + to the graph.

+

From version 1.12 it is also possible to add text strings to a graph + using the scale coordinates instead. This is accomplished by using the Text::SetScalePos() Which + is completely analog to SetPos() with the only difference that the + positions given are interpretated as scale values instead of fractions + of the width and height.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/812Displayingthevaluesforeachdatapoint.html b/html/includes/jpgraph/docs/html/812Displayingthevaluesforeachdatapoint.html new file mode 100644 index 0000000000..85d63374d8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/812Displayingthevaluesforeachdatapoint.html @@ -0,0 +1,83 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.2 Displaying the values for each data point

+

As a final easy modification we can enable the display of the data + value above each data point. The value is represented by the 'value' + property in the plot. (You can read more about the possibilities of the + display value + in the class reference.)

+

To enable the display of the value you just need to call the Show() + method of the value as in

+  $lineplot->value-> +Show() +

+

Adding that line to the previous line plot would give the result + shown below.

+
+
Figure 7: Displaying the value for each data point [src]  +

+

+

We can of course change both color, font and format of the displayed + value. So for example if we wanted the display values to be dark red, + use a bold font and have a '$' in front we need to add the lines

+  $lineplot->value +->SetColor("darkred"); +
$lineplot +->value->SetFont( +FF_FONT1, +FS_BOLD); +
$lineplot +->value->SetFormat( +"$ %0.1f"); +

+

This would then result in the following image

+
+
Figure 8: Making the display values a little bit more + interesting +[src]  +

+

+

Note: You can achieve more advanced + formatting by using not just the printf() style format string by a + format callback function. This could allow you to change the displayed + value with more advanced formatting such as displaying money values + with "," to separate thousands.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/812Specifyingtitlesfortheaxisandlegendsfortheplots.html b/html/includes/jpgraph/docs/html/812Specifyingtitlesfortheaxisandlegendsfortheplots.html new file mode 100644 index 0000000000..24f35c6dea --- /dev/null +++ b/html/includes/jpgraph/docs/html/812Specifyingtitlesfortheaxisandlegendsfortheplots.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.2 Specifying titles for the axis and legends for + the plots

+

We normally would like something more meaningful as description of + each axis than it's number. Specifying the titles are accomplished + through the use of the method SetTitles() of the graph. Let's say that + each axis corresponds to a month. We could then use the code

+  $titles  += $gDateLocale +->GetShortMonth +(); +
$graph->SetTitles( +$titles); +

+

As you can see the way radar plot is constructed will assign the + titles (and plot points) in a counter-clockwise direction. If you want + them in clock-wise order you will have to inverse your input data array + as well as the title array.

+

To specify a legend you (as with the other plot) make use of the + SetLegend(); method on each radar plot.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/813Addinggridlinetotheradarplot.html b/html/includes/jpgraph/docs/html/813Addinggridlinetotheradarplot.html new file mode 100644 index 0000000000..01fbe8d8cc --- /dev/null +++ b/html/includes/jpgraph/docs/html/813Addinggridlinetotheradarplot.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.3 Adding grid line to the radar plot

+

Each major tick mark can also be connected together to create a + grid. The grid is accessed through the 'grid' property of the graph. To + enable the grid and set the line style to "dotted" you would have to + add the lines

+ $graph->grid->Show +(); +
$graph->grid-> +SetLineStyle( +"dotted"); +

+

and would result in the following graph

+
+
Figure 117: Adding dotted gridlines to the graph [src]  +

+

+

By design the plot is above the grid line but beneath the axis in + image depth, hence some part of the grid lines are hidden.

+

To have the grid lines more "visible" just change their color, say + to, dark red by invoking the SetColor() method on the grid lines which + would give the following result

+

Another simple change we could do would be to just change the + background color of the radar graph. This is (not surprisingly) done by + a call to the method SetColor() invoked on the graph object.

+
+
Figure 118: Changing the background color [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/813Addingseveralplotstothesamegraph.html b/html/includes/jpgraph/docs/html/813Addingseveralplotstothesamegraph.html new file mode 100644 index 0000000000..6fbb88a995 --- /dev/null +++ b/html/includes/jpgraph/docs/html/813Addingseveralplotstothesamegraph.html @@ -0,0 +1,88 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.3 Adding several plots to the same graph

+

What if we want to add a second plot to the graph we just produced? + Well, this is quite straightforward and just requires two simple step:

+
    +
  1. Create the second plot
  2. +
  3. Add it to the graph
  4. +
+

To create the second plot we need some data (we could of course use + the same data as for the first plot but then we wouldn't be able to see + the new plot!)

+

The following lines show how to create the new plot and add it to + the graph (we only show the new lines - not the full script)

+  $ydata2  += array(1,19, +15,7,22 +,14,5, +9,21,13 +); +
$lineplot2 +=new LinePlot($ydata2); +
$lineplot2 +->SetColor("orange"); +
$lineplot2 +->SetWeight(2); +
+
$graph->Add( +$lineplot2); +

+

Making these changes to the previous graph script would generate a + new graph as illustrated below.

+
+
Figure 9: Adding a second plot to the previous graph [src]  +

+

+

There is a few things worth noting here

+
    +
  • The Y-scale has changed to accommodate the larger range of Y-values + for the second graph.
  • +
  • If you add several plots to the same graph they should contain the + same number of data points. This is not a requirement (the graph will + be automatically scaled to accommodate the plot with the largest number + of points) but it will not look very good since one of the plot end in + the middle of the graph.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/813AddingtitlesandfooterstotheGraph.html b/html/includes/jpgraph/docs/html/813AddingtitlesandfooterstotheGraph.html new file mode 100644 index 0000000000..9b11fa1f1a --- /dev/null +++ b/html/includes/jpgraph/docs/html/813AddingtitlesandfooterstotheGraph.html @@ -0,0 +1,104 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.13 Adding titles and footers to the Graph

+

Each graph can have up to three different titles accessed by the + three properties

+
    +
  1. title
  2. +
  3. subtitle
  4. +
  5. subsubtitle
  6. +
+

All of these three properties is a standard text object which means + that you can have individual font, colors, margins and sizes of these + tree titles.

+

The only thing you need to think of is that you probably want to add + some extra margin to make room for the titles (using + Graph::SetMargin() )

+

The individual positioning of these titles are done automatically + and will adjust to the font size being used.

+

If you for, esthetic reasons, would like increase the distance from + the top where the title is positioned (or the intra distance between + title and sub title) you can use the + Text::SetMargin() method. For example the line

+

+ $graph->title->SetMargin +(20);

+

will set the distance between the top of the title string and the top + of the graph to 20 pixels. If you instead call the SetMargin() method + for the subtitle it will adjust the distance between the top of the + subtitle and the bottom of the title.

+

The titles will be positioned at the top and be centered in the + graph. Each of these titles may have multiple lines each separated by a + "\n" (newline) character. By default the paragraph alignment for each + title is centered but may of course be changed (using the + ParagraphAlign()) method.

+

Each graph can also have a footer. This footer is actually three + footers. Left, center and right. The 'left' footer is aligned to the + left, the 'center' at the bottom center and the right to the right.

+

Each of these three positions is a standard Text object which means + you can change color, font and size as you please individually on each + of these footer positions.

+

You access the footer through the Graph::footer property as the + following example shows

+

+ $graph-> +footer->left->Set +("(C) 2002 KXY" +); +
$graph->footer-> +center->Set("CONFIDENTIAL" +); +
$graph->footer-> +center-> +SetColor("red"); +
$graph->footer-> +center-> +SetFont( +FF_FONT2, +FS_BOLD); +
$graph->footer-> +right->Set("19 Aug 2002" +);

+

Note: If you enable the brand timing + argument you should leave the left footer empty.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/814AddingasecondYscale.html b/html/includes/jpgraph/docs/html/814AddingasecondYscale.html new file mode 100644 index 0000000000..f2ea44b5e2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/814AddingasecondYscale.html @@ -0,0 +1,77 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.4 Adding a second Y-scale

+

As you saw in the preceding example you could add multiple plots to + the same graph and Y-axis. However what if the two plots you want to + display in the graph has very different ranges. One might for example + have Y-values like above but the other might have Y-values in the + 100:s. Even though it is perfectly possible to add them as above the + graph with the smallest values will have a very low dynamic range since + the scale must accomplish the bigger dynamic range of the second plot.

+

The solution to this is to use a second Y-axis with a different + scale and add the second plot to this Y-axis instead. Let's take a look + at how that is accomplished.

+

First we need to create a new data array with large values and + secondly we need to specify a scale for the Y2 axis. This is done by + the lines

+ $y2data = array( +354,200,265 +,99,111, +91,198,225 +,293,251); +
$graph->SetY2Scale( +"lin");
+

+

and finally we create a new line plot and add that to the second + Y-axis. Note that we here use a new method, AddY2(), since we want this + plot to be added to the second Y-axis. Note that JpGraph will only + support two different Y-axis. This is not considered a limitation since + using more than two scales in the same graph would make it very + difficult to interpret the meaning of the graph.

+

To make the graph a little bit more esthetic pleasing we use + different colors for the different plots and let the two different + Y-axis get the same colors as the plots.

+

The resulting graph is shown below. source)

+
+
Figure 10: Adding a second Y-scale plot to the same graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/814Addingatabtitle.html b/html/includes/jpgraph/docs/html/814Addingatabtitle.html new file mode 100644 index 0000000000..a579d141ee --- /dev/null +++ b/html/includes/jpgraph/docs/html/814Addingatabtitle.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.14 Adding a tab title

+

A variant of the titles is the tab title. This is just + another option you have of putting a name on the graph. The appearance + of this type is a tab on top of the plot area with text inside.

+

You can access the tab using the 'tabtitle' property of the graph.

+

The following figure shows an example of how this can look.

+
+
Figure 88: Using the tabbed title style [src]  +

+

+

As usual you have full freedom to specify font and colors for this + type of title. Please see the class reference regarding +GraphTabTitle() for more information.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/814Addingseveralplotstothesameradargraph.html b/html/includes/jpgraph/docs/html/814Addingseveralplotstothesameradargraph.html new file mode 100644 index 0000000000..4891ed31eb --- /dev/null +++ b/html/includes/jpgraph/docs/html/814Addingseveralplotstothesameradargraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.4 Adding several plots to the same radar graph +

+

You can easily create several radar plot which are added to the same + radar graph. The thing to remember is that if you use filled radar + plots and they overlap each other that the order which they are added + will be the order they are drawn.

+

A simple example of this is shown below

+
+
Figure 119: Several radar plots in one radar graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/815Addingalegendtothegraph.html b/html/includes/jpgraph/docs/html/815Addingalegendtothegraph.html new file mode 100644 index 0000000000..11cec48fa5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/815Addingalegendtothegraph.html @@ -0,0 +1,122 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.5 Adding a legend to the graph

+

With more than one plot on the same graph it is necessary to somehow + indicate which plot is which. This is normally done by adding a legend + to the graph.

+

You will see that each plot type has a 'SetLegend()' method which is + used to name that plot in the legend. SO to name the two plots in the + example we have been working with so far we need to add the lines

+  $lineplot->SetLegend +("Plot 1"); +
$lineplot2 +->SetLegend("Plot 2"); +

+

to the previous code. The resulting graph is shown below + + As you can see the legend gets automatically sized depending on how + many plots there are that have legend texts to display. By default it + is placed with it's top right corner close to the upper right edge of + the image. Depending on the image you might want to adjust this or you + might want to add a larger margin which is big enough to accompany the + legend. Let's do both.

+

First we increase the right margin and then we place the legend so + that it is roughly centered. We will also enlarge the overall image so + the plot area doesn't get too squeezed.

+

To modify the legend you access the 'legend' property of the graph. + For a full reference on all the possibilities (changing colors, layout, + etc) see class legend in + the class reference

+

For this we use the legends 'SetPos()' method as in

+  $graph +->legend->Pos( +0.05,0.5,"right" +,"center");

+

+

Doing this small modification will give the result shown below

+
+
Figure 11: Adjusting the layout to give more rooms for the + legend [src]  +

+

+

The above method 'SetPos()' deserves some explanation since it might + not be obvious. You specify the position as a fraction of the overall + width and height of the entire image. This makes it possible for you to + resize the image within disturbing the relative position of the legend. + We will later see that the same method is just to place arbitrary text + in the image.

+

To give added flexibility one must also specify to what edge of the + legend the position given should be relative to. In the example above + we have specified "right" edge on the legend for the for the horizontal + positioning and "center" for the vertical position.

+

This means that the right edge of the legend should be position 5 % + of the image width from the right. If you had specified "left" the the + legends left edge would be positioned 5 % of the image width from the + image left side.

+

By default the legends in the legend box gets stacked on top of each + other. The other possibility is to have them sideways. To adjust this + you use the SetLayout() + method. Using a horizontal layout with the previous example give the + following result.

+
+
Figure 12: Using a horizontal layout for the legends [src]  +

+

+

+

8.1.5.1 Adjusting the layout of the legend

+

For more advanced fomatting of the legend it is possible to adjust

+
    +
  • The number of columns in the legend
  • +
  • Specify vertical / horizontal margins for legend columns
  • +
+

In order to adjust the number of columns used in the legend the + method Legend::SetColumns is used. So for example to have the + legend lined up using three columns the follwing lines have to be added + to teh script

+ $graph-> +legend-> +SetColumns(3);
+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/815Addingplotmarksiradargraphs.html b/html/includes/jpgraph/docs/html/815Addingplotmarksiradargraphs.html new file mode 100644 index 0000000000..a93684f300 --- /dev/null +++ b/html/includes/jpgraph/docs/html/815Addingplotmarksiradargraphs.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.5 Adding plotmarks i radar graphs

+

In exactly the same way as for line graphs it is possible to add + plot marks in radar plots. The mark property is accessed through the + RadarPlot::mark The example below adds a red ball as a marker.

+
+
Figure 120: Adding plotmarks to a radar plot [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/815Usingbackgroundimages.html b/html/includes/jpgraph/docs/html/815Usingbackgroundimages.html new file mode 100644 index 0000000000..239939f669 --- /dev/null +++ b/html/includes/jpgraph/docs/html/815Usingbackgroundimages.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.15 Using background images

+

Instead of having a single color background you can easily have an + arbitrary image as the background. The image may be in either PNG, JPG + or GIF format depending on what your installation supports.

+

+
+

A note on GD: If you are using GD 2.xx you must + make sure that the define USE_TRUECOLOR is set to true. This is also + the default. Failure to do so in combination with GD 2.xx will make the + background image just look like a solid black square.

+
+
+

To use a specific image as the background you just have to use the + method + Graph::SetBackgroundImage() The arguments specify file-name, how + the image should be positioned in the graph and finally the format of + the image (if it is in JPG, PNG or GIF) format. If the format is + specified as "auto" (the default) then the appropriate image format + will be determined from the extension of the image file.

+

The file name is of course obvious but the second argument might not + be. This arguments determine how the image should be copied onto the + graph image. You can specify three different variants here

+
    +
  1. BGIMG_ COPY This will just copy the image unchanged onto the graph + from the top left corner.
  2. +
  3. BGIMG_CENTER This will just copy the image unchanged onto the graph + but it will center the image in the graph.
  4. +
  5. BGIMG_FILLFRAME This will scale the image to exactly fit the whole + graph image.
  6. +
  7. BGIMG_FILLPLOT This will scale the image to exactly fit just the + plot area of the graph.
  8. +
+

+

+
The following section only applies to palette based images. + True color images can NOT be manipulated this way. Applying the + following sections to true-color images will have no affect. +
+

You might often find yourself wanting to use a background image as a + "waterstamp". This usually means taking the original image, import it + to some image editing program and then "bleaching" the color + saturation, reducing the contrast and so on. Finally you save the + modified image which you then use as a background image.

+

This whole process can be automatically accomplished in JpGraph by + using the method + Graph::AdjBackgroundImage() which allow you to adjust color + saturation, brightness and contrast of the background image.

+

+ $graph-> +AdjBackgroundImage(...) +

+

+

to achieve the "watercolor" effect to avoid the image being too + intrusive in the graph.

+
+
Figure 89: Example on using a watermark type background image + [src]  +

+

+

Note: The background image depicts a 1998 + Triumph Tiger. This bike is a 900cc off-road bike.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/816Handlingnullvaluesinlineplots.html b/html/includes/jpgraph/docs/html/816Handlingnullvaluesinlineplots.html new file mode 100644 index 0000000000..a5fbefec18 --- /dev/null +++ b/html/includes/jpgraph/docs/html/816Handlingnullvaluesinlineplots.html @@ -0,0 +1,50 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.6 Handling null-values in line plots

+

JpGraph offers two ways of handling null values (or discontinuities) + in the data. You can either have a "whole" in the data or the line may + be extended between the previous and next data point in the graph.

+

If the data value is null ("") or the special value "x" then the + data point will not be plotted and will leave a gap in the line.

+

If the data value is "-" then the line will be drawn between the + previous and next point in the data ignoring the "-" point.

+

The following example shows both these possibilities.

+

+
+
Figure 13: Handling null values in line graphs [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/816Usingabackgroundgradient.html b/html/includes/jpgraph/docs/html/816Usingabackgroundgradient.html new file mode 100644 index 0000000000..b856e74c94 --- /dev/null +++ b/html/includes/jpgraph/docs/html/816Usingabackgroundgradient.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.16 Using a background gradient

+

In addition to the background image you can also add a background + color gradient. This gradient can be covering the entire graph, just + the plot area or just the margins. This flexibility allows you to + combine a background image with a background color gradient. You can + for example use a background image in the plot area and a color + gradient out in the margins.

+

You specify a color gradient background by calling the + Graph::SetBackgroundGradient() method. All details are available in + the class reference (follow the link above). We finally give a quick + example on what kind of effect you can achieve using this feature.

+
+
Figure 90: Using a background color gradient with the + SetBackgroundGradient() method +[src]  +

+

+

+

Finally we like to mention that in the "/utils/misc/" directory you + will find a small utility script called "mkgrad.php". Running this + script presents you with a UI that makes it a breeze to create a + gradient image on it's own.

+

The UI for the utility is so obvious that we won't discuss it + further, we just show it below. The UI for the mkgrad.php utility The UI for the mkgrad.php utility

+

In the example below this utility is used to get a more interesting + plot area.

+

+
+
Figure 91: Example of the use of a gradient background [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/817UsingcallbacksforPlotmarks.html b/html/includes/jpgraph/docs/html/817UsingcallbacksforPlotmarks.html new file mode 100644 index 0000000000..8d7c05e336 --- /dev/null +++ b/html/includes/jpgraph/docs/html/817UsingcallbacksforPlotmarks.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.17 Using callbacks for Plot marks

+

An interesting enhancement when using Plotmarks is the possibility + to add a callback function to control the size and color of the + plotmarks.

+

This callback function will get called with the current Y-value (for + the plotmark) as it's argument. As return value the callback function + must return an array containing three (possible null) values. The + values returned must be

+
    +
  1. Plot mark Weight
  2. +
  3. Plot mark Color
  4. +
  5. Plot mark Fill color
  6. +
+

The exact meaning of the parameters will of course depend on the + type of plot marks being used.

+

The callback must be a global function and is installed with a call + to + PlotMark::SetCallback()

+

So for example to install a callback that changes the fill color for + all marks with a (Y) value higher than 90 you could add the lines

+

+ + 90) $fcolor="red" else $fcolor=""; return array("","",$fcolor); } ... + $plot->mark->SetCallback("MarkCallback"); ...'; ShowCodeSnippet($t); ?>

+

As you can see in the above example we have left some of the return + values blank. Doing this will just ignore any change of these value and + use the global settings for the plotmarks.

+

If you also let the (Y) value affect the size of the plot marks you + can get what is sometimes known as a "balloon plot". The example below + is basically a scatter plot that uses filled circles to mark the + points. A format callback is then used to change the color and size + depending on the Y-value for each plot.

+

+
+
Figure 92: Creating a balloon plot by using plot mark + callback function +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/817Usingthestepstyletorenderlineplots.html b/html/includes/jpgraph/docs/html/817Usingthestepstyletorenderlineplots.html new file mode 100644 index 0000000000..b464e7000b --- /dev/null +++ b/html/includes/jpgraph/docs/html/817Usingthestepstyletorenderlineplots.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.7 Using the step-style to render line plots

+

Step style refers to an alternate way of rendering line plots by not + drawing a direct line between two adjacent points but rather draw two + segments. The first segment being a horizontal line to the next X-value + and then a vertical line from that point to the correct Y-value. This + is perhaps easier demonstrated by an example as seen below.

+

You specify that you want the plot to be rendered with this style by + calling the method +SetStepStyle() on the lineplot.

+
+
Figure 14: Rendering a line plot with the step style [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/818Rotatinggraphs90degrees.html b/html/includes/jpgraph/docs/html/818Rotatinggraphs90degrees.html new file mode 100644 index 0000000000..d570581e4b --- /dev/null +++ b/html/includes/jpgraph/docs/html/818Rotatinggraphs90degrees.html @@ -0,0 +1,58 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.18 Rotating graphs 90 degrees

+

In section 10.2 you can read about + arbitrary rotation of the graphs. For most practical purposes rotation + of 90 degrees is most useful. This could for example be used to plot + horizontal bar graphs.

+

The slight complication with general rotation is that the margins + also rotates, this means that if you rotate a graph 90 degrees the left + margin in the image was originally the bottom margin. In additional by + default the center of the rotation is the center of the plot area and + not the entire image (if all the margins are symmetrical then they will + of course coincide). This means that depending on your margin the + center of the rotation will move. You can read more about this and how + to manually set the center for rotation in the section about rotation, 10.2

+

This is just a slight inconvenience which you have to take into + account when you need to set an explicit margin with a call to +Graph::SetMargin()

+

However, in order to make a rotation of 90 degrees much easier you + can easily rotate a graph 90 degrees and set the correct margin with a + call to +Graph::Set90AndMargin() The parameter to this method lets you + specify the margins as you will see them in the image without having to + think of what becomes what after the rotation.

+

So, the only thing you need to do is call this method and then the + graph will have been rotated 90 degrees.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/818Usinglogarithmicscale.html b/html/includes/jpgraph/docs/html/818Usinglogarithmicscale.html new file mode 100644 index 0000000000..7e0a31f436 --- /dev/null +++ b/html/includes/jpgraph/docs/html/818Usinglogarithmicscale.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.8 Using logarithmic scale

+

Using a logarithmic scale requires you to include the logarithmic + add on module in "jpgraph_log.php". So you must have the line

+   +include("jpgraph_log.php" +);

+

on the top of your code. To Illustrate how to use a logarithmic scale + let's make the right Y scale in the previous example a logarithmic + scale. This is done by the line

+  $graph->SetY2Scale( +"log"); +

+

This will then give the following result

+
+
Figure 15: Using a logarithmic scale for both the Y2 axis [src]  +

+

+

+

You can of course also use a logarithmic X-scale as well. The + following example shows this.

+
+
Figure 16: Example of using log scale on both X and Y axis + together with a linear Y2 scale +[src]  +

+

+

Even though we have so far only shown line graphs logarithmic scale + can also be used for bar, error, scatter plots as well. Even radar + plots supports the use of logarithmic plots. The following example + shows how to use a logarithmic scale for a bar graph.

+

+
+
Figure 17: Example of using logarithmic scale togther with + bar plots [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8191Standardtwoaxisgraphs.html b/html/includes/jpgraph/docs/html/8191Standardtwoaxisgraphs.html new file mode 100644 index 0000000000..6fe77fae89 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8191Standardtwoaxisgraphs.html @@ -0,0 +1,132 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19.1 Standard two axis graphs

+

Assuming we start with the traditional two axis graph, one X and one + Y axis. You may then change the position of each axis by calling + Axis::SetPos($aPosition) You have to remember that you need to + specify the position on the other axis. SO you need to specify the + world-coordinate for the position. By default the axis are each + positioned at the 0-point on the other axis, i.e. the axis will cross + at the 0,0 point in the graph.

+

In addition to the standard positioning you may also use the two + special position markers "min" and "max". This will position the axis + at the minimum (or maximum) position of the other axis.

+

For example, to make sure that the X-axis is always at the bottom of + the graph (at lowest possible Y-value) you would have to add the line

+

+ $graph->xaxis->SetPos +("min");

+

+

To change the color and width of the axis you have to make use of + the Axis::SetColor() and + Axis::SetWeight() + methods.

+
Invisible axis Even though JpGraph (1.7) + doesn't directly support "hidden" axis where the labels are still drawn + it is very easy to achieve this effect by setting the colors of the + axis to be the same as the background. See the example barintex2.php in + the Example directory. To completely hide an axis you can make use of + the Hide() +
+

You might also want to add titles to the axis. This is done through + the Axis::SetTitle() + method. This is actually just a shortcut for accessing the title + property direct. Axis::title::Set() which also allow you to set the + alignment in one call.

+

By default the position of the title is to the far right for the + X-axis and in the middle (and 90 degrees rotated) for the Y-axis.

+

You can adjust the position of the title with the help of the second + argument to the + Axis::SetTitle() method.

+

The possible positions are "high","middle" and "low" which refers to + the scale values on the axis.

+

One common modification you might want to do to the title is to + increase the margin between the axis and the actual title. This is + often necessary to do for the Y-axis if the values displayed are large. + You may adjust the distance (in pixels) between the axis and the title + by using the method + Axis::SetTitleMargin()

+

So for example to increase the margin on the Y-axis you might add + the line

+

+ $graph->yaxis->SetTitleMargin(40 +);

+

+

to your code.

+

Finally we mention something about the positioning of tick marks and + labels on the axis. You have the possibility to choose what side of the + axis the tick marks and the labels should be at. For the X-axis this + can be specified as either on the the top (inside the plot area) or at + bottom (outside of the plotarea). In the same way you can specify for + the Y-axis if the labels ( or ticks) should be on the left or right + side.

+

To adjust the label positioning you have to use the method + Axis::SetTitleSide() and to adjust the position of the tick mark + you have to use the method + SetTickSide()

Note: There is also an alias + for this method, SetTickDirection() which is deprecated from version + 1.7 but kept for backwards compatibility.
Valid arguments for + these methods are

+
    +
  • SIDE_UP
  • +
  • SIDE_DOWN
  • +
  • SIDE_LEFT
  • +
  • SIDE_RIGHT
  • +
+

For example, the following lines added to a script would change side + of the labels and tickmarks for the X-axis.

+

+ $graph->xaxis->SetLabelPos +(SIDE_UP); +
$graph->xaxis-> +SetTickSide( +SIDE_DOWN); +

+

+

This technique is for example used if you position the X-axis at the + top of the graph as the following example shows.

+
+
Figure 93: Example of both how to adjust the position of the + X-axis as well as adjusting the side for the tick and axis title [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8192Scientificstyleaxis.html b/html/includes/jpgraph/docs/html/8192Scientificstyleaxis.html new file mode 100644 index 0000000000..d2e27b35bc --- /dev/null +++ b/html/includes/jpgraph/docs/html/8192Scientificstyleaxis.html @@ -0,0 +1,63 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19.2 Scientific style axis

+

In scientific style plots it is often common to duplicate each axis + so that all sides of the graph have a labeled axis. This is of course + also fully supported by JpGraph.

+

Before we continue we show a small example to illustrate this + feature

+

+
+
Figure 94: Example of scientific axis [src]  +

+

+

+

The example above shows the basic configuration. There are now + several modifications you may do to these axis like

+
    +
  • Choose if the labels should be inside or outside the plot area
  • +
  • Choose if the tickmarks should be inside or outside the plot area
  • +
+

The style of axis is determined by the method + Graph::SetAxisStyle() The available type of axis are

+
    +
  • AXSTYLE_SIMPLE, The standard two axis graph
  • +
  • AXSTYLE_BOXIN, Four axis scientific style with labels and tickmarks + on the inside
  • +
  • AXSTYLE_BOXOUT, Four axis scientific style with labels and + tickmarks on the outside
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8193Adjustingthepositionofthescalelabels.html b/html/includes/jpgraph/docs/html/8193Adjustingthepositionofthescalelabels.html new file mode 100644 index 0000000000..e0450304a4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8193Adjustingthepositionofthescalelabels.html @@ -0,0 +1,57 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19.3 Adjusting the position of the scale labels +

+

How to adjust the actual labels are discussed elsewhere in this + manual (see ???,???). However we like to mention here that you can + adjust the label margin (distance between the axis and the labels) with + the method + Axis::SetLabelMargin()

+

to adjust the actual label format (like font, color, angle) you need + to access the Axis::SetFont() + and the Axis::SetColor() + methods. If you investigate the + Axis class you will discover more methods to adjust the many + aspects of the axis layout.

+

As a final note we also mention the methods + Axis::SetLabelAlign() and + Axis::SetLabelAngle() This first method is really only mentioned + here for completeness since it is mostly used for internal purposes. + However on some occasion you might want to adjust the alignment of the + labels. By default they are centered in respect to the tick mark. By + using the method you might override this positioning should you choose + to do so.

+

The second of these methods adjusts the angle of the label in + regards to the axis. This is very useful for X-axis that have long + labels.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8194Formattingthescalelabels.html b/html/includes/jpgraph/docs/html/8194Formattingthescalelabels.html new file mode 100644 index 0000000000..ca7db32d95 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8194Formattingthescalelabels.html @@ -0,0 +1,43 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19.4 Formatting the scale labels

+

In order to have full control over the way that the labels are + displayed it is possible to define a callback function that will be + applied to all labels. The callback function will be called with the + label as the only argument and should return the value that will be + displayed in the graph. This could for example be used to turn seconds + (used to position data points) into hour and minutes on the scale. For + further reference see the two methods: + Graph::SetLabelFormatCallback(); and + Graph::SetLabelFormat();

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8195InvertingtheYaxis.html b/html/includes/jpgraph/docs/html/8195InvertingtheYaxis.html new file mode 100644 index 0000000000..583ffd723c --- /dev/null +++ b/html/includes/jpgraph/docs/html/8195InvertingtheYaxis.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19.5 Inverting the Y-axis

+

One good way of illustrate the usefulness of label callbacks in a + slightly different context is to show how we can achieve the effect of + an inverted Y-scale.

+

An inverted Y-scale has the lowest number at the top and the scale + values increases downwards.

+

Even though JpGraph doesn't directly support this feature it is + quite easy to achieve with just a few extra lines of code in your image + script.

+

Before we continue we give an example of what we are referring to.

+

+
+
Figure 95: Inverted Y-axis [src]  +

+

+

+

Two achieve this effect there are two simple steps to take:

+
    +
  1. Negate all you Y-value in the data
  2. +
  3. Create a callback that negates the scale labels so they appear to + be positive.
  4. +
+

And that's it! We refer you to the code in the example above for the + details.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/819Formattingtheaxis.html b/html/includes/jpgraph/docs/html/819Formattingtheaxis.html new file mode 100644 index 0000000000..4fb50d4d42 --- /dev/null +++ b/html/includes/jpgraph/docs/html/819Formattingtheaxis.html @@ -0,0 +1,38 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.19 Formatting the axis

+

To get the exact type of axis you want in your graph there are a + number of adjustments available for you. You may change, color, size, + position and general appearance.

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/819Moreonscales.html b/html/includes/jpgraph/docs/html/819Moreonscales.html new file mode 100644 index 0000000000..05837fd282 --- /dev/null +++ b/html/includes/jpgraph/docs/html/819Moreonscales.html @@ -0,0 +1,85 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1.9 More on scales

+

As you saw in the previous example it is possible to use different + types of scales. In JpGraph you can use the following scales

+
    +
  • Linear scale, the standard "scale"
  • +
  • Logarithmic scale
  • +
  • Integer scale, very similar to linear scale but restricts the scale + values (and labels) to integer values.
  • +
  • Text scale, Similar to integer scale and used when only the + numbering of items is relevant. A text scale is almost exclusively used + for the X-axis. A typical example for this is the X-axis for a bar + plot. The labels for the text scale is usually replaced by user + supplied texts. Text scales can only be used for the X-axis (it doesn't + make sense for the Y-scale).
  • +
+

Any combination of these may be used. Linear and logarithmic scales + are pretty straightforward. The text scale might deserve some + explanation. The easiest way to think of the text scale is as a linear + scale consisting of only natural numbers, i.e. 0,1,2,3,4,... . This + scale is used when you just have a number of Y-values you want to plot + in a consecutive order and don't care about the X-values. For the above + example it will also work fine to use a linear X-scale (try it!). + However, the scale is now treated as consisting or real numbers so the + auto scaling, depending on the size of the image an the number of data + points, might decide to display other labels then the natural numbers., + i.e. a label might be 2.5 say. This is not going to happen if you use a + text scale.

+

The normal practice for text scale is to specify text strings as + labels instead as the default natural numbers. You can specify text + strings for the labels by calling the + SetTickLabels() method on the Axis.

+

To specify the scale you use the + SetScale() method. A few examples might help clarify this.

+
    +
  • "textlin", text-scale for X-axis, Linear scale for Y-axis
  • +
  • "linlin", linear-scale for X-axis, Linear scale for Y-axis
  • +
  • "linlog", linear-scale for X-axis, Logarithmic scale for Y-axis
  • +
  • "loglog", Logarithmic scale for X-axis, Logarithmic scale for + Y-axis
  • +
  • "textint", text-scale for X-axis, Integer scale for Y-axis
  • +
  • "textlog", Text scale for X-axis, Logarithmic scale for Y-axis
  • +
+

As you can see all your graphs will require at least one call to + SetScale() in the beginning of your script. Normally it will come right + after the creation of the Graph().

+

To specify the scale for the Y2 axis you use the + SetY2Scale() Since you only specify one axis you only specify + "half" of the string in the previous examples. So to set a logarithmic + Y2 scale you will call + + SetY2Scale("log");'; ShowCodeSnippet($t); ?>

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/81Lineplots.html b/html/includes/jpgraph/docs/html/81Lineplots.html new file mode 100644 index 0000000000..1c5beda2ef --- /dev/null +++ b/html/includes/jpgraph/docs/html/81Lineplots.html @@ -0,0 +1,220 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1 Line plots

+

The first example draws a line graph consisting of 10 Y-values. In + this first example we show the full code. In the following examples we + will only show interesting piece of the code.

+(File: example0.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_line.php"); +
+
// Some data +
$ydata  += array(11,3, +8,12,5 +,1,9, +13,5,7 +); +
+
+// Create the graph. These two calls are always required +
$graph  += new Graph(350, +250,"auto");     +
$graph->SetScale( +"textlin"); +
+
// Create the linear plot +
$lineplot +=new LinePlot($ydata); +
$lineplot +->SetColor("blue"); +
+
// Add the plot to the graph +
$graph->Add( +$lineplot); +
+
// Display the graph +
$graph->Stroke(); +
?> +
+
+
Figure 3: A simple line graph [src]  +

+

+

+

You might note a few things

+
    +
  • Both the X and Y axis have been automatically scaled. We will later + on show how you might control the auto scaling how it determines the + number of ticks which is displayed.
  • +
  • By default the Y-grid is displayed in a "soft" color
  • +
  • By default the image is bordered and the margins are slightly gray.
  • +
  • By default the 0 label on the Y-axis is not displayed
  • +
+

This is a perfect fine graph but looks a little bit "sparse". To + make it more interesting we might want to add a few things like

+
    +
  • A title for the graph
  • +
  • Title for the axis
  • +
  • Increase the margins to account for the title of the axis
  • +
+

From looking at the previous example you can see that you access all + properties of JpGraph through the objects you create. Graph(), + LinePlot() and so on. In general all objects you can see in the graph + is accessed through a named instance.

+

For example the title of the graph is accessed through the + 'Graph::title' property. So to specify a title string you make a call + to the 'Set()' method on the title property as in:

+

+ $graph->title->Set +('Example 2');

+

So by adding just a few more lines to the previous code we get a + graph as shown below.

+
+
Figure 4: Same basic graph as in previous figure but with a + titles for graph and axis. +[src]  +

+

+

To achieve this we just needed to add a few more lines. (We only show + the part of example 1 we changed, to look at the full source just click + the [src] link in the caption. )

+   +// Setup margin and titles +
$graph->img-> +SetMargin(40,20 +,20,40); +
$graph->title-> +Set( +"Example 2"); +
$graph->xaxis-> +title->Set("X-title" +); +
$graph->yaxis-> +title->Set("Y-title" +); +

+

+

Again there are a couple of things you should note here

+
    +
  • A default font and size is used for the text
  • +
  • The default position for the title of the graph is to be centered at + the top
  • +
  • The default position for the title of the x-axis is the far right + and for the y-axis centered and rotated in a 900 angle.
  • +
+

+

A nice change would now be to have all the titles in a bold font and + the line plot a little bit thicker and in blue color. Let's do that by + adding the lines

 $graph-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$graph->yaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$graph->xaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
$lineplot +->SetColor("blue"); +
$lineplot +->SetWeight(2);   +// Two pixel wide
+

+

Again please note the consistent interface. To change font you just + have to invoke the SetFont() method on the appropriate object. This + principle is true for most methods you will learn. The methods may be + applied to a variety of objects in JpGraph. So for example it might not + come as a big surprise that to have the Y-axis in red you have to say:

+ $graph->yaxis->SetColor +("red")

+

or perhaps we also want to make the Y-axis a bit wider by

+  $graph +->yaxis->SetWidth( +2) +

+

As a final touch let's add a frame and a drop shadow around the + image since this is by default turned off. This is done with

+  $graph +->SetShadow()

+

The result of all these modifications are shown below.

+
+
Figure 5: Making the image a little bit more interesting by + adding som colors and changing the fonts [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/81Radarplots.html b/html/includes/jpgraph/docs/html/81Radarplots.html new file mode 100644 index 0000000000..3f388580ed --- /dev/null +++ b/html/includes/jpgraph/docs/html/81Radarplots.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.1 Radar plots

+

Spider plots are most often used to display how a number of results + compare to some set targets. They make good use of the human ability to + spot symmetry (or rather un-symmetry) . the figure below show an + example of a spider (sometimes called a web-plot). Spiderplots are not + suitable if you want very accurate readings from the graph since, by + it's nature, it can be difficult to read out very detailed values.

+
+
Figure 114: A typical radar graph with two plots [src]  +

+

+

+
    +
  • There is one axis for each data point
  • +
  • Each axis may have an arbitrary title which is automatically + positioned
  • +
  • A spider plot may be filled or open
  • +
  • You can control color, weight of lines as you are already used to
  • +
  • A spider plot can, as usual, have a title and a legend
  • +
  • The first axis is always oriented vertical and is the only axis with + labels
  • +
  • Grids may be used (dashed in the figure above)
  • +
  • You may have ticks (although suppressed in the figure above
  • +
  • You can control the size and position within the frame of the graph
  • +
  • You may have several plots within the same graph
  • +
+

In the following section we show how to draw both simple and complex + radar graph. As we will show all the settings will follow the same + pattern as for the more standard linear graphs.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/820Adjustingtheautoscalinglimitsgracevalue.html b/html/includes/jpgraph/docs/html/820Adjustingtheautoscalinglimitsgracevalue.html new file mode 100644 index 0000000000..1440fea043 --- /dev/null +++ b/html/includes/jpgraph/docs/html/820Adjustingtheautoscalinglimitsgracevalue.html @@ -0,0 +1,93 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.20 Adjusting the auto-scaling limits - grace value +

+

By default the auto-scaling algorithm tries to make best possible + use of screen estate by making the scale as large as possible, i.e. the + extreme values (min/max) will be on the top and bottom of the scale if + they happen to fall on a scale-tick. So for example doing a simple line + plot could look like the plot shown in the below.

+
+
Figure 96: A typical graph with autoscaling and grace=0 [src]  +

+

+

However you might sometime want to add some extra to the minimum and + maximum values so that there is some "air" in the graph between the end + of the scale values and the extreme points in the graphs. This can be + done by adding a "grace" percentage to the scale. So for example adding + 10% to the y-scale in the image above is done by calling the + SetGrace() method on the yscale as in

+

+ $graph->yaxis->scale +->SetGrace(10, +10); +

+

These lines add a minimum of 10% to the top and bottom values of the + scale. Note that we say "minimum" since depending on the specific tick + values choose this might be a little bit more to make the end of the + scale fall on an even tick mark.

+

Adding this line to the previous graph will result in the following + example

+

+
+
Figure 97: Adding 10% grace value to top and bottom of the + Y-scale [src] +  +

+

+

Since we haven't adjusted the position of the X-axis it will remain + at Y=0 which might not necessary be what we would like so we therefor + also add the line

+

+ $graph->xaxis->SetPos +("min");

+

+

So that the X-axis always will remain at the lowest possible + Y-value. Doing this will then result in the example below

+

+
+
Figure 98: Using grace but also adjusting the position of the + X-axis [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8210Creatingsemifilledbargraphs.html b/html/includes/jpgraph/docs/html/8210Creatingsemifilledbargraphs.html new file mode 100644 index 0000000000..d7ae413dfc --- /dev/null +++ b/html/includes/jpgraph/docs/html/8210Creatingsemifilledbargraphs.html @@ -0,0 +1,50 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.10 Creating semi-filled bar graphs

+

Semi filled bar graphs are in principle the same as normal filled + bar graphs but with the additional feature that you can choose to only + fill a specified range (or ranges) of X-coordinates. The figure below + illustrates this

+

+
+ + +
Figure 52: Semi-filled line graph [src]  +

+

+

+

In this example we defined two areas along the X-axis to be filled. + You can add filled areas by using the method + AddArea() and specifying range and color for the filled area.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8211Customizingthepatterns.html b/html/includes/jpgraph/docs/html/8211Customizingthepatterns.html new file mode 100644 index 0000000000..f20090e79b --- /dev/null +++ b/html/includes/jpgraph/docs/html/8211Customizingthepatterns.html @@ -0,0 +1,90 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.21.1 Customizing the patterns

+

All patterns can be customized by

+
    +
  • ... altering the colors of the band +
     
  • +
  • ... altering the density of the patterns using the method + PlotBand::SetDensity() The density is specified as an integer in + range 1 to 100 where a higher number means a higher density (smaller + distance between the lines). For example setting the density of the 3D + plane above to 60 gives the result
    +
    +
    Figure 107: Increasing the desnity in a pattern [src]  +

    +
    +

    +
     

    +
  • +
  • ... enabling or disabling a frame around the pattern by using the + method + PlotBand::ShowFrame() The band will be given the same color as the + band. +
     
  • +
  • ... finally you can change whether the band should be drawn on top + of the plots or beneath, (by default the bands are under the plots), + using the + PlotBand::SetOrder() as the following example show
    +
    +
    Figure 108: Stroking the pattern on top of the plots [src]  +

    +
    +

    +
  • +
+

Note: 3D planes actually carry another + possible modification. You can specify the vanish point to change the + perspective used. You can't access the method to change the horizon + directly but you can access it through
+  $band +->prect->SetHorizon( +$aHorizon) +

+

+

assuming that the band is a 3D plane.

+

To finish this section we give one final, more creative, example on + how to use the bands.

+
+
Figure 109: Combining 3D plane, solid band and a sttaic line [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/821Addingbandsofpatternandcolortographs.html b/html/includes/jpgraph/docs/html/821Addingbandsofpatternandcolortographs.html new file mode 100644 index 0000000000..3aee808993 --- /dev/null +++ b/html/includes/jpgraph/docs/html/821Addingbandsofpatternandcolortographs.html @@ -0,0 +1,130 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.21 Adding bands of pattern and color to graphs

+

As an additional way of emphasizing certain areas of the graph it is + possible to add bands (either vertical or horizontal) to any one of the + standard X-Y coordinate system based graphs. A band is a rectangular + area that stretches one entire axis. This means that if you define a + band between X-coordinates 3 and 5 the band area will occupy an area + between the X-coordinates and the entire Y-range.

+

In order to access this functionality you must first make sure that + you include the additional library file jpgraph_plotband.php

+

At the time of this writing (current as of JpGraph 1.8) the table + below illustrates the 8 basic types of patterns available. We will + shortly show you how you can customize these patterns, To keep these + examples clear we have only used one pattern in each figure.

+

+ + + + + +
+
+
Figure 99: +[src]  +

+
+

+
+
+
Figure 100: +[src]  +

+
+

+
+
+
Figure 101: +[src]  +

+
+

+
+
+
Figure 102: +[src]  +

+
+

+
+
+
Figure 103: +[src]  +

+
+

+
+
+
Figure 104: [src]  +

+
+

+
+
+
Figure 105: +[src]  +

+
+

+
+
+
Figure 106: +[src]  +

+
+

+
+

To add a one of these patterns to your graph you need to call the + method + PlotBand::PlotBand() The arguments is fairly easy to understand. + The pattern you would like to use is specified by using the correct + constant. You can see the name of the correct constants in the figures + above. You also need to specify if the band should stretch along the + vertical or horizontal axis as well as the min and max coordinates for + the band. As coordinates you may also use the special values "min" and + "max" which automatically sets the value to the minimum/maximum value + of the scale. The specified numeric value will be automatically + truncated to fit within the plot area.

+

We don't discuss the other arguments further here, instead we refer + you to the class reference.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/821AddingguidelinestoPiePlots.html b/html/includes/jpgraph/docs/html/821AddingguidelinestoPiePlots.html new file mode 100644 index 0000000000..012f8bd0a4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/821AddingguidelinestoPiePlots.html @@ -0,0 +1,93 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.1 Adding guide lines to Pie Plots

+

For very busy Pie plots it can become too little space for the + labels to be printed just beside the pie slice. For this purpose it is + possible to use guide lines for the labels. The library will then draw + a line from the center edge of the slices to the label which will be + positioned further out from the Pie Plot.

+

There is one method that is primarily used to handle this, + PiePlot::SetGuideLines() the simplest usage of this would be

+  $pieplot +->SetGuideLines +();

+

An example of this could then be

+
+
Figure 124: Using guide lines for PiePlots [src]  +

+

+

The above example will give guide lines very similar as what is + produced by other programs, e.g. Excel. In addition to the above + variant it is also possible to instruct the library to line up the + labels vertically in a way that we think is easier to read. This is + achieved by specifying the second parameter to the SetGuideLines() to + 'false' as in

 $pieplot-> +SetGuideLines( +true,false);
+

+

The first parameter is to enable/disable the guide-lines. With the + same example as above this would then produce the image

+
+
Figure 125: Using guide lines for PiePlots with vertically + lined up labels. +[src]  +

+

+

It is also possible to configure the vertical distance between the + labels. By default the distance between the labels is roughly 40% of + the labels font height. By using the method + PiePlot::SetGuideLinesAdjust() it is possible to specify a + fractional value which is interpretated as the distance between the + bottom of one label to the bottom of the next. This means that + specifying a value of '1.0' the labels will have no space between them + and the bottom of one label will touch the top of another label. By + default this value is 1.4.

+

By increasing or decreasing this value it is possible to make the + labels become positioned more or less compact. Below we have taken the + above example and reduced the distance to '1.1' and as can be seen this + yields much more compact labeling.

+
+
Figure 126: Adjusting to a smaller vertical distance between + the labels +[src]  +

+

+

+

Note: Guide lines is only available in 2D Pie plots.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/821Adjustingthewidthofthebars.html b/html/includes/jpgraph/docs/html/821Adjustingthewidthofthebars.html new file mode 100644 index 0000000000..98f4726346 --- /dev/null +++ b/html/includes/jpgraph/docs/html/821Adjustingthewidthofthebars.html @@ -0,0 +1,51 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.1 Adjusting the width of the bars

+

JpGraph allows you to easy customize the appearance of the bar + graph, for example to change the width of each bar. The width of each + bar can be specified either as a fraction of the width between each + major tick or as an absolute width (in pixels).

+

To set the width in fraction you use the method + SetWidth() and to set the width in pixels you use the + SetAbsWidth()

+

As an example let's take the previous example and set the width to + 100% of the distance between the ticks. The example will now become

+

+
+
Figure 30: Setting the width of the bars to 100% of the tick + width [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/822Addingstaticlinestotheplot.html b/html/includes/jpgraph/docs/html/822Addingstaticlinestotheplot.html new file mode 100644 index 0000000000..5ea197a6fc --- /dev/null +++ b/html/includes/jpgraph/docs/html/822Addingstaticlinestotheplot.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.22 Adding static lines to the plot

+

In addition to the bands you can also add static lines to the graph. + An example of that is actually shown in figure 11 above. You create a + line as an instance of + class PlotLine . So for example the lines

+  $sline  += new PlotLine +(HORIZONTAL,0, +"black",2); +
$graph->Add( +$sline); +

+

will add a 2-pixel wide horizontal static line at Y-position zero.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/822Creating3Dpieplots.html b/html/includes/jpgraph/docs/html/822Creating3Dpieplots.html new file mode 100644 index 0000000000..00477f8d7c --- /dev/null +++ b/html/includes/jpgraph/docs/html/822Creating3Dpieplots.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.2 Creating 3D pie plots

+

So far we have only made use of 2D pie plots, creating 3D pie plots + is no more difficult. Instead of creating the plots with a call to + PiePlot() you create the plots with a call to + PiePlot3D() If we just take the first simple pie plot and replace + the call to PiePlot() with a call to PiePlot3D() we get the following + result.

+
+
Figure 127: A first example of a 3D pie plot [src]  +

+

+

3D Pie plots have the same possibilities as the normal pie plots + with the added twist of a 3:rd dimension. You can adjust the + perspective angle with the method + SetAngle() So for example to make the pie more "flat" you just set + it to a smaller angle. Setting the perspective angle to 20 degrees in + the previous example will give the following result.

+
+
Figure 128: Adjusting the perspective angle [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/822Displayingthevalueofeachbar.html b/html/includes/jpgraph/docs/html/822Displayingthevalueofeachbar.html new file mode 100644 index 0000000000..e294160979 --- /dev/null +++ b/html/includes/jpgraph/docs/html/822Displayingthevalueofeachbar.html @@ -0,0 +1,104 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.2 Displaying the value of each bar

+

You can easily choose to display the value (and it's format) on top + of each bar by accessing the bar's 'value' property. So for example by + just adding the line

+  $barplot->value-> +Show(); +

+

Will enable the values in it's simplest form and will give the + result

+
+
Figure 31: Showing the values for each bar [src]  +

+

+

You cane see a small nuisance in this graph. The auto scaling + algorithm chooses quite tight limits for the scale so that the bars + just fit. Adding the value on top of the bar makes it collide with the + top of the graph. To remedy this we tell the auto scaling algorithm to + allow for more "grace" space at the top of the scale by using the + method + SetGrace() which is used to tell the scale to add a percentage (of + the total scale span) more space to either one end or both ends of the + scale. In this case we add 20% more space at the top to make more room + for the values with the line

+  $graph->yaxis-> +scale-> +SetGrace(20);
+

+

+

This will then give the graph as shown below

+
+
Figure 32: Adding some grace space to the top of the Y-scale [src]  +

+

+

+

You can also adjust the general position of the value in respect to + the bar by using the + BarPlot::SetValuePos() method. You can set the position to either + 'top' (the default) , 'center' or 'bottom'. The graph below shows the + value being positioned in the center. In this example we have also + adjusted the format to just display the value as an integer without any + decimals.

+
+
Figure 33: Putting the values in the middle of the bar. [src]  +

+

+

It is also possible to specify a more fine grained control on how + you want the values presented. You can for example, rotate them, change + font, change color. It is also possible to adjust the actual value + displayed by either using a printf()-type format string or with the + more advanced technique of a format callback routine.

+

To show what you can do we just give another example for you to + examine without much further explanations. Just remember that to have + text at an angle other than 0 or 90 degrees we have to use TTF fonts. + Even though we haven't explained the SetFont() method it should be + fairly obvious.

+
+
Figure 34: Making the displayed values more interesting [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/823Addingadropshadowtothebar.html b/html/includes/jpgraph/docs/html/823Addingadropshadowtothebar.html new file mode 100644 index 0000000000..1899d2fb33 --- /dev/null +++ b/html/includes/jpgraph/docs/html/823Addingadropshadowtothebar.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.3 Adding a drop shadow to the bar

+

One simple way of making the bar graph more attracting is to add a + drop shadow to each bar. This is done by calling the + SetShadow() method. An example will clarify this.

+
+
Figure 35: Adding a drop shadow to each bar [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/823Explodingpieslices.html b/html/includes/jpgraph/docs/html/823Explodingpieslices.html new file mode 100644 index 0000000000..29dee3d031 --- /dev/null +++ b/html/includes/jpgraph/docs/html/823Explodingpieslices.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.3 Exploding pie slices

+

One way to attract attention to some specific piece of information + in a pie chart is to "explode" one or more slices. Both 2D and 3D pies + support exploding one or several slices.

+

Exploding slices is accomplished by the methods + Explode() and + ExplodeSlice() The first method is used if you want to explode more + than one slices and the second is a shorthand to make it easy to just + explode one slice.

+

For example to explode one slice the default "explode" radius you + would just have to say

+  $pieplot->ExplodeSlice( +1) +

+

The above line would explode the second slice (slices are numbered + from 0 and upwards) the default amount. Doing this to the two previous + example would result in

+
+
Figure 129: Exploding one slice [src]  +

+

+

+

+
+
Figure 130: Exploding one 3D slice [src]  +

+

+

+

To explode all slices at once you can use the + PiePlot::ExplodeAll() method. If you want to explode several slices + you can use the + PiePlot::Explode() method and supply a suitable array argument.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/824Adjustingthealignmentofbarsonatextscale.html b/html/includes/jpgraph/docs/html/824Adjustingthealignmentofbarsonatextscale.html new file mode 100644 index 0000000000..3b2749cd19 --- /dev/null +++ b/html/includes/jpgraph/docs/html/824Adjustingthealignmentofbarsonatextscale.html @@ -0,0 +1,39 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.4 Adjusting the alignment of bars on a text + scale

+

As you have seen from the previous examples bar graphs are normally + centered between the trick marks on a text scale. However, you can + modify this behavior by calling the method + BarPlot::SetAlign()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/824Specifyingandadjustinglabelsonpieplots.html b/html/includes/jpgraph/docs/html/824Specifyingandadjustinglabelsonpieplots.html new file mode 100644 index 0000000000..da01fba7a7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/824Specifyingandadjustinglabelsonpieplots.html @@ -0,0 +1,80 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.4 Specifying and adjusting labels on pie plots +

+

By default the values shown just outside the pie for each slice are + the percentage value for each slice. If you instead wanted the absolute + value you would just have to use the + SetLabelType() method. So to use the absolute value you would call

+

+ $pieplot-> +SetLabelType( +"PIE_VALUE_ABS"); +

+

+

Furthermore you could enhance the formatting of the value by either + using a printf() style format string (using + SetFormat() ) or by providing a formatting function callback (using + + SetFormatCallback() ) for doing more advanced formatting.

+

You can also adjust the position of the labels by means of the + PiePlot::SetLabelPos() method. The argument to this method is + either the fraction of the radius or the string 'auto'. In the latter + case JpGraph automatically determines the best position and the the + first case The following example illustrates this

+
+
Figure 131: Example of adjusting the position of the labels + for the slices +[src]  +

+

+

+

If this formatting is not enough you can also "manually" specify the + labels for each slice individually. You do this by using the + PiePLot::SetLabels() method. This will let you specify individual + text strings for each label. In each specification you can also add a + printf() formatting specification for a number. The number passed on + will be either the absolute value for the slice or the percentage value + depending on what was specified in the call to + SetLabelType()

+

The SetLabels() method can also take a second parameter, the label + position parameter. This is just a shortcut to the SetLabelPos() as + described above. By default the position will be set to 'auto' if not + explicitely specified.

Note: The alignment of + the labels will be different depending on whether they are inside or + outside the pie. When inside the center of the strings will be aligned + with the center of the slice at the specified fraction of the radius. + When positioned outside the alignment will depend on the angle to avoid + that the labels inadvertely writes over the pie.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/825Specifyingslicecolorsandusingthemes.html b/html/includes/jpgraph/docs/html/825Specifyingslicecolorsandusingthemes.html new file mode 100644 index 0000000000..c03375b027 --- /dev/null +++ b/html/includes/jpgraph/docs/html/825Specifyingslicecolorsandusingthemes.html @@ -0,0 +1,84 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.5 Specifying slice colors and using themes

+

Another typical change would be to change the colors of the slices. + There are two fundamental ways of doing this. You either manually + specify the colors for the slices as an array using the method + SetSliceColors() If you specify fewer colors than the number of + slices they will just wrap around.

+

Another way is to use one of the pre-defined color "themes". This is + just a predefined set of colors that will be used for the slices. You + choose what "theme" you like to use with the method ( + SetTheme() ) At the time of this writing the available themes are

+
    +
  • "earth"
  • +
  • "pastel"
  • +
  • "sand"
  • +
  • "water"
  • +
+

The following example shows the same pie using the different + "themes" in order.

+
+
Figure 132: +[src]  +

+

+

+
+
Figure 133: +[src]  +

+

+

+
+
Figure 134: +[src]  +

+

+

+
+
Figure 135: +[src]  +

+

+

+

A complete color chart of all available colors in the different + themes can be found here

+

Another simple change is to remove the border ( or change it's + colors ) that separates each slice. This can be done by a call to + ShowBorder()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/825Usinggroupedbarplots.html b/html/includes/jpgraph/docs/html/825Usinggroupedbarplots.html new file mode 100644 index 0000000000..dced157f18 --- /dev/null +++ b/html/includes/jpgraph/docs/html/825Usinggroupedbarplots.html @@ -0,0 +1,87 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.5 Using grouped bar plots

+

These types of bar graph is used to easy group two or more bars + together around each tick (X-value). The bars will be placed + immediately beside each other and as a group centered on each tick + mark. A grouped bar is created by aggregating two or more ordinary bar + graphs and creating a + GroupBarPlot() From two ordinary bar graphs along the lines of

+   +// Create the bar plots +
$b1plot  += new BarPlot($data1y); +
$b1plot->SetFillColor( +"orange"); +
+
$b2plot  += new BarPlot($data2y); +
$b2plot->SetFillColor( +"blue"); +
+
// Create the grouped bar plot +
$gbplot  += new GroupBarPlot +(array($b1plot +,$b2plot)); +
+
// ...and add it to the graPH +
$graph->Add( +$gbplot); +

+

The following example illustrates this type of graph

+
+
Figure 36: A grouped bar plot [src]  +

+

+

There is no limit on the number of plots you may group together.

+

If you use the SetWidth() method on the GroupBarPlot() this will + affect the total width used by all the added plots. Each individual bar + width will be the same for all added bars. The default width for + grouped bar is 70%.

+

Setting the grouped with to 0.9 would result in the image below.

+
+
Figure 37: Adjusting the width for a gropued bar plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/826Addingdropshadowstotheslices.html b/html/includes/jpgraph/docs/html/826Addingdropshadowstotheslices.html new file mode 100644 index 0000000000..bb69f5befd --- /dev/null +++ b/html/includes/jpgraph/docs/html/826Addingdropshadowstotheslices.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.6 Adding drop shadows to the slices

+

An additional visual enhancements can be made by adding a drop + shadow to the individual slices. This is accomplished by means of the PiePlot::SetShadow() + method. Adding a drop shadow is often more affective if the pie has one + or more slices exploded as the following example shows

+
+
Figure 136: Adding a drop hadow to the slices [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/826Usingaccumulatedbarplots.html b/html/includes/jpgraph/docs/html/826Usingaccumulatedbarplots.html new file mode 100644 index 0000000000..7a10115610 --- /dev/null +++ b/html/includes/jpgraph/docs/html/826Usingaccumulatedbarplots.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.6 Using accumulated bar plots

+

The final variety of group bars you can have are accumulated bars. + They work in much the same way as accumulated line plots described + above. Each plot is stacked on top of each other.

+

You create accumulated bar plots in the same way as grouped bar + plots by first creating a number of ordinary bar plots that are then + aggregated with a call to + AccBarPlot();

+

An example makes this clear. Let's use the same data as in the two + examples above but instead of grouping the bars we accumulate (or + stack) them. The code would be very similar (actually only one line has + to change)

+
+
Figure 38: Accumulated bar plots [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/827Anothervariantof2DPieplots.html b/html/includes/jpgraph/docs/html/827Anothervariantof2DPieplots.html new file mode 100644 index 0000000000..160b23cc4b --- /dev/null +++ b/html/includes/jpgraph/docs/html/827Anothervariantof2DPieplots.html @@ -0,0 +1,92 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.7 Another variant of 2D Pie plots

+

As mentioned in the beginning there are two versions of the 2D pie + plots. The normal pie plot created as an instance of + class PiePlot and a variant created as an instance of + class PiePlotC

+

This variant is an extension of the standard PiePlot in the sense + that it also have a filled circle in the center. The following example + illustrates this

+

+
+
Figure 137: Example of the variant of pie plot with a filled + center circle +[src]  +

+

+

+

Since the PiePlotC is an extension to the basic pie plot all the + normal formatting you can do for pie plots you can also do for the + PiePlotC .

+

The additional formatting only concerns the filled middle circle. + You have the option of adjusting size, fill color and all font + properties. You perform these operations with the methods

+

+ + + + + +
+PiePlotC::SetMidColor()Set fill color of mid circle
+PiePlotC::SetMidSize()Set size (fraction of radius)
+PiePlotC::SetMidTitle()Set title string (may be + multi-lined)
+PiePlotC::SetMid()Set all parameters in a single method + call
+

In addition to the normal CSIM for PiePlot:s the center area is also + a CSIM hotspot. You specify the target CSIM with a call to + PiePlotC::SetMidCSIM()

+

The next example shows an example with some more innovative + formatting. In this example we have :

+
    +
  • hidden the frame around the pie graph
  • +
  • exploded all the slices
  • +
  • added drop shadow to the individual slices (and the center filled + circle)
  • +
  • specified individual multi line labels.
  • +
  • changed the font for the title to a TTF font.
  • +
+

+
+
Figure 138: PiePlotC with some more innovative formatting to + make it more interesting. +[src]  +

+

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/827Usinggroupedaccumulatedbargraphs.html b/html/includes/jpgraph/docs/html/827Usinggroupedaccumulatedbargraphs.html new file mode 100644 index 0000000000..4a97fd1b03 --- /dev/null +++ b/html/includes/jpgraph/docs/html/827Usinggroupedaccumulatedbargraphs.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.7 Using grouped accumulated bar graphs

+

It is perfectly possible to combine the previous bar types to have + grouped accumulated bar plots. This is done by just adding the + different accumulated plots to a group bar plot, for example the + following code would do that.

+   +// Create all the 4 bar plots +
$b1plot  += new BarPlot($data1y); +
$b1plot->SetFillColor( +"orange"); +
$b2plot  += new BarPlot($data2y); +
$b2plot->SetFillColor( +"blue"); +
$b3plot  += new BarPlot($data3y); +
$b3plot->SetFillColor( +"green"); +
$b4plot  += new BarPlot($data4y); +
$b4plot->SetFillColor( +"brown"); +
+
// Create the accumulated bar plots +
$ab1plot  += new AccBarPlot +(array($b1plot +,$b2plot)); +
$ab2plot  += new AccBarPlot +(array($b3plot +,$b4plot)); +
+
// Create the grouped bar plot +
$gbplot  += new GroupBarPlot +(array($ab1plot +,$ab2plot)); +
+
// ...and add it to the graph +
$graph->Add( +$gbplot); +

+

Putting this together in an example would then produce the graph as + shown below

+
+
Figure 39: Combining grouped and accumulated bar plots [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/828Horizontalbargraphs.html b/html/includes/jpgraph/docs/html/828Horizontalbargraphs.html new file mode 100644 index 0000000000..d1607bc938 --- /dev/null +++ b/html/includes/jpgraph/docs/html/828Horizontalbargraphs.html @@ -0,0 +1,98 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.8 Horizontal bar graphs

+

It can often come in handy to have horizontal bar graphs especially + if you have a large number of values to display. Even though JpGraph + doesn't directly support horizontal bar graphs this is easy achieved by + constructing a normal vertical bar graph which is then rotated 90 + degrees.

+

The example below shows a simple example of this

+
+
Figure 40: A typical horizontal bar graph with the Y-axis at + the bottom +[src]  +

+

+

+

In order to achieve this effect you should study the above example + carefully and you might notice two things

+
    +
  • We don't simply rotate the graph we also specify that we want the + rotation center to be the middle of the entire image. The reason for + this is that by default (See the section on rotating plots) the pivot + point for rotation is the center of the plot area. + Since the center of the plot area is not necessary the center of the + entire image the rotation might be a little bit difficult to predict + since it will depend on the margins specified. <
  • +
  • The size of the plot area is determined from the original width and + height of the image taking the specified margin into account. When the + the plot area is rotated 90 degrees clockwise what was the left margin + now in effect become the upper margin and so on. This is a small nuance + since we conceptually want to specify the margins directly in the + rotated plot. +
    In order to more easily handle the margin with rotated images it is + recommended that the method "Set90AndMargin()" is used. This allows the + image to be rotated as well as specifying the margins in an obvious + way.
  • +
+

We finally show three more examples of horizontal bar plots. In the + first plot we have hidden the Y-axis and in the second we have + positioned the Y - axis at top as opposed to the bottom as the first + example shows.

+

+
+
Figure 41: Horizontal bar graph with hidden Y axis [src]  +

+

+

+
+
Figure 42: Horizontal bar graph with Y axis at the top [src]  +

+

+

+

In the final example which is almost similar to the two first we + illustrate the use of labels with more than one line.

+
+
Figure 43: Horizontal bar graph with manual integer scale as + well as multiple line labels +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/829Usinggradientfillforbargraphs.html b/html/includes/jpgraph/docs/html/829Usinggradientfillforbargraphs.html new file mode 100644 index 0000000000..533721fe99 --- /dev/null +++ b/html/includes/jpgraph/docs/html/829Usinggradientfillforbargraphs.html @@ -0,0 +1,126 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2.9 Using gradient fill for bar graphs

+

It is possible to use color gradient fill for the individual bars in + the bar graph.

+

Color gradient fill fills a rectangle with a smooth transition + between two colors. In what direction the transition goes (from left to + right, down and up, from the middle and out etc) is determined by the + style of the gradient fill. JpGraph currently supports 8 different + styles. All supported styles are displayed in the figure below.

+
+
Figure 44: +[src]  +

+

+

+
+
Figure 45: +[src]  +

+

+

+
+
Figure 46: +[src]  +

+

+

+
+
Figure 47: +[src]  +

+

+

+
+
Figure 48: +[src]  +

+

+

+
+
Figure 49: +[src]  +

+

+

+
+
Figure 50: +[src]  +

+

+

+
+
Figure 51: +[src]  +

+

+

+

To specify a gradient fill for the bar plots you make use of the + method + BarPlot::SetFillGradient() . See the class reference for details of + this function.

+

When using gradient fills there are a couple of caveats you should + be aware of:

+
    +
  • gradient filling is computational expensive. Large plots with + gradient fill will take in the order of 6 times longer to fill then for + a normal one-color fill. This might to some extent be helped by making + use of the cache feature of JpGraph so that the graph is only generated + a few times.
  • +
  • gradient filling will make use of much more colors (by definition) + this will make the color palette for the image bigger and hence make + the overall image larger. It might also have some severe effect on + using anti-aliased line in the same image as color gradient filling + since anti-aliased lines also have the possibility to make use of many + colors. Hence the color palette might not be big enough for all the + colors you need. So if you use gradient fills you should also be using + a true-color image since you otherwise run out of colors. +
    This problem is often seen as that for no apparent reason some + color you have specified in the image does appear as another color. + (This is not a bug in JpGraph!) This is something to especially watch + out for when enabling anti-aliasing since that also uses a lot of + colors. Since the numbers of colors used with anti-aliasing depends on + the angle on the lines it is impossible to foresee the number of colors + used for this.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/82Bargraphs.html b/html/includes/jpgraph/docs/html/82Bargraphs.html new file mode 100644 index 0000000000..c0492233c2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/82Bargraphs.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2 Bar graphs

+

Jpgraph also supports 2D vertical bar plots. Before you can use any + bar plots you must make sure that you included the file + "jpgraph_bar.php" in your script.

+

Using bar plots is quite straightforward and works in much the same + way as line plots which you are already familiar with from the previous + examples. Assuming you have a data array consisting of the values + [12,8,19,3,10,5] and you want to display them as a bar plot. This is + the simplest way to do this:

+  $datay=array(12, +8,19,3 +,10,5); +
$bplot  += new BarPlot($datay); +
$graph->Add( +$bplot); +

+

If you compare this to the previous line examples you can see that + the only change necessary was that instead of creating a new line plot + (via the new LinePlot(...) call) we used the statement new + BarPplot().

+

The other change we should do is to make sure the X-axis have an + text-scale (it is perfectly fine to use a linear X-scale but in most + cases this is not the effect you want when you use a bar graph, see + more below). With this two simple change we will now get a bar graph as + displayed in the following image + + You can of course modify the appearance of the bar graph. So for + example to change the fill color you would use the + BarPlot::SetFillColor() method. Making this small change to the + previous example would give the expected effect as can be seen in the + next example. + +

Note: You should note from the previous two + graphs that slight change in appearance for the X-scale. The bar graphs + gets automatically centered between the tick marks when using as text + x-scale. If you were to use a linear scale they would instead start at + the left edge of the X-axis and the X-axis would be labeled with a + linear scale. As is illustrated in the (small) example below.
+
+
Figure 29: A small example with a bar graph using a linear + X-scale [src] +  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/82Pieplots.html b/html/includes/jpgraph/docs/html/82Pieplots.html new file mode 100644 index 0000000000..ceaf9a2835 --- /dev/null +++ b/html/includes/jpgraph/docs/html/82Pieplots.html @@ -0,0 +1,155 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.2 Pie plots

+

So far we have just show plots based on an X-Y coordinate system. + This is not the only types of graphs you can create with JpGraph. + Another common type is Pie plots. JpGraph supports both 2D and 3D pie + plots. For 2D pie plots there are also 2 versions, but more on that + later.

+

The main difference as compared to the X-Y plots is that to all pie + plots are added to the + PieGraph() instead of the Graph() object we used for the X-Y graphs + we have drawn so far. For this you must first include the + "jpgraph_pie.php" in your script (or "jpgraph_pie3d.php" if you want to + use 3-dimensional pies).

+

Below you cane see the code needed to create the simplest possible + pie graph just using the default settings.

+

include ( +"../jpgraph.php"); +
include (
"../jpgraph_pie.php"); +
+
$data  += array(40,60, +21,33); +
+
$graph  += new PieGraph +(300,200); +
$graph->SetShadow(); +
+
$graph->title-> +Set( +"A simple Pie plot"); +
+
$p1 = new PiePlot( +$data); +
$graph->Add( +$p1); +
$graph->Stroke(); +

+

The above code would give the following pie graph

+
+
Figure 121: The simplest possible pie graph [src]  +

+

+

There is a few things worth noting here

+
    +
  • By default all pie slices have the percentage shown just outside + the slice.
  • +
  • The colors are automatically assigned to the slices.
  • +
  • The pie have the edges marked by default
  • +
  • The first slice start at 0 degrees (3 o'clock)
  • +
+

You can change almost all aspects of appearance of the pie graphs. + For example you could change :

+ +

+

The next simplest addition we can do is to add a legend to the pie + graph. We do this by using the + SetLegends(); method. By adding the legends to the previous example + we get the following image

+
+
Figure 122: Adding a legend to the pie graph [src]  +

+

+

+

(In the figure above we also moved the center of the pie slightly to + the left to make more room for the legend box.)

+

The text for the legends can also contain printf() style format + strings to format a number. This number passed on into this string is + either the absolute value of the slice or the percentage value. How to + switch between the is describe further down in this chapter.

+

The next change you might want to change is the size and position of + the Pie plot. You can change the size with a call to + SetSize(); and the position of the center of the pie plot with a + call to SetCenter(); + The size can be specified as either an absolute size in pixels or as a + fraction of width/height (whatever is the smallest). The position of + the pie plot is specified as a fraction of the width and height.

+

To put the size and positioning API to use we will show how to put + several pie plots on the same pie graph. In the following example we + have also adjusted the legends of the slice values to use a smaller + font.

+

What we do in this example is quite simple, create 4 pie plots, make + them smaller and put them in the four corner of the graph. This will + give the result as shown in the following example.

+
+
Figure 123: Multiple pie plots in the same pie graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/831Overview.html b/html/includes/jpgraph/docs/html/831Overview.html new file mode 100644 index 0000000000..3b58f1e199 --- /dev/null +++ b/html/includes/jpgraph/docs/html/831Overview.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.1 Overview

+

Each data point in a polar plot is represented by a tuple consisting + of a radius and an angle. The polar plot itself can be either outlined + or filled. In addition each point may have a standard marker (the same + as for line and scatter plots).

+

The scale for the radius can be either linear or logarithmic.

+

A polar graph is created by creating an instance of +PolarGraph::PolarGraph(). The polar graph type inherits all the + capabilities of ordinary X-Y graphs, i.e they can have background + images, background gradients, tabbed titles and so on.

+

Polar graphs comes in two basic types, they can either show a full + 360 degree graph or a half 180 degree graph. The two examples below + show these two basic types of graphs.

+

+
+
Figure 139: A simple 360 degree polar graph [src]  +

+

+

+
+
Figure 140: The 180 degree variant polar plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/831Usinglineerrorplots.html b/html/includes/jpgraph/docs/html/831Usinglineerrorplots.html new file mode 100644 index 0000000000..7267c7a67a --- /dev/null +++ b/html/includes/jpgraph/docs/html/831Usinglineerrorplots.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.1 Using line error plots

+

A line error plot is an error plot with the addition that a line is + drawn between the average value of each error pair. You use this type + of plot the exact same way you would use an error plot. The only change + is that you must instantiated an + ErrorLinePlot() instead and make sure you have included the + "jpgraph_line.php" since the line error plot makes use of the line plot + class to stroke the line.

+

To control the various properties of the line drawn the "line" + property of the error line plot may be accessed. So, for example, if + you want the line to be 2 pixels wide and blue you would have to add + the following two lines

+  $elplot->line-> +SetWeight(2); +
$elplot->line-> +SetColor( +"blue"); +

+

to generate the graph as shown below

+
+
Figure 55: Linear error plot [src]  +

+

+

You may of course add legends to none, one or both of the line types + in the above graph. So for example if we wanted the legend "Min/Max" + for the red error bars and a legend "Average" for the blue line you + would have to add the lines

+  $errplot->SetLegend( +"Min/Max"); +
$errplot->line-> +SetLegend( +"Average"); +

+

The resulting graph will now look like (note that we are using the + default placement of the legend box)

+
+
Figure 56: Addding a legend box to the line error plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/832Adjustingtheradiusscale.html b/html/includes/jpgraph/docs/html/832Adjustingtheradiusscale.html new file mode 100644 index 0000000000..5b7962f053 --- /dev/null +++ b/html/includes/jpgraph/docs/html/832Adjustingtheradiusscale.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.2 Adjusting the radius scale

+

The radius axis can be shown in either a linear or logarithmic + scale. This is controlled, as usual, by a call to +PolarGraph::SetScale() The two examples below show the same plot in + either linear or logarithmic scale

+

+
+
Figure 141: Using a logarithmic scale [src]  +

+

+

+

+
+
Figure 142: Using a linear scale [src]  +

+

+

+

Please note that the maximum values of the scales are different.

+

By default the scale will be auto scaled depending on the data. You + can also specify a manual scale by supplying an extra argument to the + SetScale() value. The only difference from the manual scaling with the + other X-Y-graphs is that for polar graph you only specify a manual + maximum. The minimum will always be 0 for the linear scale and a scaled + value of 10 (i.e 1, 0.1, 0.001 and so on) for the logarithmic scale.

+

The plot is clipped to the plot area so if you specify a smaller + scale then the maximum value that part of the plot that are outside the + plot area will be clipped.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/833Adjustingthegridlines.html b/html/includes/jpgraph/docs/html/833Adjustingthegridlines.html new file mode 100644 index 0000000000..1d40579eff --- /dev/null +++ b/html/includes/jpgraph/docs/html/833Adjustingthegridlines.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.3 Adjusting the grid lines

+

As usual you have full freedom to select what grid lines you like to + show (and what colors they should have). There are three different + types of grid lines you may adjust. The radius minor and major grid + lines and the angle grid lines.

+

You select what grid lines to show with a call to +PolarAxis::ShowGrid() The two example below shows a logarithmic plot + with either just major grid lines or both minor and major grid lines.

+

+
+
Figure 143: Using a logarithmic scale with just major + gridlines [src] +  +

+

+

+

+
+
Figure 144: Using a logarithmic scale with both minor and + major gridlines +[src]  +

+

+

The colors of the grid lines are specified with a call to + PolarAxis::SetGridColor()

+

For the angle grid lines it is possible to specify the angle + division between each grid line with the method + PolarAxis::SetAngleStep() You specify the step distance in degrees. + By default the step size is 15 degrees.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/834Adjustingthelabelfonts.html b/html/includes/jpgraph/docs/html/834Adjustingthelabelfonts.html new file mode 100644 index 0000000000..9ad883fc78 --- /dev/null +++ b/html/includes/jpgraph/docs/html/834Adjustingthelabelfonts.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.4 Adjusting the label fonts

+

You can individually specify different fonts and colors for the + angle and the radius labels. The radius font is specified with + PolarAxis::SetFont() and the angle font is specified with a call to + PolarAxis::SetAngleFont()

+

You can adjust the color with the method +PolarAxis::SetColor() ?>

+

The following example specifies different color for the labels. it + also shows that you can add both a radial axis title as well as a + tabbed title. In this example we have also chosen not to show the frame + around the edge of the plot.

+

+
+
Figure 145: Different colors for labels, specifying both a + tabbed title as well as a axis title [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/835Adjustingthelabels.html b/html/includes/jpgraph/docs/html/835Adjustingthelabels.html new file mode 100644 index 0000000000..3493a4c10d --- /dev/null +++ b/html/includes/jpgraph/docs/html/835Adjustingthelabels.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.5 Adjusting the labels

+

As can be seen from the previous examples the angle labels have a + small superscripted "o" after each label. You can select if you like to + show this degree mark or not with a call to the + PolarAxis::SetANgleDegreeMark() method by which you can enable or + disable that mark after the angels.

+

For the radius labels all standard formatting that can be done to + the X-Y axis such as format string or format callbacks are supported.

+

A common modification for polar plots is probably to disable the + display the last label when using a 360 degree plot since the last + label will "collide" with the plot box around the plot area. It is + possible to disable the last label with a call to +Axis::HideLastTickLabel() As you can see this has been used in some + of the examples in this chapter.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/836Imagemaps.html b/html/includes/jpgraph/docs/html/836Imagemaps.html new file mode 100644 index 0000000000..21646fa8b5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/836Imagemaps.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.6 Image maps

+

If you have specified markers for the polar plot (by setting the + mark property of the plot) each marker can be a hot spot in a client + side image map. The target URL are as usual specified with the + SetCSIMTargets() as the following short code excerpt shows

+   +// Start by specifying the proper URL targets +
$targets  += array("#1","#2", ....... ); +
$polarplot  += new PoalrPlot +($data); +
$polarplot +->mark->SetType( +MARK_SQUARE); +
$polarplot +->SetCSIMTargets +(targets); +
$graph->Add( +$polarplot); +
$graph->StrokeCSIM(); +

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/837Afinalexample.html b/html/includes/jpgraph/docs/html/837Afinalexample.html new file mode 100644 index 0000000000..6672985201 --- /dev/null +++ b/html/includes/jpgraph/docs/html/837Afinalexample.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3.7 A final example

+

As a final example we show a full 360 degree polar plot with square + markers as well as background color gradient and a legend for the plot.

+
+
Figure 146: A polar plot with both legend and background + gradient fill. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/83Errorplots.html b/html/includes/jpgraph/docs/html/83Errorplots.html new file mode 100644 index 0000000000..986e938e7a --- /dev/null +++ b/html/includes/jpgraph/docs/html/83Errorplots.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3 Error plots

+

Error plots are used to visually indicate uncertainty in data + points. This is done by for each X value by giving both a minimum and a + maximum Y-value.

+

Before you can use error plots you must remember to include the file + "jpgraph_error.php" in your script.

+

The following example illustrates a simple error bar. We will have 5 + points, so we need 10 Y-values. We also would like the error bars to be + red and 2 pixels wide. All this is accomplished by creating an + ErrorPlot() in much the same way as, for example, a normal line + plot. Doing this would now give the example shown below.

+

+
+
Figure 53: A simple error bar [src]  +

+

+

You might notice that there is one displeasing esthetic quality of + this graph. The X-scale is just wide enough to just accompany the + number of error bars and hence the first bar is drawn on the Y-axis and + the and last bar just at the edge of the plot area. To adjust this you + might call the SetCenter() + method which will adjust the X-scale so it does not use the full width + of the X-axis.

+

The following example illustrates the use of this feature by + applying this technique to the previous example

+
+
Figure 54: Adjusting the X-scale not to use the full width of + the X-axis. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/83Polarplots.html b/html/includes/jpgraph/docs/html/83Polarplots.html new file mode 100644 index 0000000000..34f0ee437e --- /dev/null +++ b/html/includes/jpgraph/docs/html/83Polarplots.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.3 Polar plots

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/84Scatterplots.html b/html/includes/jpgraph/docs/html/84Scatterplots.html new file mode 100644 index 0000000000..77b174fcb0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/84Scatterplots.html @@ -0,0 +1,113 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.4 Scatter plots

+

Scatter plots are very simple; they plot a number of points + specified by their X- and Y-coordinate. Each point is stroked on the + image with a mark as with line plots. The stroked marks can also be + connected with an optional line.

Note: Even + though it is only scatter plot that was designed to be used with X,Y + plots it is perfectly possible to use use both X,Y coordinates for bar + and line plots as well.

+

Even though you would normally supply X-coordinates it is still + perfectly possible to use a text-scale for X-coordinates to just + enumerate the points. This is especially useful when using the + "Impulse" type of scatter plot as is shown below.

+

Scatter pots are created by including the jpgraph extension + "jpgraph_scatter.php" and then creating an instance of plot type of + ScatterPlot(). To specify the mark you want to use you access the mark + with the instance variable "mark" in the scatter plot. The default is + to use an unfilled small circle.

+

To create a scatter plot you will create an instance

+

A simple example using just default values will illustrate this

+

+
+
Figure 57: The simplest possible scatter plot [src]  +

+

+

We can easily adjust the size and colors for the markers to get + another effect as shown below

+
+
Figure 58: The simplest possible scatter plot with adjusted + marks [src] +  +

+

+

Another possible variant of scatter plot is impulse-scatter plots. + This is a variant of normal scatter plot where each mark have a line + from the mark to the Y=0 base line. To change a scatter plot into an + impulse scatter plot you have to call the method + SetImpuls() on the scatter plot.

+

This type of plots are often used to illustrate signals in + conjunction with digital signal processing. The following two examples + illustrates simple use of impulse plots.

+
+
Figure 59: A simple impuls plot [src]  +

+

+

The next example shows how to modify the color and width of the + impulse plot

+
+
Figure 60: A modified impuls plot [src]  +

+

+

Note: You may draw impulse graphs without + any mark by specifying the mark type as (-1) . That way only the + impulse lines will be drawn.

+

As a final touch we show two more advanced impulse graphs . In these + graphs we have used more advanced formatting for the Y-axis labels as + well as adjusted the position of the axis position.

+
+
Figure 61: In this imuplsplot we have adjusted the position + of the X-axis to the bottom and also added more decimals to the labels + on the Y-axis +[src]  +

+

+

+
+
Figure 62: In this impuls plot we have also added a lineplot + with a dotted line style. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/85Fieldplots.html b/html/includes/jpgraph/docs/html/85Fieldplots.html new file mode 100644 index 0000000000..9c79d90485 --- /dev/null +++ b/html/includes/jpgraph/docs/html/85Fieldplots.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.5 Field plots

+

A variant of scatter plot is the so called Field Plots this + is basically a scatter plot where each scatter point is an arrow with a + direction between 0 to 359 degrees. This effectively allows the + visualization of 3 parameters at each point (x,y,angle). As an + additional bonus there is also possible to define a callback for each + scatter plot to also define the color for each point.

+

To create a field plot you create an instance of +FieldPlot in the same way as you created a normal scatter plot. The + arguments to this method are Y-coordinate, X-coordinate and angle. To + specify a callback you use +FieldPlot::SetCallback()

+

The following example (and code) illustrates the usage of the field + plot type.

+

+
+
Figure 63: Example of the Field plot type [src]  +

+

+

In addition to the parameters mentioned above you can also adjust + both the general size of the arrow and also the specific size of the + arrowhead. The arrow size is specified in pixels and the arrow head is + specified as an integers between 0 and 10. These sizes are specified + with a call to +FieldPlot::arrow::SetSize()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/861StockCharts.html b/html/includes/jpgraph/docs/html/861StockCharts.html new file mode 100644 index 0000000000..c5ffa3dc7b --- /dev/null +++ b/html/includes/jpgraph/docs/html/861StockCharts.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.6.1 Stock Charts

+

Stock charts is used to display data values where one is interested + in 4 different values for each data point. This could for example be + used to display a stocks open,close, min and max value during a + specific day. Hence the name Stock chart (or Stock plot).

+

The figure below illustrates a sample Stock chart plot

+
+
Figure 64: A simple stock plot [src]  +

+

+

For this type of plot the Y-data array must be consist of a number + of quadruples of data where each quadruple consists of + (open,close,min,max). The open and close values determine the min max + for the middle bar and the min,max determine the end points of the + "error-lines" at the top and bottom of of each bar.

+

Note that the data follows the following rules

+
    +
  • min < max
  • +
  • min < min(open.close)
  • +
  • max > max(open,close)
  • +
+

To separate the two cases where "open > close" or "open < close " + different colors are used. These colors are specified with the +SetColor() method. By default a positive bar (close > open) have a + fill color of white and for the negative case where (close < open) the + bars have a red color.

+

You can specify the width of the bar by setting the width (in + pixels) with a call to the method +SetWidth()

+

The final variation of stock plots you can have is to determine + whether or not the end point for the min,max lines should have the + horizontal line marking the end of the line or not. This can be + adjusted with a call to method +HideEndLine().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/862BoxPLotsStockchartswithamedianline.html b/html/includes/jpgraph/docs/html/862BoxPLotsStockchartswithamedianline.html new file mode 100644 index 0000000000..cb99deb831 --- /dev/null +++ b/html/includes/jpgraph/docs/html/862BoxPLotsStockchartswithamedianline.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.6.2 BoxPLots : Stock charts with a median line

+

A minor variation of stock charts is the "BoxPlot()" this is almost + the same as StockPlot() but with the very small difference that in + addition to the open,close,min, max values you also specify a median + value . The median lies between the open and close value and is + illustrated as a horizontal line within the bar.

+
+
Figure 65: A simple box type stock plot [src]  +

+

+

You may modify the median line color for positive and negative data + points / bars by using the +SetMedianColor() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/863ImagemapsforBoxandStockcharts.html b/html/includes/jpgraph/docs/html/863ImagemapsforBoxandStockcharts.html new file mode 100644 index 0000000000..97c0b362cf --- /dev/null +++ b/html/includes/jpgraph/docs/html/863ImagemapsforBoxandStockcharts.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.6.3 Image maps for Box and Stock charts

+

In the same way as for other plots you may associate an image map + with these plots. The "hot" area for each plot is the mid "bar" + section. In the same way as other plot types you use the + SetCSIMTargets() to set the URLs you want to use.

+

These plot types, though normally used without explicit X-values, + can of course handle a supplied X-coordinate array without any problem.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/86BoxandStockcharts.html b/html/includes/jpgraph/docs/html/86BoxandStockcharts.html new file mode 100644 index 0000000000..00f7679275 --- /dev/null +++ b/html/includes/jpgraph/docs/html/86BoxandStockcharts.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.6 Box and Stock charts

+

JpGraph offers two variation on what is usually known as stock + charts, candle-charts or box plot.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/87Combiningdifferentgraphtypes.html b/html/includes/jpgraph/docs/html/87Combiningdifferentgraphtypes.html new file mode 100644 index 0000000000..01295e85a9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/87Combiningdifferentgraphtypes.html @@ -0,0 +1,108 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.7 Combining different graph types

+

It is perfectly legal to add several different plot types to the + same graph. It is therefore possible to mix line plots with (for + example) filled bar graphs. What you should keep in mind doing this is + the order in which these plots are stroked to the image since a later + stroke will overwrite a previous one. All plots are stroked in the + order you add them, i.e. the first plot added will be stroked first. + You can therefore control which plot is placed in the background and + which one is placed in the foreground by the order you add them to the + plot.

+

To start simple we just mix a filled line plot with a non-filled + line plot as the following example shows.

+

+
+
Figure 66: Mixing filled and non-filled line plots in the + same graph +[src]  +

+

+

+

Let's now go to something a little bit more complicated. How to mix + bar and line graphs. Let's just take one of our previous bar graphs and + add a line plot to it and see what happens.

+

+
+
Figure 67: Adding a line to a bar graph [src]  +

+

+

Not too bad. But we can't see the line so we change the order in + which we add the lines to the graph and sees what happens.

+
+
Figure 68: Adding a line to a bar graph, in different orderv2 + [src]  +

+

+

+

If you want the line points to be aligned in the center of the bars + you can accomplish this is two ways.

+

If you use a text scale then you need to call the + LinePlot::SetBarCenter()

+
+
Figure 69: Centering the line point in the middle of the bars + using LinePlot::SetBarCenter() [src]  +

+

+

+

You can also use an integer scale. This places both + the bar and the line points centered at the tick marks. As the + following example will show

+

+
+
Figure 70: Using a linear scale [src]  +

+

+

Note: In this example we also have + illustrated the fact that it is possible to add text labels to a linear + (or integer) scales as well.

+

As a final example we show how you can combine a scatter plot and a + line plot which could be used to illustrate a regression line fitting.

+
+
Figure 71: Combining a scatter plot and a line plot [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/88Specifyingthescalemanually.html b/html/includes/jpgraph/docs/html/88Specifyingthescalemanually.html new file mode 100644 index 0000000000..1671d57c0f --- /dev/null +++ b/html/includes/jpgraph/docs/html/88Specifyingthescalemanually.html @@ -0,0 +1,106 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.8 Specifying the scale manually

+

Normally the automatic scaling should be doing an adequate job in + most circumstances but there might be cases where you like to manually + set the scale. For example if you have several graphs where you like to + be able to easily compare them and therefore want them all to have the + same scale.

+

To specify a manual scale you have to add arguments to the standard Graph::SetScale() method. + So to specify that you want an Y-scale between 0 and 100 you need to + write

+ $graph-> +SetScale( +"textlin",0,100 +);

+

When you specify a scale manually there is one additional thing you + need to decide. How the tick marks should be positioned. You have three + choices

+
    +
  1. Let JpGraph decide suitable tick marks honoring the exact scale you + specified. This is the default behavior if you don't do anything + else.
  2. +
  3. Allow JpGraph to slightly adjust your specified min and max values. + With the default method, depending on the min and max values, the end + and start of the scale might not fall on an exact tick mark. For + esthetic reasons you might still want the last/first tick mark to fall + on the edges of the scale. By calling + LinearScale::SetAutoTicks() you tell JpGraph to make the smallest + necessary adjustment of the end/start points so that they fall on an + exact tick mark.
  4. +
  5. Manually specify the tick marks with a call to + LinearTicks::Set() For example
    +  $graph->SetScale( +"textlin",0,100 +); +
    $graph->yscale-> +ticks->Set(10 +,5);
    +

    Will set the major tick marks every at 0,10,20,.. And every minor + tick mark in between (0,5,10,15,20,25,...).

    +
  6. +
+

The three images below illustrates the difference between the + possibilities of ticks for a manual scale.

+
+
Figure 72: Manual scale, manual ticks major=7 minor=2 [src]  +

+

+

+

+
+
Figure 73: Manual scale, automatic ticks with exact limits [src]  +

+

+

+

+
+
Figure 74: Manual scale, automatic ticks where we allow + adjustments of the limits +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/89Adjustingtheautomatictickmarks.html b/html/includes/jpgraph/docs/html/89Adjustingtheautomatictickmarks.html new file mode 100644 index 0000000000..fd41518ece --- /dev/null +++ b/html/includes/jpgraph/docs/html/89Adjustingtheautomatictickmarks.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8.9 Adjusting the automatic tick marks

+

You can adjust the automatic tick marks by telling JpGraph how dense + you want them to be. You use the + Graph::SetTickDensity() method. You can set the density setting in + four steps

+
    +
  • TICKD_VERYSPARSE, Very few ticks
  • +
  • TICKD_SPARSE, Few ticks
  • +
  • TICKD_NORMAL, Standard number of ticks
  • +
  • TICKD_DENSE, Large number of ticks
  • +
+

Taking the previous example with the manual scale but automatic + ticks and using a denser ticks setting gives the following result

+
+
Figure 75: Manual scale with automatic ticks but with a + denser tick settings. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8WorkingwithnonXYplots.html b/html/includes/jpgraph/docs/html/8WorkingwithnonXYplots.html new file mode 100644 index 0000000000..3ee20f3b50 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8WorkingwithnonXYplots.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8 Working with non X,Y-plots

+

Non X,Y plots includes

+
    +
  • Pie plots (2D and 3D)
  • +
  • Radar plots
  • +
  • Polar plots
  • +
  • Gantt charts
  • +
+

The fundamental difference is that these classes makes use of an + extended version of the basic Graph class. Therefor you can not mix X,Y + plots with non-X,Y plots. For example it is not possible to mix a line + graph with a Polar graph.

+
    +
  • To create 2d or 3d pie plots you must use the PieGraph class
  • +
  • To create radar plots you must use the RadarGraph() class
  • +
  • To create radar plots you must use the PolarGraph() class
  • +
  • To create gantt plots you must use the GanttGraph() class
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/8WorkingwithorthogonalXYplots.html b/html/includes/jpgraph/docs/html/8WorkingwithorthogonalXYplots.html new file mode 100644 index 0000000000..f16753b567 --- /dev/null +++ b/html/includes/jpgraph/docs/html/8WorkingwithorthogonalXYplots.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

8 Working with orthogonal X,Y-plots

+

The purpose of this chapter is to introduce the basic concepts of + creating scripts with JpGraph that will generate various types of basic + plots. Throughout the text it is possible to view the exact source for + all the graphs by clicking on the "[src]" link in the caption of the + image shown. This will open the image together with the source in a + separate window. This way it is easy to compare the actual image with + the script that generated the image.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/910Groupingactivities.html b/html/includes/jpgraph/docs/html/910Groupingactivities.html new file mode 100644 index 0000000000..39a30768de --- /dev/null +++ b/html/includes/jpgraph/docs/html/910Groupingactivities.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.10 Grouping activities

+

It is common to group activities. We have used this feature in the + examples of constrains. There is no special type for activity bars that + are used to illustrate grouping. The common way of illustrating this + (as have been used above) is to add "half" a triangle marker at both + ends of the bar. The special provision that JpGraph does is that if you + add a left or right marker of type MARK_LEFTTRIANGLE or + MARK_RIGHTTRIANGLE those triangles will be drawn under the bars to give + the effect as show in the examples above. In the example above we also + have made the grouping bars have slightly less heigh since the end + triangles will visually "grow" the bar.

+

So to get the effect we want for a group bar we have to use the two + lines:

+ $groupbar-> +leftMark-> +SetType( +"MARK_LEFTTRIANGLE"); +
$groupbar +->rightMark->SetType( +"MARK_RIGHTTRIANGLE") +

+

+

As of the current version There is not yet any formatting support to + accomplish the effect of indentation for the titles so this is + accomplished by using a fixed width font and adding spaces in front of + the title.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9111Addingatitleforthecolumns.html b/html/includes/jpgraph/docs/html/9111Addingatitleforthecolumns.html new file mode 100644 index 0000000000..ca333d8b8f --- /dev/null +++ b/html/includes/jpgraph/docs/html/9111Addingatitleforthecolumns.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.11.1 Adding a title for the columns

+

Precisely as before you can also have a title spanning all the + columns. This title is specified with the property tableTitle of + the scale. Specifying a table title will automatically adjust the + height of the column titles to fit the table title. The small code + snippet below shows how to add a title.

 $graph +->scale->tableTitle-> +Set('Phase 1'); +
$graph->scale-> +tableTitle-> +SetFont( +FF_ARIAL, +FS_NORMAL,12); +
$graph->scale-> +SetTableTitleBackground( +'darkgreen@0.6'); +
$graph->scale-> +tableTitle-> +Show(true);
+

+

A full example of this is shown below

+
+
Figure 165: Adding a column titles stratching all title + columns. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9112SpecifyingCSIMentriesforcolumntitles.html b/html/includes/jpgraph/docs/html/9112SpecifyingCSIMentriesforcolumntitles.html new file mode 100644 index 0000000000..5355a2bc88 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9112SpecifyingCSIMentriesforcolumntitles.html @@ -0,0 +1,49 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.11.2 Specifying CSIM entries for column titles +

+

In exactly the same way as for a single title it is possible to + specify individual CSIM targets for each of the title columns. This is + accomplished by specifying an array for both the target and the alt + text instead of a single string as arguments for SetCSIMTarget() + The following code snippet shows how to specify that.

+  $bar +->title->SetCSIMTarget(array('sometarget1.html','sometarget1.html'), +
array(
'alttext1' +,'alttext2'));

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/911Simpleradarplots.html b/html/includes/jpgraph/docs/html/911Simpleradarplots.html new file mode 100644 index 0000000000..cf09a14d7b --- /dev/null +++ b/html/includes/jpgraph/docs/html/911Simpleradarplots.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1.1 Simple radar plots

+

Let's start by creating a very simple radar plot based on 5 data + points using mostly default values.

+

As the first thing you must remember to include the extension module + that contains the radar plot. "jpgraph_radar.php".

+

A very simple radar plot is created by the code

+(File: radarex1.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_radar.php"); +
     +
// Some data to plot +
$data  += array(55,80, +46,71,95 +); +
     +
// Create the graph and the plot +
$graph  += new RadarGraph +(250,200, +"auto"); +
$plot  += new RadarPlot +($data); +
+
// Add the plot and display the graph +
$graph->Add( +$plot); +
$graph->Stroke(); +
?>

+

and would give the result

+
+
Figure 111: A first very simple radar plot using default + settings [src] +  +

+

+

To change the size and position of the radar graph is similar to the + pie plot and you do it by using the methods + SetSize() and + SetCenter()

+

If you want a filled radar plot you need to specify the fill color + with the method + SetFillColor() The following example shows these methods in action

+
+
Figure 112: Changing size, position and adding fill color to + the radar plot. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/911Usingmultiplecolumnsastitles.html b/html/includes/jpgraph/docs/html/911Usingmultiplecolumnsastitles.html new file mode 100644 index 0000000000..07e52bfcaa --- /dev/null +++ b/html/includes/jpgraph/docs/html/911Usingmultiplecolumnsastitles.html @@ -0,0 +1,164 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.11 Using multiple columns as titles

+

It is often of interest not only to show one title for a gantt bar + but often one wants to show, title, start date, end date, duration or + effort and so on. Up until now we have, to keep things simple only + shown a single title for each activity. We will now show you how you + can specify an arbitrary number of columns as titles for a Gantt chart + as well as adding icons in the graph columns.

+

First out is an example to help visualize what we will achieve

+
+
Figure 164: A Gantt chart with multiple columns [src]  +

+

+

To use multiple columns there is two steps. First you need to set + the titles (name, color, fonts etc). Thereafter you need to add the + title columns for each individual bar.

+

To set the columns you will have to work with the Activity + information property of the scale. The following code excerpt show + this

+ $graph->scale->actinfo +->SetColTitles +( +
    array(
'Note' +,'Task','Duration', +'Start', +'Finish'),array( +30,100));
+

+

You will notice two things. We fist specify the titles using an + array. We have also specified a second array with the numbers 30 and + 100. This is an optional array that specifies the minimum width of, in + this case, the first two columns. By default the columns will be wide + enough to hold the widest text string in the column. However for + esthetic reasons you might sometimes want to increase the minium width. + This is what we have done here for the first two columns.

+

Furthermore you can also adjust the background colors and the style + and colors of the vertical dividing grid lines. In the previous image + we used the lines

 $graph-> +scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +
$graph->scale-> +actinfo-> +SetFont( +FF_ARIAL, +FS_NORMAL,10); +
$graph->scale-> +actinfo->vgrid->SetStyle +('solid'); +
$graph->scale-> +actinfo->vgrid->SetColor +('gray');

+

The style for the grid lines can also be "dashed", "dotted" or + "longdashed" as in other line formatting contexts within the library. + You can also adjust if you would like the small "3D" effect in the + titles. By default this is enabled. You can easily turn this of with a + call to

+ $graph->scale->actinfo +->SetStyle(ACTINFO_2D); +

+

To adjust the colors of the vertical dividing lines in the title the + method SetColor() is used as in + "$graph->scale->actinfo->SetColor('navy');".

+

The second thins is to actually populate the columns. This is done + (of course) as you add the activity bars to the graph. Previous we just + used a string as the title when we wasn't using columns. By simply + replacing this string with an array we specify the content of the + columns.

+

For example to specify two column titles we just create a + hypothetical Gantt bar as In the full example above we put all this in + arrays to make for better coding practice since we create several bars.

+

In addition to ordinary text you can also add an image or any of the + predefined icons available. In order to add that in a column you first + create an instance of IconImage() and then specify that instance + instead of the text. So in the previous code snippet if we wanted a + "open folder" image in the first column we would change the lines to

+ $iconopen = new  +IconImage( +GICON_FOLDEROPEN, +0.6); +
$title2=""; +
$bar  += new GanttBar +(0,array($iconopen, +$title2), +"2003-11-23", +"2003-12-05"); +

+

The available builtin icons are

+
    +
  • GICON_WARNINGRED
  • +
  • GICON_TEXT
  • +
  • GICON_ENDCONS
  • +
  • GICON_MAIL
  • +
  • GICON_STARTCONS
  • +
  • GICON_CALC
  • +
  • GICON_MAGNIFIER
  • +
  • GICON_LOCK
  • +
  • GICON_STOP
  • +
  • GICON_WARNINGYELLOW
  • +
  • GICON_FOLDEROPEN
  • +
  • GICON_FOLDER
  • +
  • GICON_TEXTIMPORTANT
  • +
+

In addition you can also use any of you own images if you specify + the argument as a string, for example

+  $myicon IconImage( +'myicon.png'); +

+

If you wonder, the second argument in the IconImage() call is + an optional scaling factor which you can use to adjust the size of the + image.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9121Addingatabletitle.html b/html/includes/jpgraph/docs/html/9121Addingatabletitle.html new file mode 100644 index 0000000000..f401fc217f --- /dev/null +++ b/html/includes/jpgraph/docs/html/9121Addingatabletitle.html @@ -0,0 +1,69 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.1 Adding a table title

+

The (default) white area in the top left of the gantt table may have + a title. This is accessed by the 'tableTitle' property of the gantt + scale. Using this is straightforward as the following lines show.

+  $graph +->scale->tableTitle-> +Set( +"(Rev: 1.22)"); +
$graph->scale-> +tableTitle-> +SetFont( +FF_FONT1, +FS_BOLD); +
$graph->scale-> +SetTableTitleBackground( +"silver"); +
$graph->scale-> +tableTitle-> +Show();
+

+

The example lines above also changes the default white background to + silver. Adding these lines to the previous example gives the following + result:

+
+
Figure 166: Adding a table title. [src]  +

+

+

From the above example you might notice that the width of the left + column (which holds all the titles) have automatically adjusted itself + to make the table title fit.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9122Modifyingthedividerlines.html b/html/includes/jpgraph/docs/html/9122Modifyingthedividerlines.html new file mode 100644 index 0000000000..b18a771d39 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9122Modifyingthedividerlines.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.2 Modifying the divider lines

+

The vertical and horizontal lines between the titles and the bars + can be modified by accessing the 'divider' and 'dividerh' properties of + the scale. Again, this is straightforward as the following example + shows:

+ $graph->scale->divider +->SetWeight(3); +
$graph->scale-> +divider-> +SetColor( +"navy"); +
$graph->scale-> +dividerh-> +SetWeight(3); +
$graph->scale-> +dividerh-> +SetColor( +"navy"); +

+

The effect of this is shown in Figure 167 below

+
+
Figure 167: Modifying the dividing line [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9123Modifyingtheboxaroundtheplot.html b/html/includes/jpgraph/docs/html/9123Modifyingtheboxaroundtheplot.html new file mode 100644 index 0000000000..398a3ebbf8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9123Modifyingtheboxaroundtheplot.html @@ -0,0 +1,55 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.3 Modifying the box around the plot

+

In a similar manner to the other plots in JpGraph you modify the Box + round the plot with the standard graph method 'SetBox()' as in

+  $graph +->SetBox(true, +"navy",3)
+

+

which will result in a thicker plot box around the area as shown + below

+
+
Figure 168: Modifying the box around the plotarea [src]  +

+

+

Note: You might notice the slight + discrepancy in design that here you use a method and in the previous + cases accessed a property which you modified. This is the unfortunate + affect of the evolving design and development of this library once it + was realised that the original design could be improved upon.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9124Horizontalgridsandalternatinglinecolors.html b/html/includes/jpgraph/docs/html/9124Horizontalgridsandalternatinglinecolors.html new file mode 100644 index 0000000000..0b443de062 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9124Horizontalgridsandalternatinglinecolors.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.4 Horizontal grids and alternating line colors +

+

In order to make large charts easier to read it is possible to + specify alternating an horizontal grid and optional alternating line + colors in the background for Gantt charts. The horizontal grid is + accessed through the Graph::hgrid property and the line (used in + the grid) is accessed through the Graph::hgrid::line + sub-property

+

In order to specify the alternating line colors the + SetRowFillColor() method is used. For example, to use alternating + blue background with blue grid line the following lines would have to + be added to the graph script

+   +// Setup a horizontal grid +
$graph->hgrid-> +Show(); +
$graph->hgrid-> +line->SetColor('lightblue' +); +
$graph->hgrid-> +SetRowFillColor( +'darkblue@0.9'); +

+

Below is an example of a Gantt graph using this formatting

+
+
Figure 169: Adding a horizontal grid to the graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9125AddingiconstoGanttgraphs.html b/html/includes/jpgraph/docs/html/9125AddingiconstoGanttgraphs.html new file mode 100644 index 0000000000..a01c5f527c --- /dev/null +++ b/html/includes/jpgraph/docs/html/9125AddingiconstoGanttgraphs.html @@ -0,0 +1,54 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.5 Adding icons to Gantt graphs

+ As is illustrated in the image above it is also possible (just like for + normal Graph) to add small images (or icons) to a Gantt graph by + creating an IconPlot() instance and then adding it to the graph. In the + image above the following lines were used to add the small image of + "tux" in the left lower corner
+  $icon = new IconPlot( +'penguin.png', +0.01,0.95,1 +,15); +
$icon->SetAnchor( +'left', +'bottom'); +
$graph->Add( +$icon);
+
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9126Adjustingthemarginswithautosizing.html b/html/includes/jpgraph/docs/html/9126Adjustingthemarginswithautosizing.html new file mode 100644 index 0000000000..0ebb7820b2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9126Adjustingthemarginswithautosizing.html @@ -0,0 +1,48 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12.6 Adjusting the margins with auto-sizing

+ As of version 1.17 it is possible to use Graph::SetMargin() to specify + the margin for a Gantt graph even when the vertical height is + determined automatically. For example to generate a graph with no left, + right or bottom margin the following lines would be needed
+  $graph  += new GanttGraph +(500); +
$graph->SetMargin( +0,0,30 +,0);
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/912MoregeneralGanttformatting.html b/html/includes/jpgraph/docs/html/912MoregeneralGanttformatting.html new file mode 100644 index 0000000000..1267f8a3a8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/912MoregeneralGanttformatting.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.12 More general Gantt formatting

+

In this section we will show a few more way by which you may + customize the gantt chart itself. This includes

+
    +
  • Adding a table title (not to be confused with the graph title)
  • +
  • Adjusting appearance of the various lines in the bar chart
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/912Specifyingtitlesfortheaxisandlegendsfortheplots.html b/html/includes/jpgraph/docs/html/912Specifyingtitlesfortheaxisandlegendsfortheplots.html new file mode 100644 index 0000000000..13a57fa784 --- /dev/null +++ b/html/includes/jpgraph/docs/html/912Specifyingtitlesfortheaxisandlegendsfortheplots.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1.2 Specifying titles for the axis and legends for + the plots

+

We normally would like something more meaningful as description of + each axis than it's number. Specifying the titles are accomplished + through the use of the method SetTitles() of the graph. Let's say that + each axis corresponds to a month. We could then use the code

+  $titles  += $gDateLocale +->GetShortMonth +(); +
$graph->SetTitles( +$titles); +

+

As you can see the way radar plot is constructed will assign the + titles (and plot points) in a counter-clockwise direction. If you want + them in clock-wise order you will have to inverse your input data array + as well as the title array.

+

To specify a legend you (as with the other plot) make use of the + SetLegend(); method on each radar plot.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/913Addinggridlinetotheradarplot.html b/html/includes/jpgraph/docs/html/913Addinggridlinetotheradarplot.html new file mode 100644 index 0000000000..fc23cecf3b --- /dev/null +++ b/html/includes/jpgraph/docs/html/913Addinggridlinetotheradarplot.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1.3 Adding grid line to the radar plot

+

Each major tick mark can also be connected together to create a + grid. The grid is accessed through the 'grid' property of the graph. To + enable the grid and set the line style to "dotted" you would have to + add the lines

+ $graph->grid->Show +(); +
$graph->grid-> +SetLineStyle( +"dotted"); +

+

and would result in the following graph

+
+
Figure 113: Adding dotted gridlines to the graph [src]  +

+

+

By design the plot is above the grid line but beneath the axis in + image depth, hence some part of the grid lines are hidden.

+

To have the grid lines more "visible" just change their color, say + to, dark red by invoking the SetColor() method on the grid lines which + would give the following result

+

Another simple change we could do would be to just change the + background color of the radar graph. This is (not surprisingly) done by + a call to the method SetColor() invoked on the graph object.

+
+
Figure 114: Changing the background color [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/913SimplifyingthedrawingofGanttgraphs.html b/html/includes/jpgraph/docs/html/913SimplifyingthedrawingofGanttgraphs.html new file mode 100644 index 0000000000..93b14d3757 --- /dev/null +++ b/html/includes/jpgraph/docs/html/913SimplifyingthedrawingofGanttgraphs.html @@ -0,0 +1,140 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.13 Simplifying the drawing of Gantt graphs

+

As we have shown in the previous examples constructing a Gantt chart + consists of a number of repetitive tasks; Create the individual + activity bars and add them to the graph.

+

Now when you have a basic understanding of how this works you are + ready to appreciate a small helper method. +GanttGraph::CreateSimple(). This method takes a few arrays of data + which specifies you Gantt chart and then constructs this chart. By + using this method you sacrifices a few adjustment possibilities for + simplicity. This method is nothing magical it just takes the data for + the activities,(start and end date, titles, progress, any constrains + and so on) and constructs the activities and adds them to the graph.

+

The activities are specified in data array which for each activity + have the following fields

+
    +
  • What row the activity should be on
  • +
  • Activity type, controls the appearance. Can be one of +
      +
    1. ACTYPE_NORMAL, A standard activty bar
    2. +
    3. ACTYPE_GROUP, A Grouping bar
    4. +
    5. ACTYPE_MILESTONE, A milestone
    6. +
    7. +
    +

    +
  • +
  • Title text
  • +
  • Start date
  • +
  • End date (NOT FOR Milestones!)
  • +
  • Caption
  • +
+

+

So for example to create a Gantt chart consisting of two activities + which are grouped and a milestone one would have to use something + similar to the following code

+

+ $data = array( +
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26", +"2001-11-23", +""), +
  array(
1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26", +"2001-11-13", +"[KJ]"), +
  array(
2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20", +"2001-11-22", +"[EP]"), +
  array(
3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23", +"M2") ); +
+
// Create the basic graph +
$graph  += new GanttGraph +(); +
$graph->title-> +Set( +"Gantt Graph using CreateSimple()"); +
+
// Setup scale +
$graph->ShowHeaders( +GANTT_HYEAR  +GANTT_HMONTH  +GANTT_HDAY  +GANTT_HWEEK); +
$graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
+
// Add the specified activities +
$graph->CreateSimple( +$data); +
+
// .. and stroke the graph +
$graph->Stroke(); +

+

This will then show up as

+
+
Figure 170: Using the simplified way via CreateSimple() + method +[src]  +

+

+

You may (slightly) modify the appearance of the simple Gantt charts + by means of the methods GanttGraph::SetSimpleFont() and GanttGraph::SetSimpleStyle() But not anything else, remember + that the purpose with this way of constructing graphs is to be simple. + If you need full advanced control you have to construct all the + activities in the "normal" way.

+

You can also specify constrains and progress for each bar by + supplying additional data arrays to GanttGraph::CreateSimple().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/914AddingCSIMClientsideImageMapstoGanttcharts.html b/html/includes/jpgraph/docs/html/914AddingCSIMClientsideImageMapstoGanttcharts.html new file mode 100644 index 0000000000..4377e594ad --- /dev/null +++ b/html/includes/jpgraph/docs/html/914AddingCSIMClientsideImageMapstoGanttcharts.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.14 Adding CSIM (Client side Image Maps) to Gantt + charts

+

Gantt charts can have independent (different targets) hot spots in + both the activities and in the associated labels for each activity.

+

You specify the target and the associated "Alt" text for an activity + bar by calling the + GanttBar::SetCSIMTarget() and + GanttBar::SetCSIMAlt()

+

In a similar way you set the target and Alt texts for the activity + title as the following code extract shows.

 $bar +->SetCSIMTarget +("http://localhost/abc/" +); +
$bar->SetCSIMAlt( +"Alt Text for the bar"); +
$bar->title-> +SetCSIMTarget( +"http://localhost/abc"); +
$bar->title-> +SetCSIMAlt( +"Alt Text for the title"); +

+

The above code assumes that your activity is available in the + variable 'bar'. In the example directory there is a complete example of + how to use CSIM together with Gantt charts in the "ganttcsimex1.php" + file. (Please note that this example makes use of the simplified Gantt + chart specification using the CreateSimple() method.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/914Addingseveralplotstothesameradargraph.html b/html/includes/jpgraph/docs/html/914Addingseveralplotstothesameradargraph.html new file mode 100644 index 0000000000..1d96362085 --- /dev/null +++ b/html/includes/jpgraph/docs/html/914Addingseveralplotstothesameradargraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1.4 Adding several plots to the same radar graph +

+

You can easily create several radar plot which are added to the same + radar graph. The thing to remember is that if you use filled radar + plots and they overlap each other that the order which they are added + will be the order they are drawn.

+

A simple example of this is shown below

+
+
Figure 115: Several radar plots in one radar graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/915Addingconstrainsbetweenyouractivities.html b/html/includes/jpgraph/docs/html/915Addingconstrainsbetweenyouractivities.html new file mode 100644 index 0000000000..8e5ddf520d --- /dev/null +++ b/html/includes/jpgraph/docs/html/915Addingconstrainsbetweenyouractivities.html @@ -0,0 +1,92 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.15 Adding constrains between your activities

+

With Gantt charts there is often the need to illustrate constrains + between one or several activities. One of the most common constrain is + that on activity can't start before an other activity finish.

+

JpGraph support visualizing the following types of constrains

+
    +
  • Start to End
  • +
  • Start to Start
  • +
  • End to Start
  • +
  • End to End
  • +
+

An example will clarify how to specify a constrain between two + activities.

+

Assume that we start with the Gantt schema as illustrated below

+
+
Figure 171: The original Gantt schema we wich to add + constrains to +[src]  +

+

+

We would now like to add the constrains that the activity "Label 3" + cant start before activity "Label 2" has finished and that the + milestone "Phase 1 done" is depending on when activity "Label 3" is + done.

+

The principle of adding constrains is that you for each activity you + want to have a constrain you have to tell to what other activity this + constrain should be to. That other activity is specified by telling on + what row that activity lies. Depending on what type of constrain, e.g. + Start-to-End, an arrow will now connect the two activities in correct + way.

+

The way to do this is to call the + SetConstrain() method on the activity. In this method you specify + the type of constrain as well as to what other activity this constrain + should be to. If you read the class reference you can also see that you + can specify the type and size of arrow used. For now we will just use + the default sizes and type.

+

So for example to add an End-To-Start constrain between "Label 2" + and "Label 3" you could write

+  $bar2-> +SetConstrain(2,CONSTRAIN_ENDSTART)
+

+

The first parameter in the call above "2" is the row of the target + activity (i.e. the row where "Label 3") activity is. In the example + below we have added the constrains we wanted.

+
+
Figure 172: Adding constrains to a gantt chart [src]  +

+

+

A note: The actual path followed by the arrow is controlled by some + heuristics to make it clear what the constrain is. It has been a design + decision that in order to keep the API simple the user has no further + detailed controlled on the actual path followed. However, in future + version the heuristics may be extended and provide some + user-controllable parameters.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/915Addingplotmarksiradargraphs.html b/html/includes/jpgraph/docs/html/915Addingplotmarksiradargraphs.html new file mode 100644 index 0000000000..df1f191bff --- /dev/null +++ b/html/includes/jpgraph/docs/html/915Addingplotmarksiradargraphs.html @@ -0,0 +1,44 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1.5 Adding plotmarks i radar graphs

+

In exactly the same way as for line graphs it is possible to add + plot marks in radar plots. The mark property is accessed through the + RadarPlot::mark The example below adds a red ball as a marker.

+
+
Figure 116: Adding plotmarks to a radar plot [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9161Showingonlypartofthegraph.html b/html/includes/jpgraph/docs/html/9161Showingonlypartofthegraph.html new file mode 100644 index 0000000000..d9a1064064 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9161Showingonlypartofthegraph.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.16.1 Showing only part of the graph

+

You can choose to only display a vertical slice of the overall Gantt + chart by explicitly specifying a date range with the method + GanttGraph::SetDateRange(). This will cap any bars to only be displayed + in between the start and end date given as parameters. For example + specifying

+ $graph-> +SetDateRange( +"2001-12-20", +"2002-01-20"); +

+

will show the part of the Gantt chart between the 20 Dec 2001 and 20 + of January 2002. Please note that the format depends on the locale + setting.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9162Specifyingstartdayofweek.html b/html/includes/jpgraph/docs/html/9162Specifyingstartdayofweek.html new file mode 100644 index 0000000000..46df99b2e9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9162Specifyingstartdayofweek.html @@ -0,0 +1,38 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.16.2 Specifying start day of week

+

You can set the week start day with a call to + GanttScale::SetWeekStart(). This method takes an integer [0,6] as input + which represents the start day of the week, 0 means Sunday, 1 Monday, 2 + Tuesday and so on. The default is to start the week on Monday.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/916Advancedformatting.html b/html/includes/jpgraph/docs/html/916Advancedformatting.html new file mode 100644 index 0000000000..71190f6d1a --- /dev/null +++ b/html/includes/jpgraph/docs/html/916Advancedformatting.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.16 Advanced formatting

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/917Localizing.html b/html/includes/jpgraph/docs/html/917Localizing.html new file mode 100644 index 0000000000..ed79867402 --- /dev/null +++ b/html/includes/jpgraph/docs/html/917Localizing.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.17 Localizing

+

Depending on your installation of PHP you might have support for + several locales. By default the locale is set up to use the default + locale on the server.

+

To specifically set a locale you specify the wanted locale with a + locale string (ala standard PHP), for example American English is + specified with the string 'EN_US', British English with 'EN_UK' 'nl_NL' + for Dutch and so on. If your current installation does not support the + specified locale an error message will be given.

+  $graph +->scale->SetDateLocale( +"se_SE"); +

+

The result is displayed below.

+
+
Figure 173: Using swedish locale. (Can you spot the + difference from English?) +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9181Enablingantialiasedlines.html b/html/includes/jpgraph/docs/html/9181Enablingantialiasedlines.html new file mode 100644 index 0000000000..e364246040 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9181Enablingantialiasedlines.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.18.1 Enabling anti-aliased lines

+

Anti-aliased lines are enabled by calling the method + SetAntiAliasing() in the + Image class in the script where you want to use anti-aliasing.

+

The anti-aliasing for lines works by "smoothing" out the edges on + the line by using a progressive scale of colors interpolated between + the background color and the line color.

+

Note: The algorithm used for anti-aliasing + of lines is quite simple. It would be possible to achieve even better + result by doing some real 2D signal processing. However, doing real + time 2D signal processing on a HTTP server would be foolish so the + design is deliberately kept simple. To achieve best visual result + always use a dark line color on a light background.

+

An example will show that this, quite simple algorithm, gives a + reasonable good result. The figures below shows a radar plot with and + without anti-aliasing.

+

+
+
Figure 174: Spiderplot without anti-aliasing [src]  +

+

+

+

+
+
Figure 175: Spiderplot with anti-aliasing [src]  +

+

+

+

One thing you need to keep in mind when deciding to use + anti-aliasing is that it could have potentially a dramatic effect on + the time it takes to generate the image. Line drawing with + anti-aliasing turned on is roughly 8 times slower than the normal line + drawing so treat this feature wisely.

+

Furthermore there are a couple of "gotchas" you should be aware of + when using anti-aliasing.

+
    +
  1. Anti-aliased lines uses up more of the available color-palette. The + exact number of colors used is dependent on the line-angle, a near + horizontal or near vertical line uses more colors (number of lines with + different angles uses more colors). Hence it might not be possible to + use anti-aliasing with color-gradient fill since the number of + available colors in the palette might not be enough. A normal palette + can keep around 256 colors. This means that you are advised to use a + true-color image when using anti-aliasing.
  2. +
  3. Anti-aliasing does not work very well together with background + images since it assumes a the same solid color on each side of the + line. Doing a more advanced anti-aliasing algorithm would simple take + to much processing power.
  4. +
  5. Anti-aliased lines will ignore the line width specified. They will + always have a width of roughly 1.
  6. +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/918AntialiasinginJpGraph.html b/html/includes/jpgraph/docs/html/918AntialiasinginJpGraph.html new file mode 100644 index 0000000000..9cd09179a7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/918AntialiasinginJpGraph.html @@ -0,0 +1,40 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.18 Anti-aliasing in JpGraph

+

From version 1.2 JpGraph supports drawing of anti-aliased lines. + There are a few caveats in order to use this which is discussed in this + section.

+

Note: Note that anti-aliasing will not be + used for either horizontal, vertical or 45 degree lines since they are + by their nature are sampled at adequate rate.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/919Rotatingthegraphs.html b/html/includes/jpgraph/docs/html/919Rotatingthegraphs.html new file mode 100644 index 0000000000..fb40533c4a --- /dev/null +++ b/html/includes/jpgraph/docs/html/919Rotatingthegraphs.html @@ -0,0 +1,140 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.19 Rotating the graphs

+

JpGraph provide the possibility for you to rotate the generated + graph an arbitrary angle. This will only affect the actual graph (axis, + axis titles, labels and so on) and not fixed elements on the graph like + title or footer.

+

Rotation is probably most used to rotate a graph 90 degrees, for + example a bar graph to get the effect of horizontal bars.

+

+
+

Performance note: Adding a rotation transformation + will make the graph generation slightly slower since each point of the + graph as to go through a transformation step before being stroked on to + the image. JpGraph optimizes this by using a pre-calculated + transformation matric and also optimizes the special case 90 degrees.

+
+
+

By default the center of the rotation will be the center of the plot + area, which may or may not coincide with the center of the entire + image.

+

To control the rotation you use the two methods

+ +

For example

+ $graph->image->SetAngle +(45);

+

+

There is actually a third method that you could use, adding a + translation to the graph after the rotation. Since + this probably a very little used method we don't discuss it further but + refer the reader to the class reference instead + Graph:image::SetTranslation()

+

When you rotate an image you should be aware of that the individual + labels on the axis are not rotated. The design decision behind this is +
a) Bit mapped font can't be rotated +
b) Maintain readability

+

Please remember that you may still rotate the labels by calling the Axis::SetLabelAngle() + method.

+

Since the anchor point for labels is by default the optimum for + graph at 0 degree you might want to adjust the anchor point and + alignment for the labels on the axis to get a better visual appearance + on you rotated graph. This is accomplished by the method + Axis::SetLabelAlign() For a detailed discussion on how to do this + please see the section on horizontal bar graphs, ( +Working with bar plots )

+

The table below shows some examples on different kinds of rotation + to give you an idea of how changing the angle and rotation center may + be used to generate different effects. The top left graph is the + original image. The point of rotation has been marked with a red-cross + in each of the images.

+

+
+
Figure 176: Original image [src]  +

+

+

+
+
Figure 177: Rotated 45 degrees around center of plot area [src]  +

+

+

+
+
Figure 178: Rotated 90 degrees around center of plot area [src]  +

+

+

+
+
Figure 179: Rotated 45 degrees around center of the image [src]  +

+

+

+
+
Figure 180: Rotated 90 degrees around center of the image [src]  +

+

+

+
+
Figure 181: Rotated -30 degrees around the lower left point + of the plot area +[src]  +

+

+

+

As you can see from the images above if you rotate about any other + point than the center of the plot area the plot can be placed outside + the image after rotation.

+

Since the rotation, by design, only affects the plot area it is + often most effective to use when the color of the margin is the same as + the background color.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/91Radarplots.html b/html/includes/jpgraph/docs/html/91Radarplots.html new file mode 100644 index 0000000000..ed9aae17dd --- /dev/null +++ b/html/includes/jpgraph/docs/html/91Radarplots.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1 Radar plots

+

Spider plots are most often used to display how a number of results + compare to some set targets. They make good use of the human ability to + spot symmetry (or rather un-symmetry) . the figure below show an + example of a spider (sometimes called a web-plot). Spiderplots are not + suitable if you want very accurate readings from the graph since, by + it's nature, it can be difficult to read out very detailed values.

+
+
Figure 110: A typical radar graph with two plots [src]  +

+

+

+
    +
  • There is one axis for each data point
  • +
  • Each axis may have an arbitrary title which is automatically + positioned
  • +
  • A spider plot may be filled or open
  • +
  • You can control color, weight of lines as you are already used to
  • +
  • A spider plot can, as usual, have a title and a legend
  • +
  • The first axis is always oriented vertical and is the only axis with + labels
  • +
  • Grids may be used (dashed in the figure above)
  • +
  • You may have ticks (although suppressed in the figure above
  • +
  • You can control the size and position within the frame of the graph
  • +
  • You may have several plots within the same graph
  • +
+

In the following section we show how to draw both simple and complex + radar graph. As we will show all the settings will follow the same + pattern as for the more standard linear graphs.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/91WhyuseGanttcharts.html b/html/includes/jpgraph/docs/html/91WhyuseGanttcharts.html new file mode 100644 index 0000000000..a7f96e22c1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/91WhyuseGanttcharts.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.1 Why use Gantt charts?

+

The cynical view: To explain why your project is over-due and + over-budget.

+

The pragmatic view: To keep management of our back and know what we + have forgotten

+

The common view: As a tool to help identify project issues and + highlight problem areas.

+

Basically, Gantt charts are used to show the state of a number of + activities (possible grouped) against time.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/920Adjustingbrightnessandcontrastforimagesandbackgrounds.html b/html/includes/jpgraph/docs/html/920Adjustingbrightnessandcontrastforimagesandbackgrounds.html new file mode 100644 index 0000000000..57035c3956 --- /dev/null +++ b/html/includes/jpgraph/docs/html/920Adjustingbrightnessandcontrastforimagesandbackgrounds.html @@ -0,0 +1,67 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.20 Adjusting brightness and contrast for images and + backgrounds

+

The following section only applies to palette images. This + means it wont work on true-color images.

+

It is often desirable to have a background image look a little bit + "washed" out so it doesn't take the concentration away from the actual + graph. There are basically two ways of accomplish this

+
    +
  1. Prepare the image with an external images editor to adjust the + level of brightness and contrasty to a desirable level
  2. +
  3. Use JpGraph:s built in adjustment for contrast, brightness and + color saturation.
  4. +
+

To adjust the background image call The levels for both brightness + and contrast are real numbers in the range [-1, 1] You can choose to + adjust for example just the background image or you might also choose + to adjust the whole image. To change the background image just use the + method + Graph::AdjBackgroundImage() to specify a suitable value. Let's show + some example on what we can do with this. The following example have + been generated by using the small utility "adjimg.php" which you can + find in the "utils/" directory.

+

+
Brightness=0, contrast=0, saturation = -1 (Original image)

+

+
Brightness=0, contrast=0, saturation = -1 (Black & White image)

+

+
Brightness=0.3, contrast=-0.3, saturation=0

+

+
Brightness=0.4, contrast=-0.7, saturation=0

+

+
Brightness=0.4, contrast=-0.7, saturation=-1

+

+
Brightness=0, contrast=0, saturation=1

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/921AddingguidelinestoPiePlots.html b/html/includes/jpgraph/docs/html/921AddingguidelinestoPiePlots.html new file mode 100644 index 0000000000..db9ecf3d1c --- /dev/null +++ b/html/includes/jpgraph/docs/html/921AddingguidelinestoPiePlots.html @@ -0,0 +1,93 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.1 Adding guide lines to Pie Plots

+

For very busy Pie plots it can become too little space for the + labels to be printed just beside the pie slice. For this purpose it is + possible to use guide lines for the labels. The library will then draw + a line from the center edge of the slices to the label which will be + positioned further out from the Pie Plot.

+

There is one method that is primarily used to handle this, + PiePlot::SetGuideLines() the simplest usage of this would be

+  $pieplot +->SetGuideLines +();

+

An example of this could then be

+
+
Figure 120: Using guide lines for PiePlots [src]  +

+

+

The above example will give guide lines very similar as what is + produced by other programs, e.g. Excel. In addition to the above + variant it is also possible to instruct the library to line up the + labels vertically in a way that we think is easier to read. This is + achieved by specifying the second parameter to the SetGuideLines() to + 'false' as in

 $pieplot-> +SetGuideLines( +true,false);
+

+

The first parameter is to enable/disable the guide-lines. With the + same example as above this would then produce the image

+
+
Figure 121: Using guide lines for PiePlots with vertically + lined up labels. +[src]  +

+

+

It is also possible to configure the vertical distance between the + labels. By default the distance between the labels is roughly 40% of + the labels font height. By using the method + PiePlot::SetGuideLinesAdjust() it is possible to specify a + fractional value which is interpretated as the distance between the + bottom of one label to the bottom of the next. This means that + specifying a value of '1.0' the labels will have no space between them + and the bottom of one label will touch the top of another label. By + default this value is 1.4.

+

By increasing or decreasing this value it is possible to make the + labels become positioned more or less compact. Below we have taken the + above example and reduced the distance to '1.1' and as can be seen this + yields much more compact labeling.

+
+
Figure 122: Adjusting to a smaller vertical distance between + the labels +[src]  +

+

+

+

Note: Guide lines is only available in 2D Pie plots.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/921Timingthegenerationofgraphs.html b/html/includes/jpgraph/docs/html/921Timingthegenerationofgraphs.html new file mode 100644 index 0000000000..f6761e4444 --- /dev/null +++ b/html/includes/jpgraph/docs/html/921Timingthegenerationofgraphs.html @@ -0,0 +1,65 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.21 Timing the generation of graphs

+

During development and optimization it can be very handy to have the + actual time it took to generate the image as a footnote. The following + example shows the usage of this feature

+
+
Figure 182: Timing of a graph [src]  +

+

+

To enable this feature you can proceed in two ways.

+
    +
  1. You can either set the global define BRAND_TIMING (in jpgraph.php) + to true. This will add the timing string to all graphs generated.
  2. +
  3. .. or you can enable it for a specific graph by setting the global + variable $gJpgBrandTiming as in
    +  $gJpgBrandTiming=true; +
    +

    in the beginning of the script.

    +
  4. +
+

If you like you might also change the way the timing is formatted by + setting the string defined by BRAND_TIMING_FORMAT (in jpgraph.php). + This string represents a standard printf() format string.

+Note: JpGraph contains a utility class called JpgTimer which you + can use yourself should you need ms timing of part of your own code. + The API is really simple. The class supports multiple running timers + and you start a timer simply by calling the Push() method. This will + start a new timer and put it on the top of the timer stack. To stop the + timer, pop it from the stack and return the timing value simply call + Pop().

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/922Creating3Dpieplots.html b/html/includes/jpgraph/docs/html/922Creating3Dpieplots.html new file mode 100644 index 0000000000..3b8faef380 --- /dev/null +++ b/html/includes/jpgraph/docs/html/922Creating3Dpieplots.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.2 Creating 3D pie plots

+

So far we have only made use of 2D pie plots, creating 3D pie plots + is no more difficult. Instead of creating the plots with a call to + PiePlot() you create the plots with a call to + PiePlot3D() If we just take the first simple pie plot and replace + the call to PiePlot() with a call to PiePlot3D() we get the following + result.

+
+
Figure 123: A first example of a 3D pie plot [src]  +

+

+

3D Pie plots have the same possibilities as the normal pie plots + with the added twist of a 3:rd dimension. You can adjust the + perspective angle with the method + SetAngle() So for example to make the pie more "flat" you just set + it to a smaller angle. Setting the perspective angle to 20 degrees in + the previous example will give the following result.

+
+
Figure 124: Adjusting the perspective angle [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/922Usingcountryflagsinvariouscontext.html b/html/includes/jpgraph/docs/html/922Usingcountryflagsinvariouscontext.html new file mode 100644 index 0000000000..6a757ee72f --- /dev/null +++ b/html/includes/jpgraph/docs/html/922Usingcountryflagsinvariouscontext.html @@ -0,0 +1,75 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.22 Using country flags in various context

+

JpGraph has built-in support for over 200 country flags, i.e. they + are available to be used in graphs without any external image + definitions.

+

Country flags can be used in primarily two settings

+
    +
  1. As image markers in line and scatter graphs
  2. +
  3. As background images for graphs
  4. +
  5. As a special type of icons (using the IconPlot()) which can be + added to the graph in any arbitrary position. See next section
  6. +
+

In order to make it easy to find the appropriate country flags they + can be specified with either full or partial name or as an numeric + index. The routines in JpGraph are "smart" enough to figure out which + way you are trying to specify a particular flag.

+

To specify a country flag as a marker you have to specify the + special mark type as one of MARK_FLAG1,MARK_FLAG2,MARK_FLAG3 or + MARK_FLAG4

+

Flags are internally stored in 4 different sizes which is indicated + by the number in the mark types. Flags may also be arbitrary scaled + when displayed. Since this is partially overlapping functionality you + might very well ask why the flags are stored in four different basic + sizes. The reason is of course performance. It you only want a very + small flag it takes processing time to scale down a large image to, + say, a small icon size. At the same time for large flags to be used as + background a small original flag might not have enough details to be + scaled up to a large size. Hence the reason for storing the flags in 4 + different sizes.

+

The example below shows how to use country flags as markers

+
+
Figure 183: Using country flags as line plot markers [src]  +

+

+

To use country flags as background one has to use the method + Graph::SetBackgroundCountryFlag(). With this method you can specify + both how much of the image should be filled as well as how much of the + flag should be mixed into the background.

+

To see a list of all supported country flags you can run the script + "listallcountryflags.php" in the Example directory. This will show you + a table with all flags.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/923Addingiconsontothegraph.html b/html/includes/jpgraph/docs/html/923Addingiconsontothegraph.html new file mode 100644 index 0000000000..46ee3b4b38 --- /dev/null +++ b/html/includes/jpgraph/docs/html/923Addingiconsontothegraph.html @@ -0,0 +1,65 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.23 Adding icons onto the graph

+

In addition to the standard background image you can also add an + arbitrary number of icons onto the background of the graph. These icons + are created with a call to the special Plot class IconPlot.

+

The image from icons are taken from a file or as one of the builtin + country flags.

+

You may control how much of the icon should be blended into the + background by specifying a percentage (1-100). The example below shows + how to mix in the picture of "Tux" into the background of a filled line + graph. Note: This example uses alpha blending and will therefore + require GD2.

+
+
Figure 184: Adding an icon into the background [src]  +

+

+

To specify any of the roughly 200 country flags as an icon you first + create an empty Icon and then call the IconPlot::SetCountryFlag() with + the appropriate parameters. (See the class reference). This is + illustrated below by adding the Icelandic flag into the background as + an icon

+
+
Figure 185: Adding an icon flag into the background [src]  +

+

+

Note: Some older versions of PHP pre-4.3.3 + using the builtin GD have problems rendering blended images. If you + have this problem then you need to upgrade to a more recent version of + PHP.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/923Explodingpieslices.html b/html/includes/jpgraph/docs/html/923Explodingpieslices.html new file mode 100644 index 0000000000..1c8fab49fc --- /dev/null +++ b/html/includes/jpgraph/docs/html/923Explodingpieslices.html @@ -0,0 +1,70 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.3 Exploding pie slices

+

One way to attract attention to some specific piece of information + in a pie chart is to "explode" one or more slices. Both 2D and 3D pies + support exploding one or several slices.

+

Exploding slices is accomplished by the methods + Explode() and + ExplodeSlice() The first method is used if you want to explode more + than one slices and the second is a shorthand to make it easy to just + explode one slice.

+

For example to explode one slice the default "explode" radius you + would just have to say

+  $pieplot->ExplodeSlice( +1) +

+

The above line would explode the second slice (slices are numbered + from 0 and upwards) the default amount. Doing this to the two previous + example would result in

+
+
Figure 125: Exploding one slice [src]  +

+

+

+

+
+
Figure 126: Exploding one 3D slice [src]  +

+

+

+

To explode all slices at once you can use the + PiePlot::ExplodeAll() method. If you want to explode several slices + you can use the + PiePlot::Explode() method and supply a suitable array argument.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/924Specifyingandadjustinglabelsonpieplots.html b/html/includes/jpgraph/docs/html/924Specifyingandadjustinglabelsonpieplots.html new file mode 100644 index 0000000000..2eabf36a66 --- /dev/null +++ b/html/includes/jpgraph/docs/html/924Specifyingandadjustinglabelsonpieplots.html @@ -0,0 +1,80 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.4 Specifying and adjusting labels on pie plots +

+

By default the values shown just outside the pie for each slice are + the percentage value for each slice. If you instead wanted the absolute + value you would just have to use the + SetLabelType() method. So to use the absolute value you would call

+

+ $pieplot-> +SetLabelType( +"PIE_VALUE_ABS"); +

+

+

Furthermore you could enhance the formatting of the value by either + using a printf() style format string (using + SetFormat() ) or by providing a formatting function callback (using + + SetFormatCallback() ) for doing more advanced formatting.

+

You can also adjust the position of the labels by means of the + PiePlot::SetLabelPos() method. The argument to this method is + either the fraction of the radius or the string 'auto'. In the latter + case JpGraph automatically determines the best position and the the + first case The following example illustrates this

+
+
Figure 127: Example of adjusting the position of the labels + for the slices +[src]  +

+

+

+

If this formatting is not enough you can also "manually" specify the + labels for each slice individually. You do this by using the + PiePLot::SetLabels() method. This will let you specify individual + text strings for each label. In each specification you can also add a + printf() formatting specification for a number. The number passed on + will be either the absolute value for the slice or the percentage value + depending on what was specified in the call to + SetLabelType()

+

The SetLabels() method can also take a second parameter, the label + position parameter. This is just a shortcut to the SetLabelPos() as + described above. By default the position will be set to 'auto' if not + explicitely specified.

Note: The alignment of + the labels will be different depending on whether they are inside or + outside the pie. When inside the center of the strings will be aligned + with the center of the slice at the specified fraction of the radius. + When positioned outside the alignment will depend on the angle to avoid + that the labels inadvertely writes over the pie.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/925Specifyingslicecolorsandusingthemes.html b/html/includes/jpgraph/docs/html/925Specifyingslicecolorsandusingthemes.html new file mode 100644 index 0000000000..f686e0b909 --- /dev/null +++ b/html/includes/jpgraph/docs/html/925Specifyingslicecolorsandusingthemes.html @@ -0,0 +1,84 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.5 Specifying slice colors and using themes

+

Another typical change would be to change the colors of the slices. + There are two fundamental ways of doing this. You either manually + specify the colors for the slices as an array using the method + SetSliceColors() If you specify fewer colors than the number of + slices they will just wrap around.

+

Another way is to use one of the pre-defined color "themes". This is + just a predefined set of colors that will be used for the slices. You + choose what "theme" you like to use with the method ( + SetTheme() ) At the time of this writing the available themes are

+
    +
  • "earth"
  • +
  • "pastel"
  • +
  • "sand"
  • +
  • "water"
  • +
+

The following example shows the same pie using the different + "themes" in order.

+
+
Figure 128: +[src]  +

+

+

+
+
Figure 129: +[src]  +

+

+

+
+
Figure 130: +[src]  +

+

+

+
+
Figure 131: +[src]  +

+

+

+

A complete color chart of all available colors in the different + themes can be found here

+

Another simple change is to remove the border ( or change it's + colors ) that separates each slice. This can be done by a call to + ShowBorder()

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/926Addingdropshadowstotheslices.html b/html/includes/jpgraph/docs/html/926Addingdropshadowstotheslices.html new file mode 100644 index 0000000000..7a0cc3bff4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/926Addingdropshadowstotheslices.html @@ -0,0 +1,46 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.6 Adding drop shadows to the slices

+

An additional visual enhancements can be made by adding a drop + shadow to the individual slices. This is accomplished by means of the PiePlot::SetShadow() + method. Adding a drop shadow is often more affective if the pie has one + or more slices exploded as the following example shows

+
+
Figure 132: Adding a drop hadow to the slices [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/927Anothervariantof2DPieplots.html b/html/includes/jpgraph/docs/html/927Anothervariantof2DPieplots.html new file mode 100644 index 0000000000..084fe5e7e7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/927Anothervariantof2DPieplots.html @@ -0,0 +1,92 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2.7 Another variant of 2D Pie plots

+

As mentioned in the beginning there are two versions of the 2D pie + plots. The normal pie plot created as an instance of + class PiePlot and a variant created as an instance of + class PiePlotC

+

This variant is an extension of the standard PiePlot in the sense + that it also have a filled circle in the center. The following example + illustrates this

+

+
+
Figure 133: Example of the variant of pie plot with a filled + center circle +[src]  +

+

+

+

Since the PiePlotC is an extension to the basic pie plot all the + normal formatting you can do for pie plots you can also do for the + PiePlotC .

+

The additional formatting only concerns the filled middle circle. + You have the option of adjusting size, fill color and all font + properties. You perform these operations with the methods

+

+ + + + + +
+PiePlotC::SetMidColor()Set fill color of mid circle
+PiePlotC::SetMidSize()Set size (fraction of radius)
+PiePlotC::SetMidTitle()Set title string (may be + multi-lined)
+PiePlotC::SetMid()Set all parameters in a single method + call
+

In addition to the normal CSIM for PiePlot:s the center area is also + a CSIM hotspot. You specify the target CSIM with a call to + PiePlotC::SetMidCSIM()

+

The next example shows an example with some more innovative + formatting. In this example we have :

+
    +
  • hidden the frame around the pie graph
  • +
  • exploded all the slices
  • +
  • added drop shadow to the individual slices (and the center filled + circle)
  • +
  • specified individual multi line labels.
  • +
  • changed the font for the title to a TTF font.
  • +
+

+
+
Figure 134: PiePlotC with some more innovative formatting to + make it more interesting. +[src]  +

+

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/92CapabilitiesinJpGraphGanttmodule.html b/html/includes/jpgraph/docs/html/92CapabilitiesinJpGraphGanttmodule.html new file mode 100644 index 0000000000..518cd3758d --- /dev/null +++ b/html/includes/jpgraph/docs/html/92CapabilitiesinJpGraphGanttmodule.html @@ -0,0 +1,74 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2 Capabilities in JpGraph Gantt module

+

+
    +
  • Both automatic and manual scaling of date
  • +
  • Full support for independent CSIM for both labels and activity bars
  • +
  • Extremely flexible scales, possibility to use both months, weeks, + days, hours and minutes as scales. Furthermore (unlike MS Project) you + can have as may scales displayed at the same time as you like.
  • +
  • Support for visualization of grouped activities
  • +
  • Gantt charts can be automatically sized according to the number of + bars and scale used. This means you don't have to supply a specific + size when creating a graph.
  • +
  • Unlimited number of activities
  • +
  • Supports platform independent Week number calculation according to + ISO:8601
  • +
  • Rich possibility to display a variety of scales or combination of + scales supports both day, week, month, year. Each scale header is + totally configurable in terms of font, size, color, background etc
  • +
  • User configurable date format in the scale headlines
  • +
  • Visualization of constrains between activities, start-to-start, + start-to-end, end-to-start and end-to-end
  • +
  • Scales have "intelligent" grids
  • +
  • Supports title and subtitle with user specified font, size and + color
  • +
  • Activity bars can have multiple patterns and colors
  • +
  • Activity bar may have shadows
  • +
  • Activity bars can have internal progress bars displayed to show how + much of a given task has been accomplished
  • +
  • Activity titles can have individual fonts, colors and backgrounds
  • +
  • Activity bars can have captions
  • +
  • Activity bars can have specified left- and right end markers
  • +
  • Bar heights can be specified in absolute pixels or in percent of + the activity line width
  • +
  • Supports milestones with many different marks
  • +
  • Supports vertical marker lines with text
  • +
  • Can easily be localized
  • +
  • Full support for CSIM (or drill down graphs)
  • +
  • Alternate row colors
  • +
  • ... and more
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/92Pieplots.html b/html/includes/jpgraph/docs/html/92Pieplots.html new file mode 100644 index 0000000000..89d9e06ea9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/92Pieplots.html @@ -0,0 +1,155 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.2 Pie plots

+

So far we have just show plots based on an X-Y coordinate system. + This is not the only types of graphs you can create with JpGraph. + Another common type is Pie plots. JpGraph supports both 2D and 3D pie + plots. For 2D pie plots there are also 2 versions, but more on that + later.

+

The main difference as compared to the X-Y plots is that to all pie + plots are added to the + PieGraph() instead of the Graph() object we used for the X-Y graphs + we have drawn so far. For this you must first include the + "jpgraph_pie.php" in your script (or "jpgraph_pie3d.php" if you want to + use 3-dimensional pies).

+

Below you cane see the code needed to create the simplest possible + pie graph just using the default settings.

+

include ( +"../jpgraph.php"); +
include (
"../jpgraph_pie.php"); +
+
$data  += array(40,60, +21,33); +
+
$graph  += new PieGraph +(300,200); +
$graph->SetShadow(); +
+
$graph->title-> +Set( +"A simple Pie plot"); +
+
$p1 = new PiePlot( +$data); +
$graph->Add( +$p1); +
$graph->Stroke(); +

+

The above code would give the following pie graph

+
+
Figure 117: The simplest possible pie graph [src]  +

+

+

There is a few things worth noting here

+
    +
  • By default all pie slices have the percentage shown just outside + the slice.
  • +
  • The colors are automatically assigned to the slices.
  • +
  • The pie have the edges marked by default
  • +
  • The first slice start at 0 degrees (3 o'clock)
  • +
+

You can change almost all aspects of appearance of the pie graphs. + For example you could change :

+ +

+

The next simplest addition we can do is to add a legend to the pie + graph. We do this by using the + SetLegends(); method. By adding the legends to the previous example + we get the following image

+
+
Figure 118: Adding a legend to the pie graph [src]  +

+

+

+

(In the figure above we also moved the center of the pie slightly to + the left to make more room for the legend box.)

+

The text for the legends can also contain printf() style format + strings to format a number. This number passed on into this string is + either the absolute value of the slice or the percentage value. How to + switch between the is describe further down in this chapter.

+

The next change you might want to change is the size and position of + the Pie plot. You can change the size with a call to + SetSize(); and the position of the center of the pie plot with a + call to SetCenter(); + The size can be specified as either an absolute size in pixels or as a + fraction of width/height (whatever is the smallest). The position of + the pie plot is specified as a fraction of the width and height.

+

To put the size and positioning API to use we will show how to put + several pie plots on the same pie graph. In the following example we + have also adjusted the legends of the slice values to use a smaller + font.

+

What we do in this example is quite simple, create 4 pie plots, make + them smaller and put them in the four corner of the graph. This will + give the result as shown in the following example.

+
+
Figure 119: Multiple pie plots in the same pie graph [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/931Overview.html b/html/includes/jpgraph/docs/html/931Overview.html new file mode 100644 index 0000000000..c4539fb043 --- /dev/null +++ b/html/includes/jpgraph/docs/html/931Overview.html @@ -0,0 +1,61 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.1 Overview

+

Each data point in a polar plot is represented by a tuple consisting + of a radius and an angle. The polar plot itself can be either outlined + or filled. In addition each point may have a standard marker (the same + as for line and scatter plots).

+

The scale for the radius can be either linear or logarithmic.

+

A polar graph is created by creating an instance of +PolarGraph::PolarGraph(). The polar graph type inherits all the + capabilities of ordinary X-Y graphs, i.e they can have background + images, background gradients, tabbed titles and so on.

+

Polar graphs comes in two basic types, they can either show a full + 360 degree graph or a half 180 degree graph. The two examples below + show these two basic types of graphs.

+

+
+
Figure 135: A simple 360 degree polar graph [src]  +

+

+

+
+
Figure 136: The 180 degree variant polar plot. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/932Adjustingtheradiusscale.html b/html/includes/jpgraph/docs/html/932Adjustingtheradiusscale.html new file mode 100644 index 0000000000..7380ea4850 --- /dev/null +++ b/html/includes/jpgraph/docs/html/932Adjustingtheradiusscale.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.2 Adjusting the radius scale

+

The radius axis can be shown in either a linear or logarithmic + scale. This is controlled, as usual, by a call to +PolarGraph::SetScale() The two examples below show the same plot in + either linear or logarithmic scale

+

+
+
Figure 137: Using a logarithmic scale [src]  +

+

+

+

+
+
Figure 138: Using a linear scale [src]  +

+

+

+

Please note that the maximum values of the scales are different.

+

By default the scale will be auto scaled depending on the data. You + can also specify a manual scale by supplying an extra argument to the + SetScale() value. The only difference from the manual scaling with the + other X-Y-graphs is that for polar graph you only specify a manual + maximum. The minimum will always be 0 for the linear scale and a scaled + value of 10 (i.e 1, 0.1, 0.001 and so on) for the logarithmic scale.

+

The plot is clipped to the plot area so if you specify a smaller + scale then the maximum value that part of the plot that are outside the + plot area will be clipped.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/933Adjustingthegridlines.html b/html/includes/jpgraph/docs/html/933Adjustingthegridlines.html new file mode 100644 index 0000000000..ad024eaf90 --- /dev/null +++ b/html/includes/jpgraph/docs/html/933Adjustingthegridlines.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.3 Adjusting the grid lines

+

As usual you have full freedom to select what grid lines you like to + show (and what colors they should have). There are three different + types of grid lines you may adjust. The radius minor and major grid + lines and the angle grid lines.

+

You select what grid lines to show with a call to +PolarAxis::ShowGrid() The two example below shows a logarithmic plot + with either just major grid lines or both minor and major grid lines.

+

+
+
Figure 139: Using a logarithmic scale with just major + gridlines [src] +  +

+

+

+

+
+
Figure 140: Using a logarithmic scale with both minor and + major gridlines +[src]  +

+

+

The colors of the grid lines are specified with a call to + PolarAxis::SetGridColor()

+

For the angle grid lines it is possible to specify the angle + division between each grid line with the method + PolarAxis::SetAngleStep() You specify the step distance in degrees. + By default the step size is 15 degrees.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/934Adjustingthelabelfonts.html b/html/includes/jpgraph/docs/html/934Adjustingthelabelfonts.html new file mode 100644 index 0000000000..9b9ac2ba8f --- /dev/null +++ b/html/includes/jpgraph/docs/html/934Adjustingthelabelfonts.html @@ -0,0 +1,53 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.4 Adjusting the label fonts

+

You can individually specify different fonts and colors for the + angle and the radius labels. The radius font is specified with + PolarAxis::SetFont() and the angle font is specified with a call to + PolarAxis::SetAngleFont()

+

You can adjust the color with the method +PolarAxis::SetColor() ?>

+

The following example specifies different color for the labels. it + also shows that you can add both a radial axis title as well as a + tabbed title. In this example we have also chosen not to show the frame + around the edge of the plot.

+

+
+
Figure 141: Different colors for labels, specifying both a + tabbed title as well as a axis title [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/935Adjustingthelabels.html b/html/includes/jpgraph/docs/html/935Adjustingthelabels.html new file mode 100644 index 0000000000..17cad525f1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/935Adjustingthelabels.html @@ -0,0 +1,47 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.5 Adjusting the labels

+

As can be seen from the previous examples the angle labels have a + small superscripted "o" after each label. You can select if you like to + show this degree mark or not with a call to the + PolarAxis::SetANgleDegreeMark() method by which you can enable or + disable that mark after the angels.

+

For the radius labels all standard formatting that can be done to + the X-Y axis such as format string or format callbacks are supported.

+

A common modification for polar plots is probably to disable the + display the last label when using a 360 degree plot since the last + label will "collide" with the plot box around the plot area. It is + possible to disable the last label with a call to +Axis::HideLastTickLabel() As you can see this has been used in some + of the examples in this chapter.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/936Imagemaps.html b/html/includes/jpgraph/docs/html/936Imagemaps.html new file mode 100644 index 0000000000..f9bffafb66 --- /dev/null +++ b/html/includes/jpgraph/docs/html/936Imagemaps.html @@ -0,0 +1,60 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.6 Image maps

+

If you have specified markers for the polar plot (by setting the + mark property of the plot) each marker can be a hot spot in a client + side image map. The target URL are as usual specified with the + SetCSIMTargets() as the following short code excerpt shows

+   +// Start by specifying the proper URL targets +
$targets  += array("#1","#2", ....... ); +
$polarplot  += new PoalrPlot +($data); +
$polarplot +->mark->SetType( +MARK_SQUARE); +
$polarplot +->SetCSIMTargets +(targets); +
$graph->Add( +$polarplot); +
$graph->StrokeCSIM(); +

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/937Afinalexample.html b/html/includes/jpgraph/docs/html/937Afinalexample.html new file mode 100644 index 0000000000..a85543e54f --- /dev/null +++ b/html/includes/jpgraph/docs/html/937Afinalexample.html @@ -0,0 +1,45 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3.7 A final example

+

As a final example we show a full 360 degree polar plot with square + markers as well as background color gradient and a legend for the plot.

+
+
Figure 142: A polar plot with both legend and background + gradient fill. +[src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/93AsimpleGanttchart.html b/html/includes/jpgraph/docs/html/93AsimpleGanttchart.html new file mode 100644 index 0000000000..3d811e3a74 --- /dev/null +++ b/html/includes/jpgraph/docs/html/93AsimpleGanttchart.html @@ -0,0 +1,242 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3 A simple Gantt chart

+

Time to show you an example of a Gantt chart and how easy it is to + make one. Lets make it the simplest possible Gantt chart. One activity, + named "Project", which lasts from "2001-11-01" to "2002-02-20".

+

All it takes to do this (using default values for everything) is the + following code.

(File: ganttex00.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_gantt.php"); +
+
// A new graph with automatic size +
$graph  += new GanttGraph +(0,0, +"auto"); +
+
//  A new activity on row '0' +
$activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
$graph->Add( +$activity); +
+
// Display the Gantt chart +
$graph->Stroke(); +
?> +

+

The resulting image is shown in Figure 147 below.

+
+
+
Figure 147: Your first simple Gantt chart. [src]  +

+
+

+

+

Let's note a few things with the above image and code:

+
    +
  • You always need to include both jpgraph.php and jpgraph_gantt.php
  • +
  • A bar is specified a minimum of four parameters, vertical position + (more about that in a second), a title, start and end date.
  • +
  • If you don't specify a size for the image it will be automatically + decided based on the min and max dates for the bars rounded to a full + week.
  • +
  • By default the week and day scale are displayed.
  • +
  • Weekend background are displayed default in a slightly gray color
  • +
  • Sundays are written in red.
  • +
  • Weeks are numbered according to ISO 8601
  • +
  • Activity bars are rendered as blue stripes on a white background by + default.
  • +
+

So, lets start making this graph a little bit more interesting. + First we are going to add a title, then we will add a month scale and + finally we will change the color of the bar.

+

All that is taken care of in the code below.

+(File: ganttex01.php) +
<?php +
include ( +"../jpgraph.php"); +
include (
"../jpgraph_gantt.php"); +
+
$graph  += new GanttGraph +(0,0, +"auto"); +
$graph->SetShadow(); +
+
// Add title and subtitle +
$graph->title-> +Set( +"A nice main title"); +
$graph->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
$graph->subtitle-> +Set( +"(Draft version)"); +
+
// Show day, week and month scale +
$graph->ShowHeaders( +GANTT_HDAY  +GANTT_HWEEK  +GANTT_HMONTH); +
+
+// Instead of week number show the date for the first day in the week +
// on the week scale +
$graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
+
+// Make the week scale font smaller than the default +
$graph->scale-> +week->SetFont(FF_FONT0 +); +
+
+// Use the short name of the month together with a 2 digit year +
// on the month scale +
$graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR2); +
+
+// Format the bar for the first activity +
// ($row,$title,$startdate,$enddate) +
$activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
+
+// Yellow diagonal line pattern on a red background +
$activity +->SetPattern(BAND_RDIAG, +"yellow"); +
$activity +->SetFillColor +("red"); +
+
// Finally add the bar to the graph +
$graph->Add( +$activity); +
+
// ... and display it +
$graph->Stroke(); +
?> +
The resulting image is shown in Figure + 148 below.
+
+
Figure 148: Making the Gantt chart a little bit more + interesting with title and more colors. [src]  +

+

+

From the above example you might note a few things

+
    +
  • The margins adjust automatically to the added title and subtitle
  • +
  • The height of the scale headers adjust automatically when you + change the font.
  • +
  • You have great flexibility in choosing what format the scale labels + will have. If you for example wanted the full 4 digit year in the month + header all you have to change is use the constant + MONTHSTYLE_SHORTNAMEYEAR2 in the code above to + MONTHSTYLE_SHORTNAMEYEAR4
  • +
  • You have full freedom of manipulating headers in terms of font, + color, background and size.
  • +
+

To show that this is really simple let's show the full year in the + month, and set the header style to be white text on a dark blue + background by adding the lines

+   +// Use the short name of the month together with a 4 digit year +
// on the month scale +
$graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR4); +
$graph->scale-> +month-> +SetTextColor( +"white"); +
$graph->scale-> +month-> +SetBackgroundColor( +"blue"); +

+

to the code above. The resulting image is shown in Figure 149

+
+
Figure 149: Enhancing the scale headers. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/93Polarplots.html b/html/includes/jpgraph/docs/html/93Polarplots.html new file mode 100644 index 0000000000..e474dd0ccc --- /dev/null +++ b/html/includes/jpgraph/docs/html/93Polarplots.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.3 Polar plots

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/94ThestructureofaGanttchart.html b/html/includes/jpgraph/docs/html/94ThestructureofaGanttchart.html new file mode 100644 index 0000000000..359fbf13eb --- /dev/null +++ b/html/includes/jpgraph/docs/html/94ThestructureofaGanttchart.html @@ -0,0 +1,62 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.4 The structure of a Gantt chart

+

A Gantt chart is made up of four distinct areas.

+
    +
  1. On the left side there is the activity title column.
  2. +
  3. On the top there is the scale headers (up to four headers may be + displayed)
  4. +
  5. The actual plot area where all the Gantt bars and markers go
  6. +
  7. The margin area, where for example the titles are shown
  8. +
+

Since a Gantt chart inherits all the usual properties of a JpGraph + Graph() you have the access to the same method to formatting the image + as before. For example to have a shadow around the image you call + Graph::SetShadow() and to set the margin color you can use + Graph::SetMarginColor(). Please refer to the reference documentation + for a full list of supported features.

+

To create a Gantt chart you add objects to it. As + of this writing you may add the following object by the use of the + GanttChart::Add() method

+
    +
  • Gantt bars (indicates the length of an activity)
  • +
  • Milestones, a single mark at a specific date
  • +
  • Vertical line, might be use to mark phases in projects
  • +
+

All these objects may be extensively modified in terms of + formatting. You can specify color (both fill- and frame color), size, + titles, style and patterns and so on. All these objects comes with (in + my mind) sensible default so you don't have to specify a lot of + parameters. But if you need a fine grain control or if you disagree + with my taste you can.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/95CreatingaGanttChart.html b/html/includes/jpgraph/docs/html/95CreatingaGanttChart.html new file mode 100644 index 0000000000..81c00e47f8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/95CreatingaGanttChart.html @@ -0,0 +1,68 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.5 Creating a GanttChart

+

You create a new Gantt Chart with a call to GanttChart(). The + signature for GanttGraph is the same as for ordinary JpGraph graphs, + i.e

function  +GanttGraph( +$aWidth, +$aHeight, +$aCachedName, +$aTimeOut, +$aInline) +

+

The only real difference is that for GanttCharts you can specify one + or both of the dimension parameters (width and height) as -1 in which + case that dimension will be automatically sized determined by scale and + fonts chosen. The following examples shows some possible ways of + creating a new graph

+
    +
  • $graph=new GanttGraph() +
    The size of the graph will be determined automatically, no caching + will be used and the graph will be generated in-line.
  • +
  • $graph=new GanttGraph(-1,-1,"auto") +
    The size of the graph will be determined automatically, caching + will be used (the name will be based on the script name), no timeout + will be used and the graph will be generated in-line
  • +
  • $graph=new GanttGraph(450,-1,"auto",5) +
    Same as the previous entry but the width is fixed to 450 points and + the cached image will have a timeout of 5 min.
  • +
  • $graph=new GanttGraph(-1,-1,"auto",5,false) +
    The image will not be generated in-line, only the cache will be + updated if it has timed out, otherwise nothing will happen.
  • +
+

Since GanttGraph() inherits all the methods (that make sense for + GanttGraph) from Graph you can specify shadow, color etc of the general + frame.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/96PositioningobjectsintheGanttplot.html b/html/includes/jpgraph/docs/html/96PositioningobjectsintheGanttplot.html new file mode 100644 index 0000000000..2d32bae451 --- /dev/null +++ b/html/includes/jpgraph/docs/html/96PositioningobjectsintheGanttplot.html @@ -0,0 +1,71 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.6 Positioning objects in the Gantt plot

+

Bars and Milestones need both a vertical position and a horizontal + position. The horizontal start position is specified as a date, e.g. + "2001-06-23", and the vertical positions are specified as a number + [0,1,2,3,...]. This vertical number indicates the position from the top + where the object should be placed. To understand this you might imagine + a number of "invisible" horizontal bands with a certain height. If you + specify 0 as the vertical position the bar will be placed in the first + band, specify 3 and the bar will be placed in the fourth band and so + on.

+

It is perfectly legal, and perhaps even desirable to leave "gaps" + when laying out bands to group related activities. So, for example you + could have three activities/bars at positions 1,2,3 and then another 2 + bars at position 6,7 leaving band 0,4,5 empty.

+

All these "invisible bands" have the same height (equ-spaced). The + height of each band is automatically determined and depends on both the + method of layout ( as specified by (GanttChart::SetLayout()) and the + individual heights of the individual bars and titles. The rules are + quite simple:

+
    +
  • If you use layout=GANTT_FROMTOP (the default and most common) the + height will equal the height (+ a margin) of the highest gantt bar. The + height calculation of each bar takes into account both the actual bar, + the title, and any left- right-marks (more about that later) that may + be present. The name "fromtop" refers to that when you have explicitly + specified a height the bars will usually be added from band 0 and + onwards and hence being added from the top. (This might leave empty + space at the bottom of the plot area in the graph if the height of the + graph has been explicitly specified).
  • +
  • If you use layout=GANTT_EVEN the bars are evenly (hence the name) + spread out over the available height in the gantt chart and no + consideration is taken of the individual bars heights. Note that if you + use automatic sizing you cant use even layout. It just doesn't make + sense. Even layout is for those cases when you deliberately specify a + very large image and want the bars evenly distributed using the full + height.
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/971Specifyingverticalposition.html b/html/includes/jpgraph/docs/html/971Specifyingverticalposition.html new file mode 100644 index 0000000000..8af91f7e83 --- /dev/null +++ b/html/includes/jpgraph/docs/html/971Specifyingverticalposition.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.1 Specifying vertical position

+

As described above vertical positions are specified as a numeric + value [0..n] where 'n' is an arbitrary constant. (For practical + purposes n is most likely < 100)

+

Using our previous example we will illustrate this parameter by + changing the position of our 'Project' activity to position 7. Therefor + we change the call to GanttBar() to

+  $activity = new GanttBar( +7,"Project","2001-12-21" +,"2002-02-20" +);

+

and we then get the chart as shown below in Figure 150.

+

+
+
Figure 150: Changing the vertical position to 7 [src]  +

+

+

Note that the height of each position (vertical position) will + depend on the actual height of the bar.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/972Specifyingstartandendpositionforabar.html b/html/includes/jpgraph/docs/html/972Specifyingstartandendpositionforabar.html new file mode 100644 index 0000000000..dc383cc776 --- /dev/null +++ b/html/includes/jpgraph/docs/html/972Specifyingstartandendpositionforabar.html @@ -0,0 +1,56 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.2 Specifying start and end position for a bar +

+

Start of bars are given as a date string. The format depends on the + current locale. Examples of valid date strings are

+
    +
  • "2001-10-22"
  • +
  • "22 October 2001"
  • +
  • "22 Oct 2001"
  • +
+

Even if several format are supported it is recommended to use all + numeric dates, i.e in the form "2001-10-22".

+

Specifying the end position may be done in two different ways, + either by the end date in the same way as for the start date. The other + way is to specify the length of the activity in number of days + (and fractions thereof). Examples of valid end dates are:

+
    +
  • "2001-11-15"
  • +
  • "15 Nov 2001"
  • +
  • 22, (specifies duration of 22 days)
  • +
  • 22.7, (specifies duration of 22.7 days)
  • +
+

Please note that duration is specified as numerical values and + not strings.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/973Milestones.html b/html/includes/jpgraph/docs/html/973Milestones.html new file mode 100644 index 0000000000..0712478d0e --- /dev/null +++ b/html/includes/jpgraph/docs/html/973Milestones.html @@ -0,0 +1,144 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.3 Milestones

+

Milestones are similar to bars but have no end date since milestones + just apply to one single date. Milestones are created much the same way + as activities but using method MileStone() instead.

+

The full signature for milestones are

  +function MileStone +($aVPos,$aTitle, +$aDate, +$aCaption) +

+

+

+ + + + + +
+ +  $aVPos  + The vertical position for the + bar, [0..n]
+ +  $aTitle  + Title for the activity
+ +  $aDate  + Date for the milestone
+ +  $aCaption  + Text to the right of the + milestone
+

Valid milestones are for example

+
    +
  • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +);
    +

    +
  • +
  • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +,"(2001-12-01)" +);
    +

    +
  • +
+

By default milestones are rendered as a filled "Diamond" shape. This + may be optionally modified. The actual shape is specified by the 'mark' + property of milestone which is an instance of the PlotMark() class + (same class responsible for the marks in line graphs).

+

To change the shape of a milestone to, say a triangle, you use the + SetType() method as in

+  $milestone->mark-> +SetType( +MARK_DTRIANGLE) +

+

Let's put this into practice and add a milestone to our previous + example by adding the following two lines of code which result in + Figure 151 shown below.

+
+
Figure 151: Illustration of how to add a milestone to a gantt + chart [src]  +

+

+

+

You may note that by default the title color is red for milestones. + If you like to change this to be instead, say bold black, you would + invoke the SetColor() and SetFont() methods on the title property of + milestones as in

 $milestone-> +title->SetFont(FF_FONT1 +,FF_BOLD); +
$milestone +->title->SetColor( +"black"); +

+

and thew result would now (not surprisingly be)

+
+
Figure 152: Modifying the milestone title color and font [src]  +

+

+

To modify the caption you do exactly the same but act on property + 'caption' instead of 'title', i.e.

+  $milestone->caption-> +SetFont( +FF_FONT1, +FF_BOLD); +
$milestone +->caption->SetColor( +"black"); +

+

+

It is worth noting that you modify the bar title and caption the + exact same way by acting on the 'title' and 'caption' property for the + bars.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/974Verticalline.html b/html/includes/jpgraph/docs/html/974Verticalline.html new file mode 100644 index 0000000000..9874a6865f --- /dev/null +++ b/html/includes/jpgraph/docs/html/974Verticalline.html @@ -0,0 +1,160 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.4 Vertical line

+

The final object you may add to a Gantt chart is simple, but quite + useful, a straight vertical line extending over the whole plot height. + This could for example be used to illustrate different phases in a + project. You create a line object by a call to GanttVLine()

+

The full signature for GanttVLine() is

  +function GanttVLine +($aDate,$aTitle, +$aColor, +$aWeight, +$aStyle) +

+

+

+ + + + + + +
+ +  $aDate  + Date for the milestone
+ +  $aTitle  + Title for the line. The title is + displayed at the bottom of the line
+ +  $aColor  + Color for the line
+ +  $aWeight  + Line width
+ +  $aStyle  + Line style,"dashed", "dotted" and + so on
+

Valid creations of lines are for example

+
    +
  • + $vline = new  +GanttVLine( +"2001-12-24"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred"); +
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5);
    +

    +
  • +
  • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5,"dotted" +);
    +

    +
  • +
+

To add the line to the graph you just have to call GanttGraph::Add() + as with milestones and bars. Let's illustrate the use of vertical lines + by adding a line to the previous example.

 $vline  += new GanttVLine +("2001-12-24","Phase 1"); +
$graph->Add( +$vline); +

+

and the example (See 153) now becomes

+
+
Figure 153: Adding a vertical line with a title to the Gantt + chart [src]  +

+

+

From the above figure you can see that by default the line is drawn + at the beginning of the day of the specified date and in a 'dashed' + style. This can (of course!) be modified so that the line is + drawn/aligned anywhere in the specified day. You modify this by + invoking the method SetDayOffset() with an argument specifying the + fraction of the day where you want the line positioned.

+

If you, for example, want to display the line in the middle of the + day just add the line

+  $vline->SetDayOffset( +0.5); +

+

to the previous code and the result will be

+
+
Figure 154: Modifying the position of the line within the day + [src]  +

+

+

+

As usual you may modify the font, size and color by invoking the + appropriate method (SetFont(), SetColor()) on the 'title' property of + lines.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/975Addingmarkerstoaganttbar.html b/html/includes/jpgraph/docs/html/975Addingmarkerstoaganttbar.html new file mode 100644 index 0000000000..8e016f4f82 --- /dev/null +++ b/html/includes/jpgraph/docs/html/975Addingmarkerstoaganttbar.html @@ -0,0 +1,125 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.5 Adding markers to a gantt bar

+

You can easily add a variety of markers both to the start and end of + the gantt bar. They could for example be used as an alternate way to + illustrate important milestones or anticipated deliveries.

+

The left and right markers are accessed through the two properties + 'leftMark' and 'rightMark'. They are both instances of the general + 'PlotMark' class which is also used for the milestones (and in line + graphs). The 'PlotMark' class supports several different styles, for + example, diamond (the default for milestones), filled and unfilled + circles, squares, stares, and so on. Please refer to the reference + section for a complete listing.

+

Let's illustrate this by adding a right marker to the previous + example. We will use a style of a filled (red) circle with a white + title, say, "M5". In order to accomplish this we must augment the + previous example with the following lines:

 $activity +->rightMark->Show();     +
$activity +->rightMark->title-> +Set("M5"); +
$activity +->rightMark->SetType( +MARK_FILLEDCIRCLE); +
$activity +->rightMark->SetWidth( +10); +
$activity +->rightMark->SetColor( +"red"); +
$activity +->rightMark->SetFillColor( +"red"); +
$activity +->rightMark->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
$activity +->rightMark->title-> +SetColor( +"white"); +

+

This might seem like a lot of lines but this is as complicated as it + possible can get. As an illustration in the example belwo more or less + everything that is changeable has been changed, the default font, + font-color, fill-color, frame-color and width of marker. The two lines + only really necessary are the first two, showing the mark and setting a + title. One could still get a good result by using default values for + the rest of the properties.

+

The resulting image can be seen in Figure 155 below.

+
+
Figure 155: Adding a right marker to a bar. [src]  +

+

+

We have deliberately introduced a "strangeness" here. If the + previous two examples are compared it can bee seen that the last + example is larger than the previous one. Why?

+

The explanation is trivial once we recall that the height of bars + are sized relative to the horizontal spacing. The horizontal spacing + are based on the highest single bar including title size and, here come + the explanation, marker size. The horizontal spacing has grown since + the minimum height is now based on 10 points(=the height of the mark). + The bar still occupy the same percentage of the height so it seems to + have grown.

+

If this behavior is unwanted it is always possible to specify an + absolute size for the bar heigh, say 8 pixels, with a call

+  $activity->SetHeight +(8);

+

and achieve the result in Figure 156 below.

+
+
Figure 156: Specifying an absolute size for the height of the + bar. [src]  +

+

+

It is worth noting that the height reserved for each bar is still + the same since we haven't changed the height of the marker and the + reserved space is the maximum height used by any bar.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/976Adjustingtheminimumdistancebetweenbars.html b/html/includes/jpgraph/docs/html/976Adjustingtheminimumdistancebetweenbars.html new file mode 100644 index 0000000000..a2f20d475c --- /dev/null +++ b/html/includes/jpgraph/docs/html/976Adjustingtheminimumdistancebetweenbars.html @@ -0,0 +1,97 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7.6 Adjusting the minimum distance between bars +

+

Let's see what happens if we set the height of each bar to be 100% + of the reserved height by adding another activity/bar below the first + one and set the height of each bar to 100% by adding the lines (We omit + the added lines to add another bar since they are just a copy of the + first bar)

+ $activity-> +SetHeight(1.0); +
$activity2 +->SetHeight(1.0); +

+

to the previous example. (Note that a value in the range [0..1] is + interpretated as the fraction of the reserved height while a value > 1 + is interpretated as the absolute size in pixels.)

+
+
Figure 157: Setting the height for each bar to 100% [src]  +

+

+

Aha.. What we are trying to do doesn't really make sense. Since we + have specified that the bar will always occupy 100% of the available + reserved with there will be no distance between the bars. So what if we + specify the bar as 10 pixel absolute by changing the lines to

+  $activity->SetHeight +(10); +
$activity2 +->SetHeight(10); +

+

we instead get

+
+
Figure 158: Setting both bars height to 10 pixels [src]  +

+

+

So what can we actually do? Well if you remember the reserved height + for each bar is the maximum height of all bars including titles. This + guarantees that no two bars will ever overlap. To guarantee that titles + don't end up too close together there is a Vertical Label Margin + which basically specifies some extra "air" in between the titles. The + amount of air is specified in percent of the title height. To set the + margin you use

+ GanttGraph:: +SetLabelVMarginFactor( +$aMargin) +

+

As an example let's set that margin in the previous example to 0 and + see what happens.

+
+
Figure 159: Setting the vertical label margin to 0% [src]  +

+

+

As you would perhaps expect the two bars just barely touches now + since there are no extra margin added. If the two bars hadn't had the + extra right marker it would have looked very compressed.

+

By default the vertical margin is set to 40%.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/97Ganttbars.html b/html/includes/jpgraph/docs/html/97Ganttbars.html new file mode 100644 index 0000000000..1fa671e770 --- /dev/null +++ b/html/includes/jpgraph/docs/html/97Ganttbars.html @@ -0,0 +1,82 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.7 Gantt bars

+

The most common of all object in a Gantt chart is of course the + activity bar (GanttBar()). In terms of formatting this object has a + very large flexibility. The full signature for the GanttBar constructor + is

function  +GanttBar( +$aVPos,$aTitle,$aStart +,$aEnd,$aCaption, +$aHeight) +

+

+

+ + + + + + + +
+ +  $aVPos  + The vertical position for the + bar, [0..n]
+ +  $aTitle  + Title for the activity
+ +  $aStart  + Start date for the activity given + as string, e.g "2001-09-22"
+ +  $aEnd  + End date for activity given as either + a date (a string) or as the duration (in days) of the activity, e.g + both "2001-10-15" and 20.5 are valid inputs
+ +  $aCaption  + Text string (caption) to appear + at the end (right side) of the bar
+ +  $aHeight  + Height of bar given as either + a value in range [0,1] in which case this is interpretated as what + fraction of the vertical position should the bar occupy. The height can + also be given in absolute pixels [1..200]
+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/981Minutescale.html b/html/includes/jpgraph/docs/html/981Minutescale.html new file mode 100644 index 0000000000..73bdc04baf --- /dev/null +++ b/html/includes/jpgraph/docs/html/981Minutescale.html @@ -0,0 +1,83 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.1 Minute scale

+

Minute scale is the lowest resolution you can use. It is often + convenient to use Minute scale with "GanttScale::SetINtervall()" since + by default the increment will be 1 minute. The style of minute scale + can be further adjusted by the use style parameters which can be + one of

+
    +
  1. "MINUTESTYLE_MM", This will display minutes as a two digit number + with a leading zero if necessary
  2. +
  3. "MINUTESTYLE_CUSTOM", This will let you specify you own custom + minute style by making a call to HeaderProperty:: SetFormatString() +
  4. +
+

Minute scale is enabled by adding the GANTT_HMIN in the + GanttGraph::ShowHeaders() call. For example as in

+  $graph +->ShowHeaders(GANTT_HDAY  +GANTT_HHOUR  +GANTT_HMIN); +

+

The code snippet below shows how to set up a minute scale with 30 + min interval and some custom colors.

+  $graph->scale-> +minute-> +SetIntervall( +30); +
$graph->scale-> +minute-> +SetBackgroundColor( +'lightyellow:1.5'); +
$graph->scale-> +minute-> +SetFont( +FF_FONT0); +
$graph->scale-> +minute-> +SetStyle( +MINUTESTYLE_MM); +
$graph->scale-> +minute->grid->SetColor +('lightgray');

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/982Hourscale.html b/html/includes/jpgraph/docs/html/982Hourscale.html new file mode 100644 index 0000000000..76e554ac3b --- /dev/null +++ b/html/includes/jpgraph/docs/html/982Hourscale.html @@ -0,0 +1,86 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.2 Hour scale

+

The hour scale has more builtin formatting possibilities. The + following formatting options are available

+
    +
  1. "HOURSTYLE_HM24", Will display the only the hour in military time + 0-24 , for example 13:00
  2. +
  3. "HOURSTYLE_H24", Will display the hour with both hour and minute in + military time 0-24, for example 13
  4. +
  5. "HOURSTYLE_HMAMPM", Will display the hour and minutes with a + suitable am/pm postfix, for example 1:30pm
  6. +
  7. "HOURSTYLE_HAMPM", Will display only the hour with a suitable am/pm + postfix, for example 1pm
  8. +
  9. "HOURSTYLE_CUSTOM", Custom defined format as specified with a call + to HeaderProperty::SetFormatString()
  10. +
+

For hours it is possible to specify the interval in either of two + ways. With an integer, e.g. 6, or as time interval, e.g. "1:30" which + makes the interval one and a half hour. The only restriction is that + the interval must be even dividable for 24 hours since one day is the + smallest possible interval to show. This means that it is allowed to + use, for example 2,4,6,"1:30" or "0:45" as intervals but not 7, "2:45".

+

The code snippet below shows hot to set up a hour scale to with 45 + minutes interval and some custom colors

 $graph +->scale->hour-> +SetBackgroundColor( +'lightyellow:1.5'); +
$graph->scale-> +hour->SetFont(FF_FONT1 +); +
$graph->scale-> +hour->SetStyle(HOURSTYLE_HMAMPM); +
$graph->scale-> +hour-> +SetIntervall( +"0:45"); +

+

The example below shows a gantt chart with the day and hour scale + enabled

+
+
Figure 160: Using hour scale in the Gantt chart [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/983Dayscale.html b/html/includes/jpgraph/docs/html/983Dayscale.html new file mode 100644 index 0000000000..b2d52ace0a --- /dev/null +++ b/html/includes/jpgraph/docs/html/983Dayscale.html @@ -0,0 +1,89 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.3 Day scale

+

By default the day scale show the first letter of the week day but + it is also posible to format the day scale in a number of different + ways. Days can have one of the following scale formats.

+
    +
  • DAYSTYLE_ONELETTER, On letter week day. Example "M"
  • +
  • DAYSTYLE_LONG, Full week day. Example "Monday"
  • +
  • DAYSTYLE_LONGDAYDATE1, Day with date. Example "Monday 23 Jun"
  • +
  • DAYSTYLE_LONGDAYDATE2, Day with date+year. Example "Monday 23 Jun + 2003"
  • +
  • DAYSTYLE_SHORT, Short date. Example "Mon"
  • +
  • DAYSTYLE_SHORTDAYDATE1, Short date+date. Example "Mon 23/6"
  • +
  • DAYSTYLE_SHORTDAYDATE2, Short date+date. Example "Mon 23 Jun"
  • +
  • DAYSTYLE_SHORTDAYDATE3,Short date+date. Example "Mon 23"
  • +
  • DAYSTYLE_SHORTDATE1, Short date. Example "23/6"
  • +
  • DAYSTYLE_SHORTDATE2, Short date. Example "23 Jun"
  • +
  • DAYSTYLE_SHORTDATE3, Short date. Example "Mon 23"
  • +
  • DAYSTYLE_SHORTDATE4, Short date. Example "23"
  • +
  • DAYSTYLE_CUSTOM, Custom specified formatting string. Example "M"
  • +
+

The formatting is specified by using the SetStyle() method as in

+  $graph +->scale->day-> +SetStyle( +DAYSTYLE_LONG); +

+

The graphical formatting possibilities for days allow the + possibility to specify a different color for the weekend background and + also for the Sunday.

+
    +
  • + SetWeekendColor() +
    +

    Set the background color for weekends. (Defaults to light gray)

    +
  • +
  • + SetSundayFontColor() +
    +

    The Sunday font color. (Defaults to red)

    +
  • +
+

In addition to this there is also a possibility to choose whether or + not the weekend background should be extended vertically down over the + plot area. (the default). Since that is a property more of the whole + plot this behavior is modified with a call to the method

+  UseWeekendBackground()
+

+

of the scale, e.g. +
 

+ $graph->scale->UseWeekendBackground(false +);

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/984Weekscale.html b/html/includes/jpgraph/docs/html/984Weekscale.html new file mode 100644 index 0000000000..113829c1a3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/984Weekscale.html @@ -0,0 +1,73 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.4 Week scale

+

Week scales, if enabled, by default shows the week number in range 1 + to 53 (as defined by ISO-8601, see the reference section).

+

It might be worth pointing out here that the week number calculation + is carried out within JpGraph and does not rely on the underlying OS + date libraries. This makes the behavior consistent over several OS:s + (at least M$ Windows does not comply to ISO-8601 or supply any + way of doing this through the normal libraries, e.g. strftime())

+

You may modify the week behavior in three ways. You can specify + (with SetStyle()) a different date format using the constants

+
    +
  • + WEEKSTYLE_WNBR
    +

    Show week number To further modify the formatting of the actual week + number you can optionally supply a format string with a call to

    +  SetLabelFormatString()
    +

    +

    The format of the string should be a standard sprintf() syntax + expecting an integer (the week number). By default a 'W' is prefixed to + the number.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY
    +

    Show date of first day in week.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY2
    +

    Show date of first day in week and short month

    +
  • +
  • + WEEKSTYLE_FIRSTDAYWNBR
    +

    Show weeknumber of first day in week.

    +
  • +
  • + WEEKSTYLE_FIRSTDAY2WNBR
    +

    Show weeknumber of first day in week and month

    +
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/985Monthscale.html b/html/includes/jpgraph/docs/html/985Monthscale.html new file mode 100644 index 0000000000..060a1c2e1a --- /dev/null +++ b/html/includes/jpgraph/docs/html/985Monthscale.html @@ -0,0 +1,73 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.5 Month scale

+

For month scale you can use the SetStyle() method to choose between + a variety of formats.

+
    +
  • + MONTHSTYLE_SHORTNAME
    +

    Display the month name in its locale specific short form, i.e Jan, + Feb etc

    +
  • +
  • + MONTHSTYLE_SHORTNAMEYEAR2
    +

    Display the month name in its locale specific short form together + with a 2 digit year , i.e Jan '01, Feb '01 etc

    +
  • +
  • + MONTHSTYLE_SHORTNAMEYEAR4
    +

    Display the month name in its locale specific short form together + with a 4 digit year , i.e Jan 2001, Feb 2001 etc

    +
  • +
  • + MONTHSTYLE_LONGNAME
    +

    Display the month name in its locale specific long name, i.e. + January, February

    +
  • +
  • + MONTHSTYLE_LONGNAMEYEAR2
    +

    Display the month name in its locale specific long name together with + a 2 digit year , i.e January '01, February '01 etc

    +
  • +
  • + MONTHSTYLE_LONGNAMEYEAR4
    +

    Display the month name in its locale specific long name together with + a 4 digit year , i.e January 2001, February 2001 etc

    +
  • +
  • + MONTHSTYLE_FIRSTLETTER
    +

    The first letter of the month name

    +
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/986Yearscale.html b/html/includes/jpgraph/docs/html/986Yearscale.html new file mode 100644 index 0000000000..2f7e85a013 --- /dev/null +++ b/html/includes/jpgraph/docs/html/986Yearscale.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8.6 Year scale

+

Year scale has no extra formatting possibilities.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/98Formattingthescaleheaders.html b/html/includes/jpgraph/docs/html/98Formattingthescaleheaders.html new file mode 100644 index 0000000000..37c09ad056 --- /dev/null +++ b/html/includes/jpgraph/docs/html/98Formattingthescaleheaders.html @@ -0,0 +1,129 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.8 Formatting the scale headers

+

The scale headers allow you to view up to four different scales at + the same time. The four basic scales are:

+
    +
  • Day scale
  • +
  • Week scale
  • +
  • Month scale
  • +
  • Year scale
  • +
+

You can choose what scale to include and exclude by using the + SetScale() method. For example, for a detailed gantt you might choose + to display days and weeks by specifying

 $graph +->ShowHeaders +( GANTT_HWEEK  +| GANTT_DAY );

+

If you instead wanted "the big picture" it might be enough to show + year and months by specifying

+  $graph->ShowHeaders +GANTT_YEAR  +GANTT_MONTH ); +

+

You can choose freely the combination of scales that you want, but a + chart must at least have one scale of course.

+

Once you have decided what level of details you need you can then + fine tune the exact layout/formatting of each of the enabled scales as + described below.

+

These scale header are all accessed through the graph instance + variables 'scale' as in

+  $graph->scale-> +week

+

or

+ $graph->scale->day
+

+

. All these headers share the following properties.

+
    +
  • + Show() +
    +

    Determine if the scale should be shown or not

    +
  • +
  • + SetFont() +
    +

    Font for text in header

    +
  • +
  • + SetFontColor() +
    +

    Specify the color of the header text

    +
  • +
  • + SetStyle() +
    +

    Specify what date format should be used, for example in the week + scale it is possible to show either week number, the start date of the + week and so on.

    +
  • +
  • + SetBackgroundColor() +
    +

    As it says, the background color for the header

    +
  • +
  • + SetFrameWeight() +
    +

    The line weight of the box around the scale

    +
  • +
  • + SetFrameColor() +
    +

    The line color for the frame

    +
  • +
  • + SetTitleVertMargin() +
    +

    The margin, in percent, below and above the title text

    +
  • +
+

In addition to these methods each scale also has the property 'grid' + which determines the appearance of grid lines for that specific scale. + You may modify the appearance of grid lines by the "normal" line + methods, i.e. SetColor(),SetWeight() SetStyle() and Show(). So for + example to set the week grid line red you would use

+  $graph +->scale->week-> +grid->SetColor("red" +);

+

Each of the scales also have some specific formatting possibilities + as described below.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/991Addingcaptiontobars.html b/html/includes/jpgraph/docs/html/991Addingcaptiontobars.html new file mode 100644 index 0000000000..5b109c46ec --- /dev/null +++ b/html/includes/jpgraph/docs/html/991Addingcaptiontobars.html @@ -0,0 +1,71 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.9.1 Adding caption to bars

+

Caption for bars are placed at the far right side of the bars. They + can for example be used to indicate the resources assigned to a task, + the duration of the task or the progress of the activity.

+

Caption text for a bar is specified either when creating a bar or + later by accessing the 'caption' property of bars. So the two lines

+  $activity = new GanttBar +(0,"Activity 1", +"2001-11-21", +"2001-12-20", +"[BS,ER]") +

+

and

+ $activity-> +caption->Set("[BS,ER]" +);

+

are both ways of specifying the caption "[BS,ER]" for the activity. + Since activity is a standard JpGraph text object you can easily modify + font, color and size with calls to SetFont() and SetColor(), (e.g.

+  $activity->caption +->SetFont(FF_ARIAL, +FF_BOLD,9);
+

+

+

The figure below illustrates the use of caption

+
+
Figure 161: Illustration of the use of captions [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/992Addingprogressindicatorstobars.html b/html/includes/jpgraph/docs/html/992Addingprogressindicatorstobars.html new file mode 100644 index 0000000000..678498ce65 --- /dev/null +++ b/html/includes/jpgraph/docs/html/992Addingprogressindicatorstobars.html @@ -0,0 +1,76 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.9.2 Adding progress indicators to bars

+

To indicate the progress of a specific activity it is also possible + to add a progress indicator to each bar. This progress indicator + consists of a smaller bar within the bar. By default this progress bar + is black and 70% of the height of the bar. These parameter can (of + course) all be changed.

+

The properties for the progress indicator are accessed through the + 'progress' property and it's methods.

+

To set the progress for a specific activity you only specify the + percent as a fraction. As in

+  $activity->progress-> +Set(0.4)
+

+

In Figure 162 the previous example is modified to indicate the + progress of each activity by the default progress indicator. A solid + bar. To make it clearer we have also modified the caption to reflect + the displayed progress. (At the same time we also modified the scale + headers just to illustrate some more formatting options).

+
+
Figure 162: Adding progress indicators. [src]  +

+

+

To specify a different format for the progress you use the + SetPattern() method as in

+  $activity->progress-> +SetPattern( +BAND_RDIAG, +"blue"); +

+

In the reference section you can see the exact parameters and all + available methods.

+
+
Figure 163: Changing the style of the progress indicators. [src]  +

+

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/99Moreformattingforbars.html b/html/includes/jpgraph/docs/html/99Moreformattingforbars.html new file mode 100644 index 0000000000..2b797fff9a --- /dev/null +++ b/html/includes/jpgraph/docs/html/99Moreformattingforbars.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9.9 More formatting for bars

+

This section shows some further modification you might do to + activity bars.

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9Ganttcharts.html b/html/includes/jpgraph/docs/html/9Ganttcharts.html new file mode 100644 index 0000000000..80fabb6783 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9Ganttcharts.html @@ -0,0 +1,35 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9 Gantt charts

+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/9WorkingwithnonXYplots.html b/html/includes/jpgraph/docs/html/9WorkingwithnonXYplots.html new file mode 100644 index 0000000000..07cf236ee0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/9WorkingwithnonXYplots.html @@ -0,0 +1,52 @@ + + + + + + + + + + + +Contents +Previous +Next +
+

9 Working with non X,Y-plots

+

Non X,Y plots includes

+
    +
  • Pie plots (2D and 3D)
  • +
  • Radar plots
  • +
  • Polar plots
  • +
  • Gantt charts
  • +
+

The fundamental difference is that these classes makes use of an + extended version of the basic Graph class. Therefor you can not mix X,Y + plots with non-X,Y plots. For example it is not possible to mix a line + graph with a Polar graph.

+
    +
  • To create 2d or 3d pie plots you must use the PieGraph class
  • +
  • To create radar plots you must use the RadarGraph() class
  • +
  • To create radar plots you must use the PolarGraph() class
  • +
  • To create gantt plots you must use the GanttGraph() class
  • +
+

+
+Contents +Previous +Next + + diff --git a/html/includes/jpgraph/docs/html/exframes/JpGraph_Logo.html b/html/includes/jpgraph/docs/html/exframes/JpGraph_Logo.html new file mode 100644 index 0000000000..2b969ebcb7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/JpGraph_Logo.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(JpGraph_Logo.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'JpGraph_Logo.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/alphabarex1.html b/html/includes/jpgraph/docs/html/exframes/alphabarex1.html new file mode 100644 index 0000000000..92fef3e6fe --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/alphabarex1.html @@ -0,0 +1,3 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$datay1=array(140,110,50,60);
$datay2=array(35,90,190,190);
$datay3=array(20,60,70,140);

// Create the basic graph
$graph = new Graph(450,250,'auto');    
$graph->SetScale("textlin");
$graph->img->SetMargin(40,80,30,40);

// Adjust the position of the legend box
$graph->legend->Pos(0.02,0.15);

// Adjust the color for theshadow of the legend
$graph->legend->SetShadow('darkgray@0.5');
$graph->legend->SetFillColor('lightblue@0.3');

// Get localised version of the month names
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

// Set a nice summer (in Stockholm) image
$graph->SetBackgroundImage('stship.jpg',BGIMG_COPY);

// Set axis titles and fonts
$graph->xaxis->title->Set('Year 2002');
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetColor('white');

$graph->xaxis->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->SetColor('white');

$graph->yaxis->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->SetColor('white');

//$graph->ygrid->Show(false);
$graph->ygrid->SetColor('white@0.5');

// Setup graph title
$graph->title->Set('Using alpha blending with a background');
// Some extra margin (from the top)
$graph->title->SetMargin(3);
$graph->title->SetFont(FF_COMIC,FS_NORMAL,12);

// Create the three var series we will combine
$bplot1 = new BarPlot($datay1);
$bplot2 = new BarPlot($datay2);
$bplot3 = new BarPlot($datay3);

// Setup the colors with 40% transparency (alpha channel)
$bplot1->SetFillColor('orange@0.4');
$bplot2->SetFillColor('brown@0.4');
$bplot3->SetFillColor('darkgreen@0.4');

// Setup legends
$bplot1->SetLegend('Label 1');
$bplot2->SetLegend('Label 2');
$bplot3->SetLegend('Label 3');

// Setup each bar with a shadow of 50% transparency
$bplot1->SetShadow('black@0.4');
$bplot2->SetShadow('black@0.4');
$bplot3->SetShadow('black@0.4');

$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3));
$gbarplot->SetWidth(0.6);
$graph->Add($gbarplot);

$graph->Stroke();
?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/antispamex01.html b/html/includes/jpgraph/docs/html/exframes/antispamex01.html new file mode 100644 index 0000000000..6e9ad97b5d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/antispamex01.html @@ -0,0 +1,3 @@ + +<?php
// Antispam example using a random string
require_once "../jpgraph_antispam.php";

// Create new anti-spam challenge creator
// Note: Neither '0' (digit) or 'O' (letter) can be used to avoid confusion
$spam = new AntiSpam();

// Create a random 5 char challenge and return the string generated
$chars $spam->Rand(5);

// Stroke random cahllenge
if( $spam->Stroke() === false ) {
    die(
'Illegal or no data to plot');
}

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/backgroundex03.html b/html/includes/jpgraph/docs/html/exframes/backgroundex03.html new file mode 100644 index 0000000000..1c80d0bbc6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/backgroundex03.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// Some data
$datay = array(28,19,18,23,12,11);
$data2y = array(14,18,33,29,39,55);

// A nice graph with anti-aliasing
$graph = new Graph(400,200,"auto");
$graph->img->SetMargin(40,180,40,40);    
$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_COPY);

$graph->img->SetAntiAliasing("white");
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->title->Set("Background image");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Slightly adjust the legend from it's default position in the
// top right corner. 
$graph->legend->Pos(0.05,0.5,"right","center");

// Create the first line
$p1 = new LinePlot($datay);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);
$p1->SetColor("blue");
$p1->SetCenter();
$p1->SetLegend("Triumph Tiger -98");
$graph->Add($p1);

// ... and the second
$p2 = new LinePlot($data2y);
$p2->mark->SetType(MARK_STAR);
$p2->mark->SetFillColor("red");
$p2->mark->SetWidth(4);
$p2->SetColor("red");
$p2->SetCenter();
$p2->SetLegend("New tiger -99");
$graph->Add($p2);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/balloonex1.html b/html/includes/jpgraph/docs/html/exframes/balloonex1.html new file mode 100644 index 0000000000..5b8a01e8e3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/balloonex1.html @@ -0,0 +1,3 @@ + +<?php
// $Id: balloonex1.php,v 1.5 2002/12/15 16:08:51 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

// Some data
$datax = array(1,2,3,4,5,6,7,8);
$datay = array(12,23,95,18,65,28,86,44);
// Callback for markers
// Must return array(width,color,fill_color)
// If any of the returned values are "" then the
// default value for that parameter will be used.
function FCallback($aVal) {
    
// This callback will adjust the fill color and size of
    // the datapoint according to the data value according to
    
if( $aVal 30 $c "blue";
    elseif( 
$aVal 70 $c "green";
    else 
$c="red";
    return array(
floor($aVal/3),"",$c);
}

// Setup a basic graph
$graph = new Graph(400,300,'auto');
$graph->SetScale("linlin");
$graph->img->SetMargin(40,100,40,40);        
$graph->SetShadow();
$graph->title->Set("Example of ballon scatter plot");
// Use a lot of grace to get large scales
$graph->yaxis->scale->SetGrace(50,10);

// Make sure X-axis as at the bottom of the graph
$graph->xaxis->SetPos('min');

// Create the scatter plot
$sp1 = new ScatterPlot($datay,$datax);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);

// Uncomment the following two lines to display the values
$sp1->value->Show();
$sp1->value->SetFont(FF_FONT1,FS_BOLD);

// Specify the callback
$sp1->mark->SetCallback("FCallback");

// Setup the legend for plot
$sp1->SetLegend('Year 2002');

// Add the scatter plot to the graph
$graph->Add($sp1);

// ... and send to browser
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bar_csimex1.html b/html/includes/jpgraph/docs/html/exframes/bar_csimex1.html new file mode 100644 index 0000000000..5c18684927 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bar_csimex1.html @@ -0,0 +1,4 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_bar.php");

$datay=array(12,26,9,17,31);

// Create the graph. 
// One minute timeout for the cached image
// INLINE_NO means don't stream it back to the browser.
$graph = new Graph(310,250,'auto');
$graph->SetScale("textlin");
$graph->img->SetMargin(60,30,20,40);
$graph->yaxis->SetTitleMargin(45);
$graph->yaxis->scale->SetGrace(30);
$graph->SetShadow();

// Turn the tickmarks
$graph->xaxis->SetTickSide(SIDE_DOWN);
$graph->yaxis->SetTickSide(SIDE_LEFT);

// Create a bar pot
$bplot = new BarPlot($datay);

// Create targets for the image maps. One for each column
$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$bplot->SetCSIMTargets($targ,$alts);
$bplot->SetFillColor("orange");

// Use a shadow on the bar graphs (just use the default settings)
$bplot->SetShadow();
$bplot->value->SetFormat(" $ %2.1f",70);
$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
$bplot->value->SetColor("blue");
$bplot->value->Show();

$graph->Add($bplot);

$graph->title->Set("Image maps barex1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('bar_csimex1.php','bar_csimex1');


?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bar_csimex2.html b/html/includes/jpgraph/docs/html/exframes/bar_csimex2.html new file mode 100644 index 0000000000..65ebf8302a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bar_csimex2.html @@ -0,0 +1,4 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_bar.php");

$data1y=array(12,8,19,3,10,5);
$data2y=array(8,2,12,7,14,4);

// Create the graph. These two calls are always required
$graph = new Graph(310,200,'auto');
$graph->SetScale("textlin");
$graph->img->SetMargin(40,30,20,40);
$graph->SetShadow();

// Create the bar plots
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3",
"bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$b1plot->SetCSIMTargets($targ,$alts);

$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");
$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9",
"bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$b2plot->SetCSIMTargets($targ,$alts);

// Create the grouped bar plot
$abplot = new AccBarPlot(array($b1plot,$b2plot));

$abplot->SetShadow();
$abplot->value->Show();

// ...and add it to the graPH
$graph->Add($abplot);

$graph->title->Set("Image map barex2");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);


// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('bar_csimex2.php');

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bar_csimex3.html b/html/includes/jpgraph/docs/html/exframes/bar_csimex3.html new file mode 100644 index 0000000000..126e26712f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bar_csimex3.html @@ -0,0 +1,4 @@ + +<?php
// $Id: bar_csimex3.php,v 1.3 2002/08/31 20:03:46 aditus Exp $
// Horiontal bar graph with image maps
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$data1y=array(5,8,19,3,10,5);
$data2y=array(12,2,12,7,14,4);

// Setup the basic parameters for the graph
$graph = new Graph(400,700);
$graph->SetAngle(90);
$graph->SetScale("textlin");

// The negative margins are necessary since we
// have rotated the image 90 degress and shifted the 
// meaning of width, and height. This means that the 
// left and right margins now becomes top and bottom
// calculated with the image width and not the height.
$graph->img->SetMargin(-80,-80,210,210);

$graph->SetMarginColor('white');

// Setup title for graph
$graph->title->Set('Horizontal bar graph');
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->subtitle->Set("With image map\nNote: The URL just points back to this image");

// Setup X-axis.
$graph->xaxis->SetTitle("X-title",'center');
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetAngle(90);
$graph->xaxis->SetTitleMargin(30);
$graph->xaxis->SetLabelMargin(15);
$graph->xaxis->SetLabelAlign('right','center');

// Setup Y-axis

// First we want it at the bottom, i.e. the 'max' value of the
// x-axis
$graph->yaxis->SetPos('max');

// Arrange the title
$graph->yaxis->SetTitle("Turnaround (mkr)",'center');
$graph->yaxis->SetTitleSide(SIDE_RIGHT);
$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD);
$graph->yaxis->title->SetAngle(0);
$graph->yaxis->title->Align('center','top');
$graph->yaxis->SetTitleMargin(30);

// Arrange the labels
$graph->yaxis->SetLabelSide(SIDE_RIGHT);
$graph->yaxis->SetLabelAlign('center','top');

// Create the bar plots with image maps
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3",
            
"bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$b1plot->SetCSIMTargets($targ,$alts);

$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");
$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9",
            
"bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$b2plot->SetCSIMTargets($targ,$alts);

// Create the accumulated bar plot
$abplot = new AccBarPlot(array($b1plot,$b2plot));
$abplot->SetShadow();

// We want to display the value of each bar at the top
$abplot->value->Show();
$abplot->value->SetFont(FF_FONT1,FS_NORMAL);
$abplot->value->SetAlign('left','center');
$abplot->value->SetColor("black","darkred");
$abplot->value->SetFormat('%.1f mkr');

// ...and add it to the graph
$graph->Add($abplot);

// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('bar_csimex3.php','bar_csimex3');

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex1.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex1.html new file mode 100644 index 0000000000..090658a724 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex1.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_MIDVER"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDVER);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex2.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex2.html new file mode 100644 index 0000000000..b92655069a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex2.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_MIDHOR"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDHOR);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex3.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex3.html new file mode 100644 index 0000000000..ee439bb643 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex3.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_HOR"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_HOR);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex4.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex4.html new file mode 100644 index 0000000000..27a72a6a77 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex4.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_VER"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_VER);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex5.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex5.html new file mode 100644 index 0000000000..d4ed655bec --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex5.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_WIDE_MIDVER"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDVER);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex6.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex6.html new file mode 100644 index 0000000000..9f2609a610 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex6.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_WIDE_MIDHOR"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDHOR);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex7.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex7.html new file mode 100644 index 0000000000..74d354fcb9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex7.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_CENTER"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient("navy","lightsteelblue",GRAD_CENTER);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bargradsmallex8.html b/html/includes/jpgraph/docs/html/exframes/bargradsmallex8.html new file mode 100644 index 0000000000..99f2682f08 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bargradsmallex8.html @@ -0,0 +1,4 @@ + +<?php

include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// We need some data
$datay=array(4,8,6);

// Setup the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->img->SetMargin(25,15,25,25);

$graph->title->Set('"GRAD_RAISED_PANEL"');
$graph->title->SetColor('darkred');

// Setup font for axis
$graph->xaxis->SetFont(FF_FONT1);
$graph->yaxis->SetFont(FF_FONT1);

// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Setup color for gradient fill style 
$bplot->SetFillGradient('navy','orange',GRAD_RAISED_PANEL);

// Set color for the frame of each bar
$bplot->SetColor("navy");
$graph->Add($bplot);

// Finally send the graph to the browser
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/barline_csimex1.html b/html/includes/jpgraph/docs/html/exframes/barline_csimex1.html new file mode 100644 index 0000000000..2bdcf5456b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/barline_csimex1.html @@ -0,0 +1,3 @@ + +<?php 
include ("../jpgraph.php"); 
include (
"../jpgraph_line.php"); 
include (
"../jpgraph_bar.php"); 

$ydata = array(2,3,4,5,6,7,8,9,10,11); 
$ydata2 = array(1,2,3,4,5,6,7,8,9,10); 
$targ = array("#1","#2","#3","#4","#5","#6","#7","#8","#9","#10");
$alt = array(1,2,3,4,5,6,7,8,9,10); 

// Create the graph. 
$graph = new Graph(300,200,"auto");     
$graph->SetScale("textlin"); 
$graph->img->SetMargin(40,20,30,40); 
$graph->title->Set("CSIM example with bar and line"); 
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Setup axis titles
$graph->xaxis->title->Set("X-title"); 
$graph->yaxis->title->Set("Y-title"); 

// Create the linear plot 
$lineplot=new LinePlot($ydata); 
$lineplot->mark->SetType(MARK_FILLEDCIRCLE);
$lineplot->mark->SetWidth(5);
$lineplot->mark->SetColor('black');
$lineplot->mark->SetFillColor('red');
$lineplot->SetCSIMTargets($targ,$alt);

// Create line plot
$barplot=new barPlot($ydata2); 
$barplot->SetCSIMTargets($targ,$alt);

// Add the plots to the graph 
$graph->Add($lineplot); 
$graph->Add($barplot); 

$graph->StrokeCSIM('barline_csimex1.php');

?> 


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/barlinefreq_csimex1.html b/html/includes/jpgraph/docs/html/exframes/barlinefreq_csimex1.html new file mode 100644 index 0000000000..c216574593 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/barlinefreq_csimex1.html @@ -0,0 +1,4 @@ + +<?php
//
// Example of CSIM frequence bar that uses the cache
//
include_once ("../jpgraph.php");
include_once (
"../jpgraph_bar.php");
include_once (
"../jpgraph_line.php");


// Utility function to calculate the accumulated frequence
// for a set of values and ocurrences
function accfreq($data) {
    
rsort($data);
    
$s array_sum($data);
    
$as = array($data[0]);
    
$asp = array(100*$as[0]/$s);
    
$n count($data);
    for( 
$i=1$i $n; ++$i ) {
    
$as[$i] = $as[$i-1]+$data[$i];
    
$asp[$i] = 100.0*$as[$i]/$s;
    }
    return 
$asp;
}

// some data
$data_freq = array(22,20,12,10,5,4,2);
$data_accfreq accfreq($data_freq);

// Create the graph. 
$graph = new Graph(350,250);

// We need to make this extra call for CSIM scripts
// that make use of the cache. If the cache contains this
// graph the HTML wrapper will be returned and then the
// method will call exit() and hence NO LINES AFTER THIS 
// CALL WILL BE EXECUTED.
// $graph->CheckCSIMCache('auto');

// Setup some basic graph parameters
$graph->SetScale("textlin");
$graph->SetY2Scale('lin',0,100);
$graph->img->SetMargin(50,70,30,40);
$graph->yaxis->SetTitleMargin(30);
$graph->SetMarginColor('#EEEEEE');

// Setup titles and fonts
$graph->title->Set("Frequence plot");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Turn the tickmarks
$graph->xaxis->SetTickSide(SIDE_DOWN);
$graph->yaxis->SetTickSide(SIDE_LEFT);

$graph->y2axis->SetTickSide(SIDE_RIGHT);
$graph->y2axis->SetColor('black','blue');
$graph->y2axis->SetLabelFormat('%3d.0%%');

// Create a bar pot
$bplot = new BarPlot($data_freq);

// Create targets and alt texts for the image maps. One for each bar
// (In this example this is just "dummy" targets)
$targ=array("#1","#2","#3","#4","#5","#6","#7");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$bplot->SetCSIMTargets($targ,$alts);


// Create accumulative graph
$lplot = new LinePlot($data_accfreq);

// We want the line plot data point in the middle of the bars
$lplot->SetBarCenter();

// Use transperancy
$lplot->SetFillColor('lightblue@0.6');
$lplot->SetColor('blue@0.6');
//$lplot->SetColor('blue');
$graph->AddY2($lplot);


// Setup the bars
$bplot->SetFillColor("orange@0.2");
$bplot->SetValuePos('center');
$bplot->value->SetFormat("%d");
$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
$bplot->value->Show();

// Add it to the graph
$graph->Add($bplot);

// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('barlinefreq_csimex1.php');

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex1.html b/html/includes/jpgraph/docs/html/exframes/bartutex1.html new file mode 100644 index 0000000000..773a6834f5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$databary=array(12,7,16,5,7,14,9,3);

// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Set title and subtitle
$graph->title->Set("Elementary barplot with a text scale");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");
//$b1->SetAbsWidth(6);
//$b1->SetShadow();

// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex2.html b/html/includes/jpgraph/docs/html/exframes/bartutex2.html new file mode 100644 index 0000000000..debde985d1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$databary=array(12,7,16,6,7,14,9,3);
$months=$gDateLocale->GetShortMonth();

// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Specify X-labels
$graph->xaxis->SetTickLabels($months);

// Set title and subtitle
$graph->title->Set("Textscale with specified labels");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");

//$b1->SetAbsWidth(6);
//$b1->SetShadow();

// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex3.html b/html/includes/jpgraph/docs/html/exframes/bartutex3.html new file mode 100644 index 0000000000..c48d1f0267 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$months=$gDateLocale->GetShortMonth();

srand ((double) microtime() * 1000000);
for( 
$i=0$i<25; ++$i) {
    
$databary[]=rand(1,50);
    
$databarx[]=$months[$i%12];
}
    
// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Specify X-labels
$graph->xaxis->SetTickLabels($databarx);

// Set title and subtitle
$graph->title->Set("Bar tutorial example 3");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");
//$b1->SetAbsWidth(6);
//$b1->SetShadow();

// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex4.html b/html/includes/jpgraph/docs/html/exframes/bartutex4.html new file mode 100644 index 0000000000..4f030cb6fe --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex4.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$months=$gDateLocale->GetShortMonth();

srand ((double) microtime() * 1000000);
for( 
$i=0$i<25; ++$i) {
    
$databary[]=rand(1,50);
    
$databarx[]=$months[$i%12];
}
    
// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Specify X-labels
//$databarx = array('tXi','','','xxx','','','iXii','','','OOO','','','tOO');
$graph->xaxis->SetFont(FF_FONT1,FS_NORMAL);
$graph->xaxis->SetTickLabels($databarx);
$graph->xaxis->SetTextLabelInterval(3);

// Set title and subtitle
$graph->title->Set("Displaying only every third label");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");
//$b1->SetAbsWidth(6);
//$b1->SetShadow();

// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex5.html b/html/includes/jpgraph/docs/html/exframes/bartutex5.html new file mode 100644 index 0000000000..91be3b7f20 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex5.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$months=$gDateLocale->GetShortMonth();

srand ((double) microtime() * 1000000);
for( 
$i=0$i<25; ++$i) {
    
$databary[]=rand(1,50);
    
$databarx[]=$months[$i%12];
}
    
// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Specify X-labels
$graph->xaxis->SetTickLabels($databarx);
$graph->xaxis->SetTextLabelInterval(1);
$graph->xaxis->SetTextTickInterval(3);

// Set title and subtitle
$graph->title->Set("Bar tutorial example 5");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");
$b1->SetWidth(0.4);

// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/bartutex6.html b/html/includes/jpgraph/docs/html/exframes/bartutex6.html new file mode 100644 index 0000000000..38be9517ff --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/bartutex6.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

// Some data
$months=$gDateLocale->GetShortMonth();
srand ((double) microtime() * 1000000);
for( 
$i=0$i<25; ++$i) {
    
$databary[]=rand(1,50);
    
$databarx[]=$months[$i%12];
}
    
// New graph with a drop shadow
$graph = new Graph(300,200,'auto');
$graph->SetShadow();

// Use a "text" X-scale
$graph->SetScale("textlin");

// Specify X-labels
$graph->xaxis->SetTickLabels($databarx);
$graph->xaxis->SetTextLabelInterval(3);

// Hide the tick marks
$graph->xaxis->HideTicks();

// Set title and subtitle
$graph->title->Set("Bar tutorial example 6");

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create the bar plot
$b1 = new BarPlot($databary);
$b1->SetLegend("Temperature");
$b1->SetWidth(0.4);


// The order the plots are added determines who's ontop
$graph->Add($b1);

// Finally output the  image
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/boxstockcsimex1.html b/html/includes/jpgraph/docs/html/exframes/boxstockcsimex1.html new file mode 100644 index 0000000000..9290325acc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/boxstockcsimex1.html @@ -0,0 +1,4 @@ + +<?php
// Example of a stock chart
include ("../jpgraph.php");
include (
"../jpgraph_stock.php");

// Data must be in the format : open,close,min,max,median
$datay = array(
    
34,42,27,45,36,
    
55,25,14,59,40,
    
15,40,12,47,23,
    
62,38,25,65,57,
    
38,49,32,64,45);

// Setup a simple graph
$graph = new Graph(300,200);
$graph->SetScale("textlin");
$graph->SetMarginColor('lightblue');
$graph->title->Set('Box Stock chart example');

// Create a new stock plot
$p1 = new BoxPlot($datay);

// Setup URL target for image map
$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5'));

// Width of the bars (in pixels)
$p1->SetWidth(9);

//$p1->SetCenter();
// Uncomment the following line to hide the horizontal end lines
//$p1->HideEndLines();

// Add the plot to the graph and send it back to the browser
$graph->Add($p1);
$graph->StrokeCSIM(basename(__FILE__));

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/boxstockex1.html b/html/includes/jpgraph/docs/html/exframes/boxstockex1.html new file mode 100644 index 0000000000..5ed65bcea2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/boxstockex1.html @@ -0,0 +1,4 @@ + +<?php
// Example of a stock chart
include ("../jpgraph.php");
include (
"../jpgraph_stock.php");

// Data must be in the format : open,close,min,max,median
$datay = array(
    
34,42,27,45,36,
    
55,25,14,59,40,
    
15,40,12,47,23,
    
62,38,25,65,57,
    
38,49,32,64,45);

// Setup a simple graph
$graph = new Graph(300,200);
$graph->SetScale("textlin");
$graph->SetMarginColor('lightblue');
$graph->title->Set('Box Stock chart example');

// Create a new stock plot
$p1 = new BoxPlot($datay);

// Width of the bars (in pixels)
$p1->SetWidth(9);

// Uncomment the following line to hide the horizontal end lines
//$p1->HideEndLines();

// Add the plot to the graph and send it back to the browser
$graph->Add($p1);
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/builtinplotmarksex1.html b/html/includes/jpgraph/docs/html/exframes/builtinplotmarksex1.html new file mode 100644 index 0000000000..88ee9f49ab --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/builtinplotmarksex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay1 = array(2,6,7,12,13,18);
$datay2 = array(5,12,12,19,25,20);

// Setup the graph
$graph = new Graph(350,200);
$graph->SetMargin(30,20,60,20);
$graph->SetMarginColor('white');
$graph->SetScale("linlin");

// Hide the frame around the graph
$graph->SetFrame(false);

// Setup title
$graph->title->Set("Using Builtin PlotMarks");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);

// Note: requires jpgraph 1.12p or higher
// $graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT);
$graph->tabtitle->Set('Region 1' );
$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL);

// Enable X and Y Grid
$graph->xgrid->Show();
$graph->xgrid->SetColor('gray@0.5');
$graph->ygrid->SetColor('gray@0.5');

// Format the legend box
$graph->legend->SetColor('navy');
$graph->legend->SetFillColor('lightgreen');
$graph->legend->SetLineWeight(1);
$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8);
$graph->legend->SetShadow('gray@0.4',3);
$graph->legend->SetAbsPos(15,120,'right','bottom');

// Create the line plots

$p1 = new LinePlot($datay1);
$p1->SetColor("red");
$p1->SetFillColor("yellow@0.5");
$p1->SetWeight(2);
$p1->mark->SetType(MARK_IMG_DIAMOND,5,0.6);
$p1->SetLegend('2006');
$graph->Add($p1);

$p2 = new LinePlot($datay2);
$p2->SetColor("darkgreen");
$p2->SetWeight(2);
$p2->SetLegend('2001');
$p2->mark->SetType(MARK_IMG_MBALL,'red');
$graph->Add($p2);

// Add a vertical line at the end scale position '7'
$l1 = new PlotLine(VERTICAL,7);
$graph->Add($l1);

// Output the graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvas_jpgarchex.html b/html/includes/jpgraph/docs/html/exframes/canvas_jpgarchex.html new file mode 100644 index 0000000000..5ff0a6aa43 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvas_jpgarchex.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvas_jpgarchex.php,v 1.3 2002/08/29 10:14:19 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";

// Scale we are using
$ymax=24;
$xmax=20;

// Setup the basic canvas
$g = new CanvasGraph(700,650,'auto');
$g->SetMargin(2,3,2,3);
$g->SetMarginColor("teal");
$g->InitFrame();

// ... and a scale
$scale = new CanvasScale($g);
$scale->Set(0,$xmax,0,$ymax);

// ... we need shape since we want the indented rectangle
$shape = new Shape($g,$scale);
$shape->SetColor('black');

// ... basic parameters for the overall image
$l 2;        // Left margin
$r 18;    // Row number to start the lowest line on
$width 16;    // Total width

// Setup the two basic rectangle text object we  will use
$tt = new CanvasRectangleText();
$tt->SetFont(FF_ARIAL,FS_NORMAL,14);
$tt->SetFillColor('');
$tt->SetColor('');
$tt->SetFontColor('navy');

$t = new CanvasRectangleText();
$t->SetFont(FF_ARIAL,FS_NORMAL,14);
$t->SetFillColor('goldenrod1');
$t->SetFontColor('navy');


// Now start drawing the arch overview from the bottom and up
// This is all pretty manual and one day I will write a proper
// framework to make it easy to construct these types of architecture
// overviews. But for now, just plain old coordinates..

// Line: GD Library and image libraries
$h=3;
$s  3$d=$l $width-9;
$t->SetFillColor('cadetblue3');
$t->Set("TTF",$d,$r+2,$s,1);
$t->Stroke($g->img,$scale);
$t->Set("PNG",$d+$s,$r+2,$s,1);
$t->Stroke($g->img,$scale);
$t->Set("JPEG",$d+2*$s,$r+2,$s,1);
$t->Stroke($g->img,$scale);
$shape->IndentedRectangle($l,$r,$width,$h,$s*3,1,2,'lightgreen');
$tt->Set("GD Basic library\n(1.8.x or 2.x)",$l,$r,$width,$h-1); 
$tt->Stroke($g->img,$scale);


// Area: Basic internal JpGraph architecture
$t->SetFillColor('goldenrod1');
$h 2;
$r -= $h$d=8;
$t->Set("Image primitives\n(RGB, Anti-aliasing,\nGD Abstraction)",$l,$r-0.5,$width*0.5,$h+0.5);
$t->Stroke($g->img,$scale);
$t->Set("Image Cache &\nStreaming",$l+0.5*$width,$r,$width*0.4,$h);
$t->Stroke($g->img,$scale);

$r -= $h$d=8;
$t->Set("2D Rot & Transformation",$l,$r,$width*0.5,$h-0.5); $t->Stroke($g->img,$scale);


$r -= 2$h 4;
$shape->IndentedRectangle($l,$r,$width*0.9,$h,$d,2,3,'goldenrod1');
$tt->Set("Axis, Labelling, (Auto)-Scaling",$l,$r,$width*0.9,$h-2); $tt->Stroke($g->img,$scale);

$r -= 1;
$shape->IndentedRectangle($l,$r,$width,7,$width*0.9,6,3,'goldenrod1');
$tt->Set("Error handling & Utility classes",$l,$r,$width,1); $tt->Stroke($g->img,$scale);


// Area: Top area with graph components
$t->SetFillColor('gold1');
$r -= 3;
$w $width*0.55/4$h 2;
$t->Set("Gantt\nGraph",$l,$r,$w,$h);
$t->Stroke($g->img,$scale);

$t->Set("Pie\nGraph",$l+$w,$r,$w,$h);
$t->Stroke($g->img,$scale);
$t->Set("Radar\nGraph",$l+$w*2,$r,$w,$h);
$t->Stroke($g->img,$scale);

$shape->IndentedRectangle($l,$r,$width,3,4*$w,2,0,'gold1');
$tt->Set("Base Graph\n(Orthogonal\ncoordinate system)",$l+4*$w,$r,$width-$w*4,3); 
$tt->Stroke($g->img,$scale);

$r -= 2;
$d 0.7;
$shape->IndentedRectangle($l+3*$w,$r,$w,4$w*$d,2,0,'gold1');
$t->Set("Canv\nUtil",$l+3*$w,$r,$w*$d,$h);     $t->Stroke($g->img,$scale);
$tt->Set("Canvas\nGraph",$l+3*$w,$r+2,$w,2); $tt->Stroke($g->img,$scale);

// Top line of plotting plugins
$t->SetFillColor('cyan');
$t->Set("Gantt\nPlot",$l,$r,$w,$h); $t->Stroke($g->img,$scale);
$t->Set("2D\nPlot",$l+$w,$r,$w/2,$h);     $t->Stroke($g->img,$scale);
$t->Set("3D\nPlot",$l+$w+$w/2,$r,$w/2,$h);$t->Stroke($g->img,$scale);
$t->Set("Radar\nPlot",$l+2*$w,$r,$w,$h); $t->Stroke($g->img,$scale);

$wp = ($width 4*$w)/4
$t->Set("Error\nPlot",$l+4*$w,$r,$wp,$h); $t->Stroke($g->img,$scale);
$t->Set("Line\nPlot",$l+4*$w+$wp,$r,$wp,$h); $t->Stroke($g->img,$scale);
$t->Set("Bar\nPlot",$l+4*$w+2*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale);
$t->Set("Scatter\nPlot",$l+4*$w+3*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale);

// Show application top
$r -= 2.5$h=2
$t->SetFillColor('blue');
$t->SetFontColor('white');
$t->SetFont(FF_ARIAL,FS_BOLD,20);
$t->Set("PHP Application",$l,$r,$width,$h); $t->Stroke($g->img,$scale);

// Stroke title
$r 0.5;
$tt->SetFontColor('black');
$tt->SetFont(FF_TIMES,FS_BOLD,28);
$tt->Set("JpGraph Architecture Overview",$l,$r,$width,1); 
$tt->Stroke($g->img,$scale);

// Stroke footer
$tt->SetFont(FF_VERDANA,FS_NORMAL,10);
$tt->Set("Generated: ".date("ymd H:m",time()),0.1,$ymax*0.95); 
$tt->Stroke($g->img,$scale);

// .. and stream it all back
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex01.html b/html/includes/jpgraph/docs/html/exframes/canvasex01.html new file mode 100644 index 0000000000..8ae2722768 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex01.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";

// Setup a basic canvas we can work 
$g = new CanvasGraph(400,300,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Draw a text box in the middle
$txt="This\nis\na TEXT!!!";
$t = new Text($txt,200,10);
$t->SetFont(FF_ARIAL,FS_BOLD,40);

// How should the text box interpret the coordinates?
$t->Align('center','top');

// How should the paragraph be aligned?
$t->ParagraphAlign('center');

// Add a box around the text, white fill, black border and gray shadow
$t->SetBox("white","black","gray");

// Stroke the text
$t->Stroke($g->img);

// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex02.html b/html/includes/jpgraph/docs/html/exframes/canvasex02.html new file mode 100644 index 0000000000..a6efdc6a18 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex02.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";

// Setup a basic canvas we can work 
$g = new CanvasGraph(400,200,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Add a black line
$g->img->SetColor('black');
$g->img->Line(0,0,100,100);

// .. and a circle (x,y,diameter)
$g->img->Circle(100,100,50);

// .. and a filled circle (x,y,diameter)
$g->img->SetColor('red');
$g->img->FilledCircle(200,100,50);

// .. add a rectangle
$g->img->SetColor('green');
$g->img->FilledRectangle(10,10,50,50);

// .. add a filled rounded rectangle
$g->img->SetColor('green');
$g->img->FilledRoundedRectangle(300,30,350,80,10);
// .. with a darker border
$g->img->SetColor('darkgreen');
$g->img->RoundedRectangle(300,30,350,80,10);

// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex03.html b/html/includes/jpgraph/docs/html/exframes/canvasex03.html new file mode 100644 index 0000000000..ee9b211e3a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex03.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";

// Define work space
$xmax=20;
$ymax=20;

// Setup a basic canvas we can work 
$g = new CanvasGraph(400,200,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Create a new scale
$scale = new CanvasScale($g);
$scale->Set(0,$xmax,0,$ymax);

// The shape class is wrapper around the Imgae class which translates
// the coordinates for us
$shape = new Shape($g,$scale);
$shape->SetColor('black');


// Add a black line
$shape->SetColor('black');
$shape->Line(0,0,20,20);

// .. and a circle (x,y,diameter)
$shape->Circle(5,14,2);

// .. and a filled circle (x,y,diameter)
$shape->SetColor('red');
$shape->FilledCircle(11,8,3);

// .. add a rectangle
$shape->SetColor('green');
$shape->FilledRectangle(15,8,19,14);

// .. add a filled rounded rectangle
$shape->SetColor('green');
$shape->FilledRoundedRectangle(2,3,8,6);
// .. with a darker border
$shape->SetColor('darkgreen');
$shape->RoundedRectangle(2,3,8,6);


// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex04.html b/html/includes/jpgraph/docs/html/exframes/canvasex04.html new file mode 100644 index 0000000000..254419de12 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex04.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex04.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";

// Define work space
$xmax=20;
$ymax=20;

// Setup a basic canvas we can work 
$g = new CanvasGraph(200,100,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Create a new scale
$scale = new CanvasScale($g);
$scale->Set(0,$xmax,0,$ymax);

// The shape class is wrapper around the Imgae class which translates
// the coordinates for us
$shape = new Shape($g,$scale);
$shape->SetColor('black');


// Add a black line
$shape->SetColor('black');
$shape->Line(0,0,20,20);

// .. and a circle (x,y,diameter)
$shape->Circle(5,14,2);

// .. and a filled circle (x,y,diameter)
$shape->SetColor('red');
$shape->FilledCircle(11,8,3);

// .. add a rectangle
$shape->SetColor('green');
$shape->FilledRectangle(15,8,19,14);

// .. add a filled rounded rectangle
$shape->SetColor('green');
$shape->FilledRoundedRectangle(2,3,8,6);
// .. with a darker border
$shape->SetColor('darkgreen');
$shape->RoundedRectangle(2,3,8,6);


// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex05.html b/html/includes/jpgraph/docs/html/exframes/canvasex05.html new file mode 100644 index 0000000000..c740c3889c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex05.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex05.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";

// Define work space
$xmax=40;
$ymax=40;

// Setup a basic canvas we can work 
$g = new CanvasGraph(400,200,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Create a new scale
$scale = new CanvasScale($g);
$scale->Set(0,$xmax,0,$ymax);

// The shape class is wrapper around the Imgae class which translates
// the coordinates for us
$shape = new Shape($g,$scale);
$shape->SetColor('black');


// Add a black line
$shape->SetColor('black');
$shape->Line(0,0,20,20);

// .. and a circle (x,y,diameter)
$shape->Circle(5,14,2);

// .. and a filled circle (x,y,diameter)
$shape->SetColor('red');
$shape->FilledCircle(11,8,3);

// .. add a rectangle
$shape->SetColor('green');
$shape->FilledRectangle(15,8,19,14);

// .. add a filled rounded rectangle
$shape->SetColor('green');
$shape->FilledRoundedRectangle(2,3,8,6);
// .. with a darker border
$shape->SetColor('darkgreen');
$shape->RoundedRectangle(2,3,8,6);


// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/canvasex06.html b/html/includes/jpgraph/docs/html/exframes/canvasex06.html new file mode 100644 index 0000000000..7faf171f7d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/canvasex06.html @@ -0,0 +1,3 @@ + +<?php
// $Id: canvasex06.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";

// Define work space
$xmax=40;
$ymax=40;

// Setup a basic canvas we can work 
$g = new CanvasGraph(400,200,'auto');
$g->SetMargin(5,11,6,11);
$g->SetShadow();
$g->SetMarginColor("teal");

// We need to stroke the plotarea and margin before we add the
// text since we otherwise would overwrite the text.
$g->InitFrame();

// Create a new scale
$scale = new CanvasScale($g);
$scale->Set(0,$xmax,0,$ymax);

// The shape class is wrapper around the Imgae class which translates
// the coordinates for us
$shape = new Shape($g,$scale);
$shape->SetColor('black');

$shape->IndentedRectangle(1,2,15,15,8,8,CORNER_TOPLEFT,'khaki');

$shape->IndentedRectangle(1,20,15,15,8,8,CORNER_BOTTOMLEFT,'khaki');

$shape->IndentedRectangle(20,2,15,15,8,8,CORNER_TOPRIGHT,'khaki');

$shape->IndentedRectangle(20,20,15,15,8,8,CORNER_BOTTOMRIGHT,'khaki');

// Stroke the graph
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/color_chart01.html b/html/includes/jpgraph/docs/html/exframes/color_chart01.html new file mode 100644 index 0000000000..014d1242c6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/color_chart01.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(color_chart01.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'color_chart01.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/color_chart02.html b/html/includes/jpgraph/docs/html/exframes/color_chart02.html new file mode 100644 index 0000000000..c25c8e6888 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/color_chart02.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(color_chart02.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'color_chart02.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/color_chart03.html b/html/includes/jpgraph/docs/html/exframes/color_chart03.html new file mode 100644 index 0000000000..80e71870b7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/color_chart03.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(color_chart03.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'color_chart03.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/color_chart04.html b/html/includes/jpgraph/docs/html/exframes/color_chart04.html new file mode 100644 index 0000000000..c501fbe5a2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/color_chart04.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(color_chart04.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'color_chart04.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/dateaxisex1.html b/html/includes/jpgraph/docs/html/exframes/dateaxisex1.html new file mode 100644 index 0000000000..f267e6c0fb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/dateaxisex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// The callback that converts timestamp to minutes and seconds
function TimeCallback($aVal) {
    return 
Date('H:i:s',$aVal);
}

// Fake some suitable random data
$now time();
$datax = array($now);
for( 
$i=0$i 360$i += 10 ) {
    
$datax[] = $now $i;
}
$n count($datax);
$datay=array();
for( 
$i=0$i $n; ++$i ) {
    
$datay[] = rand(30,150);
}

// Setup the basic graph
$graph = new Graph(324,250);
$graph->SetMargin(40,40,30,70);    
$graph->title->Set('Date: '.date('Y-m-d',$now));
$graph->SetAlphaBlending();

// Setup a manual x-scale (We leave the sentinels for the
// Y-axis at 0 which will then autoscale the Y-axis.)
// We could also use autoscaling for the x-axis but then it
// probably will start a little bit earlier than the first value
// to make the first value an even number as it sees the timestamp
// as an normal integer value.
$graph->SetScale("intlin",0,200,$now,$datax[$n-1]);

// Setup the x-axis with a format callback to convert the timestamp
// to a user readable time
$graph->xaxis->SetLabelFormatCallback('TimeCallback');
$graph->xaxis->SetLabelAngle(90);

// Create the line
$p1 = new LinePlot($datay,$datax);
$p1->SetColor("blue");

// Set the fill color partly transparent
$p1->SetFillColor("blue@0.4");

// Add lineplot to the graph
$graph->Add($p1);

// Output line
$graph->Stroke();
?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/dateaxisex2.html b/html/includes/jpgraph/docs/html/exframes/dateaxisex2.html new file mode 100644 index 0000000000..78c12afae2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/dateaxisex2.html @@ -0,0 +1,4 @@ + +<?php
require_once("../jpgraph.php");
require_once(
"../jpgraph_line.php");
require_once(
"../jpgraph_date.php");

// Create a data set in range (50,70) and X-positions
DEFINE('NDATAPOINTS',360);
DEFINE('SAMPLERATE',240); 
$start time();
$end $start+NDATAPOINTS*SAMPLERATE;
$data = array();
$xdata = array();
for( 
$i=0$i NDATAPOINTS; ++$i ) {
    
$data[$i] = rand(50,70);
    
$xdata[$i] = $start $i SAMPLERATE;
}


// Create the new graph
$graph = new Graph(540,300);

// Slightly larger than normal margins at the bottom to have room for
// the x-axis labels
$graph->SetMargin(40,40,30,130);

// Fix the Y-scale to go between [0,100] and use date for the x-axis
$graph->SetScale('datlin',0,100);
$graph->title->Set("Example on Date scale");

// Set the angle for the labels to 90 degrees
$graph->xaxis->SetLabelAngle(90);

$line = new LinePlot($data,$xdata);
$line->SetLegend('Year 2005');
$line->SetFillColor('lightblue@0.5');
$graph->Add($line);
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/dateaxisex4.html b/html/includes/jpgraph/docs/html/exframes/dateaxisex4.html new file mode 100644 index 0000000000..6aef1c937b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/dateaxisex4.html @@ -0,0 +1,4 @@ + +<?php
require_once("../jpgraph.php");
require_once(
"../jpgraph_line.php");
require_once(
"../jpgraph_date.php");

// Create a data set in range (50,70) and X-positions
DEFINE('NDATAPOINTS',360);
DEFINE('SAMPLERATE',240); 
$start time();
$end $start+NDATAPOINTS*SAMPLERATE;
$data = array();
$xdata = array();
for( 
$i=0$i NDATAPOINTS; ++$i ) {
    
$data[$i] = rand(50,70);
    
$xdata[$i] = $start $i SAMPLERATE;
}


// Create the new graph
$graph = new Graph(540,300);

// Slightly larger than normal margins at the bottom to have room for
// the x-axis labels
$graph->SetMargin(40,40,30,130);

// Fix the Y-scale to go between [0,100] and use date for the x-axis
$graph->SetScale('datlin',0,100);
$graph->title->Set("Example on Date scale");

// Set the angle for the labels to 90 degrees
$graph->xaxis->SetLabelAngle(90);

// The automatic format string for dates can be overridden
$graph->xaxis->scale->SetDateFormat('H:i');

// Adjust the start/end to a specific alignment
$graph->xaxis->scale->SetTimeAlign(MINADJ_10);

$line = new LinePlot($data,$xdata);
$line->SetLegend('Year 2005');
$line->SetFillColor('lightblue@0.5');
$graph->Add($line);
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/dbschemaex1.html b/html/includes/jpgraph/docs/html/exframes/dbschemaex1.html new file mode 100644 index 0000000000..30feb4925e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/dbschemaex1.html @@ -0,0 +1,3 @@ + +<?php
/*=======================================================================
// File:     DBSCHEMAEX1.PHP
// Description:    Draw a DB schema of the DDDA architecture
// Created:     2002-08-25
// Author:    Johan Persson (johanp@aditus.nu)
// Ver:        $Id: dbschemaex1.php,v 1.1 2002/08/27 20:08:57 aditus Exp $
//
// License:     This code is released under QPL
//              Copyright (C) 2001,2002 Johan Persson
// Note:        The actual drawing of the tables are semi-automatically
//              but you can easily adjust the individual tables position
//              with the 'tblposadj' array. 
//
//========================================================================
*/
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";
include 
"../utils/misc/imgdbschema.inc";
include 
"../utils/jpdocgen/jpdb.php";


// Global callback to format the table header names
function FormatTblName($aName) {
    
// We want to replace any specifi references to the
    // 'JpGraph' project with the generic '<project>'
    
return str_replace('JpGraph','<project>'$aName);
}

// Global callback to format each field name in the table
function FormatFldName($aName,$aTable) {
    return 
$aName;
}


class 
Driver {

    var 
$ig$img$iscale$ishape;
    var 
$iymax,$ixmax;
    var 
$iwidth,$iheight;

    function 
Driver() {

    
// Define Image size and coordinate grid space to work within
    
$this->iwidth 600;
    
$this->iheight750;
    
$this->iymax  50;
    
$this->ixmax  55;

    
// Setup a basic canvas
    
$this->ig = new CanvasGraph($this->iwidth,$this->iheight,'auto');
    
$this->img $this->ig->img;

    
// Define the scale to be used
    
$this->iscale = new CanvasScale($this->ig);
    
$this->iscale->Set(0,$this->ixmax,0,$this->iymax);
    
$this->ishape = new Shape($this->ig,$this->iscale);

    
// A small frame around the canvas
    
$this->ig->SetMargin(2,3,2,3);
    
$this->ig->SetMarginColor("teal");
    
$this->ig->InitFrame();

    }

    function 
Run() {

    
$leftm=1.5;    // Left margin (for table schemes) 
    
$topm=5;    // Top margin (for table schemes) 
    
$tblwidth=15;    // Individual table width
    
$tlo=1;        // Offset for top line

    // Add the background color for the project specific tables
    
$this->ishape->IndentedRectangle($leftm,$topm-1,3*$tblwidth+$tlo+6,45,
                     
$tlo+2*$tblwidth+2,30,CORNER_BOTTOMLEFT,
                     
'lightblue');

    
// Stroke the tables (series of x,y offsets, If =-1 then use the
    // automtic positioning
    
$tblposadj=array($tlo,0,$tblwidth+$tlo+2,0,2*$tblwidth+$tlo+4,
             
0,-1,16,-1,16);
    
$dbschema = new ImgDBSchema('jpgraph_doc','FormatTblName','FormatFldName');
    
$dbschema->SetMargin($leftm,$topm);
    
$dbschema->SetTableWidth($tblwidth);
    
$dbschema->Stroke($this->img,$this->iscale,$tblposadj);

    
$tt = new CanvasRectangleText();
    
$tt->SetFillColor('');
    
$tt->SetColor('');
    
$tt->SetFontColor('navy');

    
// Add explanation
    
$tt->SetFont(FF_ARIAL,FS_NORMAL,12);
    
$tt->Set('Project specific tables',$tblwidth+$leftm+3,16,15);
    
$tt->Stroke($this->img,$this->iscale);

    
// Add title
    
$tt->SetColor('');
    
$tt->SetFont(FF_VERDANA,FS_BOLD,26);
    
$tt->Set('DDDA - DB Schema',9,0.5,30);
    
$tt->Stroke($this->img,$this->iscale);

    
// Add a version and date
    
$tt->SetFillColor('yellow');
    
$tt->SetFont(FF_FONT1,FS_NORMAL,10);
    
$tt->Set("Generated: ".date("ymd H:i",time()),1,$this->iymax*0.96,15); 
    
$tt->Stroke($this->img,$this->iscale);

    
$this->ig->Stroke();
    }
}

$driver = new Driver();
$driver->Run();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example0.html b/html/includes/jpgraph/docs/html/exframes/example0.html new file mode 100644 index 0000000000..2c8e330116 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example0.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// Some data
$ydata = array(11,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(350,250,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->SetColor("blue");

// Add the plot to the graph
$graph->Add($lineplot);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example11.html b/html/includes/jpgraph/docs/html/exframes/example11.html new file mode 100644 index 0000000000..d0bf65960d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example11.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$ydata2 = array(1,19,15,7,22,14,5,9,21,13);

$gJpgBrandTiming=true;

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);

$lineplot2=new LinePlot($ydata2);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Timing a graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example13.html b/html/includes/jpgraph/docs/html/exframes/example13.html new file mode 100644 index 0000000000..e774c5e418 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example13.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_error.php");

$errdatay = array(11,9,2,4,19,26,13,19,7,12);


// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,30,20,40);
$graph->SetShadow();

// Create the error plot
$errplot=new ErrorPlot($errdatay);
$errplot->SetColor("red");
$errplot->SetWeight(2);

// Add the plot to the graph
$graph->Add($errplot);

$graph->title->Set("Simple error plot");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$datax $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datax);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example14.html b/html/includes/jpgraph/docs/html/exframes/example14.html new file mode 100644 index 0000000000..5e08e04b54 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example14.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_error.php");

$errdatay = array(11,9,2,4,19,26,13,19,7,12);


// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,30,20,40);
$graph->SetShadow();

// Create the error plot
$errplot=new ErrorPlot($errdatay);
$errplot->SetColor("red");
$errplot->SetWeight(2);
$errplot->SetCenter();

// Add the plot to the graph
$graph->Add($errplot);

$graph->title->Set("Simple error plot");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$datax $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datax);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example15.html b/html/includes/jpgraph/docs/html/exframes/example15.html new file mode 100644 index 0000000000..94a61376b6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example15.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_error.php");

$errdatay = array(11,9,2,4,19,26,13,19,7,12);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,30,20,40);
$graph->SetShadow();

// Create the linear plot
$errplot=new ErrorLinePlot($errdatay);
$errplot->SetColor("red");
$errplot->SetWeight(2);
$errplot->SetCenter();
$errplot->line->SetWeight(2);
$errplot->line->SetColor("blue");

// Add the plot to the graph
$graph->Add($errplot);

$graph->title->Set("Linear error plot");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$datax $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datax);


// Display the graph
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.1.html b/html/includes/jpgraph/docs/html/exframes/example16.1.html new file mode 100644 index 0000000000..479cda61df --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_error.php");
include (
"../jpgraph_bar.php");

$l1datay = array(11,9,2,4,3,13,17);
$l2datay = array(23,12,5,19,17,10,15);
$datax=array("Jan","Feb","Mar","Apr","May");

// Create the graph. 
$graph = new Graph(400,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,130,20,40);
$graph->SetShadow();

// Create the linear error plot
$l1plot=new LinePlot($l1datay);
$l1plot->SetColor("red");
$l1plot->SetWeight(2);
$l1plot->SetLegend("Prediction");

// Create the bar plot
$l2plot = new LinePlot($l2datay);
$l2plot->SetFillColor("orange");
$l2plot->SetLegend("Result");

// Add the plots to the graph
$graph->Add($l2plot);
$graph->Add($l1plot);

$graph->title->Set("Mixing line and filled line");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

//$graph->xaxis->SetTickLabels($datax);
//$graph->xaxis->SetTextTickInterval(2);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.2.html b/html/includes/jpgraph/docs/html/exframes/example16.2.html new file mode 100644 index 0000000000..e27c3fccfb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_bar.php");

$l1datay = array(11,9,2,4,3,13,17);
$l2datay = array(23,12,5,19,17,10,15);
$datax=array("Jan","Feb","Mar","Apr","May");

// Create the graph. 
$graph = new Graph(400,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,130,20,40);
$graph->SetShadow();

// Create the linear error plot
$l1plot=new LinePlot($l1datay);
$l1plot->SetColor("red");
$l1plot->SetWeight(2);
$l1plot->SetLegend("Prediction");

// Create the bar plot
$bplot = new BarPlot($l2datay);
$bplot->SetFillColor("orange");
$bplot->SetLegend("Result");

// Add the plots to t'he graph
$graph->Add($l1plot);
$graph->Add($bplot);


$graph->title->Set("Adding a line plot to a bar graph v1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

//$graph->xaxis->SetTickLabels($datax);
//$graph->xaxis->SetTextTickInterval(2);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.3.html b/html/includes/jpgraph/docs/html/exframes/example16.3.html new file mode 100644 index 0000000000..232541c454 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_bar.php");

$l1datay = array(11,9,2,4,3,13,17);
$l2datay = array(23,12,5,19,17,10,15);
$datax=array("Jan","Feb","Mar","Apr","May");

// Create the graph. 
$graph = new Graph(400,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,130,20,40);
$graph->SetShadow();

// Create the linear error plot
$l1plot=new LinePlot($l1datay);
$l1plot->SetColor("red");
$l1plot->SetWeight(2);
$l1plot->SetLegend("Prediction");


// Create the bar plot
$bplot = new BarPlot($l2datay);
$bplot->SetFillColor("orange");
$bplot->SetLegend("Result");

// Add the plots to t'he graph
$graph->Add($bplot);
$graph->Add($l1plot);


$graph->title->Set("Adding a line plot to a bar graph v1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

//$graph->xaxis->SetTickLabels($datax);
//$graph->xaxis->SetTextTickInterval(2);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.4.html b/html/includes/jpgraph/docs/html/exframes/example16.4.html new file mode 100644 index 0000000000..328f6824e8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_bar.php");

$l1datay = array(11,9,2,4,3,13,17);
$l2datay = array(23,12,5,19,17,10,15);

// Create the graph. 
$graph = new Graph(400,200,"auto");    
$graph->SetScale("intlin");

$graph->img->SetMargin(40,130,20,40);
$graph->SetShadow();

// Create the linear error plot
$l1plot=new LinePlot($l1datay);
$l1plot->SetColor("red");
$l1plot->SetWeight(2);
$l1plot->SetLegend("Prediction");

// Create the bar plot
$bplot = new BarPlot($l2datay);
$bplot->SetFillColor("orange");
$bplot->SetLegend("Result");

// Add the plots to t'he graph
$graph->Add($bplot);
$graph->Add($l1plot);

$graph->title->Set("Adding a line plot to a bar graph v3");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$datax $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datax);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.6.html b/html/includes/jpgraph/docs/html/exframes/example16.6.html new file mode 100644 index 0000000000..46788dde83 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.6.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");
include (
"../jpgraph_line.php");

// Create some "fake" regression data
$datay = array();
$datay2 = array();
$datax = array();
$a=rand(-3,3);
$b=rand(-5,5);
for(
$x=0$x<20; ++$x) {
    
$datay[] = $a*$x $b;
    
$datay2[] = $a*$x $b rand(-30,30);
    
$datax[] = $x;
}
 
// Create the graph
$graph = new Graph(300,200,'auto');
$graph->SetScale("linlin");

// Setup title
$graph->title->Set("Example of linear regression");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// make sure that the X-axis is always at the
// bottom at the plot and not just at Y=0 which is
// the default position
$graph->xaxis->SetPos('min');

// Create the scatter plot with some nice colors
$sp1 = new ScatterPlot($datay2,$datax);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->SetColor("blue");
$sp1->SetWeight(3);
$sp1->mark->SetWidth(4);

// Create the regression line
$lplot = new LinePlot($datay);
$lplot->SetWeight(2);
$lplot->SetColor('navy');

// Add the pltos to the line
$graph->Add($sp1);
$graph->Add($lplot);

// ... and stroke
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example16.html b/html/includes/jpgraph/docs/html/exframes/example16.html new file mode 100644 index 0000000000..d40ff74f11 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example16.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_error.php");

$errdatay = array(11,9,2,4,19,26,13,19,7,12);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

$graph->img->SetMargin(40,30,20,40);
$graph->SetShadow();

// Create the linear plot
$errplot=new ErrorLinePlot($errdatay);
$errplot->SetColor("red");
$errplot->SetWeight(2);
$errplot->SetCenter();
$errplot->line->SetWeight(2);
$errplot->line->SetColor("blue");

// Setup the legends
$errplot->SetLegend("Min/Max");
$errplot->line->SetLegend("Average");

// Add the plot to the graph
$graph->Add($errplot);

$graph->title->Set("Linear error plot");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$datax $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datax);


// Display the graph
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example17.html b/html/includes/jpgraph/docs/html/exframes/example17.html new file mode 100644 index 0000000000..a51dac0ade --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example17.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay1 =         array(11,7,5,8,3,5,5,4,8,6,5,5,3,2,5,1,2,0);
$datay2 =     array( 4,5,4,5,6,5,7,4,7,4,4,3,2,4,1,2,2,1);
$datay3 =         array(4,5,7,10,13,15,15,22,26,26,30,34,40,43,47,55,60,62);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);

// Create the linear plots for each category
$dplot[] = new LinePLot($datay1);
$dplot[] = new LinePLot($datay2);
$dplot[] = new LinePLot($datay3);

$dplot[0]->SetFillColor("red");
$dplot[1]->SetFillColor("blue");
$dplot[2]->SetFillColor("green");

// Create the accumulated graph
$accplot = new AccLinePlot($dplot);

// Add the plot to the graph
$graph->Add($accplot);

$graph->xaxis->SetTextTickInterval(2);
$graph->title->Set("Example 17");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example18.html b/html/includes/jpgraph/docs/html/exframes/example18.html new file mode 100644 index 0000000000..55bb253723 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example18.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("A simple bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example19.1.html b/html/includes/jpgraph/docs/html/exframes/example19.1.html new file mode 100644 index 0000000000..95e7e98160 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example19.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(260,100,"auto");    
$graph->SetScale("linlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph, linear scale");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example19.html b/html/includes/jpgraph/docs/html/exframes/example19.html new file mode 100644 index 0000000000..92e9a12877 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example19.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("A simple bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example2.html b/html/includes/jpgraph/docs/html/exframes/example2.html new file mode 100644 index 0000000000..1ad2af19fc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,10,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Setup margin and titles
$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Example 2");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

// Create the linear plot
$lineplot=new LinePlot($ydata);

// Add the plot to the graph
$graph->Add($lineplot);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.1.html b/html/includes/jpgraph/docs/html/exframes/example20.1.html new file mode 100644 index 0000000000..4327f7c912 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$bplot->value->Show();
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.2.html b/html/includes/jpgraph/docs/html/exframes/example20.2.html new file mode 100644 index 0000000000..ee5734d8ff --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$bplot->value->Show();
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph with Y-scale grace");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.3.html b/html/includes/jpgraph/docs/html/exframes/example20.3.html new file mode 100644 index 0000000000..0422805e7f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
$bplot->value->SetAngle(45);
$bplot->value->SetFormat('%0.1f');
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph with Y-scale grace");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.4.html b/html/includes/jpgraph/docs/html/exframes/example20.4.html new file mode 100644 index 0000000000..54fcdf30f8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$bplot->SetShadow();
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10);
$bplot->value->SetAngle(45);
$bplot->value->SetFormat('%0.1f');
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph with drop shadow");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.5.html b/html/includes/jpgraph/docs/html/exframes/example20.5.html new file mode 100644 index 0000000000..8b4d3e4f7f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.5.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');

// Setup values
$bplot->value->Show();
$bplot->value->SetFormat('%d');
$bplot->value->SetFont(FF_FONT1,FS_BOLD);

// Center the values in the bar
$bplot->SetValuePos('center');

// Make the bar a little bit wider
$bplot->SetWidth(0.7);

$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Centered values for bars");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example20.html b/html/includes/jpgraph/docs/html/exframes/example20.html new file mode 100644 index 0000000000..04ca2066d3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example20.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);

// Adjust fill color
$bplot->SetFillColor('orange');
$bplot->SetWidth(1.0);
$graph->Add($bplot);

// Setup the titles
$graph->title->Set("Bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example21.html b/html/includes/jpgraph/docs/html/exframes/example21.html new file mode 100644 index 0000000000..ba7cb9d63a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example21.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$data1y=array(12,8,19,3,10,5);
$data2y=array(8,2,11,7,14,4);

// Create the graph. These two calls are always required
$graph = new Graph(310,200,"auto");    
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);

// Create the bar plots
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");

// Create the grouped bar plot
$gbplot = new GroupBarPlot(array($b1plot,$b2plot));

// ...and add it to the graPH
$graph->Add($gbplot);

$graph->title->Set("Example 21");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example22.html b/html/includes/jpgraph/docs/html/exframes/example22.html new file mode 100644 index 0000000000..e4ea4c39da --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example22.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$data1y=array(12,8,19,3,10,5);
$data2y=array(8,2,11,7,14,4);

// Create the graph. These two calls are always required
$graph = new Graph(310,200,"auto");    
$graph->SetScale("textlin");
$graph->SetShadow();

$graph->img->SetMargin(40,30,20,40);

// Create the bar plots
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");

// Create the grouped bar plot
$gbplot = new GroupBarPlot(array($b1plot,$b2plot));
$gbplot->SetWidth(0.9);

// ...and add it to the graPH
$graph->Add($gbplot);

$graph->title->Set("Adjusting the width");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example23.html b/html/includes/jpgraph/docs/html/exframes/example23.html new file mode 100644 index 0000000000..9d994bb25b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example23.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

setlocale (LC_ALL'et_EE.ISO-8859-1');

$data1y=array(12,8,19,3,10,5);
$data2y=array(8,2,11,7,14,4);

// Create the graph. These two calls are always required
$graph = new Graph(310,200,"auto");    
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);

// Create the bar plots
$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");

// Create the grouped bar plot
$gbplot = new AccBarPlot(array($b1plot,$b2plot));

// ...and add it to the graPH
$graph->Add($gbplot);

$graph->title->Set("Accumulated bar plots");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example24.html b/html/includes/jpgraph/docs/html/exframes/example24.html new file mode 100644 index 0000000000..3d38277aae --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example24.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$data1y=array(12,8,19,3,10,5);
$data2y=array(8,2,11,7,14,4);
$data3y=array(3,9,2,7,5,8);
$data4y=array(1,5,11,2,14,4);

// Create the graph. These two calls are always required
$graph = new Graph(310,200,"auto");    
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);

$b1plot = new BarPlot($data1y);
$b1plot->SetFillColor("orange");
$b2plot = new BarPlot($data2y);
$b2plot->SetFillColor("blue");
$b3plot = new BarPlot($data3y);
$b3plot->SetFillColor("green");
$b4plot = new BarPlot($data4y);
$b4plot->SetFillColor("brown");

// Create the accumulated bar plots
$ab1plot = new AccBarPlot(array($b1plot,$b2plot));
$ab2plot = new AccBarPlot(array($b3plot,$b4plot));

// Create the grouped bar plot
$gbplot = new GroupBarPlot(array($ab1plot,$ab2plot));

// ...and add it to the graph
$graph->Add($gbplot);

$graph->title->Set("Grouped Accumulated bar plots");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example25.1.html b/html/includes/jpgraph/docs/html/exframes/example25.1.html new file mode 100644 index 0000000000..b0500568e9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example25.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);
$graph->Add($bplot);

// Create and add a new text
$txt=new Text("This is a text");
$txt->Pos(10,25);
$txt->SetFont(FF_FONT1,FS_BOLD);
$txt->SetBox('yellow','navy','gray');
$txt->SetColor("red");
$graph->AddText($txt);


// Setup the titles
$graph->title->Set("A simple bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example25.2.html b/html/includes/jpgraph/docs/html/exframes/example25.2.html new file mode 100644 index 0000000000..dddba05744 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example25.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);
$graph->Add($bplot);

// Create and add a new text
$txt=new Text("This is a text\nwith many\nand even\nmore\nlines of text");
$txt->Pos(0.5,0.5,"center","center");
$txt->SetFont(FF_FONT2,FS_BOLD);
$txt->ParagraphAlign('cenetered');
$txt->SetBox('yellow','navy','gray');
$txt->SetColor("red");
$graph->AddText($txt);


// Setup the titles
$graph->title->Set("A simple bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example25.html b/html/includes/jpgraph/docs/html/exframes/example25.html new file mode 100644 index 0000000000..60c012a35c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example25.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,8,19,3,10,5);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Add a drop shadow
$graph->SetShadow();

// Adjust the margin a bit to make more room for titles
$graph->img->SetMargin(40,30,20,40);

// Create a bar pot
$bplot = new BarPlot($datay);
$graph->Add($bplot);

// Create and add a new text
$txt=new Text("This is a text");
$txt->Pos(0,0);
$txt->SetColor("red");
$graph->AddText($txt);


// Setup the titles
$graph->title->Set("A simple bar graph");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example26.1.html b/html/includes/jpgraph/docs/html/exframes/example26.1.html new file mode 100644 index 0000000000..75e175451b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example26.1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33);

$graph = new PieGraph(300,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->SetLegends($gDateLocale->GetShortMonth());
$p1->SetCenter(0.4);

$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example26.html b/html/includes/jpgraph/docs/html/exframes/example26.html new file mode 100644 index 0000000000..970fe5d74c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example26.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33);

$graph = new PieGraph(300,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple Pie plot");

$p1 = new PiePlot($data);
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example27.1.html b/html/includes/jpgraph/docs/html/exframes/example27.1.html new file mode 100644 index 0000000000..11b845944b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example27.1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");
include (
"../jpgraph_pie3d.php");

$data = array(40,60,21,33);

$graph = new PieGraph(300,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot3D($data);
$p1->SetAngle(20);
$p1->SetSize(0.5);
$p1->SetCenter(0.45);
$p1->SetLegends($gDateLocale->GetShortMonth());

$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example27.2.html b/html/includes/jpgraph/docs/html/exframes/example27.2.html new file mode 100644 index 0000000000..af0b90a03d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example27.2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");
include (
"../jpgraph_pie3d.php");

$data = array(40,60,21,33);

$graph = new PieGraph(300,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->ExplodeSlice(1);
$p1->SetCenter(0.45);
$p1->SetLegends($gDateLocale->GetShortMonth());

$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example27.3.html b/html/includes/jpgraph/docs/html/exframes/example27.3.html new file mode 100644 index 0000000000..640d8c838d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example27.3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");
include (
"../jpgraph_pie3d.php");

$data = array(40,60,21,33);

$graph = new PieGraph(330,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple 3D Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot3D($data);
$p1->ExplodeSlice(1);
$p1->SetCenter(0.45);
$p1->SetLegends($gDateLocale->GetShortMonth());

$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example27.html b/html/includes/jpgraph/docs/html/exframes/example27.html new file mode 100644 index 0000000000..1c104dd3a2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example27.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");
include (
"../jpgraph_pie3d.php");

$data = array(40,60,21,33);

$graph = new PieGraph(300,200,"auto");
$graph->SetShadow();

$graph->title->Set("A simple Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot3D($data);
$p1->SetSize(0.5);
$p1->SetCenter(0.45);
$p1->SetLegends($gDateLocale->GetShortMonth());

$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example28.1.html b/html/includes/jpgraph/docs/html/exframes/example28.1.html new file mode 100644 index 0000000000..817468bd9c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example28.1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33,12,33);

$graph = new PieGraph(150,150,"auto");
$graph->SetShadow();

$graph->title->Set("'earth' Theme");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->SetTheme("earth");
$p1->SetCenter(0.5,0.55);
$p1->value->Show(false);
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example28.2.html b/html/includes/jpgraph/docs/html/exframes/example28.2.html new file mode 100644 index 0000000000..d9dfcd0796 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example28.2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33,12,33);

$graph = new PieGraph(150,150,"auto");
$graph->SetShadow();

$graph->title->Set("'pastel' Theme");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->SetTheme("pastel");
$p1->SetCenter(0.5,0.55);
$p1->value->Show(false);
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example28.3.html b/html/includes/jpgraph/docs/html/exframes/example28.3.html new file mode 100644 index 0000000000..2336fdd0e3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example28.3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33,12,33);

$graph = new PieGraph(150,150,"auto");
$graph->SetShadow();

$graph->title->Set("'water' Theme");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->SetTheme("water");
$p1->SetCenter(0.5,0.55);
$p1->value->Show(false);
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example28.html b/html/includes/jpgraph/docs/html/exframes/example28.html new file mode 100644 index 0000000000..99a896b67a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example28.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,21,33,12,33);

$graph = new PieGraph(150,150,"auto");
$graph->SetShadow();

$graph->title->Set("'sand' Theme");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new PiePlot($data);
$p1->SetTheme("sand");
$p1->SetCenter(0.5,0.55);
$p1->value->Show(false);
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.1.html b/html/includes/jpgraph/docs/html/exframes/example3.1.html new file mode 100644 index 0000000000..6ebe3f2f6f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_UTRIANGLE);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Example 3.1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.2.1.html b/html/includes/jpgraph/docs/html/exframes/example3.2.1.html new file mode 100644 index 0000000000..f2470da26c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.2.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,15,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(10,10);

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_CIRCLE);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Grace value, version 1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.2.2.html b/html/includes/jpgraph/docs/html/exframes/example3.2.2.html new file mode 100644 index 0000000000..27df44ffc5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.2.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,15,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(10,10);

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_CIRCLE);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Grace value version 2");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->xaxis->SetPos('min');

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.2.html b/html/includes/jpgraph/docs/html/exframes/example3.2.html new file mode 100644 index 0000000000..65135e3569 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,15,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_CIRCLE);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Example 3.2");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.3.html b/html/includes/jpgraph/docs/html/exframes/example3.3.html new file mode 100644 index 0000000000..2ca495aea8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Adjust the margin
$graph->img->SetMargin(40,20,20,40);
$graph->SetShadow();

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_UTRIANGLE);
$lineplot->value->show();

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Displaying the values");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);


// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.4.html b/html/includes/jpgraph/docs/html/exframes/example3.4.html new file mode 100644 index 0000000000..201a25a15d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Adjust the margin
$graph->img->SetMargin(40,20,20,40);
$graph->SetShadow();

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot->mark->SetType(MARK_UTRIANGLE);
$lineplot->value->show();
$lineplot->value->SetColor('darkred');
$lineplot->value->SetFont(FF_FONT1,FS_BOLD);
$lineplot->value->SetFormat('$%0.1f');


// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Displaying the values");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);


// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example3.html b/html/includes/jpgraph/docs/html/exframes/example3.html new file mode 100644 index 0000000000..7181c569b5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);


// Add the plot to the graph
$graph->Add($lineplot);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Example 3");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example4.html b/html/includes/jpgraph/docs/html/exframes/example4.html new file mode 100644 index 0000000000..01f8132097 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$ydata2 = array(1,19,15,7,22,14,5,9,21,13);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->SetScale("textlin");

// Create the linear plot
$lineplot=new LinePlot($ydata);

$lineplot2=new LinePlot($ydata2);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Example 4");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example5.1.html b/html/includes/jpgraph/docs/html/exframes/example5.1.html new file mode 100644 index 0000000000..b7870a1106 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example5.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->img->SetMargin(40,40,20,40);
$graph->SetScale("textlin");
$graph->SetY2Scale("lin");
$graph->SetShadow();

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->AddY2($lineplot2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);
$graph->y2axis->SetColor("orange");

$graph->title->Set("Example 5");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

$graph->yaxis->SetColor("blue");

$lineplot->SetLegend("Plot 1");
$lineplot2->SetLegend("Plot 2");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example5.html b/html/includes/jpgraph/docs/html/exframes/example5.html new file mode 100644 index 0000000000..ba2c5b7716 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example5.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph. These two calls are always required
$graph = new Graph(300,200,"auto");    
$graph->img->SetMargin(40,40,20,40);
$graph->SetScale("textlin");
$graph->SetY2Scale("lin");
$graph->SetShadow();

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->AddY2($lineplot2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);
$graph->y2axis->SetColor("orange");

$graph->title->Set("Example 5");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

$graph->yaxis->SetColor("blue");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example6.1.html b/html/includes/jpgraph/docs/html/exframes/example6.1.html new file mode 100644 index 0000000000..d938f8bd5a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example6.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph and specify the scale for both Y-axis
$graph = new Graph(300,240,"auto");    
$graph->SetScale("textlin");
$graph->SetY2Scale("lin");
$graph->SetShadow();

// Adjust the margin
$graph->img->SetMargin(40,40,20,70);

// Create the two linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->AddY2($lineplot2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

// Adjust the axis color
$graph->y2axis->SetColor("orange");
$graph->yaxis->SetColor("blue");

$graph->title->Set("Example 6.1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Set the colors for the plots 
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

// Set the legends for the plots
$lineplot->SetLegend("Plot 1");
$lineplot2->SetLegend("Plot 2");

// Adjust the legend position
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->Pos(0.4,0.95,"center","bottom");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example6.2.html b/html/includes/jpgraph/docs/html/exframes/example6.2.html new file mode 100644 index 0000000000..815201e2c4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example6.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph and specify the scale for both Y-axis
$graph = new Graph(300,240,"auto");    
$graph->SetScale("textlin");
$graph->SetShadow();

// Adjust the margin
$graph->img->SetMargin(40,40,20,70);

// Create the two linear plot
$lineplot=new LinePlot($ydata);
$lineplot->SetStepStyle();

// Adjust the axis color
$graph->yaxis->SetColor("blue");

$graph->title->Set("Example 6.2");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Set the colors for the plots 
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

// Set the legends for the plots
$lineplot->SetLegend("Plot 1");

// Add the plot to the graph
$graph->Add($lineplot);

// Adjust the legend position
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->Pos(0.4,0.95,"center","bottom");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example6.html b/html/includes/jpgraph/docs/html/exframes/example6.html new file mode 100644 index 0000000000..dd70cd0cf8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example6.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph and specify the scale for both Y-axis
$graph = new Graph(400,200,"auto");    
$graph->SetScale("textlin");
$graph->SetY2Scale("lin");
$graph->SetShadow();

// Adjust the margin
$graph->img->SetMargin(40,140,20,40);

// Create the two linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->AddY2($lineplot2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

// Adjust the axis color
$graph->y2axis->SetColor("orange");
$graph->yaxis->SetColor("blue");

$graph->title->Set("Example 6");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// Set the colors for the plots 
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

// Set the legends for the plots
$lineplot->SetLegend("Plot 1");
$lineplot2->SetLegend("Plot 2");

// Adjust the legend position
$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example7.html b/html/includes/jpgraph/docs/html/exframes/example7.html new file mode 100644 index 0000000000..37b03bfa23 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example7.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,70,265,29,111,91,198,225,593,251);

// Create the graph.
$graph = new Graph(350,200,"auto");    
$graph->SetScale("textlin");
$graph->SetY2Scale("log");
$graph->SetShadow();
$graph->img->SetMargin(40,110,20,40);

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);
$graph->AddY2($lineplot2);
$graph->yaxis->SetColor('blue');

$graph->title->Set("Example 7");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetWeight(2);

$lineplot->SetLegend("Plot 1");
$lineplot2->SetLegend("Plot 2");

$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example8.html b/html/includes/jpgraph/docs/html/exframes/example8.html new file mode 100644 index 0000000000..8044f3f50d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example8.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");

$ydata = array(11,3,8,12,5,1,9,13,5,7);
$y2data = array(354,200,265,99,111,91,198,225,293,251);

// Create the graph. These two calls are always required
$graph = new Graph(350,200,"auto");    
$graph->SetScale("textlog");
$graph->SetShadow();
$graph->img->SetMargin(40,110,20,40);

// Show the gridlines
$graph->ygrid->Show(true,true);
$graph->xgrid->Show(true,false);

// Create the linear plot
$lineplot=new LinePlot($ydata);
$lineplot2=new LinePlot($y2data);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Example 8");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

// Adjust the color of the Y axis
$graph->yaxis->SetColor("blue");

// Specifya a legend
$lineplot->SetLegend("Plot 1");

// Adjust the position of the grid box
$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example9.1.html b/html/includes/jpgraph/docs/html/exframes/example9.1.html new file mode 100644 index 0000000000..5b8b7ba61d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example9.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");


$ydata = array(11,3,8,42,5,1,9,13,5,7);
$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");

// Create the graph. These two calls are always required
$graph = new Graph(350,200,"auto");
$graph->SetScale("textlog");

$graph->img->SetMargin(40,110,20,40);
$graph->SetShadow();

$graph->ygrid->Show(true,true);
$graph->xgrid->Show(true,false);

// Specify the tick labels
$a $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($a);
$graph->xaxis->SetTextLabelInterval(2);

// Create the linear plot
$lineplot=new LinePlot($ydata);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Examples 9");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$graph->yaxis->SetColor("blue");

$lineplot->SetLegend("Plot 1");

$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example9.2.html b/html/includes/jpgraph/docs/html/exframes/example9.2.html new file mode 100644 index 0000000000..93ba719992 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example9.2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");


$ydata = array(11,3,8,42,5,1,9,13,5,7);
$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");

// Create the graph. These two calls are always required
$graph = new Graph(350,200,"auto");
$graph->SetScale("textlog");

$graph->img->SetMargin(40,110,20,50);
$graph->SetShadow();

$graph->ygrid->Show(true,true);
$graph->xgrid->Show(true,false);

// Specify the tick labels
$a $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($a);
//$graph->xaxis->SetTextLabelInterval(2);
$graph->xaxis->SetLabelAngle(90);


// Create the linear plot
$lineplot=new LinePlot($ydata);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Examples 9");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$graph->yaxis->SetColor("blue");

$lineplot->SetLegend("Plot 1");

$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/example9.html b/html/includes/jpgraph/docs/html/exframes/example9.html new file mode 100644 index 0000000000..2f37f1a344 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/example9.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");


$ydata = array(11,3,8,42,5,1,9,13,5,7);
$datax = array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","aug","Sep","Oct");

// Create the graph. These two calls are always required
$graph = new Graph(350,200,"auto");
$graph->SetScale("textlog");

$graph->img->SetMargin(40,110,20,40);
$graph->SetShadow();

$graph->ygrid->Show(true,true);
$graph->xgrid->Show(true,false);

// Specify the tick labels
$a $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($a);

// Create the linear plot
$lineplot=new LinePlot($ydata);

// Add the plot to the graph
$graph->Add($lineplot);

$graph->title->Set("Examples 9");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot->SetColor("blue");
$lineplot->SetWeight(2);

$graph->yaxis->SetColor("blue");

$lineplot->SetLegend("Plot 1");

$graph->legend->Pos(0.05,0.5,"right","center");

// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/fieldscatterex1.html b/html/includes/jpgraph/docs/html/exframes/fieldscatterex1.html new file mode 100644 index 0000000000..9423d73c19 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/fieldscatterex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$polex 6;
$poley 40;

function 
FldCallback($x,$y,$a) {
    GLOBAL 
$polex$poley;
    
$maxr 3000;

    
// Size and arrow size is constant
    
$size="";
    
$arrowsize="";

    
// Since we have different scales we need the data points
    // to be of the same magnitude to give it a distance
    // interpretation.
    
$x *= 10

    
// Colors gets colder the further out we go from the center
    
$r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley);
    
$f $r/$maxr;
    if( 
$f $f=1;
    
$red floor((1-$f)*255);
    
$blue floor($f*255);
    
$color = array($red,0,$blue);
    
//echo "x=$x, y=$y, blue=$blue, red=$red<br>";
    
return array($color,$size,$arrowsize);
}

// Create data for a simulated pseudo-magnetic radient field
$datax = array();
$datay = array();
$angle = array();
for(
$x=1$x 10; ++$x ) {
    for(
$y=10$y<100$y += 10) {
    
$a = -1;
    if( 
$x==$polex && $y==$poley ) continue;
    if( 
$x==$polex ) {
        if( 
$y $poley $a=90;
        else 
$a 270;
    }
    if( 
$y==$poley ) {
        if( 
$x  $polex $a=0;
        else  
$a=180;        
    }
    if( 
$a == -) {
        
$d1 $y-$poley;
        
$d2 = ($polex-$x)*20;
        if( 
$y $poley $d2 *= -1;
        
$h sqrt($d1*$d1+$d2*$d2);
        
$t = -$d2/$h;
        
$ac acos($t);
        if( 
$y $poley $ac += M_PI;
        
$a $ac 180/M_PI;
    }
    
$datax[] = $x;
    
$datay[] = $y;
    
$angle[] = $a;
    }
}

// Setup the graph
$graph = new Graph(300,200);
$graph->SetScale("intlin",0,100,0,10);
$graph->SetMarginColor('lightblue');


// ..and titles
$graph->title->Set("Field plot");

// Setup the field plot
$fp = new FieldPlot($datay,$datax,$angle);

// Setup formatting callback
$fp->SetCallback('FldCallback');

// First size argument is length (in pixels of arrow) 
// Second size argument is roughly size of arrow. Arrow size is specified as
// an integer in the range [0,9]
$fp->arrow->SetSize(20,2);
$fp->arrow->SetColor('navy');

$graph->Add($fp);

// .. and output
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/filledgridex1.html b/html/includes/jpgraph/docs/html/exframes/filledgridex1.html new file mode 100644 index 0000000000..7593aecfa3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/filledgridex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay1 = array(20,15,23,15);
$datay2 = array(12,9,42,8);
$datay3 = array(5,17,32,24);

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin");
$graph->SetFrame(false);
$graph->SetMargin(30,50,30,30);

$graph->title->Set('Filled Y-grid');


$graph->yaxis->HideZeroLabel();
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
$graph->xgrid->Show();

$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

// Create the first line
$p1 = new LinePlot($datay1);
$p1->SetColor("navy");
$p1->SetLegend('Line 1');
$graph->Add($p1);

// Create the second line
$p2 = new LinePlot($datay2);
$p2->SetColor("red");
$p2->SetLegend('Line 2');
$graph->Add($p2);

// Create the third line
$p3 = new LinePlot($datay3);
$p3->SetColor("orange");
$p3->SetLegend('Line 3');
$graph->Add($p3);

$graph->legend->SetShadow('gray@0.4',5);
$graph->legend->SetPos(0.1,0.1,'right','top');
// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/filledlineex01.1.html b/html/includes/jpgraph/docs/html/exframes/filledlineex01.1.html new file mode 100644 index 0000000000..36e74c366a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/filledlineex01.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay = array(1.23,1.9,1.6,3.1,3.4,2.8,2.1,1.9);
$graph = new Graph(300,200,"auto");
$graph->SetScale("textlin");

$graph->img->SetMargin(40,40,40,40);    
$graph->SetShadow();
$graph->SetGridDepth(DEPTH_FRONT);

$graph->title->Set("Example of filled line plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new LinePlot($datay);
$p1->SetFillColor("orange");
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);
$graph->Add($p1);

$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/filledlineex01.html b/html/includes/jpgraph/docs/html/exframes/filledlineex01.html new file mode 100644 index 0000000000..8a34a141a4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/filledlineex01.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay = array(1.23,1.9,1.6,3.1,3.4,2.8,2.1,1.9);
$graph = new Graph(300,200,"auto");
$graph->SetScale("textlin");

$graph->img->SetMargin(40,40,40,40);    
$graph->SetShadow();

$graph->title->Set("Example of filled line plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$p1 = new LinePlot($datay);
$p1->SetFillColor("orange");
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);
$graph->Add($p1);

$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/frame_JpGraph_Logo.html b/html/includes/jpgraph/docs/html/exframes/frame_JpGraph_Logo.html new file mode 100644 index 0000000000..67fed7d83f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_JpGraph_Logo.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_alphabarex1.html b/html/includes/jpgraph/docs/html/exframes/frame_alphabarex1.html new file mode 100644 index 0000000000..563c33b800 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_alphabarex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_antispamex01.html b/html/includes/jpgraph/docs/html/exframes/frame_antispamex01.html new file mode 100644 index 0000000000..70fd15d12f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_antispamex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_backgroundex03.html b/html/includes/jpgraph/docs/html/exframes/frame_backgroundex03.html new file mode 100644 index 0000000000..06dd7bf9d0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_backgroundex03.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_balloonex1.html b/html/includes/jpgraph/docs/html/exframes/frame_balloonex1.html new file mode 100644 index 0000000000..2fe4c2ba60 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_balloonex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex1.html new file mode 100644 index 0000000000..7fcae39178 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex2.html b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex2.html new file mode 100644 index 0000000000..2d0a0729e1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex3.html b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex3.html new file mode 100644 index 0000000000..35ffcdc1c2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bar_csimex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex1.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex1.html new file mode 100644 index 0000000000..4c4e9d10bb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex2.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex2.html new file mode 100644 index 0000000000..23249a0823 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex3.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex3.html new file mode 100644 index 0000000000..b95ce73dd3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex4.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex4.html new file mode 100644 index 0000000000..9bea58376f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex5.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex5.html new file mode 100644 index 0000000000..20d6c4b1b9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex6.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex6.html new file mode 100644 index 0000000000..ee84e6c67f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex7.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex7.html new file mode 100644 index 0000000000..e12702928f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex7.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex8.html b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex8.html new file mode 100644 index 0000000000..3e3ede43e4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bargradsmallex8.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_barline_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_barline_csimex1.html new file mode 100644 index 0000000000..74eea8fe27 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_barline_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_barlinefreq_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_barlinefreq_csimex1.html new file mode 100644 index 0000000000..69ba2519c4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_barlinefreq_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex1.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex1.html new file mode 100644 index 0000000000..56abe05bea --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex2.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex2.html new file mode 100644 index 0000000000..571458ca60 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex3.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex3.html new file mode 100644 index 0000000000..98519035d1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex4.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex4.html new file mode 100644 index 0000000000..8ef111e28f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex5.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex5.html new file mode 100644 index 0000000000..852456722c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_bartutex6.html b/html/includes/jpgraph/docs/html/exframes/frame_bartutex6.html new file mode 100644 index 0000000000..8e4043f883 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_bartutex6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_boxstockcsimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_boxstockcsimex1.html new file mode 100644 index 0000000000..d694139b33 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_boxstockcsimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_boxstockex1.html b/html/includes/jpgraph/docs/html/exframes/frame_boxstockex1.html new file mode 100644 index 0000000000..462394a334 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_boxstockex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_builtinplotmarksex1.html b/html/includes/jpgraph/docs/html/exframes/frame_builtinplotmarksex1.html new file mode 100644 index 0000000000..c7fb3bfbbf --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_builtinplotmarksex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvas_jpgarchex.html b/html/includes/jpgraph/docs/html/exframes/frame_canvas_jpgarchex.html new file mode 100644 index 0000000000..38fec349f5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvas_jpgarchex.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex01.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex01.html new file mode 100644 index 0000000000..1dfdf91ee6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex02.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex02.html new file mode 100644 index 0000000000..6a3c352e74 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex02.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex03.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex03.html new file mode 100644 index 0000000000..ef2a6eb37c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex03.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex04.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex04.html new file mode 100644 index 0000000000..1dace9dfcb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex04.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex05.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex05.html new file mode 100644 index 0000000000..8fe74d93f1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex05.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_canvasex06.html b/html/includes/jpgraph/docs/html/exframes/frame_canvasex06.html new file mode 100644 index 0000000000..9f6907f959 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_canvasex06.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_color_chart01.html b/html/includes/jpgraph/docs/html/exframes/frame_color_chart01.html new file mode 100644 index 0000000000..a0f63aad8b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_color_chart01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_color_chart02.html b/html/includes/jpgraph/docs/html/exframes/frame_color_chart02.html new file mode 100644 index 0000000000..fbd949eed3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_color_chart02.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_color_chart03.html b/html/includes/jpgraph/docs/html/exframes/frame_color_chart03.html new file mode 100644 index 0000000000..9e96fa1fee --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_color_chart03.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_color_chart04.html b/html/includes/jpgraph/docs/html/exframes/frame_color_chart04.html new file mode 100644 index 0000000000..a5d213ce4b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_color_chart04.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex1.html b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex1.html new file mode 100644 index 0000000000..a37fef38ee --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex2.html b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex2.html new file mode 100644 index 0000000000..bb62ee68ce --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex4.html b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex4.html new file mode 100644 index 0000000000..6979d9a293 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_dateaxisex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_dbschemaex1.html b/html/includes/jpgraph/docs/html/exframes/frame_dbschemaex1.html new file mode 100644 index 0000000000..e80b159989 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_dbschemaex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example0.html b/html/includes/jpgraph/docs/html/exframes/frame_example0.html new file mode 100644 index 0000000000..0d3f85a15d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example0.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example11.html b/html/includes/jpgraph/docs/html/exframes/frame_example11.html new file mode 100644 index 0000000000..30ec8df07b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example11.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example13.html b/html/includes/jpgraph/docs/html/exframes/frame_example13.html new file mode 100644 index 0000000000..1220360d4a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example13.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example14.html b/html/includes/jpgraph/docs/html/exframes/frame_example14.html new file mode 100644 index 0000000000..963ce05ed8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example14.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example15.html b/html/includes/jpgraph/docs/html/exframes/frame_example15.html new file mode 100644 index 0000000000..e28993f768 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example15.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.1.html new file mode 100644 index 0000000000..09803aac8f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.2.html new file mode 100644 index 0000000000..16cfa4eeab --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.3.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.3.html new file mode 100644 index 0000000000..617e279ca8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.4.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.4.html new file mode 100644 index 0000000000..3439ece37c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.6.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.6.html new file mode 100644 index 0000000000..88e5b7e0b8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example16.html b/html/includes/jpgraph/docs/html/exframes/frame_example16.html new file mode 100644 index 0000000000..8a14f18e7f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example16.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example17.html b/html/includes/jpgraph/docs/html/exframes/frame_example17.html new file mode 100644 index 0000000000..6fd3e53fcd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example17.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example18.html b/html/includes/jpgraph/docs/html/exframes/frame_example18.html new file mode 100644 index 0000000000..4b403a8021 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example18.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example19.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example19.1.html new file mode 100644 index 0000000000..f48c308ddd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example19.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example19.html b/html/includes/jpgraph/docs/html/exframes/frame_example19.html new file mode 100644 index 0000000000..f557dacbb5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example19.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example2.html b/html/includes/jpgraph/docs/html/exframes/frame_example2.html new file mode 100644 index 0000000000..0458bf7418 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.1.html new file mode 100644 index 0000000000..e329ba9925 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.2.html new file mode 100644 index 0000000000..ec4aace674 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.3.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.3.html new file mode 100644 index 0000000000..549112ee4d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.4.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.4.html new file mode 100644 index 0000000000..62ab1d0995 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.5.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.5.html new file mode 100644 index 0000000000..d3b4b4c5d3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example20.html b/html/includes/jpgraph/docs/html/exframes/frame_example20.html new file mode 100644 index 0000000000..876d2d3acb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example20.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example21.html b/html/includes/jpgraph/docs/html/exframes/frame_example21.html new file mode 100644 index 0000000000..2565318178 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example21.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example22.html b/html/includes/jpgraph/docs/html/exframes/frame_example22.html new file mode 100644 index 0000000000..dfd3543a54 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example22.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example23.html b/html/includes/jpgraph/docs/html/exframes/frame_example23.html new file mode 100644 index 0000000000..ad09befe93 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example23.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example24.html b/html/includes/jpgraph/docs/html/exframes/frame_example24.html new file mode 100644 index 0000000000..416c01e5f3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example24.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example25.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example25.1.html new file mode 100644 index 0000000000..5daeabba78 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example25.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example25.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example25.2.html new file mode 100644 index 0000000000..f33e1fd35f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example25.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example25.html b/html/includes/jpgraph/docs/html/exframes/frame_example25.html new file mode 100644 index 0000000000..2b0a6fad6e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example25.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example26.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example26.1.html new file mode 100644 index 0000000000..00e90f1bdc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example26.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example26.html b/html/includes/jpgraph/docs/html/exframes/frame_example26.html new file mode 100644 index 0000000000..fe3768bd7b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example26.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example27.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example27.1.html new file mode 100644 index 0000000000..618c4dc796 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example27.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example27.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example27.2.html new file mode 100644 index 0000000000..b5afc73d2a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example27.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example27.3.html b/html/includes/jpgraph/docs/html/exframes/frame_example27.3.html new file mode 100644 index 0000000000..ca939bbc60 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example27.3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example27.html b/html/includes/jpgraph/docs/html/exframes/frame_example27.html new file mode 100644 index 0000000000..ff1c0425d3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example27.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example28.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example28.1.html new file mode 100644 index 0000000000..84ccf0e4ce --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example28.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example28.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example28.2.html new file mode 100644 index 0000000000..11a09cf43a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example28.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example28.3.html b/html/includes/jpgraph/docs/html/exframes/frame_example28.3.html new file mode 100644 index 0000000000..2261445d7b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example28.3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example28.html b/html/includes/jpgraph/docs/html/exframes/frame_example28.html new file mode 100644 index 0000000000..ae7a9b6419 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example28.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.1.html new file mode 100644 index 0000000000..5147abf643 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.2.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.1.html new file mode 100644 index 0000000000..631e195533 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.2.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.2.html new file mode 100644 index 0000000000..cc8e12ab7d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.html new file mode 100644 index 0000000000..d9e43085c7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.3.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.3.html new file mode 100644 index 0000000000..e82bb3e594 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.4.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.4.html new file mode 100644 index 0000000000..c5f4f94f83 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example3.html b/html/includes/jpgraph/docs/html/exframes/frame_example3.html new file mode 100644 index 0000000000..db8e0aad75 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example4.html b/html/includes/jpgraph/docs/html/exframes/frame_example4.html new file mode 100644 index 0000000000..957b2f93ab --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example5.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example5.1.html new file mode 100644 index 0000000000..f8f84c7218 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example5.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example5.html b/html/includes/jpgraph/docs/html/exframes/frame_example5.html new file mode 100644 index 0000000000..005a3dcaff --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example6.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example6.1.html new file mode 100644 index 0000000000..869dfd8526 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example6.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example6.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example6.2.html new file mode 100644 index 0000000000..b7dc04cc7b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example6.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example6.html b/html/includes/jpgraph/docs/html/exframes/frame_example6.html new file mode 100644 index 0000000000..3b3e81e7a3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example7.html b/html/includes/jpgraph/docs/html/exframes/frame_example7.html new file mode 100644 index 0000000000..8c9386a374 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example7.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example8.html b/html/includes/jpgraph/docs/html/exframes/frame_example8.html new file mode 100644 index 0000000000..24e2c4b1e9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example8.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example9.1.html b/html/includes/jpgraph/docs/html/exframes/frame_example9.1.html new file mode 100644 index 0000000000..a53e429681 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example9.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example9.2.html b/html/includes/jpgraph/docs/html/exframes/frame_example9.2.html new file mode 100644 index 0000000000..af370353f5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example9.2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_example9.html b/html/includes/jpgraph/docs/html/exframes/frame_example9.html new file mode 100644 index 0000000000..a7d1f1d345 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_example9.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_fieldscatterex1.html b/html/includes/jpgraph/docs/html/exframes/frame_fieldscatterex1.html new file mode 100644 index 0000000000..79deb202a8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_fieldscatterex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_filledgridex1.html b/html/includes/jpgraph/docs/html/exframes/frame_filledgridex1.html new file mode 100644 index 0000000000..d30041d291 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_filledgridex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.1.html b/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.1.html new file mode 100644 index 0000000000..d73bac129a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.html b/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.html new file mode 100644 index 0000000000..341beca9e2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_filledlineex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_funcex1.html b/html/includes/jpgraph/docs/html/exframes/frame_funcex1.html new file mode 100644 index 0000000000..664937fc1e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_funcex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex0.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex0.html new file mode 100644 index 0000000000..04c8fa503b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex0.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex1.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex1.html new file mode 100644 index 0000000000..41b2d03a84 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttconstrainex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex01.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex01.html new file mode 100644 index 0000000000..909ec9c685 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex02.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex02.html new file mode 100644 index 0000000000..ebcb1fab7c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttcsimex02.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex00.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex00.html new file mode 100644 index 0000000000..1ca1d229b6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex00.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex01.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex01.html new file mode 100644 index 0000000000..64c08f449f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex02.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex02.html new file mode 100644 index 0000000000..dcab4b9483 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex02.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex03.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex03.html new file mode 100644 index 0000000000..83f3678b47 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex03.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex04.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex04.html new file mode 100644 index 0000000000..99095ab5e5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex04.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex05.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex05.html new file mode 100644 index 0000000000..75d410d9f6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex05.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex06.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex06.html new file mode 100644 index 0000000000..b79cf846ef --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex06.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex07.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex07.html new file mode 100644 index 0000000000..cc6c9cbc27 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex07.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex08.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex08.html new file mode 100644 index 0000000000..e436f258dd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex08.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex09.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex09.html new file mode 100644 index 0000000000..9822733d95 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex09.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex10.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex10.html new file mode 100644 index 0000000000..ef42a6bc69 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex10.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex11.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex11.html new file mode 100644 index 0000000000..a664ac1500 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex11.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex12.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex12.html new file mode 100644 index 0000000000..eca0254bba --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex12.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex13.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex13.html new file mode 100644 index 0000000000..6dbe44e93f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex13.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex14.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex14.html new file mode 100644 index 0000000000..cb7a13eb51 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex14.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex15.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex15.html new file mode 100644 index 0000000000..397458f30a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex15.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex16.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex16.html new file mode 100644 index 0000000000..4323183401 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex16.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex17.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex17.html new file mode 100644 index 0000000000..721c3cffe0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex17.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex18.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex18.html new file mode 100644 index 0000000000..836e9a7009 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex18.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttex19.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttex19.html new file mode 100644 index 0000000000..30d4c9c5dd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttex19.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_gantthgridex1.html b/html/includes/jpgraph/docs/html/exframes/frame_gantthgridex1.html new file mode 100644 index 0000000000..2c018f2410 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_gantthgridex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_gantthourex1.html b/html/includes/jpgraph/docs/html/exframes/frame_gantthourex1.html new file mode 100644 index 0000000000..ef3e629471 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_gantthourex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_gantthourminex1.html b/html/includes/jpgraph/docs/html/exframes/frame_gantthourminex1.html new file mode 100644 index 0000000000..0056101962 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_gantthourminex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_gantticonex1.html b/html/includes/jpgraph/docs/html/exframes/frame_gantticonex1.html new file mode 100644 index 0000000000..6a3cd53878 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_gantticonex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_ganttsimpleex1.html b/html/includes/jpgraph/docs/html/exframes/frame_ganttsimpleex1.html new file mode 100644 index 0000000000..806eb1764f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_ganttsimpleex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_gradbkgex1.html b/html/includes/jpgraph/docs/html/exframes/frame_gradbkgex1.html new file mode 100644 index 0000000000..090086a2f3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_gradbkgex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_horizbarex1.html b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex1.html new file mode 100644 index 0000000000..bb5f1d5c8f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_horizbarex2.html b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex2.html new file mode 100644 index 0000000000..86ffc10621 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_horizbarex3.html b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex3.html new file mode 100644 index 0000000000..b4b863285d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_horizbarex4.html b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex4.html new file mode 100644 index 0000000000..378ffcda7f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_horizbarex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_imgmarkercsimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_imgmarkercsimex1.html new file mode 100644 index 0000000000..90c6aa866d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_imgmarkercsimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_imgmarkerex1.html b/html/includes/jpgraph/docs/html/exframes/frame_imgmarkerex1.html new file mode 100644 index 0000000000..e40c12410c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_imgmarkerex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_impulsex1.html b/html/includes/jpgraph/docs/html/exframes/frame_impulsex1.html new file mode 100644 index 0000000000..33c1f61b48 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_impulsex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_impulsex2.html b/html/includes/jpgraph/docs/html/exframes/frame_impulsex2.html new file mode 100644 index 0000000000..b793c401d3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_impulsex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_impulsex3.html b/html/includes/jpgraph/docs/html/exframes/frame_impulsex3.html new file mode 100644 index 0000000000..42f2e07470 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_impulsex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_impulsex4.html b/html/includes/jpgraph/docs/html/exframes/frame_impulsex4.html new file mode 100644 index 0000000000..7cd309960f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_impulsex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_inyaxisex2.html b/html/includes/jpgraph/docs/html/exframes/frame_inyaxisex2.html new file mode 100644 index 0000000000..8c97db8169 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_inyaxisex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_linebarcentex1.html b/html/includes/jpgraph/docs/html/exframes/frame_linebarcentex1.html new file mode 100644 index 0000000000..89d2c6d34a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_linebarcentex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_lineiconex1.html b/html/includes/jpgraph/docs/html/exframes/frame_lineiconex1.html new file mode 100644 index 0000000000..d85bbfcafd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_lineiconex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_lineiconex2.html b/html/includes/jpgraph/docs/html/exframes/frame_lineiconex2.html new file mode 100644 index 0000000000..fb43638751 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_lineiconex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_listfontsex1.html b/html/includes/jpgraph/docs/html/exframes/frame_listfontsex1.html new file mode 100644 index 0000000000..7f3e433db6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_listfontsex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_logbarex1.html b/html/includes/jpgraph/docs/html/exframes/frame_logbarex1.html new file mode 100644 index 0000000000..6ac15fa474 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_logbarex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_loglogex1.html b/html/includes/jpgraph/docs/html/exframes/frame_loglogex1.html new file mode 100644 index 0000000000..bb11d8faf7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_loglogex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_manscaleex1.html b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex1.html new file mode 100644 index 0000000000..e81452cf25 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_manscaleex2.html b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex2.html new file mode 100644 index 0000000000..6599470afd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_manscaleex3.html b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex3.html new file mode 100644 index 0000000000..7d9201f6b3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_manscaleex4.html b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex4.html new file mode 100644 index 0000000000..1d1f172a3d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_manscaleex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_markflagex1.html b/html/includes/jpgraph/docs/html/exframes/frame_markflagex1.html new file mode 100644 index 0000000000..b4d3f9b039 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_markflagex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_nullvalueex01.html b/html/includes/jpgraph/docs/html/exframes/frame_nullvalueex01.html new file mode 100644 index 0000000000..86f2799d8f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_nullvalueex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_partiallyfilledlineex1.html b/html/includes/jpgraph/docs/html/exframes/frame_partiallyfilledlineex1.html new file mode 100644 index 0000000000..0bc03485e3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_partiallyfilledlineex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_penguin.html b/html/includes/jpgraph/docs/html/exframes/frame_penguin.html new file mode 100644 index 0000000000..37b4a2e8d0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_penguin.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pie3d_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_pie3d_csimex1.html new file mode 100644 index 0000000000..3fd827bf31 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pie3d_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pie_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_pie_csimex1.html new file mode 100644 index 0000000000..c99e507493 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pie_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_piec_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_piec_csimex1.html new file mode 100644 index 0000000000..e0146d0e21 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_piec_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_piecex1.html b/html/includes/jpgraph/docs/html/exframes/frame_piecex1.html new file mode 100644 index 0000000000..20455c5894 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_piecex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_piecex2.html b/html/includes/jpgraph/docs/html/exframes/frame_piecex2.html new file mode 100644 index 0000000000..552e805962 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_piecex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pieex3.html b/html/includes/jpgraph/docs/html/exframes/frame_pieex3.html new file mode 100644 index 0000000000..210f1978eb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pieex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pieex8.html b/html/includes/jpgraph/docs/html/exframes/frame_pieex8.html new file mode 100644 index 0000000000..cb498764f2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pieex8.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pieex9.html b/html/includes/jpgraph/docs/html/exframes/frame_pieex9.html new file mode 100644 index 0000000000..4f36ec2fb2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pieex9.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex1.html b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex1.html new file mode 100644 index 0000000000..c53fa0d638 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex2.html b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex2.html new file mode 100644 index 0000000000..85e4798d30 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex4.html b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex4.html new file mode 100644 index 0000000000..1a333bec57 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_pielabelsex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex0-180.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex0-180.html new file mode 100644 index 0000000000..22873387b8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex0-180.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex0.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex0.html new file mode 100644 index 0000000000..fbad3b63ae --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex0.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex3-lin.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex3-lin.html new file mode 100644 index 0000000000..90a96c2133 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex3-lin.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex3.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex3.html new file mode 100644 index 0000000000..e1f2b58f4a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex4.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex4.html new file mode 100644 index 0000000000..330de97c7e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex5.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex5.html new file mode 100644 index 0000000000..8a9ced1d3d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex7-2.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex7-2.html new file mode 100644 index 0000000000..5b28aa8ca7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex7-2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_polarex9.html b/html/includes/jpgraph/docs/html/exframes/frame_polarex9.html new file mode 100644 index 0000000000..19a7806637 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_polarex9.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex1.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex1.html new file mode 100644 index 0000000000..1f2f0036a3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex2.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex2.html new file mode 100644 index 0000000000..45677514ea --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex4.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex4.html new file mode 100644 index 0000000000..5173d860d0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex6.1.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex6.1.html new file mode 100644 index 0000000000..eb02e8cdbf --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex6.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex6.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex6.html new file mode 100644 index 0000000000..4ed273f732 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex7.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex7.html new file mode 100644 index 0000000000..614a75a631 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex7.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex8.1.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex8.1.html new file mode 100644 index 0000000000..460c64bc1a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex8.1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarex8.html b/html/includes/jpgraph/docs/html/exframes/frame_radarex8.html new file mode 100644 index 0000000000..20fcb20b31 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarex8.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_radarmarkex1.html b/html/includes/jpgraph/docs/html/exframes/frame_radarmarkex1.html new file mode 100644 index 0000000000..0aa3379b44 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_radarmarkex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex0.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex0.html new file mode 100644 index 0000000000..1940cf6817 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex0.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex1.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex1.html new file mode 100644 index 0000000000..8d41a95a16 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex2.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex2.html new file mode 100644 index 0000000000..5dec757628 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex3.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex3.html new file mode 100644 index 0000000000..fc52b81652 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex4.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex4.html new file mode 100644 index 0000000000..a1d9c9bc35 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_rotex5.html b/html/includes/jpgraph/docs/html/exframes/frame_rotex5.html new file mode 100644 index 0000000000..28f00df83c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_rotex5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_scatter_csimex1.html b/html/includes/jpgraph/docs/html/exframes/frame_scatter_csimex1.html new file mode 100644 index 0000000000..fc3b9cf344 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_scatter_csimex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_scatterex1.html b/html/includes/jpgraph/docs/html/exframes/frame_scatterex1.html new file mode 100644 index 0000000000..cf61e111ff --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_scatterex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_scatterex2.html b/html/includes/jpgraph/docs/html/exframes/frame_scatterex2.html new file mode 100644 index 0000000000..876987065f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_scatterex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex1.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex1.html new file mode 100644 index 0000000000..c5eb5f8a8c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex10.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex10.html new file mode 100644 index 0000000000..03f55151c2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex10.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex2.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex2.html new file mode 100644 index 0000000000..ae83bfc14d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex2.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex3.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex3.html new file mode 100644 index 0000000000..d5b9a80a30 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex3.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex4.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex4.html new file mode 100644 index 0000000000..819691b363 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex4.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex5.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex5.html new file mode 100644 index 0000000000..bbf050c04b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex5.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex6.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex6.html new file mode 100644 index 0000000000..da1728e2d4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex6.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex7.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex7.html new file mode 100644 index 0000000000..a6f4616a88 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex7.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex8.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex8.html new file mode 100644 index 0000000000..be945eae7e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex8.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex9.html b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex9.html new file mode 100644 index 0000000000..dbc7bf4a49 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_smallstaticbandsex9.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_splineex1.html b/html/includes/jpgraph/docs/html/exframes/frame_splineex1.html new file mode 100644 index 0000000000..2510bf83d4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_splineex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_staticbandbarex7.html b/html/includes/jpgraph/docs/html/exframes/frame_staticbandbarex7.html new file mode 100644 index 0000000000..3a225eda53 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_staticbandbarex7.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_stockex1.html b/html/includes/jpgraph/docs/html/exframes/frame_stockex1.html new file mode 100644 index 0000000000..6968ae69ac --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_stockex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_tabtitleex1.html b/html/includes/jpgraph/docs/html/exframes/frame_tabtitleex1.html new file mode 100644 index 0000000000..6dc032294c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_tabtitleex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_textalignex1.html b/html/includes/jpgraph/docs/html/exframes/frame_textalignex1.html new file mode 100644 index 0000000000..eced480c19 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_textalignex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_titlecsimex01.html b/html/includes/jpgraph/docs/html/exframes/frame_titlecsimex01.html new file mode 100644 index 0000000000..45389bbc45 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_titlecsimex01.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/frame_topxaxisex1.html b/html/includes/jpgraph/docs/html/exframes/frame_topxaxisex1.html new file mode 100644 index 0000000000..c9ac06d2a6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/frame_topxaxisex1.html @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/docs/html/exframes/funcex1.html b/html/includes/jpgraph/docs/html/exframes/funcex1.html new file mode 100644 index 0000000000..02f7e94d68 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/funcex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_utils.inc");

$f = new FuncGenerator('cos($x)*$x');
list(
$xdata,$ydata) = $f->E(-1.2*M_PI,1.2*M_PI);

$f = new FuncGenerator('$x*$x');
list(
$x2data,$y2data) = $f->E(-2,2);

// Setup the basic graph
$graph = new Graph(450,350,"auto");
$graph->SetScale("linlin");
$graph->SetShadow();
$graph->img->SetMargin(50,50,60,40);    
$graph->SetBox(true,'black',2);    
$graph->SetMarginColor('white');
$graph->SetColor('lightyellow');

// ... and titles
$graph->title->Set('Example of Function plot');
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->subtitle->Set("(With some more advanced axis formatting\nHiding first and last label)");
$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
$graph->xgrid->Show();

$graph->yaxis->SetPos(0);
$graph->yaxis->SetWeight(2);
$graph->yaxis->HideZeroLabel();
$graph->yaxis->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->SetColor('black','darkblue');
$graph->yaxis->HideTicks(true,false);
$graph->yaxis->HideFirstLastLabel();

$graph->xaxis->SetWeight(2);
$graph->xaxis->HideZeroLabel();
$graph->xaxis->HideFirstLastLabel();
$graph->xaxis->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->SetColor('black','darkblue');

$lp1 = new LinePlot($ydata,$xdata);
$lp1->SetColor('blue');
$lp1->SetWeight(2);

$lp2 = new LinePlot($y2data,$x2data);
list(
$xm,$ym)=$lp2->Max();
$lp2->SetColor('red');
$lp2->SetWeight(2);


$graph->Add($lp1);
$graph->Add($lp2);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttconstrainex0.html b/html/includes/jpgraph/docs/html/exframes/ganttconstrainex0.html new file mode 100644 index 0000000000..ae5cba7d5b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttconstrainex0.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// 
// The data for the graphs
//
$data = array(
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",''),
  array(
1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26","2001-11-16",''),
  array(
2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20","2001-11-22",''),
  array(
3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23",'M2') );

// The constrains between the activities
//$constrains = array(array(1,2,CONSTRAIN_ENDSTART),
//            array(2,3,CONSTRAIN_STARTSTART));
$constrains = array();

$progress = array(array(1,0.4));

// Create the basic graph
$graph = new GanttGraph();
$graph->title->Set("Example with grouping and constrains");

// Setup scale
$graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);

// Add the specified activities
$graph->CreateSimple($data,$constrains,$progress);

// .. and stroke the graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttconstrainex1.html b/html/includes/jpgraph/docs/html/exframes/ganttconstrainex1.html new file mode 100644 index 0000000000..c72b01e24c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttconstrainex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// 
// The data for the graphs
//
$data = array(
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",''),
  array(
1,ACTYPE_NORMAL,   "  Label 1",      "2001-10-26","2001-11-18",''),
  array(
2,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26","2001-11-16",''),
  array(
3,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20","2001-11-22",''),
  array(
4,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23",'M2') );

// The constrains between the activities
$constrains = array(array(1,2,CONSTRAIN_ENDSTART),
            array(
1,3,CONSTRAIN_STARTSTART),
            array(
3,4,CONSTRAIN_STARTSTART));

$progress = array(array(1,0.4));

// Create the basic graph
$graph = new GanttGraph();
$graph->title->Set("Example with grouping and constrains");

// Setup scale
$graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);

// Add the specified activities
$graph->CreateSimple($data,$constrains,$progress);

// .. and stroke the graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttcsimex01.html b/html/includes/jpgraph/docs/html/exframes/ganttcsimex01.html new file mode 100644 index 0000000000..93452688a9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttcsimex01.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example to create CSIM

include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$bar1 = new GanttBar(0,"Activity 1","2001-12-21","2002-01-20");
$bar1->SetCSIMTarget('#','Go back 1');
$bar1->title->SetCSIMTarget('#','Go back 1 (title)');
$bar2 = new GanttBar(1,"Activity 2","2002-01-03","2002-01-25");
$bar2->SetCSIMTarget('#','Go back 2');
$bar2->title->SetCSIMTarget('#','Go back 2 (title)');

$graph = new GanttGraph(500);
$graph->title->Set("Example with image map");
$graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_FONT1);

$graph->Add(array($bar1,$bar2));

// And stroke
$graph->StrokeCSIM('ganttcsimex01.php');


?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttcsimex02.html b/html/includes/jpgraph/docs/html/exframes/ganttcsimex02.html new file mode 100644 index 0000000000..8661169fb7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttcsimex02.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example to create CSIM using CreateSimple()

include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$data = array(
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",'',
    
'#1','Go home'),
  array(
1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26","2001-11-16",'ab,cd',
    
'#2','Go home'),
  array(
2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20","2001-11-22",'ek',
    
'#3','Go home'),
  array(
3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23",'M2',
    
'#4','Go home') );

// The constrains between the activities
$constrains = array(array(1,2,CONSTRAIN_ENDSTART),
            array(
2,3,CONSTRAIN_STARTSTART));

$progress = array(array(1,0.4));

$graph = new GanttGraph(500);
$graph->title->Set("Example with image map");
$graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_FONT1);

$graph->CreateSimple($data,$constrains,$progress);

// Add the specified activities
//SetupSimpleGantt($graph,$data,$constrains,$progress);

// And stroke
$graph->StrokeCSIM('ganttcsimex02.php');


?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex00.html b/html/includes/jpgraph/docs/html/exframes/ganttex00.html new file mode 100644 index 0000000000..970edb2e95 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex00.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// A new graph with automatic size
$graph = new GanttGraph(0,0,"auto");

//  A new activity on row '0'
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");
$graph->Add($activity);

// Display the Gantt chart
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex01.html b/html/includes/jpgraph/docs/html/exframes/ganttex01.html new file mode 100644 index 0000000000..331d90afa9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex01.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex02.html b/html/includes/jpgraph/docs/html/exframes/ganttex02.html new file mode 100644 index 0000000000..7f09eaef65 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex02.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);

// Show day, week and month scale
//$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH);
$graph->ShowHeaders(GANTT_HWEEK );

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_WNBR);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex03.html b/html/includes/jpgraph/docs/html/exframes/ganttex03.html new file mode 100644 index 0000000000..73b1093b3e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex03.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(7,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex04.html b/html/includes/jpgraph/docs/html/exframes/ganttex04.html new file mode 100644 index 0000000000..a2f998edc6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex04.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$graph->Add($milestone);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex05.html b/html/includes/jpgraph/docs/html/exframes/ganttex05.html new file mode 100644 index 0000000000..3226e4f0e5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex05.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex06.html b/html/includes/jpgraph/docs/html/exframes/ganttex06.html new file mode 100644 index 0000000000..7e651fdcb1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex06.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex07.html b/html/includes/jpgraph/docs/html/exframes/ganttex07.html new file mode 100644 index 0000000000..aa0b7e1770 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex07.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex08.html b/html/includes/jpgraph/docs/html/exframes/ganttex08.html new file mode 100644 index 0000000000..14103256dd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex08.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Add a right marker
$activity->rightMark->Show();    
$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity->rightMark->SetWidth(13);
$activity->rightMark->SetColor("red");
$activity->rightMark->SetFillColor("red");
$activity->rightMark->title->Set("M5");
$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity->rightMark->title->SetColor("white");

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex09.html b/html/includes/jpgraph/docs/html/exframes/ganttex09.html new file mode 100644 index 0000000000..6522a7017d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex09.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Add a right marker
$activity->rightMark->Show();    
$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity->rightMark->SetWidth(13);
$activity->rightMark->SetColor("red");
$activity->rightMark->SetFillColor("red");
$activity->rightMark->title->Set("M5");
$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity->rightMark->title->SetColor("white");

// Set absolute height
$activity->SetHeight(8);

// Finally add the bar to the graph
$graph->Add($activity);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex10.html b/html/includes/jpgraph/docs/html/exframes/ganttex10.html new file mode 100644 index 0000000000..8fb725ee20 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex10.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Add a right marker
$activity->rightMark->Show();    
$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity->rightMark->SetWidth(13);
$activity->rightMark->SetColor("red");
$activity->rightMark->SetFillColor("red");
$activity->rightMark->title->Set("M5");
$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity->rightMark->title->SetColor("white");

// Set absolute height
$activity->SetHeight(1);


// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Add a right marker
$activity2->rightMark->Show();    
$activity2->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity2->rightMark->SetWidth(13);
$activity2->rightMark->SetColor("red");
$activity2->rightMark->SetFillColor("red");
$activity2->rightMark->title->Set("M5");
$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity2->rightMark->title->SetColor("white");

// Set absolute height
$activity2->SetHeight(1);


// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex11.html b/html/includes/jpgraph/docs/html/exframes/ganttex11.html new file mode 100644 index 0000000000..1908528834 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex11.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Add a right marker
$activity->rightMark->Show();    
$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity->rightMark->SetWidth(13);
$activity->rightMark->SetColor("red");
$activity->rightMark->SetFillColor("red");
$activity->rightMark->title->Set("M5");
$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity->rightMark->title->SetColor("white");

// Set absolute height
$activity->SetHeight(10);


// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Add a right marker
$activity2->rightMark->Show();    
$activity2->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity2->rightMark->SetWidth(13);
$activity2->rightMark->SetColor("red");
$activity2->rightMark->SetFillColor("red");
$activity2->rightMark->title->Set("M5");
$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity2->rightMark->title->SetColor("white");

// Set absolute height
$activity2->SetHeight(10);

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex12.html b/html/includes/jpgraph/docs/html/exframes/ganttex12.html new file mode 100644 index 0000000000..5f8110fb87 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex12.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("A nice main title");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(Draft version)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(0);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Add a right marker
$activity->rightMark->Show();    
$activity->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity->rightMark->SetWidth(13);
$activity->rightMark->SetColor("red");
$activity->rightMark->SetFillColor("red");
$activity->rightMark->title->Set("M5");
$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity->rightMark->title->SetColor("white");

// Set absolute height
$activity->SetHeight(10);


// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Add a right marker
$activity2->rightMark->Show();    
$activity2->rightMark->SetType(MARK_FILLEDCIRCLE);
$activity2->rightMark->SetWidth(13);
$activity2->rightMark->SetColor("red");
$activity2->rightMark->SetFillColor("red");
$activity2->rightMark->title->Set("M5");
$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12);
$activity2->rightMark->title->SetColor("white");

// Set absolute height
$activity2->SetHeight(10);

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Create a miletone
$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15");
$milestone->title->SetColor("black");
$milestone->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($milestone);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex13.html b/html/includes/jpgraph/docs/html/exframes/ganttex13.html new file mode 100644 index 0000000000..060421b853 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex13.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex13.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Instead of week number show the date for the first day in the week
// on the week scale
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Make the week scale font smaller than the default
$graph->scale->week->SetFont(FF_FONT0);

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[ER,TR]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);


// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[BO,SW,JC]");

// ADjust font for caption
$activity2->caption->SetFont(FF_ARIAL,FS_BOLD);
$activity2->caption->SetColor("darkred");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex14.html b/html/includes/jpgraph/docs/html/exframes/ganttex14.html new file mode 100644 index 0000000000..718f805ad0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex14.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex14.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);


// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);


// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex15.html b/html/includes/jpgraph/docs/html/exframes/ganttex15.html new file mode 100644 index 0000000000..4f890add12 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex15.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex15.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);


// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);
$activity->progress->SetPattern(BAND_HVCROSS,"blue");

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);
$activity2->progress->SetPattern(BAND_HVCROSS,"blue");

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex16.html b/html/includes/jpgraph/docs/html/exframes/ganttex16.html new file mode 100644 index 0000000000..53a013f0c6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex16.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex16.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Set table title
$graph->scale->tableTitle->Set("(Rev: 1.22)");
$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
$graph->scale->SetTableTitleBackground("silver");
$graph->scale->tableTitle->Show();

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);
$activity->progress->SetPattern(BAND_HVCROSS,"blue");

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);
$activity2->progress->SetPattern(BAND_HVCROSS,"blue");

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex17.html b/html/includes/jpgraph/docs/html/exframes/ganttex17.html new file mode 100644 index 0000000000..bbca8cfdbb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex17.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex17.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Set table title
$graph->scale->tableTitle->Set("(Rev: 1.22)");
$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
$graph->scale->SetTableTitleBackground("silver");

// Modify the appearance of the dividing lines 
$graph->scale->divider->SetWeight(3);
$graph->scale->divider->SetColor("navy");
$graph->scale->dividerh->SetWeight(3);
$graph->scale->dividerh->SetColor("navy");

// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);
$activity->progress->SetPattern(BAND_HVCROSS,"blue");

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);
$activity2->progress->SetPattern(BAND_HVCROSS,"blue");

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex18.html b/html/includes/jpgraph/docs/html/exframes/ganttex18.html new file mode 100644 index 0000000000..e0b2e0d74b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex18.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex18.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Set table title
$graph->scale->tableTitle->Set("(Rev: 1.22)");
$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
$graph->scale->SetTableTitleBackground("silver");

// Modify the appearance of the dividing lines 
$graph->scale->divider->SetWeight(3);
$graph->scale->divider->SetColor("navy");

$graph->scale->dividerh->SetWeight(3);
$graph->scale->dividerh->SetColor("navy");

$graph->SetBox(true,"navy",3);


// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);
$activity->progress->SetPattern(BAND_HVCROSS,"blue");

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);
$activity2->progress->SetPattern(BAND_HVCROSS,"blue");

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttex19.html b/html/includes/jpgraph/docs/html/exframes/ganttex19.html new file mode 100644 index 0000000000..64054009fb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttex19.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph(0,0,"auto");
$graph->SetBox();
$graph->SetShadow();

// Use swedish locale
$graph->scale->SetDateLocale("sv_SE");

// Add title and subtitle
$graph->title->Set("Example of captions");
$graph->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->subtitle->Set("(ganttex19.php)");

// Show day, week and month scale
$graph->ShowHeaders(GANTT_HDAY GANTT_HWEEK GANTT_HMONTH);

// Set table title
$graph->scale->tableTitle->Set("(Rev: 1.22)");
$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD);
$graph->scale->SetTableTitleBackground("silver");
$graph->scale->tableTitle->Show();

$graph->scale->divider->SetStyle('solid');
$graph->scale->divider->SetWeight(2);
$graph->scale->divider->SetColor('black');


$graph->SetBox(true,"navy",2);


// Use the short name of the month together with a 2 digit year
// on the month scale
$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2);
$graph->scale->month->SetFontColor("white");
$graph->scale->month->SetBackgroundColor("blue");

// 0 % vertical label margin
$graph->SetLabelVMarginFactor(1);

// Format the bar for the first activity
// ($row,$title,$startdate,$enddate)
$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]");

// Yellow diagonal line pattern on a red background
$activity->SetPattern(BAND_RDIAG,"yellow");
$activity->SetFillColor("red");

// Set absolute height
$activity->SetHeight(10);

// Specify progress to 60%
$activity->progress->Set(0.6);
$activity->progress->SetPattern(BAND_HVCROSS,"blue");

// Format the bar for the second activity
// ($row,$title,$startdate,$enddate)
$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]");

// Yellow diagonal line pattern on a red background
$activity2->SetPattern(BAND_RDIAG,"yellow");
$activity2->SetFillColor("red");

// Set absolute height
$activity2->SetHeight(10);

// Specify progress to 30%
$activity2->progress->Set(0.3);
$activity2->progress->SetPattern(BAND_HVCROSS,"blue");

// Finally add the bar to the graph
$graph->Add($activity);
$graph->Add($activity2);

// Add a vertical line
$vline = new GanttVLine("2001-12-24","Phase 1");
$vline->SetDayOffset(0.5);
//$graph->Add($vline);

// ... and display it
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/gantthgridex1.html b/html/includes/jpgraph/docs/html/exframes/gantthgridex1.html new file mode 100644 index 0000000000..c2cda1db18 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/gantthgridex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt horizontal grid example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");


// Some dummy data for some activities
$data = array(
    array(
0,"Group 1  Johan""2001-10-23","2001-11-06",FF_FONT1,FS_BOLD,8),
    array(
1,"  Label 2""2001-10-26","2001-11-04"),
    array(
3,"Group 2""2001-11-20","2001-11-28",FF_FONT1,FS_BOLD,8),
    array(
4,"  Label 1""2001-11-20","2001-12-1"));

// New Gantt Graph
$graph = new GanttGraph(500);

// Setup a title
$graph->title->Set("Grid example");
$graph->subtitle->Set("(Horizontal grid)");
$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14);

// Specify what headers to show
$graph->ShowHeaders(GANTT_HMONTH|GANTT_HDAY );
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_FONT0);

// Setup a horizontal grid
$graph->hgrid->Show();
$graph->hgrid->SetRowFillColor('darkblue@0.9');


for(
$i=0$i<count($data); ++$i) {
    
$bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[5%]",10);
    if( 
count($data[$i]) > )
    
$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    
$bar->SetPattern(BAND_RDIAG,"yellow");
    
$bar->SetFillColor("red");
    
$graph->Add($bar);
}

// Setup a vertical marker line 
$vline = new GanttVLine("2001-11-01");
$vline->SetDayOffset(0.5);
$vline->title->Set("2001-11-01");
$vline->title->SetFont(FF_FONT1,FS_BOLD,10);
$graph->Add($vline);

// Setup a milestone
$ms = new MileStone(6,"M5","2001-11-28","28/12");
$ms->title->SetFont(FF_FONT1,FS_BOLD);
$graph->Add($ms);

// And to show that you can also add an icon we add "Tux"
$icon = new IconPlot('penguin.png',0.01,0.95,1,15);
$icon->SetAnchor('left','bottom');
$graph->Add($icon);

// .. and finally send it back to the browser
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/gantthourex1.html b/html/includes/jpgraph/docs/html/exframes/gantthourex1.html new file mode 100644 index 0000000000..6e1fa8d3f7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/gantthourex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt hour example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

$graph = new GanttGraph();
$graph->SetMarginColor('blue:1.7');
$graph->SetColor('white');

$graph->SetBackgroundGradient('navy','white',GRAD_HOR,BGRAD_MARGIN);
$graph->scale->hour->SetBackgroundColor('lightyellow:1.5');
$graph->scale->hour->SetFont(FF_FONT1);
$graph->scale->day->SetBackgroundColor('lightyellow:1.5');
$graph->scale->day->SetFont(FF_FONT1,FS_BOLD);

$graph->title->Set("Example of hours in scale");
$graph->title->SetColor('white');
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);

$graph->ShowHeaders(GANTT_HDAY GANTT_HHOUR);

$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_FONT1);
$graph->scale->hour->SetIntervall(4);

$graph->scale->hour->SetStyle(HOURSTYLE_HM24);
$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE3);

$data = array(
    array(
0,"  Label 1""2001-01-26 04:00","2001-01-26 14:00"),
    array(
1,"  Label 2""2001-01-26 10:00","2001-01-26 18:00"),
    array(
2,"  Label 3""2001-01-26","2001-01-27 10:00")
);


for(
$i=0$i<count($data); ++$i) {
    
$bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[5%]",10);
    if( 
count($data[$i])>)
        
$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    
$bar->SetPattern(BAND_RDIAG,"yellow");
    
$bar->SetFillColor("red");
    
$graph->Add($bar);
}

$graph->Stroke();



?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/gantthourminex1.html b/html/includes/jpgraph/docs/html/exframes/gantthourminex1.html new file mode 100644 index 0000000000..08c24d241c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/gantthourminex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt hour + minute example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// Some sample Gantt data
$data = array(
    array(
0,array("Group 1","345 days","2004-03-01","2004-05-05"), "2001-11-27 10:00","2001-11-27 14:00",FF_FONT2,FS_NORMAL,0),
    array(
1,array("  Label one",' 122,5 days',' 2004-03-01',' 2003-05-05','MJ'), "2001-11-27 16:00","2001-11-27 18:00"),
    array(
2,"  Label two""2001-11-27","2001-11-27 10:00"),
    array(
3,"  Label three""2001-11-27","2001-11-27 08:00")
);


// Basic graph parameters
$graph = new GanttGraph();
$graph->SetMarginColor('darkgreen@0.8');
$graph->SetColor('white');

// We want to display day, hour and minute scales
$graph->ShowHeaders(GANTT_HDAY GANTT_HHOUR GANTT_HMIN);

// We want to have the following titles in our columns
// describing each activity
$graph->scale->actinfo->SetColTitles(
    array(
'Act','Duration','Start','Finish','Resp'));//,array(100,70,70,70));

// Uncomment the following line if you don't want the 3D look
// in the columns headers
//$graph->scale->actinfo->SetStyle(ACTINFO_2D);

$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);

//These are the default values for use in the columns
//$graph->scale->actinfo->SetFontColor('black');
//$graph->scale->actinfo->SetBackgroundColor('lightgray');
//$graph->scale->actinfo->vgrid->SetStyle('solid');

$graph->scale->actinfo->vgrid->SetColor('gray');
$graph->scale->actinfo->SetColor('darkgray');

// Setup day format
$graph->scale->day->SetBackgroundColor('lightyellow:1.5');
$graph->scale->day->SetFont(FF_ARIAL);
$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE1);

// Setup hour format
$graph->scale->hour->SetIntervall(1);
$graph->scale->hour->SetBackgroundColor('lightyellow:1.5');
$graph->scale->hour->SetFont(FF_FONT0);
$graph->scale->hour->SetStyle(HOURSTYLE_H24);
$graph->scale->hour->grid->SetColor('gray:0.8');

// Setup minute format
$graph->scale->minute->SetIntervall(30);
$graph->scale->minute->SetBackgroundColor('lightyellow:1.5');
$graph->scale->minute->SetFont(FF_FONT0);
$graph->scale->minute->SetStyle(MINUTESTYLE_MM);
$graph->scale->minute->grid->SetColor('lightgray');

$graph->scale->tableTitle->Set('Phase 1');
$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_NORMAL,12);
$graph->scale->SetTableTitleBackground('darkgreen@0.6');
$graph->scale->tableTitle->Show(true);

$graph->title->Set("Example of hours & mins scale");
$graph->title->SetColor('darkgray');
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);


for(
$i=0$i<count($data); ++$i) {
    
$bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3]);
    if( 
count($data[$i])>)
    
$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    
$bar->SetPattern(BAND_RDIAG,"yellow");
    
$bar->SetFillColor("gray");
    
$graph->Add($bar);
}


$vline = new GanttVLine("2001-11-27 13:00");
$vline->title->Set("27/11 13:00");
$vline->title->SetFont(FF_FONT1,FS_BOLD,10);
$graph->Add($vline);

$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/gantticonex1.html b/html/includes/jpgraph/docs/html/exframes/gantticonex1.html new file mode 100644 index 0000000000..4f9a08832c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/gantticonex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// Basic Gantt graph
$graph = new GanttGraph();
$graph->title->Set("Using the builtin icons");

// Explicitely set the date range 
// (Autoscaling will of course also work)
$graph->SetDateRange('2001-10-06','2002-4-10');


// 1.5 line spacing to make more room
$graph->SetVMarginFactor(1.5);

// Setup some nonstandard colors
$graph->SetMarginColor('lightgreen@0.8');
$graph->SetBox(true,'yellow:0.6',2);
$graph->SetFrame(true,'darkgreen',4);
$graph->scale->divider->SetColor('yellow:0.6');
$graph->scale->dividerh->SetColor('yellow:0.6');

// Display month and year scale with the gridlines
$graph->ShowHeaders(GANTT_HMONTH GANTT_HYEAR);
$graph->scale->month->grid->SetColor('gray');
$graph->scale->month->grid->Show(true);
$graph->scale->year->grid->SetColor('gray');
$graph->scale->year->grid->Show(true);

// For the titles we also add a minimum width of 100 pixels for the Task name column
$graph->scale->actinfo->SetColTitles(
    array(
'Note','Task','Duration','Start','Finish'),array(30,100));
$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5');
$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10);
$graph->scale->actinfo->vgrid->SetStyle('solid');
$graph->scale->actinfo->vgrid->SetColor('gray');

// Uncomment this to keep the columns but show no headers
//$graph->scale->actinfo->Show(false);

// Setup the icons we want to use
$erricon = new IconImage(GICON_FOLDER,0.6);
$startconicon = new IconImage(GICON_FOLDEROPEN,0.6);
$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5);

// Store the icons in the first column and use plain text in the others
$data = array(
    array(
0,array($erricon,"Pre-study","102 days","23 Nov '01","1 Mar '02")
          , 
"2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8),
    array(
1,array($startconicon,"Prototype","21 days","26 Oct '01","16 Nov '01"),
          
"2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8),
    array(
2,array($endconicon,"Report","12 days","1 Mar '02","13 Mar '02"),
          
"2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8)
);
    
// Create the bars and add them to the gantt chart
for($i=0$i<count($data); ++$i) {
    
$bar = new GanttBar($data[$i][0],$data[$i][1],$data[$i][2],$data[$i][3],"[50%]",10);
    if( 
count($data[$i])>)
        
$bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]);
    
$bar->SetPattern(BAND_RDIAG,"yellow");
    
$bar->SetFillColor("gray");
    
$bar->progress->Set(0.5);
    
$bar->progress->SetPattern(GANTT_SOLID,"darkgreen");
    
$bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'.$i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i));
    
$graph->Add($bar);
}

// Output the chart
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/ganttsimpleex1.html b/html/includes/jpgraph/docs/html/exframes/ganttsimpleex1.html new file mode 100644 index 0000000000..8702c10a73 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/ganttsimpleex1.html @@ -0,0 +1,3 @@ + +<?php
// Gantt example
include ("../jpgraph.php");
include (
"../jpgraph_gantt.php");

// 
// The data for the graphs
//
$data = array(
  array(
0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26","2001-11-23",''),
  array(
1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26","2001-11-13",'[KJ]'),
  array(
2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20","2001-11-22",'[EP]'),
  array(
3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23",'M2') );

// Create the basic graph
$graph = new GanttGraph();
$graph->title->Set("Gantt Graph using CreateSimple()");

// Setup scale
$graph->ShowHeaders(GANTT_HYEAR GANTT_HMONTH GANTT_HDAY GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);

// Add the specified activities
$graph->CreateSimple($data);

// .. and stroke the graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/gradbkgex1.html b/html/includes/jpgraph/docs/html/exframes/gradbkgex1.html new file mode 100644 index 0000000000..e03fbb55cb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/gradbkgex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay1 = array(4,26,12,18,8,22);
$datay2 = array(12,9,42,8,20,19);

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin",0,50);
$graph->SetMargin(30,50,30,30);

// We must have the frame enabled to get the gradient
// However, we don't want the frame line so we set it to
// white color which makes it invisible.
$graph->SetFrame(true,'white');

// Setup a background gradient image
$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT);

// Setup the tab title
$graph->tabtitle->Set(' 3rd Division ' );
$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);

// Setup x,Y grid
$graph->xgrid->Show();
$graph->xgrid->SetColor('gray@0.5');
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
$graph->ygrid->SetColor('gray@0.5');

// Setup color for axis and labels on axis
$graph->xaxis->SetColor('orange','black');
$graph->yaxis->SetColor('orange','black');

// Ticks on the outsid
$graph->xaxis->SetTickSide(SIDE_DOWN);
$graph->yaxis->SetTickSide(SIDE_LEFT);

// Setup the legend box colors and font
$graph->legend->SetColor('white','navy');
$graph->legend->SetFillColor('navy@0.25');
$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8);
$graph->legend->SetShadow('darkgray@0.4',3);
$graph->legend->SetPos(0.05,0.05,'right','top');

// Create the first line
$p1 = new LinePlot($datay1);
$p1->SetColor("red");
$p1->SetWeight(2);
$p1->SetLegend('2002');
$graph->Add($p1);

// Create the second line
$p2 = new LinePlot($datay2);
$p2->SetColor("lightyellow");
$p2->SetLegend('2001');
$p2->SetWeight(2);
$graph->Add($p2);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/horizbarex1.html b/html/includes/jpgraph/docs/html/exframes/horizbarex1.html new file mode 100644 index 0000000000..78e5502c17 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/horizbarex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(2,3,5,8,12,6,3);
$datax=array("Jan","Feb","Mar","Apr","May","Jun","Jul");

// Size of graph
$width=400
$height=500;

// Set the basic parameters of the graph 
$graph = new Graph($width,$height,'auto');
$graph->SetScale("textlin");

// Rotate graph 90 degrees and set margin
$graph->Set90AndMargin(50,20,50,30);

// Nice shadow
$graph->SetShadow();

// Setup title
$graph->title->Set("Horizontal bar graph ex 1");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
$graph->subtitle->Set("(No Y-axis)");

// Setup X-axis
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12);

// Some extra margin looks nicer
$graph->xaxis->SetLabelMargin(10);

// Label align for X-axis
$graph->xaxis->SetLabelAlign('right','center');

// Add some grace to y-axis so the bars doesn't go
// all the way to the end of the plot area
$graph->yaxis->scale->SetGrace(20);

// We don't want to display Y-axis
$graph->yaxis->Hide();

// Now create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$bplot->SetShadow();

//You can change the width of the bars if you like
//$bplot->SetWidth(0.5);

// We want to display the value of each bar at the top
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12);
$bplot->value->SetAlign('left','center');
$bplot->value->SetColor("black","darkred");
$bplot->value->SetFormat('%.1f mkr');

// Add the bar to the graph
$graph->Add($bplot);

// .. and stroke the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/horizbarex2.html b/html/includes/jpgraph/docs/html/exframes/horizbarex2.html new file mode 100644 index 0000000000..c0c14953e0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/horizbarex2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(2,3,5,8,12,6,3);
$datax=array("Jan","Feb","Mar","Apr","May","Jun","Jul");

$width=400
$height=500;

// Set the basic parameters of the graph 
$graph = new Graph($width,$height,'auto');
$graph->SetScale("textlin");

$top 80;
$bottom 30;
$left 50;
$right 30;
$graph->Set90AndMargin($left,$right,$top,$bottom);

// Nice shadow
$graph->SetShadow();

// Setup title
$graph->title->Set("Horizontal bar graph ex 2");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
$graph->subtitle->Set("(Axis at top)");

// Setup X-axis
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12);

// Some extra margin looks nicer
$graph->xaxis->SetLabelMargin(5);

// Label align for X-axis
$graph->xaxis->SetLabelAlign('right','center');

// Add some grace to y-axis so the bars doesn't go
// all the way to the end of the plot area
$graph->yaxis->scale->SetGrace(20);
$graph->yaxis->SetLabelAlign('center','bottom');
$graph->yaxis->SetLabelAngle(45);
$graph->yaxis->SetLabelFormat('%d');
$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,12);

// We don't want to display Y-axis
//$graph->yaxis->Hide();

// Now create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$bplot->SetShadow();

//You can change the width of the bars if you like
//$bplot->SetWidth(0.5);

// We want to display the value of each bar at the top
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12);
$bplot->value->SetAlign('left','center');
$bplot->value->SetColor("black","darkred");
$bplot->value->SetFormat('%.1f mkr');

// Add the bar to the graph
$graph->Add($bplot);


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/horizbarex3.html b/html/includes/jpgraph/docs/html/exframes/horizbarex3.html new file mode 100644 index 0000000000..3e9126454e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/horizbarex3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(2,3,-5,8,12,6,3);
$datax=array("Jan","Feb","Mar","Apr","May","Jun","Jul");

// Size of graph
$width=400
$height=500;

// Set the basic parameters of the graph 
$graph = new Graph($width,$height,'auto');
$graph->SetScale("textlin");

$top 50;
$bottom 80;
$left 50;
$right 20;
$graph->Set90AndMargin($left,$right,$top,$bottom);

$graph->xaxis->SetPos('min');

// Nice shadow
$graph->SetShadow();

// Setup title
$graph->title->Set("Horizontal bar graph ex 3");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);
$graph->subtitle->Set("(Axis at bottom)");

// Setup X-axis
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_FONT2,FS_BOLD,12);

// Some extra margin looks nicer
$graph->xaxis->SetLabelMargin(5);

// Label align for X-axis
$graph->xaxis->SetLabelAlign('right','center');

// Add some grace to y-axis so the bars doesn't go
// all the way to the end of the plot area
$graph->yaxis->scale->SetGrace(20);

// Setup the Y-axis to be displayed in the bottom of the 
// graph. We also finetune the exact layout of the title,
// ticks and labels to make them look nice.
$graph->yaxis->SetPos('max');

// First make the labels look right
$graph->yaxis->SetLabelAlign('center','top');
$graph->yaxis->SetLabelFormat('%d');
$graph->yaxis->SetLabelSide(SIDE_RIGHT);

// The fix the tick marks
$graph->yaxis->SetTickSide(SIDE_LEFT);

// Finally setup the title
$graph->yaxis->SetTitleSide(SIDE_RIGHT);
$graph->yaxis->SetTitleMargin(35);

// To align the title to the right use :
$graph->yaxis->SetTitle('Turnaround 2002','high');
$graph->yaxis->title->Align('right');

// To center the title use :
//$graph->yaxis->SetTitle('Turnaround 2002','center');
//$graph->yaxis->title->Align('center');

$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,12);
$graph->yaxis->title->SetAngle(0);

$graph->yaxis->SetFont(FF_FONT2,FS_NORMAL);
// If you want the labels at an angle other than 0 or 90
// you need to use TTF fonts
//$graph->yaxis->SetLabelAngle(0);

// Now create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$bplot->SetShadow();

//You can change the width of the bars if you like
//$bplot->SetWidth(0.5);

// We want to display the value of each bar at the top
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12);
$bplot->value->SetAlign('left','center');
$bplot->value->SetColor("black","darkred");
$bplot->value->SetFormat('%.1f mkr');

// Add the bar to the graph
$graph->Add($bplot);


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/horizbarex4.html b/html/includes/jpgraph/docs/html/exframes/horizbarex4.html new file mode 100644 index 0000000000..2e003278a4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/horizbarex4.html @@ -0,0 +1,4 @@ + +<?php
// $Id: horizbarex4.php,v 1.4 2002/11/17 23:59:27 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(1992,1993,1995,1996,1997,1998,2001);

// Size of graph
$width=400
$height=500;

// Set the basic parameters of the graph 
$graph = new Graph($width,$height,'auto');
$graph->SetScale("textlin");

$top 60;
$bottom 30;
$left 80;
$right 30;
$graph->Set90AndMargin($left,$right,$top,$bottom);

// Nice shadow
$graph->SetShadow();

// Setup labels
$lbl = array("Andrew\nTait","Thomas\nAnderssen","Kevin\nSpacey","Nick\nDavidsson",
"David\nLindquist","Jason\nTait","Lorin\nPersson");
$graph->xaxis->SetTickLabels($lbl);

// Label align for X-axis
$graph->xaxis->SetLabelAlign('right','center','right');

// Label align for Y-axis
$graph->yaxis->SetLabelAlign('center','bottom');

// Titles
$graph->title->Set('Year Married');

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$bplot->SetWidth(0.5);
$bplot->SetYMin(1990);

$graph->Add($bplot);

$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/image_JpGraph_Logo.html b/html/includes/jpgraph/docs/html/exframes/image_JpGraph_Logo.html new file mode 100644 index 0000000000..3058d7e112 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_JpGraph_Logo.html @@ -0,0 +1 @@ +

JpGraph_Logo.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_alphabarex1.html b/html/includes/jpgraph/docs/html/exframes/image_alphabarex1.html new file mode 100644 index 0000000000..cff02502e0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_alphabarex1.html @@ -0,0 +1 @@ +

alphabarex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_antispamex01.html b/html/includes/jpgraph/docs/html/exframes/image_antispamex01.html new file mode 100644 index 0000000000..91a189fc01 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_antispamex01.html @@ -0,0 +1 @@ +

antispamex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_backgroundex03.html b/html/includes/jpgraph/docs/html/exframes/image_backgroundex03.html new file mode 100644 index 0000000000..2e73047240 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_backgroundex03.html @@ -0,0 +1 @@ +

backgroundex03.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_balloonex1.html b/html/includes/jpgraph/docs/html/exframes/image_balloonex1.html new file mode 100644 index 0000000000..ba69cdbae1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_balloonex1.html @@ -0,0 +1 @@ +

balloonex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bar_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex1.html new file mode 100644 index 0000000000..307d494d12 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex1.html @@ -0,0 +1 @@ +

bar_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bar_csimex2.html b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex2.html new file mode 100644 index 0000000000..68cf93e186 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex2.html @@ -0,0 +1 @@ +

bar_csimex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bar_csimex3.html b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex3.html new file mode 100644 index 0000000000..f35c5b8ff7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bar_csimex3.html @@ -0,0 +1 @@ +

bar_csimex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex1.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex1.html new file mode 100644 index 0000000000..84fb68cdd9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex1.html @@ -0,0 +1 @@ +

bargradsmallex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex2.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex2.html new file mode 100644 index 0000000000..d540b81f27 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex2.html @@ -0,0 +1 @@ +

bargradsmallex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex3.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex3.html new file mode 100644 index 0000000000..cb152c19b4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex3.html @@ -0,0 +1 @@ +

bargradsmallex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex4.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex4.html new file mode 100644 index 0000000000..d33e10dc4e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex4.html @@ -0,0 +1 @@ +

bargradsmallex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex5.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex5.html new file mode 100644 index 0000000000..7290c824a2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex5.html @@ -0,0 +1 @@ +

bargradsmallex5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex6.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex6.html new file mode 100644 index 0000000000..9edc894ec9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex6.html @@ -0,0 +1 @@ +

bargradsmallex6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex7.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex7.html new file mode 100644 index 0000000000..ce076671ef --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex7.html @@ -0,0 +1 @@ +

bargradsmallex7.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex8.html b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex8.html new file mode 100644 index 0000000000..273cef06a0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bargradsmallex8.html @@ -0,0 +1 @@ +

bargradsmallex8.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_barline_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_barline_csimex1.html new file mode 100644 index 0000000000..369087998f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_barline_csimex1.html @@ -0,0 +1 @@ +

barline_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_barlinefreq_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_barlinefreq_csimex1.html new file mode 100644 index 0000000000..e5ae173446 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_barlinefreq_csimex1.html @@ -0,0 +1 @@ +

barlinefreq_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex1.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex1.html new file mode 100644 index 0000000000..90aeb25e20 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex1.html @@ -0,0 +1 @@ +

bartutex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex2.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex2.html new file mode 100644 index 0000000000..683d004d04 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex2.html @@ -0,0 +1 @@ +

bartutex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex3.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex3.html new file mode 100644 index 0000000000..aa89b957c6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex3.html @@ -0,0 +1 @@ +

bartutex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex4.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex4.html new file mode 100644 index 0000000000..3b9f281c9f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex4.html @@ -0,0 +1 @@ +

bartutex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex5.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex5.html new file mode 100644 index 0000000000..919372382b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex5.html @@ -0,0 +1 @@ +

bartutex5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_bartutex6.html b/html/includes/jpgraph/docs/html/exframes/image_bartutex6.html new file mode 100644 index 0000000000..672a768635 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_bartutex6.html @@ -0,0 +1 @@ +

bartutex6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_boxstockcsimex1.html b/html/includes/jpgraph/docs/html/exframes/image_boxstockcsimex1.html new file mode 100644 index 0000000000..02da9f1681 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_boxstockcsimex1.html @@ -0,0 +1 @@ +

boxstockcsimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_boxstockex1.html b/html/includes/jpgraph/docs/html/exframes/image_boxstockex1.html new file mode 100644 index 0000000000..f9dba61128 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_boxstockex1.html @@ -0,0 +1 @@ +

boxstockex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_builtinplotmarksex1.html b/html/includes/jpgraph/docs/html/exframes/image_builtinplotmarksex1.html new file mode 100644 index 0000000000..5ec00cce6f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_builtinplotmarksex1.html @@ -0,0 +1 @@ +

builtinplotmarksex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvas_jpgarchex.html b/html/includes/jpgraph/docs/html/exframes/image_canvas_jpgarchex.html new file mode 100644 index 0000000000..2b767f5bd2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvas_jpgarchex.html @@ -0,0 +1 @@ +

canvas_jpgarchex.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex01.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex01.html new file mode 100644 index 0000000000..5034bac466 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex01.html @@ -0,0 +1 @@ +

canvasex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex02.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex02.html new file mode 100644 index 0000000000..54b5b519f8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex02.html @@ -0,0 +1 @@ +

canvasex02.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex03.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex03.html new file mode 100644 index 0000000000..b79fb66500 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex03.html @@ -0,0 +1 @@ +

canvasex03.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex04.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex04.html new file mode 100644 index 0000000000..545e863c91 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex04.html @@ -0,0 +1 @@ +

canvasex04.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex05.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex05.html new file mode 100644 index 0000000000..c50c20427d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex05.html @@ -0,0 +1 @@ +

canvasex05.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_canvasex06.html b/html/includes/jpgraph/docs/html/exframes/image_canvasex06.html new file mode 100644 index 0000000000..0223cb6731 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_canvasex06.html @@ -0,0 +1 @@ +

canvasex06.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_color_chart01.html b/html/includes/jpgraph/docs/html/exframes/image_color_chart01.html new file mode 100644 index 0000000000..d969ca5359 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_color_chart01.html @@ -0,0 +1 @@ +

color_chart01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_color_chart02.html b/html/includes/jpgraph/docs/html/exframes/image_color_chart02.html new file mode 100644 index 0000000000..9e10e9ed62 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_color_chart02.html @@ -0,0 +1 @@ +

color_chart02.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_color_chart03.html b/html/includes/jpgraph/docs/html/exframes/image_color_chart03.html new file mode 100644 index 0000000000..8424637292 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_color_chart03.html @@ -0,0 +1 @@ +

color_chart03.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_color_chart04.html b/html/includes/jpgraph/docs/html/exframes/image_color_chart04.html new file mode 100644 index 0000000000..5737af519a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_color_chart04.html @@ -0,0 +1 @@ +

color_chart04.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_dateaxisex1.html b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex1.html new file mode 100644 index 0000000000..da86fd10b7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex1.html @@ -0,0 +1 @@ +

dateaxisex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_dateaxisex2.html b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex2.html new file mode 100644 index 0000000000..67efef4e1a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex2.html @@ -0,0 +1 @@ +

dateaxisex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_dateaxisex4.html b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex4.html new file mode 100644 index 0000000000..b596bc90e5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_dateaxisex4.html @@ -0,0 +1 @@ +

dateaxisex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_dbschemaex1.html b/html/includes/jpgraph/docs/html/exframes/image_dbschemaex1.html new file mode 100644 index 0000000000..7ee33c18b7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_dbschemaex1.html @@ -0,0 +1 @@ +

dbschemaex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example0.html b/html/includes/jpgraph/docs/html/exframes/image_example0.html new file mode 100644 index 0000000000..f5e1f92fd5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example0.html @@ -0,0 +1 @@ +

example0.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example11.html b/html/includes/jpgraph/docs/html/exframes/image_example11.html new file mode 100644 index 0000000000..5d18ccbe94 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example11.html @@ -0,0 +1 @@ +

example11.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example13.html b/html/includes/jpgraph/docs/html/exframes/image_example13.html new file mode 100644 index 0000000000..2320099bd4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example13.html @@ -0,0 +1 @@ +

example13.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example14.html b/html/includes/jpgraph/docs/html/exframes/image_example14.html new file mode 100644 index 0000000000..9d338a8fad --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example14.html @@ -0,0 +1 @@ +

example14.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example15.html b/html/includes/jpgraph/docs/html/exframes/image_example15.html new file mode 100644 index 0000000000..9c70f3ed34 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example15.html @@ -0,0 +1 @@ +

example15.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.1.html b/html/includes/jpgraph/docs/html/exframes/image_example16.1.html new file mode 100644 index 0000000000..a749443b01 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.1.html @@ -0,0 +1 @@ +

example16.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.2.html b/html/includes/jpgraph/docs/html/exframes/image_example16.2.html new file mode 100644 index 0000000000..29d3ee001e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.2.html @@ -0,0 +1 @@ +

example16.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.3.html b/html/includes/jpgraph/docs/html/exframes/image_example16.3.html new file mode 100644 index 0000000000..b4ea595ac7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.3.html @@ -0,0 +1 @@ +

example16.3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.4.html b/html/includes/jpgraph/docs/html/exframes/image_example16.4.html new file mode 100644 index 0000000000..672c79d7de --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.4.html @@ -0,0 +1 @@ +

example16.4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.6.html b/html/includes/jpgraph/docs/html/exframes/image_example16.6.html new file mode 100644 index 0000000000..358fe0d47e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.6.html @@ -0,0 +1 @@ +

example16.6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example16.html b/html/includes/jpgraph/docs/html/exframes/image_example16.html new file mode 100644 index 0000000000..7683775126 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example16.html @@ -0,0 +1 @@ +

example16.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example17.html b/html/includes/jpgraph/docs/html/exframes/image_example17.html new file mode 100644 index 0000000000..36e2665925 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example17.html @@ -0,0 +1 @@ +

example17.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example18.html b/html/includes/jpgraph/docs/html/exframes/image_example18.html new file mode 100644 index 0000000000..6ab52ddddb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example18.html @@ -0,0 +1 @@ +

example18.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example19.1.html b/html/includes/jpgraph/docs/html/exframes/image_example19.1.html new file mode 100644 index 0000000000..8364ecce56 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example19.1.html @@ -0,0 +1 @@ +

example19.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example19.html b/html/includes/jpgraph/docs/html/exframes/image_example19.html new file mode 100644 index 0000000000..e52a201bfc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example19.html @@ -0,0 +1 @@ +

example19.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example2.html b/html/includes/jpgraph/docs/html/exframes/image_example2.html new file mode 100644 index 0000000000..f296ec270a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example2.html @@ -0,0 +1 @@ +

example2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.1.html b/html/includes/jpgraph/docs/html/exframes/image_example20.1.html new file mode 100644 index 0000000000..43d419ddb6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.1.html @@ -0,0 +1 @@ +

example20.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.2.html b/html/includes/jpgraph/docs/html/exframes/image_example20.2.html new file mode 100644 index 0000000000..cd7ae4d356 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.2.html @@ -0,0 +1 @@ +

example20.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.3.html b/html/includes/jpgraph/docs/html/exframes/image_example20.3.html new file mode 100644 index 0000000000..2302e10c73 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.3.html @@ -0,0 +1 @@ +

example20.3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.4.html b/html/includes/jpgraph/docs/html/exframes/image_example20.4.html new file mode 100644 index 0000000000..edf1d3eb0e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.4.html @@ -0,0 +1 @@ +

example20.4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.5.html b/html/includes/jpgraph/docs/html/exframes/image_example20.5.html new file mode 100644 index 0000000000..26530a3c79 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.5.html @@ -0,0 +1 @@ +

example20.5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example20.html b/html/includes/jpgraph/docs/html/exframes/image_example20.html new file mode 100644 index 0000000000..0133a0adbb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example20.html @@ -0,0 +1 @@ +

example20.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example21.html b/html/includes/jpgraph/docs/html/exframes/image_example21.html new file mode 100644 index 0000000000..8c72085ae1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example21.html @@ -0,0 +1 @@ +

example21.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example22.html b/html/includes/jpgraph/docs/html/exframes/image_example22.html new file mode 100644 index 0000000000..8561a59f69 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example22.html @@ -0,0 +1 @@ +

example22.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example23.html b/html/includes/jpgraph/docs/html/exframes/image_example23.html new file mode 100644 index 0000000000..2ca8a0d2dd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example23.html @@ -0,0 +1 @@ +

example23.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example24.html b/html/includes/jpgraph/docs/html/exframes/image_example24.html new file mode 100644 index 0000000000..2653ea3ec5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example24.html @@ -0,0 +1 @@ +

example24.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example25.1.html b/html/includes/jpgraph/docs/html/exframes/image_example25.1.html new file mode 100644 index 0000000000..800dbbcbca --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example25.1.html @@ -0,0 +1 @@ +

example25.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example25.2.html b/html/includes/jpgraph/docs/html/exframes/image_example25.2.html new file mode 100644 index 0000000000..ed2e5157e9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example25.2.html @@ -0,0 +1 @@ +

example25.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example25.html b/html/includes/jpgraph/docs/html/exframes/image_example25.html new file mode 100644 index 0000000000..2065b1d614 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example25.html @@ -0,0 +1 @@ +

example25.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example26.1.html b/html/includes/jpgraph/docs/html/exframes/image_example26.1.html new file mode 100644 index 0000000000..0fdd5db079 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example26.1.html @@ -0,0 +1 @@ +

example26.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example26.html b/html/includes/jpgraph/docs/html/exframes/image_example26.html new file mode 100644 index 0000000000..412adf13db --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example26.html @@ -0,0 +1 @@ +

example26.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example27.1.html b/html/includes/jpgraph/docs/html/exframes/image_example27.1.html new file mode 100644 index 0000000000..03b122d304 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example27.1.html @@ -0,0 +1 @@ +

example27.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example27.2.html b/html/includes/jpgraph/docs/html/exframes/image_example27.2.html new file mode 100644 index 0000000000..b2f4b753b0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example27.2.html @@ -0,0 +1 @@ +

example27.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example27.3.html b/html/includes/jpgraph/docs/html/exframes/image_example27.3.html new file mode 100644 index 0000000000..3e7fe8383a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example27.3.html @@ -0,0 +1 @@ +

example27.3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example27.html b/html/includes/jpgraph/docs/html/exframes/image_example27.html new file mode 100644 index 0000000000..75a1401f9a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example27.html @@ -0,0 +1 @@ +

example27.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example28.1.html b/html/includes/jpgraph/docs/html/exframes/image_example28.1.html new file mode 100644 index 0000000000..f1e1cc7c46 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example28.1.html @@ -0,0 +1 @@ +

example28.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example28.2.html b/html/includes/jpgraph/docs/html/exframes/image_example28.2.html new file mode 100644 index 0000000000..6df37b4804 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example28.2.html @@ -0,0 +1 @@ +

example28.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example28.3.html b/html/includes/jpgraph/docs/html/exframes/image_example28.3.html new file mode 100644 index 0000000000..ec1b645984 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example28.3.html @@ -0,0 +1 @@ +

example28.3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example28.html b/html/includes/jpgraph/docs/html/exframes/image_example28.html new file mode 100644 index 0000000000..6c28a4208b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example28.html @@ -0,0 +1 @@ +

example28.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.1.html b/html/includes/jpgraph/docs/html/exframes/image_example3.1.html new file mode 100644 index 0000000000..cc97eebdc5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.1.html @@ -0,0 +1 @@ +

example3.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.2.1.html b/html/includes/jpgraph/docs/html/exframes/image_example3.2.1.html new file mode 100644 index 0000000000..450297ba8e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.2.1.html @@ -0,0 +1 @@ +

example3.2.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.2.2.html b/html/includes/jpgraph/docs/html/exframes/image_example3.2.2.html new file mode 100644 index 0000000000..be94d2ddb5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.2.2.html @@ -0,0 +1 @@ +

example3.2.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.2.html b/html/includes/jpgraph/docs/html/exframes/image_example3.2.html new file mode 100644 index 0000000000..ab77136f2b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.2.html @@ -0,0 +1 @@ +

example3.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.3.html b/html/includes/jpgraph/docs/html/exframes/image_example3.3.html new file mode 100644 index 0000000000..54f1dfc80c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.3.html @@ -0,0 +1 @@ +

example3.3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.4.html b/html/includes/jpgraph/docs/html/exframes/image_example3.4.html new file mode 100644 index 0000000000..db38fb5d2d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.4.html @@ -0,0 +1 @@ +

example3.4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example3.html b/html/includes/jpgraph/docs/html/exframes/image_example3.html new file mode 100644 index 0000000000..871218237f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example3.html @@ -0,0 +1 @@ +

example3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example4.html b/html/includes/jpgraph/docs/html/exframes/image_example4.html new file mode 100644 index 0000000000..024631b779 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example4.html @@ -0,0 +1 @@ +

example4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example5.1.html b/html/includes/jpgraph/docs/html/exframes/image_example5.1.html new file mode 100644 index 0000000000..a6cc8dc464 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example5.1.html @@ -0,0 +1 @@ +

example5.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example5.html b/html/includes/jpgraph/docs/html/exframes/image_example5.html new file mode 100644 index 0000000000..50266f5a8b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example5.html @@ -0,0 +1 @@ +

example5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example6.1.html b/html/includes/jpgraph/docs/html/exframes/image_example6.1.html new file mode 100644 index 0000000000..98d609dcba --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example6.1.html @@ -0,0 +1 @@ +

example6.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example6.2.html b/html/includes/jpgraph/docs/html/exframes/image_example6.2.html new file mode 100644 index 0000000000..5cfafd3b37 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example6.2.html @@ -0,0 +1 @@ +

example6.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example6.html b/html/includes/jpgraph/docs/html/exframes/image_example6.html new file mode 100644 index 0000000000..d58b123fcd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example6.html @@ -0,0 +1 @@ +

example6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example7.html b/html/includes/jpgraph/docs/html/exframes/image_example7.html new file mode 100644 index 0000000000..2c2d42befc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example7.html @@ -0,0 +1 @@ +

example7.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example8.html b/html/includes/jpgraph/docs/html/exframes/image_example8.html new file mode 100644 index 0000000000..a9be6a651a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example8.html @@ -0,0 +1 @@ +

example8.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example9.1.html b/html/includes/jpgraph/docs/html/exframes/image_example9.1.html new file mode 100644 index 0000000000..5e4db23275 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example9.1.html @@ -0,0 +1 @@ +

example9.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example9.2.html b/html/includes/jpgraph/docs/html/exframes/image_example9.2.html new file mode 100644 index 0000000000..84c1f9c0e4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example9.2.html @@ -0,0 +1 @@ +

example9.2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_example9.html b/html/includes/jpgraph/docs/html/exframes/image_example9.html new file mode 100644 index 0000000000..a89b2c0e27 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_example9.html @@ -0,0 +1 @@ +

example9.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_fieldscatterex1.html b/html/includes/jpgraph/docs/html/exframes/image_fieldscatterex1.html new file mode 100644 index 0000000000..46b6a4e4f4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_fieldscatterex1.html @@ -0,0 +1 @@ +

fieldscatterex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_filledgridex1.html b/html/includes/jpgraph/docs/html/exframes/image_filledgridex1.html new file mode 100644 index 0000000000..3aa3c5e3af --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_filledgridex1.html @@ -0,0 +1 @@ +

filledgridex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.1.html b/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.1.html new file mode 100644 index 0000000000..806303e47b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.1.html @@ -0,0 +1 @@ +

filledlineex01.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.html b/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.html new file mode 100644 index 0000000000..e229e5a4cd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_filledlineex01.html @@ -0,0 +1 @@ +

filledlineex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_funcex1.html b/html/includes/jpgraph/docs/html/exframes/image_funcex1.html new file mode 100644 index 0000000000..af72b6cc4f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_funcex1.html @@ -0,0 +1 @@ +

funcex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex0.html b/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex0.html new file mode 100644 index 0000000000..318445f74e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex0.html @@ -0,0 +1 @@ +

ganttconstrainex0.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex1.html b/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex1.html new file mode 100644 index 0000000000..cd211371fd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttconstrainex1.html @@ -0,0 +1 @@ +

ganttconstrainex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex01.html b/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex01.html new file mode 100644 index 0000000000..c978bcf607 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex01.html @@ -0,0 +1 @@ +

ganttcsimex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex02.html b/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex02.html new file mode 100644 index 0000000000..3e543c9ac1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttcsimex02.html @@ -0,0 +1 @@ +

ganttcsimex02.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex00.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex00.html new file mode 100644 index 0000000000..f0b5cf87d7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex00.html @@ -0,0 +1 @@ +

ganttex00.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex01.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex01.html new file mode 100644 index 0000000000..90c7c3ee7a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex01.html @@ -0,0 +1 @@ +

ganttex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex02.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex02.html new file mode 100644 index 0000000000..e9c28279d9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex02.html @@ -0,0 +1 @@ +

ganttex02.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex03.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex03.html new file mode 100644 index 0000000000..c91de47065 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex03.html @@ -0,0 +1 @@ +

ganttex03.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex04.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex04.html new file mode 100644 index 0000000000..6eec405100 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex04.html @@ -0,0 +1 @@ +

ganttex04.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex05.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex05.html new file mode 100644 index 0000000000..b144f45fbe --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex05.html @@ -0,0 +1 @@ +

ganttex05.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex06.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex06.html new file mode 100644 index 0000000000..7ed4441e06 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex06.html @@ -0,0 +1 @@ +

ganttex06.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex07.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex07.html new file mode 100644 index 0000000000..1cf720582d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex07.html @@ -0,0 +1 @@ +

ganttex07.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex08.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex08.html new file mode 100644 index 0000000000..7679f28ae4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex08.html @@ -0,0 +1 @@ +

ganttex08.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex09.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex09.html new file mode 100644 index 0000000000..8f5d76b6c1 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex09.html @@ -0,0 +1 @@ +

ganttex09.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex10.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex10.html new file mode 100644 index 0000000000..ab2f122561 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex10.html @@ -0,0 +1 @@ +

ganttex10.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex11.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex11.html new file mode 100644 index 0000000000..f38c52db4c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex11.html @@ -0,0 +1 @@ +

ganttex11.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex12.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex12.html new file mode 100644 index 0000000000..16814a6737 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex12.html @@ -0,0 +1 @@ +

ganttex12.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex13.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex13.html new file mode 100644 index 0000000000..29759f1300 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex13.html @@ -0,0 +1 @@ +

ganttex13.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex14.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex14.html new file mode 100644 index 0000000000..1198fe26f6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex14.html @@ -0,0 +1 @@ +

ganttex14.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex15.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex15.html new file mode 100644 index 0000000000..f5ba0db72d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex15.html @@ -0,0 +1 @@ +

ganttex15.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex16.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex16.html new file mode 100644 index 0000000000..58afc94e42 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex16.html @@ -0,0 +1 @@ +

ganttex16.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex17.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex17.html new file mode 100644 index 0000000000..e67149966d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex17.html @@ -0,0 +1 @@ +

ganttex17.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex18.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex18.html new file mode 100644 index 0000000000..1b76b78d22 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex18.html @@ -0,0 +1 @@ +

ganttex18.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttex19.html b/html/includes/jpgraph/docs/html/exframes/image_ganttex19.html new file mode 100644 index 0000000000..8c45a3be08 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttex19.html @@ -0,0 +1 @@ +

ganttex19.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_gantthgridex1.html b/html/includes/jpgraph/docs/html/exframes/image_gantthgridex1.html new file mode 100644 index 0000000000..feac78c7a3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_gantthgridex1.html @@ -0,0 +1 @@ +

gantthgridex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_gantthourex1.html b/html/includes/jpgraph/docs/html/exframes/image_gantthourex1.html new file mode 100644 index 0000000000..af9bf54431 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_gantthourex1.html @@ -0,0 +1 @@ +

gantthourex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_gantthourminex1.html b/html/includes/jpgraph/docs/html/exframes/image_gantthourminex1.html new file mode 100644 index 0000000000..4c10a0ce3b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_gantthourminex1.html @@ -0,0 +1 @@ +

gantthourminex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_gantticonex1.html b/html/includes/jpgraph/docs/html/exframes/image_gantticonex1.html new file mode 100644 index 0000000000..5448bb22fa --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_gantticonex1.html @@ -0,0 +1 @@ +

gantticonex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_ganttsimpleex1.html b/html/includes/jpgraph/docs/html/exframes/image_ganttsimpleex1.html new file mode 100644 index 0000000000..5920163676 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_ganttsimpleex1.html @@ -0,0 +1 @@ +

ganttsimpleex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_gradbkgex1.html b/html/includes/jpgraph/docs/html/exframes/image_gradbkgex1.html new file mode 100644 index 0000000000..514b06bdbd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_gradbkgex1.html @@ -0,0 +1 @@ +

gradbkgex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_horizbarex1.html b/html/includes/jpgraph/docs/html/exframes/image_horizbarex1.html new file mode 100644 index 0000000000..d8cebd889e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_horizbarex1.html @@ -0,0 +1 @@ +

horizbarex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_horizbarex2.html b/html/includes/jpgraph/docs/html/exframes/image_horizbarex2.html new file mode 100644 index 0000000000..d6d244f3bc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_horizbarex2.html @@ -0,0 +1 @@ +

horizbarex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_horizbarex3.html b/html/includes/jpgraph/docs/html/exframes/image_horizbarex3.html new file mode 100644 index 0000000000..41583f234f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_horizbarex3.html @@ -0,0 +1 @@ +

horizbarex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_horizbarex4.html b/html/includes/jpgraph/docs/html/exframes/image_horizbarex4.html new file mode 100644 index 0000000000..cfd30d7300 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_horizbarex4.html @@ -0,0 +1 @@ +

horizbarex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_imgmarkercsimex1.html b/html/includes/jpgraph/docs/html/exframes/image_imgmarkercsimex1.html new file mode 100644 index 0000000000..f484dfb717 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_imgmarkercsimex1.html @@ -0,0 +1 @@ +

imgmarkercsimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_imgmarkerex1.html b/html/includes/jpgraph/docs/html/exframes/image_imgmarkerex1.html new file mode 100644 index 0000000000..997ac0e75f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_imgmarkerex1.html @@ -0,0 +1 @@ +

imgmarkerex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_impulsex1.html b/html/includes/jpgraph/docs/html/exframes/image_impulsex1.html new file mode 100644 index 0000000000..a3ae5ad57c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_impulsex1.html @@ -0,0 +1 @@ +

impulsex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_impulsex2.html b/html/includes/jpgraph/docs/html/exframes/image_impulsex2.html new file mode 100644 index 0000000000..2c43ca7e18 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_impulsex2.html @@ -0,0 +1 @@ +

impulsex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_impulsex3.html b/html/includes/jpgraph/docs/html/exframes/image_impulsex3.html new file mode 100644 index 0000000000..6b0a41dab2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_impulsex3.html @@ -0,0 +1 @@ +

impulsex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_impulsex4.html b/html/includes/jpgraph/docs/html/exframes/image_impulsex4.html new file mode 100644 index 0000000000..e5a654035d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_impulsex4.html @@ -0,0 +1 @@ +

impulsex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_inyaxisex2.html b/html/includes/jpgraph/docs/html/exframes/image_inyaxisex2.html new file mode 100644 index 0000000000..5fb9325768 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_inyaxisex2.html @@ -0,0 +1 @@ +

inyaxisex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_linebarcentex1.html b/html/includes/jpgraph/docs/html/exframes/image_linebarcentex1.html new file mode 100644 index 0000000000..64aacf469a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_linebarcentex1.html @@ -0,0 +1 @@ +

linebarcentex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_lineiconex1.html b/html/includes/jpgraph/docs/html/exframes/image_lineiconex1.html new file mode 100644 index 0000000000..59d0141c43 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_lineiconex1.html @@ -0,0 +1 @@ +

lineiconex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_lineiconex2.html b/html/includes/jpgraph/docs/html/exframes/image_lineiconex2.html new file mode 100644 index 0000000000..3ab1c87304 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_lineiconex2.html @@ -0,0 +1 @@ +

lineiconex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_listfontsex1.html b/html/includes/jpgraph/docs/html/exframes/image_listfontsex1.html new file mode 100644 index 0000000000..8b1086c06e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_listfontsex1.html @@ -0,0 +1 @@ +

listfontsex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_logbarex1.html b/html/includes/jpgraph/docs/html/exframes/image_logbarex1.html new file mode 100644 index 0000000000..3366daf34b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_logbarex1.html @@ -0,0 +1 @@ +

logbarex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_loglogex1.html b/html/includes/jpgraph/docs/html/exframes/image_loglogex1.html new file mode 100644 index 0000000000..2ba88ae40a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_loglogex1.html @@ -0,0 +1 @@ +

loglogex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_manscaleex1.html b/html/includes/jpgraph/docs/html/exframes/image_manscaleex1.html new file mode 100644 index 0000000000..544fe4696f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_manscaleex1.html @@ -0,0 +1 @@ +

manscaleex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_manscaleex2.html b/html/includes/jpgraph/docs/html/exframes/image_manscaleex2.html new file mode 100644 index 0000000000..187e20ff7a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_manscaleex2.html @@ -0,0 +1 @@ +

manscaleex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_manscaleex3.html b/html/includes/jpgraph/docs/html/exframes/image_manscaleex3.html new file mode 100644 index 0000000000..2d8b6a480e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_manscaleex3.html @@ -0,0 +1 @@ +

manscaleex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_manscaleex4.html b/html/includes/jpgraph/docs/html/exframes/image_manscaleex4.html new file mode 100644 index 0000000000..8ae1317c7f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_manscaleex4.html @@ -0,0 +1 @@ +

manscaleex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_markflagex1.html b/html/includes/jpgraph/docs/html/exframes/image_markflagex1.html new file mode 100644 index 0000000000..8e9433ee87 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_markflagex1.html @@ -0,0 +1 @@ +

markflagex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_nullvalueex01.html b/html/includes/jpgraph/docs/html/exframes/image_nullvalueex01.html new file mode 100644 index 0000000000..654cfda320 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_nullvalueex01.html @@ -0,0 +1 @@ +

nullvalueex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_partiallyfilledlineex1.html b/html/includes/jpgraph/docs/html/exframes/image_partiallyfilledlineex1.html new file mode 100644 index 0000000000..91f19db9ce --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_partiallyfilledlineex1.html @@ -0,0 +1 @@ +

partiallyfilledlineex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_penguin.html b/html/includes/jpgraph/docs/html/exframes/image_penguin.html new file mode 100644 index 0000000000..3c78761b1f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_penguin.html @@ -0,0 +1 @@ +

penguin.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pie3d_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_pie3d_csimex1.html new file mode 100644 index 0000000000..a6fbb984aa --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pie3d_csimex1.html @@ -0,0 +1 @@ +

pie3d_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pie_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_pie_csimex1.html new file mode 100644 index 0000000000..01279eea93 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pie_csimex1.html @@ -0,0 +1 @@ +

pie_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_piec_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_piec_csimex1.html new file mode 100644 index 0000000000..a991902606 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_piec_csimex1.html @@ -0,0 +1 @@ +

piec_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_piecex1.html b/html/includes/jpgraph/docs/html/exframes/image_piecex1.html new file mode 100644 index 0000000000..73d3a43d1f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_piecex1.html @@ -0,0 +1 @@ +

piecex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_piecex2.html b/html/includes/jpgraph/docs/html/exframes/image_piecex2.html new file mode 100644 index 0000000000..e595949373 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_piecex2.html @@ -0,0 +1 @@ +

piecex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pieex3.html b/html/includes/jpgraph/docs/html/exframes/image_pieex3.html new file mode 100644 index 0000000000..d0092210ae --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pieex3.html @@ -0,0 +1 @@ +

pieex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pieex8.html b/html/includes/jpgraph/docs/html/exframes/image_pieex8.html new file mode 100644 index 0000000000..6de5556ec2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pieex8.html @@ -0,0 +1 @@ +

pieex8.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pieex9.html b/html/includes/jpgraph/docs/html/exframes/image_pieex9.html new file mode 100644 index 0000000000..532aa2d4ae --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pieex9.html @@ -0,0 +1 @@ +

pieex9.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pielabelsex1.html b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex1.html new file mode 100644 index 0000000000..8ce3cf7b11 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex1.html @@ -0,0 +1 @@ +

pielabelsex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pielabelsex2.html b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex2.html new file mode 100644 index 0000000000..92866d9a0f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex2.html @@ -0,0 +1 @@ +

pielabelsex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_pielabelsex4.html b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex4.html new file mode 100644 index 0000000000..7fc65e5d8e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_pielabelsex4.html @@ -0,0 +1 @@ +

pielabelsex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex0-180.html b/html/includes/jpgraph/docs/html/exframes/image_polarex0-180.html new file mode 100644 index 0000000000..626d60137c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex0-180.html @@ -0,0 +1 @@ +

polarex0-180.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex0.html b/html/includes/jpgraph/docs/html/exframes/image_polarex0.html new file mode 100644 index 0000000000..85264f615e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex0.html @@ -0,0 +1 @@ +

polarex0.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex3-lin.html b/html/includes/jpgraph/docs/html/exframes/image_polarex3-lin.html new file mode 100644 index 0000000000..5e87e0695b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex3-lin.html @@ -0,0 +1 @@ +

polarex3-lin.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex3.html b/html/includes/jpgraph/docs/html/exframes/image_polarex3.html new file mode 100644 index 0000000000..e6d01110db --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex3.html @@ -0,0 +1 @@ +

polarex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex4.html b/html/includes/jpgraph/docs/html/exframes/image_polarex4.html new file mode 100644 index 0000000000..96c0cc8af8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex4.html @@ -0,0 +1 @@ +

polarex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex5.html b/html/includes/jpgraph/docs/html/exframes/image_polarex5.html new file mode 100644 index 0000000000..b1a03d2acc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex5.html @@ -0,0 +1 @@ +

polarex5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex7-2.html b/html/includes/jpgraph/docs/html/exframes/image_polarex7-2.html new file mode 100644 index 0000000000..8d9767fb0d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex7-2.html @@ -0,0 +1 @@ +

polarex7-2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_polarex9.html b/html/includes/jpgraph/docs/html/exframes/image_polarex9.html new file mode 100644 index 0000000000..a247781d2e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_polarex9.html @@ -0,0 +1 @@ +

polarex9.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex1.html b/html/includes/jpgraph/docs/html/exframes/image_radarex1.html new file mode 100644 index 0000000000..301d279aa0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex1.html @@ -0,0 +1 @@ +

radarex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex2.html b/html/includes/jpgraph/docs/html/exframes/image_radarex2.html new file mode 100644 index 0000000000..e127214958 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex2.html @@ -0,0 +1 @@ +

radarex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex4.html b/html/includes/jpgraph/docs/html/exframes/image_radarex4.html new file mode 100644 index 0000000000..5bc114be3c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex4.html @@ -0,0 +1 @@ +

radarex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex6.1.html b/html/includes/jpgraph/docs/html/exframes/image_radarex6.1.html new file mode 100644 index 0000000000..ee34bc6db6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex6.1.html @@ -0,0 +1 @@ +

radarex6.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex6.html b/html/includes/jpgraph/docs/html/exframes/image_radarex6.html new file mode 100644 index 0000000000..832ceea40d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex6.html @@ -0,0 +1 @@ +

radarex6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex7.html b/html/includes/jpgraph/docs/html/exframes/image_radarex7.html new file mode 100644 index 0000000000..dfe4b33fd2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex7.html @@ -0,0 +1 @@ +

radarex7.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex8.1.html b/html/includes/jpgraph/docs/html/exframes/image_radarex8.1.html new file mode 100644 index 0000000000..cccbc25320 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex8.1.html @@ -0,0 +1 @@ +

radarex8.1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarex8.html b/html/includes/jpgraph/docs/html/exframes/image_radarex8.html new file mode 100644 index 0000000000..e06dbfdc84 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarex8.html @@ -0,0 +1 @@ +

radarex8.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_radarmarkex1.html b/html/includes/jpgraph/docs/html/exframes/image_radarmarkex1.html new file mode 100644 index 0000000000..900a25ed04 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_radarmarkex1.html @@ -0,0 +1 @@ +

radarmarkex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex0.html b/html/includes/jpgraph/docs/html/exframes/image_rotex0.html new file mode 100644 index 0000000000..8f3900d64e --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex0.html @@ -0,0 +1 @@ +

rotex0.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex1.html b/html/includes/jpgraph/docs/html/exframes/image_rotex1.html new file mode 100644 index 0000000000..83a3ea5683 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex1.html @@ -0,0 +1 @@ +

rotex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex2.html b/html/includes/jpgraph/docs/html/exframes/image_rotex2.html new file mode 100644 index 0000000000..f39305c7e2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex2.html @@ -0,0 +1 @@ +

rotex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex3.html b/html/includes/jpgraph/docs/html/exframes/image_rotex3.html new file mode 100644 index 0000000000..7b80196d0a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex3.html @@ -0,0 +1 @@ +

rotex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex4.html b/html/includes/jpgraph/docs/html/exframes/image_rotex4.html new file mode 100644 index 0000000000..0b9d73c679 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex4.html @@ -0,0 +1 @@ +

rotex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_rotex5.html b/html/includes/jpgraph/docs/html/exframes/image_rotex5.html new file mode 100644 index 0000000000..5b7f362cf9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_rotex5.html @@ -0,0 +1 @@ +

rotex5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_scatter_csimex1.html b/html/includes/jpgraph/docs/html/exframes/image_scatter_csimex1.html new file mode 100644 index 0000000000..9dd99e1e38 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_scatter_csimex1.html @@ -0,0 +1 @@ +

scatter_csimex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_scatterex1.html b/html/includes/jpgraph/docs/html/exframes/image_scatterex1.html new file mode 100644 index 0000000000..220503ef1f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_scatterex1.html @@ -0,0 +1 @@ +

scatterex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_scatterex2.html b/html/includes/jpgraph/docs/html/exframes/image_scatterex2.html new file mode 100644 index 0000000000..0e78409459 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_scatterex2.html @@ -0,0 +1 @@ +

scatterex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex1.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex1.html new file mode 100644 index 0000000000..c0516f1659 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex1.html @@ -0,0 +1 @@ +

smallstaticbandsex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex10.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex10.html new file mode 100644 index 0000000000..7800866801 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex10.html @@ -0,0 +1 @@ +

smallstaticbandsex10.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex2.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex2.html new file mode 100644 index 0000000000..6e47983739 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex2.html @@ -0,0 +1 @@ +

smallstaticbandsex2.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex3.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex3.html new file mode 100644 index 0000000000..3cd9815c95 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex3.html @@ -0,0 +1 @@ +

smallstaticbandsex3.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex4.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex4.html new file mode 100644 index 0000000000..b267e76ad0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex4.html @@ -0,0 +1 @@ +

smallstaticbandsex4.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex5.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex5.html new file mode 100644 index 0000000000..0ec9600848 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex5.html @@ -0,0 +1 @@ +

smallstaticbandsex5.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex6.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex6.html new file mode 100644 index 0000000000..19687b22d9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex6.html @@ -0,0 +1 @@ +

smallstaticbandsex6.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex7.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex7.html new file mode 100644 index 0000000000..ec22b8277a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex7.html @@ -0,0 +1 @@ +

smallstaticbandsex7.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex8.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex8.html new file mode 100644 index 0000000000..f01442546c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex8.html @@ -0,0 +1 @@ +

smallstaticbandsex8.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex9.html b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex9.html new file mode 100644 index 0000000000..388dc9a284 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_smallstaticbandsex9.html @@ -0,0 +1 @@ +

smallstaticbandsex9.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_splineex1.html b/html/includes/jpgraph/docs/html/exframes/image_splineex1.html new file mode 100644 index 0000000000..ba57514af4 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_splineex1.html @@ -0,0 +1 @@ +

splineex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_staticbandbarex7.html b/html/includes/jpgraph/docs/html/exframes/image_staticbandbarex7.html new file mode 100644 index 0000000000..df88b18d12 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_staticbandbarex7.html @@ -0,0 +1 @@ +

staticbandbarex7.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_stockex1.html b/html/includes/jpgraph/docs/html/exframes/image_stockex1.html new file mode 100644 index 0000000000..faf024f631 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_stockex1.html @@ -0,0 +1 @@ +

stockex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_tabtitleex1.html b/html/includes/jpgraph/docs/html/exframes/image_tabtitleex1.html new file mode 100644 index 0000000000..6e36cf6970 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_tabtitleex1.html @@ -0,0 +1 @@ +

tabtitleex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_textalignex1.html b/html/includes/jpgraph/docs/html/exframes/image_textalignex1.html new file mode 100644 index 0000000000..0b06c328f5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_textalignex1.html @@ -0,0 +1 @@ +

textalignex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_titlecsimex01.html b/html/includes/jpgraph/docs/html/exframes/image_titlecsimex01.html new file mode 100644 index 0000000000..6bd177dbf6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_titlecsimex01.html @@ -0,0 +1 @@ +

titlecsimex01.php

diff --git a/html/includes/jpgraph/docs/html/exframes/image_topxaxisex1.html b/html/includes/jpgraph/docs/html/exframes/image_topxaxisex1.html new file mode 100644 index 0000000000..b9933cd1d9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/image_topxaxisex1.html @@ -0,0 +1 @@ +

topxaxisex1.php

diff --git a/html/includes/jpgraph/docs/html/exframes/imgmarkercsimex1.html b/html/includes/jpgraph/docs/html/exframes/imgmarkercsimex1.html new file mode 100644 index 0000000000..a7a169f60d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/imgmarkercsimex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_scatter.php");

$datay1 = array(4,26,15,44);

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin");
$graph->SetFrame(false);
$graph->SetMargin(30,5,25,20);

// Setup the tab
$graph->tabtitle->Set(' Year 2003 ' );
$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);
$graph->tabtitle->SetColor('darkred','#E1E1FF');

// Enable X-grid as well
$graph->xgrid->Show();

// Use months as X-labels
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

// Create the plot
$p1 = new LinePlot($datay1);
$p1->SetColor("navy");

$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5'));

// Use an image of favourite car as 
$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5);
//$p1->mark->SetType(MARK_SQUARE);

// Displayes value on top of marker image
$p1->value->SetFormat('%d mil');
$p1->value->Show();
$p1->value->SetColor('darkred');
$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
// Increase the margin so that the value is printed avove tje
// img marker
$p1->value->SetMargin(14);

// Incent the X-scale so the first and last point doesn't
// fall on the edges
$p1->SetCenter();

$graph->Add($p1);

$graph->StrokeCSIM('imgmarkercsimex1.php');

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/imgmarkerex1.html b/html/includes/jpgraph/docs/html/exframes/imgmarkerex1.html new file mode 100644 index 0000000000..bd070a7182 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/imgmarkerex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_scatter.php");

$datay1 = array(4,26,15,44);

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin");
$graph->SetFrame(false);
$graph->SetMargin(30,5,25,20);

// Setup the tab
$graph->tabtitle->Set(' Year 2003 ' );
$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);
$graph->tabtitle->SetColor('darkred','#E1E1FF');

// Enable X-grid as well
$graph->xgrid->Show();

// Use months as X-labels
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

// Create the plot
$p1 = new LinePlot($datay1);
$p1->SetColor("navy");

// Use an image of favourite car as marker
$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5);

// Displayes value on top of marker image
$p1->value->SetFormat('%d mil');
$p1->value->Show();
$p1->value->SetColor('darkred');
$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
// Increase the margin so that the value is printed avove tje
// img marker
$p1->value->SetMargin(14);

// Incent the X-scale so the first and last point doesn't
// fall on the edges
$p1->SetCenter();

$graph->Add($p1);

$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/impulsex1.html b/html/includes/jpgraph/docs/html/exframes/impulsex1.html new file mode 100644 index 0000000000..075c0e9ff2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/impulsex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,40,40,40);        

$graph->title->Set("Simple mpuls plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay);
$sp1->mark->SetType(MARK_SQUARE);
$sp1->SetImpuls();

$graph->Add($sp1);
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/impulsex2.html b/html/includes/jpgraph/docs/html/exframes/impulsex2.html new file mode 100644 index 0000000000..3fe23929d8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/impulsex2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("textlin");

$graph->SetShadow();
$graph->img->SetMargin(40,40,40,40);        

$graph->title->Set("Impuls plot, variant 2");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->Set("Impuls respons");
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay);//,$datax);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->mark->SetWidth(4);
$sp1->SetImpuls();
$sp1->SetColor("blue");
$sp1->SetWeight(3);

$graph->Add($sp1);
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/impulsex3.html b/html/includes/jpgraph/docs/html/exframes/impulsex3.html new file mode 100644 index 0000000000..b478d6da94 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/impulsex3.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$numpoints=50;
$k=0.05;

// Create some data points
for($i=0$i<$numpoints; ++$i) {
    
$datay[$i]=exp(-$k*$i)*cos(2*M_PI/10*$i);
}

// A format callbakc function
function mycallback($l) {
    return 
sprintf("%02.2f",$l);
}

// Setup the basic parameters for the graph
$graph = new Graph(400,200,"auto");
$graph->SetScale("intlin");
$graph->SetShadow();
$graph->SetBox();

$graph->title->Set("Impuls Example 3");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Set format callback for labels
$graph->yaxis->SetLabelFormatCallback("mycallback");

// Set X-axis at the minimum value of Y-axis (default will be at 0)
$graph->xaxis->SetPos("min");    // "min" will position the x-axis at the minimum value of the Y-axis

// Extend the margin for the labels on the Y-axis and reverse the direction
// of the ticks on the Y-axis
$graph->yaxis->SetLabelMargin(12);
$graph->xaxis->SetLabelMargin(6);
$graph->yaxis->SetTickSide(SIDE_LEFT);
$graph->xaxis->SetTickSide(SIDE_DOWN);

// Create a new impuls type scatter plot
$sp1 = new ScatterPlot($datay);
$sp1->mark->SetType(MARK_SQUARE);
$sp1->mark->SetFillColor("red");
$sp1->SetImpuls();
$sp1->SetColor("blue");
$sp1->SetWeight(1);
$sp1->mark->SetWidth(3);

$graph->Add($sp1);

$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/impulsex4.html b/html/includes/jpgraph/docs/html/exframes/impulsex4.html new file mode 100644 index 0000000000..57f8e4e331 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/impulsex4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");
include (
"../jpgraph_line.php");

$numpoints=50;
$k=0.05;

// Create some data points
for($i=-$numpoints+1$i<0; ++$i) {
    
$datay[$i+$numpoints-1]=exp($k*$i)*cos(2*M_PI/10*$i)*14;
    
$datayenv[$i+$numpoints-1]=exp($k*$i)*14;
    
$datax[$i+$numpoints-1]=$i;
}

for(
$i=0$i<$numpoints; ++$i) {
    
$datay[$i+$numpoints-1]=exp(-$k*$i)*cos(2*M_PI/10*$i)*14;
    
$datayenv[$i+$numpoints-1]=exp(-$k*$i)*14;
    
$datax[$i+$numpoints-1]=$i;
}

// Setup the basic parameters for the graph
$graph = new Graph(500,250,"auto");
$graph->SetScale("intlin");

$graph->SetShadow();
$graph->SetBox();
$graph->title->Set("Impuls Example 4");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Set some other color then the boring default
$graph->SetColor("lightyellow");
$graph->SetMarginColor("khaki");

// Set legend box specification
$graph->legend->SetFillColor("white");
$graph->legend->SetLineWeight(2);

// Set X-axis at the minimum value of Y-axis (default will be at 0)
$graph->xaxis->SetPos("min");    // "min" will position the x-axis at the minimum value of the Y-axis

// Extend the margin for the labels on the Y-axis and reverse the direction
// of the ticks on the Y-axis
$graph->yaxis->SetLabelMargin(12);
$graph->xaxis->SetLabelMargin(6);
$graph->yaxis->SetTickSide(SIDE_LEFT);
$graph->xaxis->SetTickSide(SIDE_DOWN);

// Add mark graph with static lines
$line = new PlotLine(HORIZONTAL,0,"black",2);
$graph->AddLine($line);

// Create a new impuls type scatter plot
$sp1 = new ScatterPlot($datay,$datax);
$sp1->mark->SetType(MARK_SQUARE);
$sp1->mark->SetFillColor("red");
$sp1->mark->SetWidth(3);

$sp1->SetImpuls();
$sp1->SetColor("blue");
$sp1->SetWeight(1);
$sp1->SetLegend("Non-causal signal");

$graph->Add($sp1);

// Create the envelope plot
$ep1 = new LinePlot($datayenv,$datax);
$ep1->SetStyle("dotted");
$ep1->SetLegend("Positive envelope");

$graph->Add($ep1);

$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/inyaxisex2.html b/html/includes/jpgraph/docs/html/exframes/inyaxisex2.html new file mode 100644 index 0000000000..d2ac099318 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/inyaxisex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// Callback to negate the argument
function _cb_negate($aVal) {
    return 
round(-$aVal);
}

// A fake depth curve
$ydata = array(0,1,4,5,8,9,10,14,16,16,16,18,20,20,20,22,22.5,22,19,19,15,15,15,15,10,10,10,6,5,5,5,4,4,2,1,0);

// Negate all data
$n count($ydata);
for(
$i=0$i<$n; ++$i) {
    
$ydata[$i] = round(-$ydata[$i]);
}

// Basic graph setup
$graph = new Graph(400,300,"auto");
$graph->SetScale("linlin");
$graph->img->SetMargin(50,50,60,40);    
$graph->SetMarginColor('darkblue');
$graph->SetColor('darkblue');
$graph->SetAxisStyle(AXSTYLE_BOXOUT);
$graph->SetBackgroundImage("blueblack400x300grad.png",1);
//$graph->SetBackgroundImage("lightbluedarkblue400x300grad.png",1);

$graph->title->Set("Depth curve. Dive #2");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->title->SetColor("white");

$graph->subtitle->Set("(Negated Y-axis)");
$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL);
$graph->subtitle->SetColor("white");

// Setup axis
$graph->yaxis->SetLabelFormatCallback("_cb_negate");
$graph->xaxis->SetColor("lightblue","white");
$graph->yaxis->SetColor("lightblue","white");
$graph->ygrid->SetColor("blue");


$lp1 = new LinePlot($ydata);
$lp1->SetColor("yellow");
$lp1->SetWeight(2);


$graph->Add($lp1);
$graph->Stroke();
?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/linebarcentex1.html b/html/includes/jpgraph/docs/html/exframes/linebarcentex1.html new file mode 100644 index 0000000000..35eb4d3433 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/linebarcentex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_bar.php");

$l1datay = array(11,9,2,4,3,13,17);
$l2datay = array(23,12,5,19,17,10,15);

$datax=$gDateLocale->GetShortMonth();

// Create the graph. 
$graph = new Graph(400,200,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(40,130,20,40);
$graph->SetShadow();
$graph->xaxis->SetTickLabels($datax);

// Create the linear error plot
$l1plot=new LinePlot($l1datay);
$l1plot->SetColor("red");
$l1plot->SetWeight(2);
$l1plot->SetLegend("Prediction");

//Center the line plot in the center of the bars
$l1plot->SetBarCenter();


// Create the bar plot
$bplot = new BarPlot($l2datay);
$bplot->SetFillColor("orange");
$bplot->SetLegend("Result");

// Add the plots to t'he graph
$graph->Add($bplot);
$graph->Add($l1plot);


$graph->title->Set("Adding a line plot to a bar graph v1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);


// Display the graph
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/lineiconex1.html b/html/includes/jpgraph/docs/html/exframes/lineiconex1.html new file mode 100644 index 0000000000..0b24addcd5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/lineiconex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_iconplot.php");


//$datay = array(20,15,23,15,17,35,22);
$datay = array(30,25,33,25,27,45,32);
$datay2 = array(3,25,10,15,50,5,18);
$datay3 = array(10,5,10,15,5,2,1);

// Setup the graph
$graph = new Graph(400,250);
$graph->SetMargin(40,40,20,30);    
$graph->SetScale("textlin");

$graph->title->Set('Adding an icon ("tux") in the background');
$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);

//$graph->SetBackgroundGradient('red','blue');

$graph->xaxis->SetPos('min');

$p1 = new LinePlot($datay);
$p1->SetColor("blue");
$p1->SetFillGradient('yellow@0.4','red@0.4');

$p2 = new LinePlot($datay2);
$p2->SetColor("black");
$p2->SetFillGradient('green@0.4','white');

$p3 = new LinePlot($datay3);
$p3->SetColor("blue");
$p3->SetFillGradient('navy@0.4','white@0.4');

$graph->Add($p1);
$graph->Add($p2);
$graph->Add($p3);

$icon = new IconPlot('penguin.png',0.2,0.3,1,30);
$icon->SetAnchor('center','center');
$graph->Add($icon);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/lineiconex2.html b/html/includes/jpgraph/docs/html/exframes/lineiconex2.html new file mode 100644 index 0000000000..dae7ad608b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/lineiconex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_flags.php");
include (
"../jpgraph_iconplot.php");

$datay = array(30,25,33,25,27,45,32);

// Setup the graph
$graph = new Graph(400,250);
$graph->SetMargin(40,40,20,30);    
$graph->SetScale("textlin");

$graph->title->Set('Adding a country flag as a an icon');

$p1 = new LinePlot($datay);
$p1->SetColor("blue");
$p1->SetFillGradient('yellow@0.4','red@0.4');

$graph->Add($p1);

$icon = new IconPlot();
$icon->SetCountryFlag('iceland',50,30,1.5,40,3);
$icon->SetAnchor('left','top');
$graph->Add($icon);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/listfontsex1.html b/html/includes/jpgraph/docs/html/exframes/listfontsex1.html new file mode 100644 index 0000000000..0760a3b546 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/listfontsex1.html @@ -0,0 +1,3 @@ + +<?php
// $Id: listfontsex1.php,v 1.3 2002/10/25 22:44:15 aditus Exp $
include "../jpgraph.php";
include 
"../jpgraph_canvas.php";
include 
"../jpgraph_canvtools.php";


$g = new CanvasGraph(550,450,'auto');
$scale = new CanvasScale($g);
$scale->Set(0,27,0,53);
$g->SetMargin(5,6,5,6);
$g->SetColor('white');
$g->SetMarginColor("teal");
$g->InitFrame();


$t = new CanvasRectangleText();
$t->SetFillColor('lightgreen');
$t->SetFontColor('navy');
$t->SetFont(FF_ARIAL,FS_NORMAL,16);
$t->Set("\n\n\n\n\n\n\n\n\n\n\nTTF Fonts",0.5,19,26,32);
$t->Stroke($g->img,$scale);


$t = new CanvasRectangleText();

$t->SetFillColor('');
$t->SetFontColor('black');
$t->SetColor('');
$t->SetShadow('');
$t->SetFont(FF_ARIAL,FS_BOLD,18);
$t->Set('Family',1,1,8);
$t->Stroke($g->img,$scale);

$t->Set('Italic style',9,1,8);
$t->Stroke($g->img,$scale);

$t->Set('Bold style',17.5,1,8);
$t->Stroke($g->img,$scale);


$t->SetFillColor('yellow');
$t->SetFontColor('black');
$t->SetColor('black');
$t->SetShadow('gray');

$r=6;$c=1;$w=7.5;$h=3.5;

$fonts=array(
    array(
"Font 0",FF_FONT0,FS_NORMAL),
    array(
"",FF_FONT0,FS_ITALIC),
    array(
"",FF_FONT0,FS_BOLD),

    array(
"Font 1",FF_FONT1,FS_NORMAL),
    array(
"",FF_FONT1,FS_ITALIC),
    array(
"Font 1 bold",FF_FONT1,FS_BOLD),

    array(
"Font 2",FF_FONT2,FS_NORMAL),
    array(
"",FF_FONT2,FS_ITALIC),
    array(
"Font 2 bold",FF_FONT2,FS_BOLD),

    array(
"Arial",FF_ARIAL,FS_NORMAL),
    array(
"Arial italic",FF_ARIAL,FS_ITALIC),
    array(
"Arial bold",FF_ARIAL,FS_BOLD),

    array(
"Verdana",FF_VERDANA,FS_NORMAL),
    array(
"Verdana italic",FF_VERDANA,FS_ITALIC),
    array(
"Verdana bold",FF_VERDANA,FS_BOLD),


    array(
"Trebuche",FF_TREBUCHE,FS_NORMAL),
    array(
"Trebuche italic",FF_TREBUCHE,FS_ITALIC),
    array(
"Trebuche bold",FF_TREBUCHE,FS_BOLD),

    array(
"Georgia",FF_GEORGIA,FS_NORMAL),
    array(
"Georgia italic",FF_GEORGIA,FS_ITALIC),
    array(
"Georgia bold",FF_GEORGIA,FS_BOLD),

    array(
"Comic",FF_COMIC,FS_NORMAL),
    array(
"",FF_COMIC,FS_ITALIC),
    array(
"Comic bold",FF_COMIC,FS_BOLD),

    array(
"Courier",FF_COURIER,FS_NORMAL),
    array(
"Courier italic",FF_COURIER,FS_ITALIC),
    array(
"Courier bold",FF_COURIER,FS_BOLD),


    array(
"Times normal",FF_TIMES,FS_NORMAL),
    array(
"Times italic",FF_TIMES,FS_ITALIC),
    array(
"Times bold italic",FF_TIMES,FS_BOLDITALIC),
    );


$n=count($fonts);

for( 
$i=0$i $n; ++$i ) {
    
    if( 
$i==$r += 3;

    if( 
$fonts[$i][0] ) {
    
$t->SetTxt($fonts[$i][0]);
    
$t->SetPos($c,$r,$w,$h);
    
$t->SetFont($fonts[$i][1],$fonts[$i][2],13);
    
$t->Stroke($g->img,$scale);
    }

    
$c += $w+1;
    if( 
$c 30-$w-) {
    
$c 1;
    
$r += 4;
    }

}

$g->Stroke();
?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/logbarex1.html b/html/includes/jpgraph/docs/html/exframes/logbarex1.html new file mode 100644 index 0000000000..42688c61bb --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/logbarex1.html @@ -0,0 +1,4 @@ + +<?php
// $Id: logbarex1.php,v 1.4 2003/05/30 20:12:43 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_bar.php");

$datay=array(4,13,30,28,12,45,30,12,55,3,0.5);
$datax=array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov");

// Create the graph. 
$graph = new Graph(400,220,'auto');    
//$graph->img->SetMargin(50,30,50,50);
$graph->SetScale("textlog");
//$graph->SetShadow();

// Setup titles for graph and axis
$graph->title->Set("Bar with logarithmic Y-scale");
$graph->title->SetFont(FF_VERDANA,FS_NORMAL,18);

$graph->xaxis->SetTitle("2002");
$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16);

$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16);
$graph->yaxis->SetTitle("Y-title",'center');
$graph->yaxis->SetTitleMargin(30);

// Setup month on X-scale
//$graph->xaxis->SetTickLabels($datax);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");

//You can also set a manual base of the bars
//$bplot->SetYBase(0.001);

/*
$bplot->SetShadow();
$bplot->value->Show();
$bplot->value->SetFont(FF_ARIAL,FS_BOLD);
$bplot->value->SetAngle(45);
$bplot->value->SetColor("black","darkred");
*/

$graph->Add($bplot);

$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/loglogex1.html b/html/includes/jpgraph/docs/html/exframes/loglogex1.html new file mode 100644 index 0000000000..c3dd01982b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/loglogex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_log.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_scatter.php");


$ab2  = array( 1.5,  2.0,  2.5,  3.0,  4.0,  5.0,  6.0,  8.010.0,
              
12.015.020.025.030.040.050.060.0 ,75.0,
              
100.125.150.);
$mn2  = array( 0.5,  0.5,  0.5,  0.5,  0.8,  0.8,  0.8,  0.8,  1.0,
               
1.0,  1.0,  1.0,  1.0,  2.0,  2.0,  2.0,  2.0,  2.0,
               
5.0,  5.0,  5.0);
$rhos = array(30.031.032.034.035.537.538.039.541.5,
              
43.041.042.042.545.049.053.558.066.5,
              
75.081.089.0);

// Create the graph.
$graph = new Graph(500,300,"auto");     
$graph->SetScale("loglog");              
$graph->SetY2Scale("lin");               
$graph->y2axis->SetColor("blue","blue"); 

$graph->img->SetMargin(50,70,40,50);     
$graph->title->Set("Geoelektrik");       
$graph->xaxis->title->Set("Auslage ab/2 [m]");  
$graph->yaxis->title->Set("rho_s [Ohm m]");     
$graph->y2axis->title->Set("mn/2 [m]");         
$graph->y2axis->title->SetColor("blue");
$graph->y2axis->SetTitleMargin(35);
$graph->title->SetFont(FF_FONT1,FS_BOLD);       
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); 
$graph->xgrid->Show(true,true);                  
$graph->ygrid->Show(true,true);                  

// Create the linear plot

$lineplot=new LinePlot($rhos,$ab2);       
$lineplot->SetWeight(1);
$lineplot->mark->SetType(MARK_FILLEDCIRCLE);
$lineplot->mark->SetWidth(2);

// Create scatter plot 

$scplot=new ScatterPlot($mn2,$ab2);
$scplot->mark->SetType(MARK_FILLEDCIRCLE);
$scplot->mark->SetColor("blue");
$scplot->mark->SetWidth(2);

// Add plots to the graph

$graph->AddY2($scplot);
$graph->Add($lineplot);

// Display the graph
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/manscaleex1.html b/html/includes/jpgraph/docs/html/exframes/manscaleex1.html new file mode 100644 index 0000000000..4e3571a0d8 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/manscaleex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(220,200);
$graph->SetScale("textlin",3,35);
$graph->yscale->ticks->Set(7,2);

$graph->title->Set('Manual scale, manual ticks');
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$line = new LinePlot($ydata);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/manscaleex2.html b/html/includes/jpgraph/docs/html/exframes/manscaleex2.html new file mode 100644 index 0000000000..7a5a2c082f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/manscaleex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(220,200);
$graph->SetScale("textlin",3,35);

$graph->title->Set('Manual scale, exact limits');
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$line = new LinePlot($ydata);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/manscaleex3.html b/html/includes/jpgraph/docs/html/exframes/manscaleex3.html new file mode 100644 index 0000000000..b7f6720b00 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/manscaleex3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(250,200);
$graph->SetScale("textlin",3,35);
$graph->SetTickDensity(TICKD_DENSE);
$graph->yscale->SetAutoTicks();

$graph->title->Set('Manual scale, auto ticks');
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$line = new LinePlot($ydata);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/manscaleex4.html b/html/includes/jpgraph/docs/html/exframes/manscaleex4.html new file mode 100644 index 0000000000..dc4b4f3110 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/manscaleex4.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(220,200);
$graph->SetScale("textlin",3,35);
$graph->yscale->SetAutoTicks();

$graph->title->Set('Manual scale, allow adjustment');
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$line = new LinePlot($ydata);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/markflagex1.html b/html/includes/jpgraph/docs/html/exframes/markflagex1.html new file mode 100644 index 0000000000..2bfd3883e6 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/markflagex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");
include (
"../jpgraph_scatter.php");

$datay = array(
    array(
4,26,15,44),
    array(
20,51,32,20));

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin");
$graph->SetFrame(false);
$graph->SetMargin(30,5,25,20);

// Enable X-grid as well
$graph->xgrid->Show();

// Use months as X-labels
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

//------------------------
// Create the plots
//------------------------
$p1 = new LinePlot($datay[0]);
$p1->SetColor("navy");

// Use a flag
$p1->mark->SetType(MARK_FLAG1,'chin');

// Displayes value on top of marker image
$p1->value->SetFormat('%d mil');
$p1->value->Show();
$p1->value->SetColor('darkred');
$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
// Increase the margin so that the value is printed avove tje
// img marker
$p1->value->SetMargin(14);

// Incent the X-scale so the first and last point doesn't
// fall on the edges
$p1->SetCenter();

$graph->Add($p1);

//------------
// 2:nd plot
//------------
$p2 = new LinePlot($datay[1]);
$p2->SetColor("navy");

// Use a flag
$p2->mark->SetType(MARK_FLAG1,'united states');

// Displayes value on top of marker image
$p2->value->SetFormat('%d mil');
$p2->value->Show();
$p2->value->SetColor('darkred');
$p2->value->SetFont(FF_ARIAL,FS_BOLD,10);
// Increase the margin so that the value is printed avove tje
// img marker
$p2->value->SetMargin(14);

// Incent the X-scale so the first and last point doesn't
// fall on the edges
$p2->SetCenter();
$graph->Add($p2);

$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/nullvalueex01.html b/html/includes/jpgraph/docs/html/exframes/nullvalueex01.html new file mode 100644 index 0000000000..314069f8f9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/nullvalueex01.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// Some data
$datax = array("2001-04-01","2001-04-02","2001-04-03","2001-04-04","2001-04-05","2001-04-06");
$datay = array(28,13,24,"",90,11);
$data2y = array(11,41,"-",33,"-",63);

// Setup graph
$graph = new Graph(400,250,"auto");
$graph->img->SetMargin(40,150,40,80);    
$graph->SetScale("textlin");
$graph->SetShadow();

//Setup title
$graph->title->Set("Line plot with null values");

// Use built in font
$graph->title->SetFont(FF_COMIC,FS_NORMAL,14);

// Slightly adjust the legend from it's default position
$graph->legend->Pos(0.03,0.5,"right","center");
$graph->legend->SetFont(FF_FONT1,FS_BOLD);

// Setup X-scale
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8);
$graph->xaxis->SetLabelAngle(45);

// Create the first line
$p1 = new LinePlot($datay);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);
$p1->SetColor("blue");
$p1->SetCenter();
$p1->SetLegend("Undefined\nvariant 1");
$graph->Add($p1);

// ... and the second
$p2 = new LinePlot($data2y);
$p2->mark->SetType(MARK_STAR);
$p2->mark->SetFillColor("red");
$p2->mark->SetWidth(4);
$p2->SetColor("red");
$p2->SetCenter();
$p2->SetLegend("Undefined\nvariant 2");
$graph->Add($p2);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/partiallyfilledlineex1.html b/html/includes/jpgraph/docs/html/exframes/partiallyfilledlineex1.html new file mode 100644 index 0000000000..9e96b28411 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/partiallyfilledlineex1.html @@ -0,0 +1,4 @@ + +<?php

include("../jpgraph.php");
include(
"../jpgraph_line.php");

// Some data
$ydata = array(5,10,15,20,15,10,8,7,4,10,5);

// Create the graph
$graph= new Graph(400,300,"auto");
$graph->SetScale("textlin");
$graph->SetShadow(true);
$graph->SetMarginColor("lightblue");

// Setup format for legend
$graph->legend->SetFillColor("antiquewhite");
$graph->legend->SetShadow(true);

// Setup title
$graph->title->Set("Filled Area Example");
$graph->title->SetFont(FF_FONT2,FS_BOLD);

// Setup semi-filled line plot
$lineplot = new LinePlot($ydata);
$lineplot->SetLegend("Semi-filled\nLineplot");

// Set line color
$lineplot->SetColor("black");

// Setup the two areas to be filled
$lineplot->AddArea(2,5,LP_AREA_FILLED,"red");
$lineplot->AddArea(6,8,LP_AREA_FILLED,"green");

// Display the marks on the lines
$lineplot->mark->SetType(MARK_DIAMOND);
$lineplot->mark->SetSize(8);
$lineplot->mark->Show();

// add plot to the graph
$graph->Add($lineplot);

// display graph
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/penguin.html b/html/includes/jpgraph/docs/html/exframes/penguin.html new file mode 100644 index 0000000000..9af41a39ad --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/penguin.html @@ -0,0 +1,4 @@ +
+Warning: highlight_file(penguin.php): failed to open stream: No such file or directory in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
+
+Warning: highlight_file(): Failed opening 'penguin.php' for highlighting in /home/ljp/dev/jpgraph/b1/src/Examples/show-source.php on line 1
diff --git a/html/includes/jpgraph/docs/html/exframes/pie3d_csimex1.html b/html/includes/jpgraph/docs/html/exframes/pie3d_csimex1.html new file mode 100644 index 0000000000..fa60ac97ae --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pie3d_csimex1.html @@ -0,0 +1,3 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_pie.php");
include_once (
"../jpgraph_pie3d.php");

//$gJpgBrandTiming=true;

// Some data
$data = array(40,21,17,27,23);

// Create the Pie Graph. 
$graph = new PieGraph(400,200,'auto');
$graph->SetShadow();

// Set A title for the plot
$graph->title->Set("3D Pie Client side image map");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create
$p1 = new PiePlot3D($data);
$p1->SetLegends(array("Jan (%d)","Feb","Mar","Apr","May","Jun","Jul"));
$targ=array("pie3d_csimex1.php?v=1","pie3d_csimex1.php?v=2","pie3d_csimex1.php?v=3",
            
"pie3d_csimex1.php?v=4","pie3d_csimex1.php?v=5","pie3d_csimex1.php?v=6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$p1->SetCSIMTargets($targ,$alts);

// Use absolute labels
$p1->SetLabelType(1);
$p1->value->SetFormat("%d kr");

// Move the pie slightly to the left
$p1->SetCenter(0.4,0.5);

$graph->Add($p1);


// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('pie3d_csimex1.php');

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pie_csimex1.html b/html/includes/jpgraph/docs/html/exframes/pie_csimex1.html new file mode 100644 index 0000000000..8b0a2e8ddc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pie_csimex1.html @@ -0,0 +1,3 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_pie.php");

// Some data
$data = array(40,21,17,14,23);

// Create the Pie Graph. 
$graph = new PieGraph(300,200,'auto');
$graph->SetShadow();

// Set A title for the plot
$graph->title->Set("Client side image map");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create
$p1 = new PiePlot($data);
$p1->SetCenter(0.4,0.5);

$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul"));
$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3",
"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$p1->SetCSIMTargets($targ,$alts);

$graph->Add($p1);


// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('pie_csimex1.php');

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/piec_csimex1.html b/html/includes/jpgraph/docs/html/exframes/piec_csimex1.html new file mode 100644 index 0000000000..a270935bcd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/piec_csimex1.html @@ -0,0 +1,3 @@ + +<?php
// $Id: piec_csimex1.php,v 1.1.2.1 2003/10/09 21:05:39 aditus Exp $
// Example of pie with center circle
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

// Some data
$data = array(50,28,25,27,31,20);

// A new pie graph
$graph = new PieGraph(400,400);

// If you don't want any  border just uncomment this line
// $graph->SetFrame(false);

// Uncomment this line to add a drop shadow to the border
// $graph->SetShadow();

// Setup title
$graph->title->Set("CSIM Center Pie plot ex 1");
$graph->title->SetFont(FF_COMIC,FS_BOLD,18);
$graph->title->SetMargin(8); // Add a little bit more margin from the top

// Create the pie plot
$p1 = new PiePlotC($data);

// Set the radius of pie (as fraction of image size)
$p1->SetSize(0.32);

// Move the center of the pie slightly to the top of the image
$p1->SetCenter(0.5,0.45);

// Label font and color setup
$p1->value->SetFont(FF_ARIAL,FS_BOLD,12);
$p1->value->SetColor('white');

// Setup the title on the center circle
$p1->midtitle->Set("Test mid\nRow 1\nRow 2");
$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14);

// Set color for mid circle
$p1->SetMidColor('yellow');

// Use percentage values in the legends values (This is also the default)
$p1->SetLabelType(PIE_VALUE_PER);

// The label array values may have printf() formatting in them. The argument to the
// form,at string will be the value of the slice (either the percetage or absolute
// depending on what was specified in the SetLabelType() above.
$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%",
         
"peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%");
$p1->SetLabels($lbl);

// Uncomment this line to remove the borders around the slices
// $p1->ShowBorder(false);

// Add drop shadow to slices
$p1->SetShadow();

// Explode all slices 15 pixels
$p1->ExplodeAll(15);

// Setup the CSIM targets
$targ=array("piec_csimex1.php#1","piec_csimex1.php#2","piec_csimex1.php#3",
        
"piec_csimex1.php#4","piec_csimex1.php#5","piec_csimex1.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$p1->SetCSIMTargets($targ,$alts);
$p1->SetMidCSIM("piec_csimex1.php#7","Center");


// Setup a small help text in the image
$txt = new Text("Note: This is an example of image map. Hold\nyour mouse over the slices to see the values.\nThe URL just points back to this page");
$txt->SetFont(FF_FONT1,FS_BOLD);
$txt->Pos(0.5,0.97,'center','bottom');
$txt->SetBox('yellow','black');
$txt->SetShadow();
$graph->AddText($txt);

// Add plot to pie graph
$graph->Add($p1);

// .. and send the image on it's marry way to the browser
$graph->StrokeCSIM('piec_csimex1.php');

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/piecex1.html b/html/includes/jpgraph/docs/html/exframes/piecex1.html new file mode 100644 index 0000000000..4a3da724a2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/piecex1.html @@ -0,0 +1,3 @@ + +<?php
// $Id
// Example of pie with center circle
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

// Some data
$data = array(50,28,25,27,31,20);

// A new pie graph
$graph = new PieGraph(300,300,'auto');

// Setup title
$graph->title->Set("Pie plot with center circle");
$graph->title->SetFont(FF_COMIC,FS_BOLD,14);
$graph->title->SetMargin(8); // Add a little bit more margin from the top

// Create the pie plot
$p1 = new PiePlotC($data);

// Set size of pie
$p1->SetSize(0.32);

// Label font and color setup
$p1->value->SetFont(FF_ARIAL,FS_BOLD,10);
$p1->value->SetColor('black');

// Setup the title on the center circle
$p1->midtitle->Set("Test mid\nRow 1\nRow 2");
$p1->midtitle->SetFont(FF_COMIC,FS_NORMAL,10);

// Set color for mid circle
$p1->SetMidColor('yellow');

// Use percentage values in the legends values (This is also the default)
$p1->SetLabelType(PIE_VALUE_PER);

// Add plot to pie graph
$graph->Add($p1);

// .. and send the image on it's marry way to the browser
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/piecex2.html b/html/includes/jpgraph/docs/html/exframes/piecex2.html new file mode 100644 index 0000000000..a1cd605263 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/piecex2.html @@ -0,0 +1,3 @@ + +<?php
// $Id: piecex2.php,v 1.3.2.1 2003/08/19 20:40:12 aditus Exp $
// Example of pie with center circle
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

// Some data
$data = array(50,28,25,27,31,20);

// A new pie graph
$graph = new PieGraph(400,400,'auto');

// Don't display the border
$graph->SetFrame(false);

// Uncomment this line to add a drop shadow to the border
// $graph->SetShadow();

// Setup title
$graph->title->Set("PiePlotC");
$graph->title->SetFont(FF_COMIC,FS_BOLD,18);
$graph->title->SetMargin(8); // Add a little bit more margin from the top

// Create the pie plot
$p1 = new PiePlotC($data);

// Set size of pie
$p1->SetSize(0.35);

// Label font and color setup
$p1->value->SetFont(FF_ARIAL,FS_BOLD,12);
$p1->value->SetColor('white');

$p1->value->Show();

// Setup the title on the center circle
$p1->midtitle->Set("Test mid\nRow 1\nRow 2");
$p1->midtitle->SetFont(FF_COMIC,FS_NORMAL,14);

// Set color for mid circle
$p1->SetMidColor('yellow');

// Use percentage values in the legends values (This is also the default)
$p1->SetLabelType(PIE_VALUE_PER);

// The label array values may have printf() formatting in them. The argument to the
// form,at string will be the value of the slice (either the percetage or absolute
// depending on what was specified in the SetLabelType() above.
$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%",
         
"peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%");
$p1->SetLabels($lbl);

// Uncomment this line to remove the borders around the slices
// $p1->ShowBorder(false);

// Add drop shadow to slices
$p1->SetShadow();

// Explode all slices 15 pixels
$p1->ExplodeAll(15);

// Add plot to pie graph
$graph->Add($p1);

// .. and send the image on it's marry way to the browser
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pieex3.html b/html/includes/jpgraph/docs/html/exframes/pieex3.html new file mode 100644 index 0000000000..044ebcd98c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pieex3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

// Some data
$data = array(40,21,17,14,23);

// Create the Pie Graph.
$graph = new PieGraph(350,300,"auto");
$graph->SetShadow();

// Set A title for the plot
$graph->title->Set("Multiple - Pie plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Create plots
$size=0.13;
$p1 = new PiePlot($data);
$p1->SetLegends(array("Jan","Feb","Mar","Apr","May"));
$p1->SetSize($size);
$p1->SetCenter(0.25,0.32);
$p1->value->SetFont(FF_FONT0);
$p1->title->Set("2001");

$p2 = new PiePlot($data);
$p2->SetSize($size);
$p2->SetCenter(0.65,0.32);
$p2->value->SetFont(FF_FONT0);
$p2->title->Set("2002");

$p3 = new PiePlot($data);
$p3->SetSize($size);
$p3->SetCenter(0.25,0.75);
$p3->value->SetFont(FF_FONT0);
$p3->title->Set("2003");

$p4 = new PiePlot($data);
$p4->SetSize($size);
$p4->SetCenter(0.65,0.75);
$p4->value->SetFont(FF_FONT0);
$p4->title->Set("2004");

$graph->Add($p1);
$graph->Add($p2);
$graph->Add($p3);
$graph->Add($p4);

$graph->Stroke();

?>



+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pieex8.html b/html/includes/jpgraph/docs/html/exframes/pieex8.html new file mode 100644 index 0000000000..5580a0bb29 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pieex8.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,31,35);

// A new pie graph
$graph = new PieGraph(250,200,"auto");
$graph->SetShadow();

// Title setup
$graph->title->Set("Adjusting the label pos");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Setup the pie plot
$p1 = new PiePlot($data);

// Adjust size and position of plot
$p1->SetSize(0.4);
$p1->SetCenter(0.5,0.52);

// Setup slice labels and move them into the plot
$p1->value->SetFont(FF_FONT1,FS_BOLD);
$p1->value->SetColor("darkred");
$p1->SetLabelPos(0.6);

// Finally add the plot
$graph->Add($p1);

// ... and stroke it
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pieex9.html b/html/includes/jpgraph/docs/html/exframes/pieex9.html new file mode 100644 index 0000000000..74ad19c443 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pieex9.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(40,60,31,35);

// A new pie graph
$graph = new PieGraph(250,200,"auto");
$graph->SetShadow();

// Title setup
$graph->title->Set("Exploding all slices");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Setup the pie plot
$p1 = new PiePlot($data);

// Adjust size and position of plot
$p1->SetSize(0.35);
$p1->SetCenter(0.5,0.52);

// Setup slice labels and move them into the plot
$p1->value->SetFont(FF_FONT1,FS_BOLD);
$p1->value->SetColor("darkred");
$p1->SetLabelPos(0.65);

// Explode all slices
$p1->ExplodeAll(10);

// Add drop shadow
$p1->SetShadow();

// Finally add the plot
$graph->Add($p1);

// ... and stroke it
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pielabelsex1.html b/html/includes/jpgraph/docs/html/exframes/pielabelsex1.html new file mode 100644 index 0000000000..42ac0cac88 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pielabelsex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);

// Create the Pie Graph.
$graph = new PieGraph(300,350);

// Set A title for the plot
$graph->title->Set("Label guide lines");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
$graph->title->SetColor("darkblue");
$graph->legend->Pos(0.1,0.2);


// Create pie plot
$p1 = new PiePlot($data);
$p1->SetCenter(0.5,0.55);
$p1->SetSize(0.3);

// Enable and set policy for guide-lines
$p1->SetGuideLines();
$p1->SetGuideLinesAdjust(1.4);

// Setup the labels
$p1->SetLabelType(PIE_VALUE_PER);    
$p1->value->Show();            
$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
$p1->value->SetFormat('%2.1f%%');        

// Add and stroke
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pielabelsex2.html b/html/includes/jpgraph/docs/html/exframes/pielabelsex2.html new file mode 100644 index 0000000000..f1a5f82daf --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pielabelsex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);

// Create the Pie Graph.
$graph = new PieGraph(300,350);

// Set A title for the plot
$graph->title->Set("Label guide lines");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
$graph->title->SetColor("darkblue");
$graph->legend->Pos(0.1,0.2);


// Create pie plot
$p1 = new PiePlot($data);
$p1->SetCenter(0.5,0.55);
$p1->SetSize(0.3);

// Enable and set policy for guide-lines. Make labels line up vertically
$p1->SetGuideLines(true,false);
$p1->SetGuideLinesAdjust(1.5);

// Setup the labels
$p1->SetLabelType(PIE_VALUE_PER);    
$p1->value->Show();            
$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
$p1->value->SetFormat('%2.1f%%');        

// Add and stroke
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/pielabelsex4.html b/html/includes/jpgraph/docs/html/exframes/pielabelsex4.html new file mode 100644 index 0000000000..849e21637f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/pielabelsex4.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_pie.php");

$data = array(19,12,4,3,3,12,3,3,5,6,7,8,8,1,7,2,2,4,6,8,21,23,2,2,12);

// Create the Pie Graph.
$graph = new PieGraph(300,350);

// Set A title for the plot
$graph->title->Set("Label guide lines");
$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); 
$graph->title->SetColor("darkblue");
$graph->legend->Pos(0.1,0.2);


// Create pie plot
$p1 = new PiePlot($data);
$p1->SetCenter(0.5,0.55);
$p1->SetSize(0.3);

// Enable and set policy for guide-lines. Make labels line up vertically
$p1->SetGuideLines(true,false);
$p1->SetGuideLinesAdjust(1.1);

// Setup the labels
$p1->SetLabelType(PIE_VALUE_PER);    
$p1->value->Show();            
$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9);    
$p1->value->SetFormat('%2.1f%%');        

// Add and stroke
$graph->Add($p1);
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex0-180.html b/html/includes/jpgraph/docs/html/exframes/polarex0-180.html new file mode 100644 index 0000000000..346819f281 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex0-180.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 0

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(250,250);
$graph->SetScale('lin');
$graph->SetMargin(35,35,25,25);
$graph->SetType(POLAR_180);

$p = new PolarPlot($data);
$p->SetFillColor('lightblue@0.5');
$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex0.html b/html/includes/jpgraph/docs/html/exframes/polarex0.html new file mode 100644 index 0000000000..708956e72f --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex0.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 0

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(250,250);
$graph->SetScale('lin');
$graph->SetMargin(35,35,25,25);

$p = new PolarPlot($data);
$p->SetFillColor('lightblue@0.5');
$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex3-lin.html b/html/includes/jpgraph/docs/html/exframes/polarex3-lin.html new file mode 100644 index 0000000000..160ade6cb7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex3-lin.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 2

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(300,300);
$graph->SetScale('lin',200);
$graph->SetType(POLAR_180);

$graph->title->Set('Polar plot #3');
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->title->SetColor('navy');

$graph->axis->ShowGrid(true,false);

$p = new PolarPlot($data);
$p->SetFillColor('lightred@0.5');

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex3.html b/html/includes/jpgraph/docs/html/exframes/polarex3.html new file mode 100644 index 0000000000..9965d49155 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex3.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 2

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(300,300);
$graph->SetScale('log',100);
$graph->SetType(POLAR_180);

$graph->title->Set('Polar plot #3');
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->title->SetColor('navy');

$graph->axis->ShowGrid(true,false);

$p = new PolarPlot($data);
$p->SetFillColor('lightred@0.5');

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex4.html b/html/includes/jpgraph/docs/html/exframes/polarex4.html new file mode 100644 index 0000000000..563bb0953a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex4.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 2

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(300,350);
$graph->SetScale('log');

$graph->title->Set('Polar plot #4');
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->title->SetColor('navy');

// Hide last labels on the Radius axis
// They intersect with the box otherwise
$graph->axis->HideLastTickLabel();

$p = new PolarPlot($data);
$p->SetFillColor('lightred@0.5');

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex5.html b/html/includes/jpgraph/docs/html/exframes/polarex5.html new file mode 100644 index 0000000000..5a95b260fd --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex5.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph, example 2

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,
          
85,270,90,280,
          
95,270,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);


$graph = new PolarGraph(300,350);
$graph->SetScale('log');

// Show both major and minor grid lines
$graph->axis->ShowGrid(true,true);

$graph->title->Set('Polar plot #5');
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->title->SetColor('navy');

// Hide last labels on the Radius axis
// They intersect with the box otherwise
$graph->axis->HideLastTickLabel();

$p = new PolarPlot($data);
$p->SetFillColor('lightred@0.5');

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex7-2.html b/html/includes/jpgraph/docs/html/exframes/polarex7-2.html new file mode 100644 index 0000000000..9abc98c389 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex7-2.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph,

include "../jpgraph.php";
include 
"../jpgraph_polar.php";


$data = array(0,1,30,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,85,370,
          
90,480,
          
95,370,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,150,2,180,1);

$n count($data);
for(
$i=0$i $n$i+=) {
    
$data[$n+$i] = 360-$data[$i];
    
$data[$n+$i+1] = $data[$i+1];
}


$graph = new PolarGraph(300,400);
$graph->SetScale('log',100);
$graph->SetType(POLAR_360);
$graph->SetPlotSize(220,300);

// Hide frame around graph (by setting width=0)
$graph->SetFrame(true,'white',1);

$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_MIDHOR,BGRAD_PLOT);

// Set color for gradient lines
$graph->axis->SetGridColor('gray','gray','gray');

$graph->title->Set('Polar plot #7-2');
$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
$graph->title->SetColor('navy');

// Adjust legen box position and color
$graph->legend->SetColor('navy','darkgray');
$graph->legend->SetFillColor('white');
$graph->legend->SetShadow('darkgray@0.5',5);

$p = new PolarPlot($data);
$p->SetFillColor('yellow@0.6');
$p->mark->SetType(MARK_SQUARE);
$p->SetLegend("Mirophone #1\n(No amps)");

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/polarex9.html b/html/includes/jpgraph/docs/html/exframes/polarex9.html new file mode 100644 index 0000000000..c52b1af3e9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/polarex9.html @@ -0,0 +1,4 @@ + +<?php
// A simple Polar graph,

include "../jpgraph.php";
include 
"../jpgraph_polar.php";

$data = array(0,1,10,2,30,25,40,60,
          
50,110,60,160,70,210,75,230,80,260,85,370,
          
90,480,
          
95,370,100,260,105,230,
          
110,210,120,160,130,110,140,60,
          
150,25,170,2,180,1);

$graph = new PolarGraph(350,320);
$graph->SetScale('log',100);
$graph->SetType(POLAR_180);

// Hide frame around graph (by setting width=0)
$graph->SetFrame(true,'white',1);

// Show both major and minor grid lines
$graph->axis->ShowGrid(true,true);

// Set color for gradient lines
$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9');

// Set label and axis colors
$graph->axis->SetColor('black','navy','darkred');

// Draw the ticks on the bottom side of the radius axis
$graph->axis->SetTickSide(SIDE_DOWN);

// Increase the margin for the labels since we changed the
// side of the ticks.
$graph->axis->SetLabelMargin(6);

// Change fonts
$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8);
$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8);

// Setup axis title
$graph->axis->SetTitle('Coverage (in meter)','middle');
$graph->axis->title->SetFont(FF_FONT1,FS_BOLD);

// Setup graph title
$graph->title->Set('Polar plot #9');
$graph->title->SetFont(FF_ARIAL,FS_BOLD,16);
$graph->title->SetColor('navy');

// Setup tab title
$graph->tabtitle->Set('Microphone #1');
$graph->tabtitle->SetColor('brown:0.5','lightyellow');


$p = new PolarPlot($data);
$p->SetFillColor('lightblue@0.5');
$p->mark->SetType(MARK_SQUARE);

$graph->Add($p);

$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex1.html b/html/includes/jpgraph/docs/html/exframes/radarex1.html new file mode 100644 index 0000000000..89fe24e53d --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");
    
// Some data to plot
$data = array(55,80,46,71,95);
    
// Create the graph and the plot
$graph = new RadarGraph(250,200,"auto");
$plot = new RadarPlot($data);

// Add the plot and display the graph
$graph->Add($plot);
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex2.html b/html/includes/jpgraph/docs/html/exframes/radarex2.html new file mode 100644 index 0000000000..edd100936b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");
    
// Some data to plot
$data = array(55,80,46,71,95);
    
// Create the graph and the plot
$graph = new RadarGraph(300,200,"auto");

$graph->title->Set('Weekly goals');
$graph->subtitle->Set('Year 2003');

$plot = new RadarPlot($data);
$plot->SetFillColor('lightred');
$graph->SetSize(0.6);
$graph->SetPos(0.5,0.6);
// Add the plot and display the graph
$graph->Add($plot);
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex4.html b/html/includes/jpgraph/docs/html/exframes/radarex4.html new file mode 100644 index 0000000000..ae150cb6b3 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex4.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");
    
// Some data to plot
$data = array(55,80,26,31,95);
    
// Create the graph and the plot
$graph = new RadarGraph(250,200,"auto");

// Create the titles for the axis
$titles $gDateLocale->GetShortMonth();
$graph->SetTitles($titles);

// Add grid lines
$graph->grid->Show();
$graph->grid->SetLineStyle('dotted');

$plot = new RadarPlot($data);
$plot->SetFillColor('lightblue');

// Add the plot and display the graph
$graph->Add($plot);
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex6.1.html b/html/includes/jpgraph/docs/html/exframes/radarex6.1.html new file mode 100644 index 0000000000..b83e9f29e5 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex6.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");
    
// Some data to plot
$data = array(55,80,26,31,95);
$data2 = array(15,50,46,39,25);
    
// Create the graph and the plot
$graph = new RadarGraph(250,200,"auto");

// Add a drop shadow to the graph
$graph->SetShadow();

// Create the titles for the axis
$titles $gDateLocale->GetShortMonth();
$graph->SetTitles($titles);
$graph->SetColor('lightyellow');

// ADjust the position to make more room
// for the legend
$graph->SetCenter(0.4,0.55);
$graph->SetSize(0.6);

// Add grid lines
$graph->grid->Show();
$graph->grid->SetColor('darkred');
$graph->grid->SetLineStyle('dotted');

$plot = new RadarPlot($data);
$plot->SetFillColor('lightblue');
$plot->SetLegend("QA results");

$plot2 = new RadarPlot($data2);
$plot2->SetLegend("Target");
$plot2->SetColor('red');
$plot2->SetFill(false);
$plot2->SetLineWeight(2);


// Add the plot and display the graph
$graph->Add($plot);
$graph->Add($plot2);
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex6.html b/html/includes/jpgraph/docs/html/exframes/radarex6.html new file mode 100644 index 0000000000..900b20a5a9 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex6.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");
    
// Some data to plot
$data = array(55,80,26,31,95);
    
// Create the graph and the plot
$graph = new RadarGraph(250,200,"auto");

// Add a drop shadow to the graph
$graph->SetShadow();

// Create the titles for the axis
$titles $gDateLocale->GetShortMonth();
$graph->SetTitles($titles);
$graph->SetColor('lightyellow');

// ADjust the position to make more room
// for the legend
$graph->SetCenter(0.4,0.5);

// Add grid lines
$graph->grid->Show();
$graph->grid->SetColor('darkred');
$graph->grid->SetLineStyle('dotted');

$plot = new RadarPlot($data);
$plot->SetFillColor('lightblue');
$plot->SetLegend("QA results");

// Add the plot and display the graph
$graph->Add($plot);
$graph->Stroke();
?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex7.html b/html/includes/jpgraph/docs/html/exframes/radarex7.html new file mode 100644 index 0000000000..f7adfab836 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex7.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");

// Create the basic rtadar graph
$graph = new RadarGraph(300,200,"auto");

// Set background color and shadow
$graph->SetColor("white");
$graph->SetShadow();

// Position the graph
$graph->SetCenter(0.4,0.55);

// Setup the axis formatting     
$graph->axis->SetFont(FF_FONT1,FS_BOLD);
$graph->axis->SetWeight(2);

// Setup the grid lines
$graph->grid->SetLineStyle("longdashed");
$graph->grid->SetColor("navy");
$graph->grid->Show();
$graph->HideTickMarks();
        
// Setup graph titles
$graph->title->Set("Quality result");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetTitles(array("One","Two","Three","Four","Five","Sex","Seven","Eight","Nine","Ten"));
// Create the first radar plot        
$plot = new RadarPlot(array(30,80,60,40,71,81,47));
$plot->SetLegend("Goal");
$plot->SetColor("red","lightred");
$plot->SetFill(false);
$plot->SetLineWeight(2);

// Create the second radar plot
$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
$plot2->SetLegend("Actual");
$plot2->SetColor("blue","lightred");

// Add the plots to the graph
$graph->Add($plot2);
$graph->Add($plot);

// And output the graph
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex8.1.html b/html/includes/jpgraph/docs/html/exframes/radarex8.1.html new file mode 100644 index 0000000000..42c4bddba2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex8.1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");

// Create the basic radar graph
$graph = new RadarGraph(300,200,"auto");
$graph->img->SetAntiAliasing();

// Set background color and shadow
$graph->SetColor("white");
$graph->SetShadow();

// Position the graph
$graph->SetCenter(0.4,0.55);

// Setup the axis formatting     
$graph->axis->SetFont(FF_FONT1,FS_BOLD);

// Setup the grid lines
$graph->grid->SetLineStyle("solid");
$graph->grid->SetColor("navy");
$graph->grid->Show();
$graph->HideTickMarks();
        
// Setup graph titles
$graph->title->Set("Quality result");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$graph->SetTitles($gDateLocale->GetShortMonth());

// Create the first radar plot        
$plot = new RadarPlot(array(70,80,60,90,71,81,47));
$plot->SetLegend("Goal");
$plot->SetColor("red","lightred");
$plot->SetFill(false);
$plot->SetLineWeight(2);

// Create the second radar plot
$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
$plot2->SetLegend("Actual");
$plot2->SetLineWeight(2);
$plot2->SetColor("blue");
$plot2->SetFill(false);

// Add the plots to the graph
$graph->Add($plot2);
$graph->Add($plot);

// And output the graph
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarex8.html b/html/includes/jpgraph/docs/html/exframes/radarex8.html new file mode 100644 index 0000000000..daf7edce38 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarex8.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_radar.php");

// Create the basic radar graph
$graph = new RadarGraph(300,200,"auto");
//$graph->img->SetAntiAliasing();

// Set background color and shadow
$graph->SetColor("white");
$graph->SetShadow();

// Position the graph
$graph->SetCenter(0.4,0.55);

// Setup the axis formatting     
$graph->axis->SetFont(FF_FONT1,FS_BOLD);

// Setup the grid lines
$graph->grid->SetLineStyle("solid");
$graph->grid->SetColor("navy");
$graph->grid->Show();
$graph->HideTickMarks();
        
// Setup graph titles
$graph->title->Set("Quality result");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->SetTitles($gDateLocale->GetShortMonth());

// Create the first radar plot        
$plot = new RadarPlot(array(70,80,60,90,71,81,47));
$plot->SetLegend("Goal");
$plot->SetColor("red","lightred");
$plot->SetFill(false);
$plot->SetLineWeight(2);

// Create the second radar plot
$plot2 = new RadarPlot(array(70,40,30,80,31,51,14));
$plot2->SetLegend("Actual");
$plot2->SetLineWeight(2);
$plot2->SetColor("blue");
$plot2->SetFill(false);

// Add the plots to the graph
$graph->Add($plot2);
$graph->Add($plot);

// And output the graph
$graph->Stroke();

?> +
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/radarmarkex1.html b/html/includes/jpgraph/docs/html/exframes/radarmarkex1.html new file mode 100644 index 0000000000..1870fed573 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/radarmarkex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php"); 
include (
"../jpgraph_radar.php");

$titles=array('Planning','Quality','Time','RR','CR','DR');
$data=array(1840709042,66);

$graph = new RadarGraph (300,280,"auto"); 

$graph->title->Set("Radar with marks");
$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12);

$graph->SetTitles($titles);
$graph->SetCenter(0.5,0.55);
$graph->HideTickMarks(); 
$graph->SetColor('lightgreen@0.7');
$graph->axis->SetColor('darkgray'); 
$graph->grid->SetColor('darkgray');
$graph->grid->Show();

$graph->axis->title->SetFont(FF_ARIAL,FS_NORMAL,12);
$graph->axis->title->SetMargin(5);
$graph->SetGridDepth(DEPTH_BACK);
$graph->SetSize(0.6);

$plot = new RadarPlot($data);
$plot->SetColor('red@0.2');
$plot->SetLineWeight(1);
$plot->SetFillColor('red@0.7');

$plot->mark->SetType(MARK_IMG_SBALL,'red');

$graph->Add($plot);
$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex0.html b/html/includes/jpgraph/docs/html/exframes/rotex0.html new file mode 100644 index 0000000000..646ddb156c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex0.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex1.html b/html/includes/jpgraph/docs/html/exframes/rotex1.html new file mode 100644 index 0000000000..f07a5c4a02 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$graph->img->SetAngle(45);

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex2.html b/html/includes/jpgraph/docs/html/exframes/rotex2.html new file mode 100644 index 0000000000..1d2c75375c --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex2.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$graph->img->SetAngle(90);

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex3.html b/html/includes/jpgraph/docs/html/exframes/rotex3.html new file mode 100644 index 0000000000..ba0e9388ed --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex3.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$graph->img->SetAngle(45);
$graph->img->SetCenter(floor(270/2),floor(170/2));

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex4.html b/html/includes/jpgraph/docs/html/exframes/rotex4.html new file mode 100644 index 0000000000..98b11d2314 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex4.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$graph->img->SetAngle(90);
$graph->img->SetCenter(floor(270/2),floor(170/2));

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/rotex5.html b/html/includes/jpgraph/docs/html/exframes/rotex5.html new file mode 100644 index 0000000000..e5cd0ebaed --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/rotex5.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$ydata = array(12,17,22,19,5,15);

$graph = new Graph(270,170);
$graph->SetMargin(30,90,30,30);
$graph->SetScale("textlin");

$graph->img->SetAngle(-30);
$graph->img->SetCenter(30,170-30);

$line = new LinePlot($ydata);
$line->SetLegend('2002');
$line->SetColor('darkred');
$line->SetWeight(2);
$graph->Add($line);

// Output graph
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/scatter_csimex1.html b/html/includes/jpgraph/docs/html/exframes/scatter_csimex1.html new file mode 100644 index 0000000000..05404d2981 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/scatter_csimex1.html @@ -0,0 +1,4 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_scatter.php");

// Some data for the points
$datax = array(3.5,13.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
$datay = array(10,22,12,13,17,20,16,19,30,31,40,43);

// A new scatter graph
$graph = new Graph(300,200,'auto');
$graph->SetShadow();
$graph->SetScale("linlin");

//$graph->img->SetMargin(40,40,40,40);        

$graph->title->Set("Scatter plot with Image Map");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Client side image map targets
$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3",
"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6",
"pie_csimex1.php#7","pie_csimex1.php#8","pie_csimex1.php#9" );

// Strings to put as "alts" (and "title" value)
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");

// Create a new scatter plot
$sp1 = new ScatterPlot($datay,$datax);

// Use diamonds as markerss
$sp1->mark->SetType(MARK_DIAMOND);
$sp1->mark->SetWidth(10);

// Set the scatter plot image map targets
$sp1->SetCSIMTargets($targ,$alts);

// Add the plot
$graph->Add($sp1);

// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('scatter_csimex1.php');

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/scatterex1.html b/html/includes/jpgraph/docs/html/exframes/scatterex1.html new file mode 100644 index 0000000000..7127694d4a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/scatterex1.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("linlin");

$graph->img->SetMargin(40,40,40,40);        
$graph->SetShadow();

$graph->title->Set("A simple scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay,$datax);

$graph->Add($sp1);
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/scatterex2.html b/html/includes/jpgraph/docs/html/exframes/scatterex2.html new file mode 100644 index 0000000000..aa3054259b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/scatterex2.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_scatter.php");

$datax = array(3.5,3.7,3,4,6.2,6,3.5,8,14,8,11.1,13.7);
$datay = array(20,22,12,13,17,20,16,19,30,31,40,43);

$graph = new Graph(300,200,"auto");
$graph->SetScale("linlin");

$graph->img->SetMargin(40,40,40,40);        
$graph->SetShadow();

$graph->title->Set("A simple scatter plot");
$graph->title->SetFont(FF_FONT1,FS_BOLD);

$sp1 = new ScatterPlot($datay,$datax);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->mark->SetWidth(8);

$graph->Add($sp1);
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex1.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex1.html new file mode 100644 index 0000000000..de03393dce --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex1.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex1.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_RDIAG,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_RDIAG');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex10.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex10.html new file mode 100644 index 0000000000..d7efb2f640 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex10.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex10.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_DIAGCROSS');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex2.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex2.html new file mode 100644 index 0000000000..569742fa3a --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex2.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex2.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_LDIAG,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_LDIAG');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex3.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex3.html new file mode 100644 index 0000000000..ab90b86d60 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex3.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex3.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_SOLID,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_SOLID');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex4.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex4.html new file mode 100644 index 0000000000..a0a1bdca68 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex4.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex4.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
$band->SetDensity(60);
$band->ShowFrame(true);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_3DPLANE, Density=60');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex5.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex5.html new file mode 100644 index 0000000000..7cd7cc0098 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex5.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex5.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4');
$band->ShowFrame(true);
$band->SetOrder(DEPTH_FRONT);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_HVCROSS, In front');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex6.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex6.html new file mode 100644 index 0000000000..9d73ef3908 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex6.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex6.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_VLINE,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_VLINE');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex7.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex7.html new file mode 100644 index 0000000000..f07a0c11b2 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex7.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex7.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_HLINE,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_HLINE');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex8.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex8.html new file mode 100644 index 0000000000..3d73197d39 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex8.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex8.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_3DPLANE');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex9.html b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex9.html new file mode 100644 index 0000000000..5272812a03 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/smallstaticbandsex9.html @@ -0,0 +1,4 @@ + +<?php
// Illustration of the different patterns for bands
// $Id: smallstaticbandsex9.php,v 1.1 2002/09/01 21:51:08 aditus Exp $
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(10,29,3,6);

// Create the graph. 
$graph = new Graph(200,150,"auto");    
$graph->SetScale("textlin");
$graph->SetMargin(25,10,20,20);

// Add 10% grace ("space") at top and botton of Y-scale. 
$graph->yscale->SetGrace(10);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("lightblue");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

$graph->ygrid->Show(false);

// .. and add the plot to the graph
$graph->Add($bplot);

// Add band
$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4');
$band->ShowFrame(false);
$graph->AddBand($band);

// Set title
$graph->title->SetFont(FF_ARIAL,FS_BOLD,10);
$graph->title->SetColor('darkred');
$graph->title->Set('BAND_HVCROSS');


$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/splineex1.html b/html/includes/jpgraph/docs/html/exframes/splineex1.html new file mode 100644 index 0000000000..cc30324f15 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/splineex1.html @@ -0,0 +1,3 @@ + +<?php
include "../jpgraph.php";
include 
"../jpgraph_line.php";
include 
"../jpgraph_scatter.php";
include 
"../jpgraph_regstat.php";

// Original data points
$xdata = array(1,3,5,7,9,12,15,17.1);
$ydata = array(5,1,9,6,4,3,19,12);

// Get the interpolated values by creating
// a new Spline object.
$spline = new Spline($xdata,$ydata);

// For the new data set we want 40 points to
// get a smooth curve.
list($newx,$newy) = $spline->Get(50);

// Create the graph
$g = new Graph(300,200);
$g->SetMargin(30,20,40,30);
$g->title->Set("Natural cubic splines");
$g->title->SetFont(FF_ARIAL,FS_NORMAL,12);
$g->subtitle->Set('(Control points shown in red)');
$g->subtitle->SetColor('darkred');
$g->SetMarginColor('lightblue');

//$g->img->SetAntiAliasing();

// We need a linlin scale since we provide both
// x and y coordinates for the data points.
$g->SetScale('linlin');

// We want 1 decimal for the X-label
$g->xaxis->SetLabelFormat('%1.1f');

// We use a scatterplot to illustrate the original
// contro points.
$splot = new ScatterPlot($ydata,$xdata);

// 
$splot->mark->SetFillColor('red@0.3');
$splot->mark->SetColor('red@0.5');

// And a line plot to stroke the smooth curve we got
// from the original control points
$lplot = new LinePlot($newy,$newx);
$lplot->SetColor('navy');

// Add the plots to the graph and stroke
$g->Add($lplot);
$g->Add($splot);
$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/staticbandbarex7.html b/html/includes/jpgraph/docs/html/exframes/staticbandbarex7.html new file mode 100644 index 0000000000..89d23b6906 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/staticbandbarex7.html @@ -0,0 +1,4 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_bar.php");

$datay=array(12,5,19,22,17,6);

// Create the graph. 
$graph = new Graph(400,300,"auto");    
$graph->img->SetMargin(60,30,50,40);
$graph->SetScale("textlin");
$graph->SetShadow();

$graph->title->SetFont(FF_ARIAL,FS_BOLD,15);
$graph->title->Set("Cash flow ");
$graph->subtitle->Set("Use of static line, 3D and solid band");

// Turn off Y-grid (it's on by default)
$graph->ygrid->Show(false);

// Add 10% grace ("space") at top of Y-scale. 
$graph->yscale->SetGrace(10);
$graph->yscale->SetAutoMin(-20);

// Turn the tick mark out from the plot area
$graph->xaxis->SetTickSide(SIDE_DOWN);
$graph->yaxis->SetTickSide(SIDE_LEFT);

// Create a bar pot
$bplot = new BarPlot($datay);
$bplot->SetFillColor("orange");
$bplot->SetShadow("darkblue");

// Show the actual value for each bar on top/bottom
$bplot->value->Show(true);
$bplot->value->SetFormat("%02d kr");

// Position the X-axis at the bottom of the plotare
$graph->xaxis->SetPos("min");

// .. and add the plot to the graph
$graph->Add($bplot);

// Add upper and lower band and use no frames
$band[0]=new PlotBand(HORIZONTAL,BAND_3DPLANE,"min",0,"blue");
$band[0]->ShowFrame(false);
$band[0]->SetDensity(20);
$band[1]=new PlotBand(HORIZONTAL,BAND_SOLID,0,"max","steelblue");
$band[1]->ShowFrame(false);
$graph->Add($band);

$graph->Add(new PlotLine(HORIZONTAL,0,"black",2));

//$graph->title->Set("Test of bar gradient fill");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11);
$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11);

$graph->Stroke();
?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/stockex1.html b/html/includes/jpgraph/docs/html/exframes/stockex1.html new file mode 100644 index 0000000000..ecd05853a0 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/stockex1.html @@ -0,0 +1,4 @@ + +<?php
// Example of a stock chart
include ("../jpgraph.php");
include (
"../jpgraph_stock.php");

// Data must be in the format : open,close,min,max
$datay = array(
    
34,42,27,45,
    
55,25,14,59,
    
15,40,12,47,
    
62,38,25,65,
    
38,49,32,64);

// Setup a simple graph
$graph = new Graph(300,200);
$graph->SetScale("textlin");
$graph->SetMarginColor('lightblue');
$graph->title->Set('Stockchart example');

// Create a new stock plot
$p1 = new StockPlot($datay);

// Width of the bars (in pixels)
$p1->SetWidth(9);

// Uncomment the following line to hide the horizontal end lines
//$p1->HideEndLines();

// Add the plot to the graph and send it back to the browser
$graph->Add($p1);
$graph->Stroke();

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/tabtitleex1.html b/html/includes/jpgraph/docs/html/exframes/tabtitleex1.html new file mode 100644 index 0000000000..b01374acbc --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/tabtitleex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

$datay1 = array(20,15,23,15);
$datay2 = array(12,9,42,8);
$datay3 = array(5,17,32,24);

// Setup the graph
$graph = new Graph(300,200);
$graph->SetMarginColor('white');
$graph->SetScale("textlin");
$graph->SetFrame(false);
$graph->SetMargin(30,50,30,30);

$graph->tabtitle->Set(' Year 2003 ' );
$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13);


$graph->yaxis->HideZeroLabel();
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
$graph->xgrid->Show();

$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());

// Create the first line
$p1 = new LinePlot($datay1);
$p1->SetColor("navy");
$p1->SetLegend('Line 1');
$graph->Add($p1);

// Create the second line
$p2 = new LinePlot($datay2);
$p2->SetColor("red");
$p2->SetLegend('Line 2');
$graph->Add($p2);

// Create the third line
$p3 = new LinePlot($datay3);
$p3->SetColor("orange");
$p3->SetLegend('Line 3');
$graph->Add($p3);

$graph->legend->SetShadow('gray@0.4',5);
$graph->legend->SetPos(0.1,0.1,'right','top');
// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/textalignex1.html b/html/includes/jpgraph/docs/html/exframes/textalignex1.html new file mode 100644 index 0000000000..2056242066 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/textalignex1.html @@ -0,0 +1,3 @@ + +<?php
// $Id: textalignex1.php,v 1.1 2002/10/19 17:42:53 aditus Exp $
require_once "../jpgraph.php";
require_once 
"../jpgraph_canvas.php";

if( empty(
$_GET['a']) ) {
    
$angle=40;
}
else {
    
$angle=$_GET['a'];
}

$caption "Demonstration of different anchor points for texts as specified with\nTextAlign(). The red cross marks the coordinate that was given to\nstroke each instance of the string.\n(The green box is the bounding rectangle for the text.)";
$txt="TextAlign()";


// Initial width and height since we need a "dummy" canvas to
// calculate the height of the text strings
$w=480;$h=50;
$xm=90;$ym=80;

$g = new CanvasGraph($w,$h);

$aImg $g->img;
$aImg->SetFont(FF_ARIAL,FS_NORMAL,16);
$tw=$aImg->GetBBoxWidth($txt,$angle);
$th=$aImg->GetBBoxHeight($txt,$angle);

$aImg->SetFont(FF_ARIAL,FS_NORMAL,11);
$ch=$aImg->GetBBoxHeight($caption);

// Calculate needed height for the image
$h 3*$th+2*$ym $ch;
$g = new CanvasGraph($w,$h);
$aImg $g->img;

$prof = array('left','top',
          
'center','top',
          
'right','top',
          
'left','center',
          
'center','center',
          
'right','center',
          
'left','bottom',
          
'center','bottom',
          
'right','bottom');
$n count($prof)/2;

for( 
$i=0,$r=0,$c=0$i $n; ++$i ) {
    
$x $c*($tw+$xm)+$xm/2;
    
$y $r*($th+$ym)+$ym/2-10;
    
$aImg->SetColor('blue');
    
$aImg->SetTextAlign($prof[$i*2],$prof[$i*2+1]);            
    
$aImg->SetFont(FF_ARIAL,FS_NORMAL,16);
    
$aImg->StrokeText($x,$y,$txt,$angle,"left",true);

    
$aImg->SetColor('black');
    
$aImg->SetFont(FF_FONT1,FS_BOLD);
    
$aImg->SetTextAlign('center','top');            
    
$align sprintf('("%s","%s")',$prof[$i*2],$prof[$i*2+1]);
    
$aImg->StrokeText($c*($tw/2+$xm)+$xm/2+$tw/2,$r*($th/2+$ym)+$th+$ym/2-4,$align);
    
$c++;
    if( 
$c==) {
    
$c=0;$r++;
    }
}

$aImg->SetTextAlign('center','bottom');            
$aImg->SetFont(FF_ARIAL,FS_ITALIC,11);
$aImg->StrokeText($w/2,$h-10,$caption,0,'left');

$aImg->SetColor('navy');
$aImg->Rectangle(0,0,$w-1,$h-1);

$g->Stroke();

?>

+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/titlecsimex01.html b/html/includes/jpgraph/docs/html/exframes/titlecsimex01.html new file mode 100644 index 0000000000..ce84f9049b --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/titlecsimex01.html @@ -0,0 +1,4 @@ + +<?php
include_once ("../jpgraph.php");
include_once (
"../jpgraph_bar.php");

$datay=array(12,26,9,17,31);

// Create the graph. 
$graph = new Graph(400,250);
$graph->SetScale("textlin");
$graph->SetMargin(50,80,20,40);
$graph->yaxis->SetTitleMargin(30);
$graph->yaxis->scale->SetGrace(30);
$graph->SetShadow();


// Create a bar pot
$bplot = new BarPlot($datay);

// Create targets for the bars image maps. One for each column
$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6");
$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$bplot->SetCSIMTargets($targ,$alts);
$bplot->SetFillColor("orange");
$bplot->SetLegend('Year 2001 %%','#kalle ','%s');

// Display the values on top of each bar
$bplot->SetShadow();
$bplot->value->SetFormat(" $ %2.1f",70);
$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
$bplot->value->SetColor("blue");
$bplot->value->Show();

$graph->Add($bplot);

// Create a big "button" that has an image map action
$txt1 = new Text("A simple text with\ntwo rows");
$txt1->SetFont(FF_ARIAL);
$txt1->SetBox('lightblue','black','white@1',5);
$txt1->SetParagraphAlign('center');
$txt1->SetPos(40,50);
$txt1->SetCSIMTarget('#88','Text element');
$graph->Add($txt1);

// Add image map to the graph title as well (you can do this to the 
// sub- and subsub-title as well)
$graph->title->Set("Image maps barex1");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->title->SetCSIMTarget('#45','Title for Bar');
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");

// Setup the axis title image map and font style
$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD);
$graph->yaxis->title->SetCSIMTarget('#55','Y-axis title');
$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD);
$graph->xaxis->title->SetCSIMTarget('#55','X-axis title');

// Send back the HTML page which will call this script again
// to retrieve the image.
$graph->StrokeCSIM('titlecsimex01.php');

?>
+
+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/exframes/topxaxisex1.html b/html/includes/jpgraph/docs/html/exframes/topxaxisex1.html new file mode 100644 index 0000000000..26c2778ce7 --- /dev/null +++ b/html/includes/jpgraph/docs/html/exframes/topxaxisex1.html @@ -0,0 +1,3 @@ + +<?php
include ("../jpgraph.php");
include (
"../jpgraph_line.php");

// Some data
$datay = array(25,29,29,39,55);

$graph = new Graph(400,200,'auto');
$graph->img->SetMargin(40,40,40,20);

$graph->SetScale("linlin");
$graph->SetShadow();
$graph->title->Set("Top X-axis");

// Start at 0
$graph->yscale->SetAutoMin(0);

// Add some air around the Y-scale
$graph->yscale->SetGrace(100);

// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);

// Adjust the X-axis
$graph->xaxis->SetPos("max");
$graph->xaxis->SetLabelSide(SIDE_UP);
$graph->xaxis->SetTickSide(SIDE_DOWN);

// Create the line plot
$p1 = new LinePlot($datay);
$p1->SetColor("blue");

// Specify marks for the line plots
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);

// Show values
$p1->value->Show();

// Add lineplot to graph
$graph->Add($p1);

// Output line
$graph->Stroke();

?>


+
\ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/img/alphabarex1.png b/html/includes/jpgraph/docs/html/img/alphabarex1.png new file mode 100644 index 0000000000000000000000000000000000000000..39f4552d8a12c7d961403002215f223851a17c17 GIT binary patch literal 143464 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 _e<|O`Ry;B|Naw}UGkL= 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�pIW}&w7LoIL`|Vgyf&jJ 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 z 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 Z2beiysb#Wx#{d8T07*qoM6N<$f(mmwK|}xm literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/antispamex01.png b/html/includes/jpgraph/docs/html/img/antispamex01.png new file mode 100644 index 0000000000000000000000000000000000000000..e42568b5e4f3b0b3b8198fdc4039de92ee3cdc08 GIT binary patch literal 2394 zcmbW$c{J4T9tZI6n6Zo*%UH@XvWGA-)@qC`2IXf9F^G_*kTuK1u`dZDDa2$~Dod6u zGs>EZ?8~6bpeb2~{IdLFu71CJ?mg$8`^UZa{hZJ9&+|FYIj?77PBG^JUNd7;V*msK z0MO9@n1=w?(Ar4+2-~(IXK}0TyPi+F3iWzBOoRsenLzH ziIk8*$w^2lNh6W+S_(?1Rn^ti#pTZEXrnPGHFfl_O+Zj66b^$6ad8QuC6SWo|2fRp z0D=RM0zAPWDS!n50wX}oZb1CV$qM>2z&`?F0Yg~X*g2q_u%m`XUVsGz2D3oGtgH~o zQTOembpV23<&#v^XXCeWW0wjPK*th`IiwBh-UwO`Gi21R2E{=+j~y2h7Lh$EC$Dfy zT|-k#`^;Ix^G3!v6H_yrOSX3QmmM74j}FVr+s8LJBsA<+ctm7;LSj;KN@`m6y`1~G z4<6>_mz0*3S5#I#d0PLnp|Pp?RZDAUS9ecu-`oCoBco&E6O&WZ)CJn&((-5em#-_E zTi>^T|FN^XxBtrp0>FQs*xmX|&FogY=3&e8ksK5vatE4I$pS~5lTOhv_ zI+jDgfLL7j1}d#)%@DjAG|YKSMtwnc^B3(;*?$L%`@dxWg#F7!1>j)N(dB^=fG)7O z`je-0g#uyZOb~M>8;`&8ahUsHfeaQ@nn$K{J!OH{1vnOsE<_i}W;olem?)#@m)B5h zi|#CxRiSJ4QYKSBEXlU5s-H)?3{Vz z@ihPK3kQlHI%54+FS@S=qDQRQ2)n*hO&>BXpz$O!0d9h>+d*mY!fwwa zFMc&&wQ7_JES|G`xN#tC z)l$ot-0|y;U4Fs2?^(Y@`<1yOQL4^M`(>I$XBTmlcDC->2{C;h8p`+$LDFvfJ6UFO9nrOfjX|?#j;k(_Z z75br4e1UBc1$N>2{Sm=;^*;p}ypsF|>1xQBzPVmKCeTqt`e2WsWx{`|53djAm46xb zb)2p2Z?22`yzo*nRmDIcUKQvqJ25G|{KK83vw@`iHj!3cv z{I@0SxQp`bNHoRgM($0uqajb2K;8CuhKBQ`dFEL?pg%e+qaFPAF)F;HI{>bdsB!mf zUw>nogVHgd#Ok+io%*G+VRgEl>~4K#ijQ}K>Zvbrz{La$_`i?cDTfbt!-PBp>7K+y%y0k`xB%{a_g+sOWlG zlY_>AwI~x1{MITzy5?l+SK%-l56udR5U#xbWZMNGo?xmE1|vv(Sm{)3{6HLe1F6@o>1zIscYjFI?)t8FwcROK|1WleGAj zbwLF4aiOO#p+Pq#`eX*(vf&PH`Y>hmH%znW8?f94ul9zsefI%+13&K9uo)B7WZ#-# zN2D54F8R*0<=gA_YKE+GuP>4`8+Hkk6zqih%x#!$`{<4G@YiXciCbl^0XHvYqXUa@ zhAw?o7SFy$7LM6ZJfP;@t#XD6uj%K~#uMD-t9WLw7QeB{f-b51zxvUm{3L6);?RZy3rmuB zySR)s=$Qd477kVqY9sAfYm$HBAHS9vK6;NdC_^gKx;gAVj-f!rqk+@t*?D)2y=Upy z$%#lEGNrf*_P*O%Ht#CO3sbrEAK$*2a0mBjwa(=Xpt9@EJ5r5vx4iG*yosJ=_X0N6 zj!~;uO=36-SxVHN>Y>gh-0A#>%RMXe-K_~+Z)?z$lMJKcfe~x< literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/backgroundex03.png b/html/includes/jpgraph/docs/html/img/backgroundex03.png new file mode 100644 index 0000000000000000000000000000000000000000..50f70f5e9a4a2fa8d6c4c8c1516c77270ee4c9eb GIT binary patch literal 26634 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%0A)A@C- zk`Bs4f0Q%LMP|yNT%l-j9|1kCN~z&`q=ree*^EuP1Gd`2krYMi$+8uQjt$ab6e9?d zZFtkudCk(9hb906s1yL=Bmv;Z`T!HW;e~!(GJ5@B+KnqCx*-(N&;n}$9FSDMlZ{si zMQqZ|wSGBakGz7BUQai4EWdOPjxkgbb#TD>pbmelGU{ z1Tc5 z{g;m(t+0c#XE;@%$16qUT{OP(m8EyT`_h>+=yrt=)cP~aSs^#Cq?Dn@4TAvdcDv^< zU*ujuWE6UwciN%XBYW!j@#EYNpZe~TiH_RM*74)VZ6!KuP428bb?R^a=5P3dABFj4NB8q71%NNx4r0x)2uh8dSN_7|qcu)M&ek?q%w z`)V~>MX6GebKYzo3Ih*lmjlLGR!b&U3CrdXl{B1$30R;8`8VMf8iZSe3-*E+#9#O? z7vB7v%b)qBgCG3BW%u1JttyK{r%zuxbA}2~?c^TJC{z*~>Kr6DvoHxFd(9I7Cdx_y z1ej84JyGpu%SP5SvuG+@$#wv-NqwgPf}~$7u+yM>#-zEur^0DeMRHVR@~9X{6+%Gg z-eOhx+l=Ow?}@^iF-xEZ2>{+)T0B6Nr8QMuXP9=^hJi=z@1%=hQ7|!t5cUBkSr~ds zEj8F*6%09aTG=+mYV6>t)=_E?44s5^$T(*psNNGc!C zHAc-W$>xdKC0YLi=Uj*+m9fqyUC-_eme*_;Kk;}p)GaUIVI94?KC$)Jtl+J3u)>9{ z46^zMp&V@>gwUI+qW%*A(=d#hH}Z(pwr{dYX+%mp-g&1!_r%Ko{7VNv^CxuQa;85YE~_?y52oD0GQHJX66+cq_&*WZq5)$DXD5n~+L0GfIYYLj{0E7_5c{wH%#XKK$YCAN;=f;U7L? ziykI!1%!Y3NaHJCmJj_ghs%H!r$?q%mT=4q9b9*~OwlThmi&y?Ip@92E)f|Cu>*Mg z@z%TEb>R1ZAFut{;DLYh?SJ^gh)pW{pn~|7l@*p(+fsM;JKlkx`I+E@AG|Q=uUW5< zkRq9Hji|i@0E{)lRKZr0lR#)#yjvu>fyk&TV0lNkhV)=$CP71Xmb;;i!EcMmeBWQ< z2Rb3I8R~k)tbq(2rB=+yo#wzppM*xU5$(p1S9rO5fujhzhd6&*# z0C4YXqwoFR!!Q5oV}JC=m%Sjh;dTHXeEQW+{o1ZrO(hu1tf_Kma&dS>6==?wHUtp^@BcIwpgzV_AN?Qg&ISO4GI zul{O7s;o43)JD#^2R}BcRcMG!s^51uvK%>0djDn+^g{ zrn&>M*X?HY5V?99nddZNWZ$7yYnX&9noC&VDfjEkC8@$&a2t{Xz;TyWR#sdMQmr)r zs{aoC7Q|TCsG@FiD@>}AKYjX8Wf3O6_BH>%|FKEl$n+?ibd8LGw9aO^d*)kDwf^Lf zmOlE?);;(1-}bhr^O#!JpG=ROZPlbrW-*Tb!9U<%_`C0Suqd+EmDvz7Y_fa!3KG3p>j z*cNTkL8mwOuu(-381SZd1xJsjM~^1__;O=K)wJr`U7C&E@6YGlRk4kw>2W zk&i5a;kEay|MqV`+39q;-MC2ZLP(Why#B*?$cq-bG~}v%KJ?JJ`|i8>>{ z@X|Qm8rLhfO<29nZs>6Yer96g$jer{n$g^{I}?GxiV^wd4`>Q`TW z_~Fhy_w?WX_Dkfl*%3i%5RF%pa)Z8-#ZjZ>;~TnH{)@V@eug$ozF3m3c# z7rhJTy`#s{qsP*t#|-`Z?srV+_Bk70~t020B#T?4;>gq*~zdeWSn*O@Ng7pubJ!m#>Bg}%vMS%!F@MT zNX@;Ko4X+`w_bsBzNvEoEEXWEZVyqEW`_uv-Gh=9LHa8ME5EL4V?25^%A2V5*b2f2 zaN#_=aNf)RotAQ?;FL6KAwcNyUawcqVX**cFcW1}rVC5dsEv&@p(U=0Lji@sHh16M zJA8Qf<3Ikrpa1-~vZcEqfCaZxhvq~;X3;1$aC9DX-=CqOB0AgH87^Juf&`EmPb%6- zlR`c)WQ=#({f#vMB7rah`B0qNE4=P8>rHGu6t_;2?hi|CD$!HM#<_5<1}<2xk~~^w zSBp(bhwfe;T#0)~8xFttrSQ{#$v^$b@aWP1aN)x1^LK3>Rt2UuV;?EY3a@;B z9{nWIx|02^<*}-;aORA7;~QJgeeUwFzX`zFJKufr%a6T2=c$#|OSTSc$M8MjE3B-n zlu3o0O}DwPpuliAuJLP1@^jDy7I^jCB<2tlX?}C!_(-Id3+bUJwc)xM($7%Ztmc zn7*81V0=WbHm0yQvg_N69TD<{CU0_qz?)AGYK=XQEt;R{#g?G~Tky@iKr|bq@qqCp zpf!#bms{sAUj(qZ*0)d2C~qiQ0MtN7QRFs($#eiI6CGi>WrM6!Dg)X1^NllS8fVTl z9(g4G$)Ai*pH}zZZ;l(L3* z1Z>L0)5%li_vo~hUKWCc7KZD-3E_tUC^BskEMPlbfscIl?7#fAlPeeTvp=_?a*Y@5 z6yH_aZUrCH{-r3sMw0D5z(q^Ryh$@yK>lq+7dX0YSkP%NW%m7O6we06c`V-x+5mHHQcDizQC@;H41QJUfB{a0F`S`XmH_zff*Wm zK@eUuH8M6SeVKDn9f|k9e714sFBZ=Hg?D}>K7CsM{LgQG^rKVGZ6{PUI;XJ{U>jMB z@7X8LvfEB&`*&*1FzyQzRk>`Xl%hwPblL6a1MEBkMUVRL{@%H_J$Unb-p$|et4{+k zCZ-OX0#z04HR43K-G?x?m5ETIU7(odgoz}YFp*V%o?eDNa>Pj(WBi6eUatqBY+h|| zEN+c`g_$0MNgZ=8D&w66uaHpg8Kgn>*)Mr_4*7`VPrFBBveY1I12CKmpP>a{;mrTt zIP({cGk=jDJ3c)9GWqX*FZrQUTV9vo{?2?%pvYEAN)-bhr@YwNvuCXh=w8C~$Wfvr z9rTGBnyqEzG~v#apJG_KgP`r}MjjG++rPc|o_8PmU;mfydEW=VV>FOeF^&Dz+?`MI z0g0_Fq3Bex06xYBP1|cHuXeZ|`C)+GK&NWNiF8X;O}ck6<=&%vrtop-qyeA~X%6$UlyN!nY#Zi=GbvSNtMjlK6^!+<$xu{hl*I(UU;RxP64q=v7Q+$w1hk$9{}e{ zsWj5`RwePdgP^H@&RxdFP#j*WIfg`j{=ICl_K{ z$;2II9?e)gjx34R(D%R9S)H-1+dj9}V6lblob$wH{Yx%b0i>JEIXA-?0AI-J1pe_$ zHV${>?Jquc=FgrwdUOat4P!Ml1`)swIDnxUz*-$BEhaP7LY(Ybf8w9%&!y;|v^76u0Ww+ZcmT{Fv z6WSEsbDsCy^MCMxn_l#ys!_HpASGr27kZOX$csfjkG8V@9tL1J{5^> z7+F>h7^PElomEr~b1$PX`6i9D2B4+Yy0Wb~)AwVuuFJjw;5h<&cioBa{j;Y|zw(y< z>!TO`;SWWZdjMiJG_gs6kpw>drAP^${8JYcP7=ZBqjvpzKMcx_F!2tZ`AB1DhS;3F z9mw${OD*fQsESpMy7U|QIi%TjnWUNT^NOXoYg`L#qtboS!ty$BLRz93*rXvE%pg>~ zfi-Gu*Yp_jQ51!0gJZw&O8_4K{9nr?)TyRH_yHB#kc(CZ*+h9 zG%oj`Cyb<^QHGpzovK7nEL+V^G9861v%(hldrN@@8F~5RQG#;7-c2%E9wh3g<%Wl4 z^C~-LJOHrRV5##dCLY zLk|mVWurw~QdpU}C>G|2L9EnRJIlDK;s$s4LS;3t{L<&1digy!f8{IT8-BIN9S^;% zFu{etdA^!(U00VblXEUQg0g``aMrSx{jtFOcJ-=Q04=iuS^-vRUdfFv$$qfKL>K|U z3nBn;&fTy^G(@lvnrKjS*8ajobE&fMiu0_eq&)hVs!S_KBD16+nl0vKZbGL$rU@x{ zOYjy$K`K`M)D@anl2!k3&JCj8W*0!q4_kh?IAlR=g4m!mo5v3WTO4bv8Ei0nQqim}4IK;y zgTVm6U@#aBn*b0j(2qO9OCwMWER{@k)BcKOtJvrCqlQcknN%$qH6H$>3jp5o=9^BQ zJZa?&Pn|jiK(x3@Babh%J4cjED%nc*)mRuS4Cq3--L7j}m6OF=s_WTYjk{*(ajO5a z)mus_ok;|u+q?MWlTY^6m5j{tV#0%=G3#Csv4tl6*qsNlM5LmjuGwneVcRjR%q()` z%n4Im#W3)!pI8~&%3!~&?F$x+>ZD|H_Q`X0UFy^q%fhZ(uwrbj<`pV0PZG4D)^0j_ z`PrNPG!}#wTv<`%(PircdO_F>vaKkTUdE(a2d@D&WB{1Qt%<>?8XyQGqXGQuU+;>8 zx0MwpR#q=@Z|7W}&BXz*)u%BD<>))TW&wul(fMaq%M;t2HAlg?#zGT7JRGovrWt0- z8%)OFFaxlfv-T5qLRj|xo4q;ShPYd>MN{L{kc|d-OMXYi%3P<(d*=IFAB@m9KR;UzL{f#j}&Iz{L2+Tx%}Y|Uq>5*X$;M&B`%A52n@0WrJ= zQUC#KL`kD@H9FI3%oA7i7qh085Q2t%5$wpX>6@!W%Q$7Fp;%;9sex9`*eG8I)@zG~ z8h}UuKuG{-IGkqkGDYqKsfUFSfF8(V(WD z1+!eXP0G@m<3$W^aGJLcz=?2CnLB3ddG-{uxz~`z01RsY8u=;9JU|wDV)Mci>}b&| zWLd88JjTD7E?!)C`soGw_vxn>9(#=c)nA1dFZvfR`WG)Q962&Pax^(|IJxO2edNgS zz3)9z?QCw7vn(um9q|0lk%ItSIU}k1z3wKx=1ito0N{rq#jq0BGd5ZL4qk0u?K8~b zD~7(@+-N#u!WcuGRd55xjI7v@!&O8+12u{S0GI%PDk=Qs(GvwA25(e7$lMFa*rKN{ z8fv+j0+5kx=}2X63q1x~TZopeG6)W5=<#qpDhTW;XK*af2c6}Yo_#C@0wPxW|J%E= z9mkO?dxA^_Z%9>2sk%{%?SW_7Fwkz#!~B)M$bV%F{4hN>U?AtkT}!)NQYuS|%V3f* z50?yuNJ`0EI%_cx>OrOCF7oiM=k8qo?D-2h?y#xycvDUbmAAmOwxP%ZP_TI=D%JHe zStL6A`tRSXU;RE-nE3Di`Ez_0;q&w7*Uz6{|Ni&;eFa8V8t>kvKfX)f{gD3fga5}r z9>#hJF*4baL?jn4mvv1;;|p?`^EzebM41#h417z&XYzsb0=f=@Dj1bN!I31!h))*x zy{qaegi-r`u(ss;*z!VDg^cJ)2tHtIeYYro}lpr09>0|d)T@QQp~jVc2)R_63xfcpa)$kN9sre ze}yb3nrF2~`#i?spL}u6il|9J@U@Dw3Z!u$(@^01|NXQ2?!N#i;Ns%q(pqT=8lK?u z4$qh6^JV#;--4MZD*59d2d;VxNUXg(&WqCQ)yvFKx_ZBZ@<1JK3o$GJTEVeJ0{Be% zCl7ycBYu9|VlLsSttjQa7sXL2UYBPqd@t`qE^`2sW?bgxY}DQ!aTKx7*a~7Umb2yJ zd233h{5R9d<@%!e{)Tdv?Ccz$MzQ-im+%xcgPcy6Edpo3aF?>_N=C^&v!0&Zg8eNPTCw zmm9HwdK+u*1}SvlMtb<{sTMK#fvcN2Wlxr5f9U-ym-U64&S>{Rt*^Lp`Q66Z$6le} z`f5K>@w-Dg!#hN;MA9SvrrRPG{(FA@vR=mKsB0I(-uD~PXBj>XwiKTMUPppT1lad0qC^9gr6wqv0_uC?3M+aWzBFY|+DRyY%L^r~}vn-dcNg;Aop^ z{fnC3_Cdbd6$JZ46Ez|BeXoGU2dO$H~* zB+39d)06A_siXH+w-4bdx$;uq-zEJp-Z`%r-ZA$mVbwUSTt7KNWW?u(2MD^yAEaGb zIBT_9#doc0?l21<+&Cg)#_Iih0AVOjJ=~BrRA}$$e~h{oO8;n?!k;K*!+g5MV621?;&xO&s+G)VW|ev8oq?5dclAIfz_P`XHWHh8SjR-g<+gV@de=_T|y7nZ3aZsjt9W^$t6R^PX$RS z=dAMpM9|&kO1!+*M!V+5&F}MO0Qw08e=uzA={X@W6)6BYdud&1vDFYYQF*}VP&xA$ zT8%ql3pekk523Y?J$n}&IjP_=*_`XB<2_u${dMTO%%}BaWZl+VC-$Aw_#zXSStYth zvMu@?3`pszkk9HcKruEGeqMM;!cx$SS)q-Txx9YXn}8HEO8`q^dAr^2m|#N-)Mx*ZBE;2XomUHR0DtR%TFP1ZT^#|D}+htCZs`9Al zRv@G4bh_JI20JTzPTR{(9%&zoLW6gJf%*DL(7KBmY9Lzy;4Fy;c0@-@`OZRueU`gw zulGSK!c90Zsp8Kq2RR;}aT@#E$va@*{u$WnsKqog)E9wA?fxVpQU8$tS}r%2IRIl= zW@@ta%V$%|CGP@1WdOeY-7mx7tTJ~{_pNjl{PuU>%7?%G<*#A#U45vDCL)D9CYiqL zOXSOADNnTwH@4Qk|M6Y?S74Bb`Q1(JcxjpzC;?1-8e3cJIU|K8S{Gd4a4EWnJsgd+ zb^ih1XUpiT#=>Fa#E5?dJT_q&V$03MEAIg4%v&y***c#n2Ta*+IOjwetu=see)CHJ zxtAUpl*l9;ktkF7TU!W$lHzCnx4-+g^&l-43o@yP;{l2B7Q@6_ZZV4(p>fs1bbcNW zA7p@t7PF<@yg9bJ@bC`-dE`1O<7l!9O`Ek26|)agB-OeU;@^qVj(l^Y88uN!J?6So zrQsbI`&c_On`uuNYs43f$NsU2$WRKUEtgPQYh9}*_{?ZEKhFTTTv_K+gBRdP7$OHj9Y7 z_`00-HT?vaFw2b06J_R~-o6`tsK+qzDF9X|bB7kO6Qt)U{_dDnI2^}H4FU=N?Js`~ z>D@ASx%aJO7*cDt*TAslOxmE@y@KqiCg`X#gm=y2H=ciew!tZW!^U z;_(P8zN=KCmkR_nZlI1uuio#-s5pTLfQ$m5wRXfe72%vQ;2dsz$HpQfr{t(>xh42gLK39Gy71gEB3 z-;<>7jFx;D2F!(qc(}1%z=Gy5Lnqpw-m-!wBFh^YHu3%U-~ZwlzX(Y~W)`t|n-dKY!rN#C*%@6-sgOJgPe-V64QEMW4_DnY;a~QxxC8>TY zf0fsMnC>a#RR8bq7l5~${Q~zv9AN&_pZ*kAIfa5OumiBRKVpT&^7-C}ZFtjKTcGU> zcC+|=U4HZHuMEvs>#emb08&J{TCLXW^?JR2`Rc1@U%l{^d-LYa`}gmUm0VS>$1`n( zeu@@rG{+`hC;Eip|Mr)^hRTLs=4!P`rGU(@jorF9J{4@Gi;Ii!BVJrwuxD0a=G=Rw zCUM&2+!$u&$}Ohz6j<*zy@RG(ty=M!2En!7RRq%0Iu^Kprub-tCGB0APV8=9ES~D8 z;sBz#BUh`H<#MyW+Lf0$%$lF*&KrUo>X@>Fv3dn_<#M(g_(AXU?#8Fn=|A7D(rgJ-02$ESbe}W@x@zt?Y*FhNUv=<*TpQmfOqC_HrW?00TRRZ^c#v7w%n5X?TZY z2AUvPaPczn@5Rh8q{^OC6Yk3rV)UpF#mpu5Kxl-{w;T^KA(OU>QR3fAb$`2&sy-`x zG{Ta1n#A4NdNTc0(zT+NQ807FLZkQNj?<`%#hL@iE1swXnE@bW2lA(ZW=IQ?j5ns9 zsrUZJchmW~G0WwW$fW;#yLuc_?qUd?rI|iDXAD4eDQ?)>p*BON)ZVIMHgob0z5XB? z-Y4ws>o^=nOu)9g7ByqQ_xh+ru|0OsS~22N#mBU;a#u0)z6(eEy@<9%YDVlG0C~9y zPs{07{e3`0A(1C^8T+Ae2&uSz){tQeL^R8lbQH!=8k0P^D*2e#@KBH^XM4E`0~+pA&nfF>3BkLFsCE&`w<@(AC0i~ zfl{9Zp<@nl!TVVTOoyE{{2@l~OF2=`6*OQp|%ThfIfWHX^%| z=dD{Q7CzUFimtBS;9Xvyh|hpo2;#JMT}O`X{#;~%6IRs&<|Tsub!^MThG(W!i?h0! zT=8VPZOkV_t?m-%XlL0<|>6M2cXZggQ0D$VHPbJXq^Bk%d$lC{&N-3a~GKj z)~G$%vHR!K!DCohEzVNVSyHm~@-{xF1FDK+G$K!G?V`R94&78uC$joXY+BSLmv*>Js2QSM^2*eh?;_DLEyLjOM??}WLMla`wA85;F>O64O2x^K`l} z(5u9%jn^DJ$tNO1vv_$! zX}DV?&<+Kcs}y-Utjatv!gPMVTrSOYF2|512YlD1q@tmtEHmLLiuc9W<#aj?zFYkz zb8ze8GhHkeY|D6c4;RkSTI+H}29`^g*WDxD7vv2+TOvxm2f~sN^^oym0k>_v>=v~X zQJFjWvP+bwjVz9+ymxg$>ms+_3ImV4AMx6;pBRrl>-gY{<@44(IpX8uQ3d>%xfzpV z;4`gJx~norn$<$du{R(-$KJw_={44C4d;;FGfH0 zn&>Q@17K`oBVsz8#!sD8BurG&y5mKAAbghXX9>ylAUQO)JFT@a7f}1ZWHbzk-f7u9 zY^6-1j?gtp9uP5SDc$DBG}FOYlnVGE{f{RYGhEMy-bEC$JQA~$#sjlhjONuR zg~zVLsTeJ(keIb5KDkzffFK1uFao)wjP*8go6RoxG9y;X3lABv>9 zxsjfG#$6Y{By0QWuU@^{A7q&y(}5WA$auUgp)}(7JOjYUrEsARW2v0z84;}`^P%%Z zaGf#q3INP}NUgkJu~>9{H#CtKxrxKgeSPJw<2P_RN0U*K3}bV6BpG@Ut_p?&B|28%o!!I?`-6oGs^QoLm`jy;v-Wuv%?&21Ds;wJN5QEHMDsS~3Pe0ZT-(8+V<% zGT*1_DT+bM7tI046_#W|_saC>B1Bof{akxM2F=DR5|KpT7mEcq3AIbx3_To%P;XVa zJOk29*Hd%)hEUuVgW_NMEM9Ui{JL3S>7@;)c&5(nRmGX z;Bu_i+vQ;yK<7~+q7Bh3o@_V-BAtHYVsRm5z=5mP*$5FB=$5}1zDk>2mnuONu|gyT zv0b~frSR+P^_-rr|)`$@!J{ydLHDbhw&j$Yw Z3GHwlNew*`00000NkvXXu0mjf3JQGL((M2M literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/balloonex1.png b/html/includes/jpgraph/docs/html/img/balloonex1.png new file mode 100644 index 0000000000000000000000000000000000000000..13b0fbea28ceabf545275ea24fc90d7e20cc949c GIT binary patch literal 4921 zcmbVQXEdB!+a9C$7LtQt^fJK_{V2&qlnEkY#;6(5A|XZZj37F}5TYbHGZ@iZOq8RG zPV^o#N_1kBch2{&Z>{(H@%?#!JbUeR-FrRHbFb?z`?{lyjdYnAco+Zx0JFZHwg~`0 zkw|{PbU-rlbleRM0B~IDYu`2X$=sgP@LH(_M%XT9n-W?mUT{7ib>MV%O11U9^+UU{ zI^+HjuW=4{T?pMhK=2)otALzj_vO#`IZ`$r0_ZqQ0C&n#OpdjJIU%#ZP9WhFA?A~t zUj9uf00wYI$S^f*$LFmyP*$+Gn z0%m3?>QAq-6zH#?#tAw_9o(`nl{z8KHILYInoHCMP`rHp)z$jN=*h0tlK4WLuoz=2 zN#hX1bSchzDeb@1X8z}ocoub;;Le7((LOq5++VFtJl@EGepYfSUsi;96T#Dgh z%DL^1hSn#h{nTWx2mQ|JYnt)s2K}<_mH}%0D0|o7*Nov^@OTzASj>`3^lQ01-D|fQ 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex1.png b/html/includes/jpgraph/docs/html/img/bargradsmallex1.png new file mode 100644 index 0000000000000000000000000000000000000000..dca5ebd3ce46f718e8a7a9347c61bc2ba65debfb GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^CxCbw2NRGK*%#o)z`(M~)5S5QV$R#Uj(N8nM2>xQ zzq%x7(lddVs%e)Of6?3P-9M>U-|<^$S*AnQCJ*s2-P1EpO3&!8RQo@F*8+hz8-LD_ zl$JANW(iBXRvP;{?ZKKQQ|z|pF`pAY*u(-uN1k8fH89@ofAY+}^1B7epDrw@&nSBS zW8vM@chOhg1%Jw&y*K^7k@4$OItH6#-{%#j$(so(Mf~>pcCps$yC(1dxo@t0bUu9A zU|;d4H7A4b<(_=QZL_bqJg|MO_UH7OzI|%%0(Sh)s(rs}k)7J-xa~Rq8}c{)v$rdX zO;>Q)&?aE9c(P$<^4jo{ZL@9C0w3FLy_S^y_OO-{e{1FD#g`-{@~^)+Qh0yyLLIe; z!**wVQqMJ~7eC7Xl+?7f`hrQ1=I-K%qdChSW#7#AeztZ}zVnC7YW*WJuO)u-U2CiF zy`{RP!?|(C!B6k^9WMK#dH(wuxrcsvBAxTsUT}Vxa$MHN%eSBT^6(*7m{;bB%RkIE@H;E2 z#Mp*iFP*p0;O!jVsP)&`x4-$aulD!SxT95no%eFBJbv8$d3=~0*Zq6<=4ki5eD&+m zuV9q3H{<{V>VK<_~4!+{Fv9Xc) z{DpPu6*2MPIpqge-TKJ7I@dc(Gr~0)XqLztr>3S*4+9Y=VCbMDphUn1F3vV54*?x? zG=(+$`=P=EYnl=!YW=8ec0H@rB@)kJtRKH&*MchViOSqz{tLpm{r^TjWZ&PC`Qh2k zm)v2&UVmk}XNuYEDQ*4Bn-*2@$VN=%RFi8tt9liN`9K>%c5{U(9>g9x)2A|59eo;K z^Hx@F-NFef3qx+YTfHv}Kf8W|)E*_1iqC6253WiV$oUtU_@V2rJK50xbzHPtiX!lA)o$=o9CqT}twLEdRIOe|EN8dd-RXvaCQh$60PG5w@DG$CS38 zO)}BX=od}AUg1*5{3W(-^)uGD8^sihR-IY%dRNbuTCR1d@cbz! zzYMkAYEj(H=I5j4=Xq$d@`{P+E| literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex2.png b/html/includes/jpgraph/docs/html/img/bargradsmallex2.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc796d77e29cbb0adb76cacfcf5269658a728c8 GIT binary patch literal 1703 zcmYjSeN@tC8^*69n3;-JB=e}LNN8y}(`1~+!~A=}S7uJ@uT#i_nmdNv~yj1N&U+?cRb*mwti=HiMkxg%qKU6;=J{KDxC*UwpX zVA&<(v!jC%OYZxj+=IC)Z$C2di#_7B$SBK!^@h(i&-GqEbi|YP&BrChXFfTUUc@H6 zl-4$dofQPm_ez8PXF~}?UpyZEzT4#gGRw6Fv#xiSX|&1Ds@wi1XA0&Y)_rQYpknjG z-`~DCl2$ZAy-8iMXdXh0o7Yd8yFNX%nXrItQJA9s`v-HT>Wy}zO|k4pcu3twZohoB zBmCqGk4D%odZ15gkyaHV-91w!c1}6>V0<9v2LmieJZWwTkX0T|Nh z)zuou@qlRPDR*J_V`vV!D0f?H%Bp%Xs2xC#&(B}qH(j!akr_sjfr{cOzV-l>F(A9K z!jfb%&1Zy}jMHgMEP}+Lwf;sTD*4Ga@4$^Y_}E7>oH9?MD^|D~F-W2c#`CT3lxuuG zAOp6A#0;Fo#j?g~tn-9OnNGZZQ!YsMGKIRg&)A`autnMHmOG!_Y7E^%SSLwJbS_k@ z&TLR7VU^AD-0u*~r3NRg1o!;CRuHyd-e})($D9Ca;qCNPL!=ZE51RZD1)M&TVG{5> z!HhV6_AQ8*NWbi9>(54OO#nEOseHxPmY4%ev0nl?#y~~6qS@`kGyJ1jqtoO^&gOUT zsOv;)M;yhvm9_eVKxv#zRzxfcj&vfdT)aP=ftRqpi|3uSz6}>4?ppJLJd}g-Upt#^ z?U>E<0fbnD@DO)XEAFn83urZ?JZPU75}8X^B+&y{k?Q$}a5==^AQvGXaFEPZ8lHlpzVTSbD3HoL3e}A~?fU5BTijb^&(cZFCz|Xi zwGh_$UQ$rJ%HuxM`29sxNxivdm@*&6(K$_tH9@TkfLyhGpR$eXL zZE99mMo)V-CU}ytYk9lp(Dqd#J=9&3@wwwb1eSOcoTdSR6IWYik5A>2$A3~eqEoWJ z9eT>-jnWuIh3MiuWCx#3`+?-RlR6dd;;|QPbxHN68SgCc`Ty>Gy6kRu=Blcb6BcAa zI^+VHnXBkSyaISFFM&Ph`ZOw49^T?mt{hYSNUwSmua38+(Q6lMC?Gl_#mnTp1hQ*U zX{9Ed1ocS4(vVfjYX|l?T*{unu?{9P&0mU-q}r^m2PQ30=Wv zUh!s2q9JvRdulnMLU%UarrmR5Mq&(FqXW|PPYL^<>f|i%CuDP)e#8(Jt9E%f1oYHJ zSFNe+r0)_Y^=nWBSt)Ly_{X<(DMaD<8ANMccAUbP}@>BDB>mw6tDk} j|G)AMi;vzxu-M!yESuQoTm2jK0m0&8cg8eDXB_(zYgjYX literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex3.png b/html/includes/jpgraph/docs/html/img/bargradsmallex3.png new file mode 100644 index 0000000000000000000000000000000000000000..34dcfa3d4977c75ccc6c09c7d33521e18d3f64f0 GIT binary patch literal 1646 zcmY*aeK?bA7?+Hh2yMQ<;)-F4tCO!}z6uGuT$xuo%tlc%qFVE<;h2t2`RFJ|EuwhU zrVz(wxYp!4eH^l`b80@8>_n^iY%!d7tLuFH@jmw-_wRo0-|u%n&-;|(!UDAsCI}T3 z746`lfCwlKLSHpp6ExGV&LWIBVtHmp^ z5ks*rX`KbFRvMQwxHM8w+o5aui$ycsc>T{o>n4=ZqR0i5GWe z@qJckL_I^aL3+X0FnQ*a$`Iv}3r%{)Y^3Z-pyrpP`DsbuLgHA=OS$7LOPD1-%PJ%9 zyqEee{6J#`y~?#)uJr&jwu)xQRwmCmF6lipe54;=zi1`MjtVm#l8dOGvlaVFnWkCz zq!e`RRAce^wsBJSCB0Lii@c(vN?&Pz+FiGbkI``&W&rlV3yUc~F_$jn-@5M> zx-|pTEb|s#7Ys`6HeBiC(z-^8UkOoYBTh?+qn>WjV9hVg9i5&Dw+a>f+QvGSmHI#T5Z2BgA`?+$|M)(nr5j&5B zQWWWsw~%8yWnqRW)rv-)G~?GYoS!|Lt9>qRvUy#%D{h@~UzEN6j*W=&#$tDGG|k~C z?AYB=7oRx0@03%u$z*c5qm&PTZ>961B*DAk<=7}SUIY%~h!F$k6Al8#U@MTbT4{u? z)-yw(Kmd=!z<6ziM0<2K3K`PppbC5}l z?qlG5S>R0op~PZ@c9K+Pn!Eq9^Y6waest?|}O7Byl{!Z<@r%1LNxI&K{XLgfAoJ{dI)bh|Nw-+uG?WH_w&Y7N> z%&w!L0k1d`#sOMulSu>3s@PMq87)YTEIGp*q0Img*(~YFW*-((Mw|>pLkib_%r!$? zSL?M%L#OCNNgE`(8miJTNBqH@(O$>k2+%IQ3UC_w@I;g3rhokGL|G9Q&_ae3+;Gia zg3)ht!%a*2ZTk$huzm#)myzk5g@=%31z7$}2KobM>lS6b*NCRjMV35p|E^!OUFPT1 z$+FQ=+|O9mdv2iUb4;NdSZrX8?BL)jo?kk6k!NXC%hSf+fu4q7t0{iO3h>C&AeX(x zCGAg*WAxm?I(T)ZUhQ2gE3#xTm(F9P<~rC@Y;zQ1$&Qunh~Fbi-aNj08weoebOoXv zm_TVkUhIh^@FFJ4V4O|cUPod6`fc*nW=H`Z1IztWI%??7SLTk}0^j^e5i+TszL44% zW{1HNLq;^qA)QSp!^KJ;ZIFtBCT&Qy7%ISaZHk>&wxs4;GPoWJ8)bS31&4e?Z z&%W8fR1CEk(gdBXb;#@B6NTC>2>JhH){-EMI_J18#X>Ro{-`*G(@JwP6!vo62qGWU zNu%Ntjn-8<%wp1c%NI8si)il-U7bfYqPZ0&uOA{*SA)*gwO#bT)~q~F46x?bm=hj6 z2ubR>hZ=h;{yg4svKGedke5uZ$vT#osDc44sj0JN2x}#myU$*gO0bq(*@36#vg5@L z@2|h1C!P)pD);Zh1+@fu*OLDEqjqrM->c0}7LMLu^JHaF9ubA>Y5FF`z00$k{3tj5 zw-Y*2eaoE)G>s!HUDr^Z!M*vFa(4gbRvqAcW_Q!AsgXC*QHYI){Ri5=u9OgfP_HY2Z5ohkIl15R3-Vv4H M{b2$3{0N1A1C5{ukpKVy literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex4.png b/html/includes/jpgraph/docs/html/img/bargradsmallex4.png new file mode 100644 index 0000000000000000000000000000000000000000..af12eee3b67a92c31ef5dbdfe02200f5b66f121f GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^CxCbw2NRGK*%#o)z`&C0>EaktG3V`F!=l>;0y=wIYzaZy zZ44Z5oH%OlU)N*y?KHHzvW_uVDPn>G3{|X&b(nWu!kOd#ueu$ERT&fHr0!P!yYSTP zxmoGYDNk=bTQ&F2v#VU<`%=%FiLJ3*EdMLJXT2d`eBZarKb;TP+3qj?vgTrN-nI>` ztz71-T33Gf6#g^%etNGVce8thOq4--@@H77@F%ZxLZ@Aym)JM}Vt<#f4iY5pg# zmfm}2BC*DDa<$&uK=sqpr)|3GwBgO~$J=bDoBr{Ud%PiAExLEj#!DX$w_g3odn!+N z%MPdb1HU(Z(vg4dB$S+!awLkE(I_jim$jWkOa+M6WUu+LGb42=KX>qkq#oya=kl40 zXK*PdN^ShLZ@W+H$43(9KUVD7x#{cPJ%7UXANlwr_^(jV`}gmU{g15B`t#$5!M+Xt zvEMJqe!H7kZ}DdL;eFONCGCGNUrxUM_y4EQ|NcJzEBXKb@$dHM&!6AA|LE=;%|}Bx zIGb2ICuQp-B-r-3&YRG>Qb34>8y&UY|Ge+^+e^J`=bIdv%f;SpqnN1G!g8<)4Y?dE z)Vb%vwY$eJ;}eVZ2_O$hJgQw&{rO*wV*}CV2 zrkva-@NCo5wyV5fqr2|h+_0-DNOWE8x)0s)hptpsK8$L8Djk;Gli7RJi(Bm4zC$I= zQ^k5L`dB;nBpAjV>=4B8J}^K`);Kk_g?bo>IyEIYqM=0}QlB=c?Ec%meedBzCZdy6 zo}98?T3otgRb6Z7bJ>OGPIHG!h3QUC_*&e0&f012bn#UtYm5{R^{u|)tn|CUIYF1d zd5>82fez*OSbPWaHpp_cc!}4DSp5C5^^-k^)_mF*uwjFmUJGaEo;0patc$^<^3|P( zESCpc%ys$^{Vnx8_m8bVR=oanNKDH_OH!vw&)~s&Cyxkwk(3>I`iF&d)+mRa5?k36 zcnlb23CE>i0no}nVcOH5=UJc6{}#R1X8*xYHSbRRT>iI8~FpF=8t>`oVt(aUhN zm&zBl($~LYcSj((L`o+os%Ija_gJ_Ol>K2YnepeUu!p4xu>4{0boFyt=akR{0M8&D AVE_OC literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex5.png b/html/includes/jpgraph/docs/html/img/bargradsmallex5.png new file mode 100644 index 0000000000000000000000000000000000000000..fdea0ccfa0fd0420924b77d45e7fc2df7901f366 GIT binary patch literal 1278 zcmeAS@N?(olHy`uVBq!ia0vp^CxCbw2NRGK*%#o)z`%0U)5S5QV$R#Uj(N8nM2>x2 zxN1s?b3osOm?Se>ulJXBf6=)4L&&9TO6(Gj8zzxUxmQn1J^bO=yz_N!|NUbFIKCaO zsbD*NSdoEgwSZG-Xz}#MZlUBqX63v)d|0@J;OPEw{YRR|1P+~Fm8DmbmvzOwbY0H< zEAh`(x_*5>Y2Diwrpu?zjF`Uk$H`L`yAHUtrg!_>Ox?-F@_LG2p}(Qs(HnoZf3CP? zZrZ=UHuZVj+}%8v@7?+9s(Q^dXYW}jq4nF>7zqj0PrLDnb!FS3e`&uWLnD9BIMS`7 z65n)GG$#D7%elB?EL<$BIU5bFIOkgEWe3kIEy=e{3w#?}z4GX^Dy>%M#9J31I_%vQ zl$|NQeqGHBm)6TUKRcVQ+RQj2ljQj4dd|v#Um9v$VgK)XZ8m=IFQ=dO=C$^Zm}|35 zK6d$DUod;y^)$P_(pRxTpVyy=vMLs2`THkSRHypxVY$S2b25E=PML-~M{{ZB_B+o&PWH zeD+3&Z}<7b|B}D|E4)!F^KJg_@B7c1uGjzF-rmkB*V<VYn+;MNsq6Q4>j9sE#4e{?S1p=HtrvD z_gpQlOym@mn#v<)E1vOToq*6adDhHxw@>GBie0k}o2whdy0~ZIgph-Mmav%Rl2_0@ z{rNWQ^Znnft1Ii8pZ?se3}nAvXtUgT;ox#rkB~F#ZGA58u=n)*)i%qk z*SLO|vkFvh7}rU+Ch$J73Eiw5;cVeQwf(#8>IX$mmv5Tf(<+IJn*sEE&&A9Q8!`;t gFrt>>^hf^h;)kj&J}g)ZEY}!3UHx3vIVCg!0A*@6xBvhE literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bargradsmallex6.png b/html/includes/jpgraph/docs/html/img/bargradsmallex6.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbf619ece6f2fdeef8f58771f1bd9be5485ec3b GIT binary patch literal 1649 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 SyEX`X@&b@E-Y!jGM8EaktG3V`F!@S3CBF8=k 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bartutex3.png b/html/includes/jpgraph/docs/html/img/bartutex3.png new file mode 100644 index 0000000000000000000000000000000000000000..e9238904d4b20a5ae44dacbe1165648e738e85c9 GIT binary patch literal 2601 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bartutex4.png b/html/includes/jpgraph/docs/html/img/bartutex4.png new file mode 100644 index 0000000000000000000000000000000000000000..05bd7cc4869e5b0f00f771e5fc4353f1fef4d640 GIT binary patch literal 2385 zcmZWrdpHwp8y^*$Lt7EUTUz9tx0FN8am!M>s&?d^PSkXTU?8Vr?P&fx+LWs*N{~-TDp;GujZ}YQm|WT!WTl4s zoK8>o2M9F>KMnfm1VVP|uYa!c8l~^5ueg|G^_HD~as{g zsLOXFjLzPT;M4Vs|QX?PNb9}Isxa_&P8>-_e-RbI!+?Mx`*j_DrwQZV$i zyK1xrDIVaT+Sp5v&B9FD{yTAg;z%bMw$z?DFX0{~^AeAX%2`lwx#!liG~MPm6g#&? zxp1L2+>ksAB3r0V?ZPM|Js%hwyq{p;eQxz}{P_B9R1SEC+C)Q1Yt&3Wd67G6d`J{# zu45VjKD|1b|4dSA{Zv^vw`Ot@C!{9A^jyCx>e7ob@B^WJ>vlJKk$T!PV`OHZt;075 zAx~pq-b^)QM1*wgmlF>K#vw!zh|zH%Y_Ba)><|J--hr^pgovO08$tIerNg%(7fmDq zcIdI^FPQxVKZ}MRe>9i35H2#RljeuurYU=fML{l?OJ<}OR~9FG7PyzdSGabAv=12(?S$>;4r99inQk)$eOk0gnPsx{QqNRY*2-Rt~`{{A~P zE*c~VcgtRvD-bvI85@`A`GWQ-qq%}`l(K%#S7kxl)sNW^G+PNg-#+uixHzsV7xz*! z{dg+)CHt~;qWh!HhG#nvnOcw1L9bTFPJS~C4>Fj>l;&BJAZlGRUT@(?FnP2Lugb2l z7ViDZ?G!irjP3W9^UFBwHtje>Ijy-cfzC3IDzJ#BGWsrm?_wf(imG=fnl!4?VxU>H z!X>o@Z1WzG(v83mE`rzD7hWbDRaMBx4MAe*-m(03{WzYWEYLbQFY>X8b%>en{=AfB zBB#p?ws7#aAQLhUP+Q5j1;bu-rOZSf48zjXd%u*LR*Ha`YGl}I$8$d#gefWcUlIIJCs{;|5Oi}x9lHZt%`*f)Oa{^#qI;ILGDz_U^<^Q85> z+Va_LDoRhycYG~zUb1z3Uh@&JzUJ5vf}tx#wF5jHtiQ+N=A-#R`ck9W8Xchj09vYm z`167~#I9B8FcAvd+WHT+oxgG|7S3wATaXLb3x=8AOnB30pr~7@83+txTNNei=FaL! zoiUrGh_#m2Id$&IuGia$@i|0FGt;W}SX(@6B1QIjuDNwQHY*tfBb0HWlrgQ}xLo!= z0Y!yKbYhfSM1yH?6;n9OF=Cmxe5!7xLMS8G0w@~DQ=Xe`w3Vbn9`}(nS>1Gl_bS>R z{u>om8OLC}iRf?T+!RM(e{jp4z)xtUx$D_wRa0!sqc9ob&RtR6mwU?0U@~`*^oF-% z#SCGaZTK7rJJ?hvAv(p;FqPq!fVP(S=l+yKC|fQod<9-cgg6s@tU~=aU;b;^{1H&g zOb`}uD2@LABl>M2Qx6BVsF+ca_!on~dvm_t=Yagmp^hkhsS6Y`E2<*1UJFnaqDjCl z#YuM~`)Hi{Pl?c{=0hxJ3q|B`XJm4{mZv&clX~qrJPtwkC!CGkC?Gr-ki%A-w zq%?-y!V~sahRWNyVG$He&z3Ka@r!<05h}`9kX(8%A(IQWR_neIiTYhEA_Wwyt#D_Y z70|6ct6%%zAKO|f5DCc7o_?VbK^C{JTR=M@$Y}3x#TrcX??Q7Ql2*%@l=yB*J7&Bg zTY%jswHGbQ-7tX35FAR^vK|-1VVMEqcVlK2Ke7~sJ$4fXp8l~_5kqtR#T<|Z=`|)A z0e!ty55w*-Gx4o5zuMLw$Sy)x(OrOB9@vN=KkKAUJ>yF{0=ML~kq#1}T++`$FR|r( zS3;bdGa-n`vC^YrOoIH)P4D_IO^sT;<(qS~<61VYZo3^o<{xca=hdX?j;fELfUwmu z^)c(sY?YNY^k|l5-bRB+{}IO|joy6jQpdZev55IbS@n>eh)*<2l=y?OfpJsse>2czRv6dO*U3k{)>ODdp@(tv3kvwS0C-T{A?-?)CCE0y z?rx+Q*>DO(y(VtQ4l!{MPqsNP_dms^=#dU=A2dEDw%2#ICJe`B@B=HJw_UlA3xfhpEdPo2&o97w;x z%Bi)apItjrc5bkSX;cPe}p zp3Ft$S62&a)5~~eBiBdR0|~&!g3{RwCGyX9D%afdlnq@T*2r{iSjBmp&*NPep5$nh zhtkrn-|H<7LxppO%?kNV(UJ$hQ5#e(>&jc&z@;I^U2^PkeHC9(d|i3Qi>I_oEcmz< zo*Sc5vyN;`frfzp1MyXWVe|k1 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bartutex5.png b/html/includes/jpgraph/docs/html/img/bartutex5.png new file mode 100644 index 0000000000000000000000000000000000000000..8581b5f1853ddaf62b41b99f82ad7e70b1ce7f75 GIT binary patch literal 2294 zcmZ`*XH*kd77jI`2SE%Vl86*3A})eX1R=CV0)b#*s1j-nO{5sQB=nUmL-kA|?$WNuH0?BqHR@*7kETey-!~-eVxMRsry@;8np7t|cWUdnAtvY%4pcv>(v* zbFR6>C3eLvqu(MbSPIqX!k?t3ebxHs z>R_iJ)-G~9i0Q_{%how`CAeMaEX=irM)TnTwoGzYLJu0~GxlRs!O6Q)&W9Z02?P(? z#0YmL!h;)>AGXGpc59B#wz7&}i;5huDm1D=qi2Bf!;*UN){R@_O==t4wzH&XNjW#z zk$sFw6i-w+ayh8&WF#-!10*obB|-DUz3~K8eviNkTW}LB<_O(AEowP-BSzH z$=NrJV^S08$D6pd!CtB0pu^(j<9_JvH^hK z=>}}zNn1z94ma!wqUb{-?tU!Dj1eLWR=kc8Zu%@B_F9G?Lj;3WhzSswVE6AG)km;5iHPi)BvrF+NkMlQ_EsA9j4+@P~{?WrkhC-n$= z-=Yuw($E>A9}^?sSZ30uNzpjc&U!W^a=@=GwfpS-a@yXWU+nU%G7X0tNqqRwvItcR zf@y}9T!0xrJd6M}*rwp)Hn&z*N*Bo@ux=)RL56le(-)7zZL)7RbU4w~$h#2Q`f|rj9(cb|nCA0TiN_0!$?x6RZ zzQ;vwM6gc(yvs*;W91o(WWW0U8}#kkYt!qJd^Op!i%V4eXnh^LVnGBqLmclClA_6p#(kzMacv2X;)_hwG$! z(Bj@|wPmTeXFP}<-z{I;)e)TuP=n9r$^{%ol;SK?PdQfCL}(M?j{g0 zH>Z3>&1N`C-f~;c;y^7j_ue{M@32t!iI6_=VcAufAxtovCD|gM`Daz;I6gEIGwbnmJNmqp%HbPkW0bJAmU{eXjgji3|~{Jc$4rprq#v; zD67XEXPRd^{;=27Ex%vL6L3dE!t*9`)=nrtj}HT>?w55hy?RYH)i1=ZS<&DC$oyl` zf0?L3nucN=0uA4hHaoK{#NSAq)`0dVo=kv<(E*t6HT-U}zk&Z;>A(C(0H25~G#s!I zw!Hd<(KT^btk@-^v^mOT-zkG1{1@siILEXs3Fpwg?^v#6lO8C6a{vwKyMWbr;TfER z`QDH49ZIEZMq)~!fNFr6?`|aTyZonp$1AfJa|e7-n|K9gsY$Y@@~&4s6gl!0V9@L( z{Kq5^j@{Cg{6btIOCuH_5vAxvUiy}(cRH3iS4=_Cy^mH7KzJPS`kdMT6^B-wSNGln z5Jpo%Fna(mFU$`ZUO~+6Zt=g@5Ln@e)B)5m@o50 zSp{2iN%fLS{@%!>fd5Bkl$d9ERp#mRcKb`mo6z}H?-3wZyBhEc&$Z|raO+czYqFAI zy~f093%+Cd>hpavJE+4(H+M9)&HawvXw)8Wh3)85rG??6y8C z^Ek-K_HLr{d`oM0pcx&0i#)y&DlxAwO&CGXQG~JM&t^)kIOze*hvrDS!X~ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/bartutex6.png b/html/includes/jpgraph/docs/html/img/bartutex6.png new file mode 100644 index 0000000000000000000000000000000000000000..470b6589c0012d213df14a879f16d9b27d15a75a GIT binary patch literal 2235 zcmZ`*XHXN^77o&qNF)S=NHr>gtUy3S1Sy6lU_eonl|-tAY9v%)fk31f5DNlocBLo? z(xpR)A_-C!L==J;LRqOHks4~)sBh-!%zJ zuy6zbgboVqx4>Bi{od*$g@nHdt?K6ygOrlr{Tam`(@x$lQ%=|<3T2I zy~_}CC((XC>x06n;(MxDHy23`iM#^H4QHq>)71_rpCTONxyj!g+*;^GO7PaPXLk(; z=6QqDH&hG60SVA;9z-Z~{b>mRceJ#$l>dZS7Q7I?(fj&PXg#Y7=@RGUb7le|VU<&4 z0!ez!sJfiJzNswP;Jx!)8>^ZNcO4~vjiPpQJ$zMqWlH8VMw=SD*6Gh?8dWjU(H(g; z4+GHD2QHD6+VK*K_VOh7abgvvlyVV+_pi!#YJVQdV;#@93d;8ed*GtsIjOYX(xI$7 zDVtg)b#qE8+L(jU#q$S3s*t`$;3iC;hHEWvWRAYXl-MEX4Pv^OpwEmZaI+p=nx$-* z@2bJ_ul!L?(@(qTw?Pk{f*~aQf}VZ4;TXm;kFSy_v#z_&Z0KgIY6J3pKCPX~A zSC7)zxMF80iP(W-RJ}84K|D1ACt|O=iB(?}-rfWIj^|!t3>+cS0z~Y#0t)G%fQeEl zv!X?hO*-U0=8dQ${Iia9g1`Olqau#*AnUj%rVVV(A*SSRw*eT(XKggHi9&gBUhLHB z%F5fpGCiWIQkPqRJh{u@_Oync&v~ttouaqAqBld?Aq}$^sEcIWocIS$Hb|m#_z^$i z#P0)HM)IajgzVG1u@CHIe76g=7^qojIyj^lJRwV=&MwYQlvZsmaZRIDe!rhCg-R5K zjL-c&HXG7g-A06Z-~s>GKu6EZTwa?)h?^Cw$f>Vh{qy*{)Sk}Zi)&30dx_X?HS z2A1(x%G&YGbJ;#4OCdtV_hd8!6b|b7%~T(7Y5qjb!O0cW?hDphu*ry+)po`FZR(A| z;IB(Zf1w3#1jBqY6FBM`wp(i?;p*jykb_6~60&(|(#ceOSf5_wh~0i0M4=3|}u z5Q`<dE zA`)Pm7LPQU@kGJhGTw8Zo34%SX?>@Dr)!vu)A8E}J<)RX=b8Dn)=a1vR1j#E%u)Zp zcnC(0j*%($gpoKpax@S!$&!^x+6Fz;KrqT>dTN0eAP-4aijM&tAG|!HYPj^bGa*Rs)E6Zi<`pl8nTD;y{(6nb~R>35B6q zsn{zv6F9Qzto6ro<@jdukmzwS~^>&fiY%txq2!D1qZ0I&EJ0Onpp3pb!`EJ3=+s4 zprgzu;b(?H#zbg-=(5@(6y-dfg*8-05X)cI*tL!sB6jCp12s&&3R;kS{dy6hXgK}d zyemlE1Knv!7`qhuS1LC+l-1q8bt_iA(Chn=$L!7*jFv#{eyaY55cakB`(Cx>$+fze z1Ix3xq_N_Hk4j$#2F-Fb5Pp$bx8@wCr-!H6=3%$$)SEUp4sYd`0FlXYOJkr-wc7#5 z{-_*?+!hYQ>!Eu)I!IItedL=s8^W%BkdV%J4xpv5lGte}^z_9?B~^mio-Tp+hv=S^ zZI+jt`HcxE!?N|z5j-PfFK#70UOeNW;M)2Q5oa0&3-E9xFXnIe?!I0F4O^uN|{5t=6Ww-_vb3H%s zB~#|T^bSAObK-qR*T}fs_v75_;Z&+)TSLgB+EQsH#w<)jX)s-q-J_XpMCBPF1CnMH zpxhU@1zKVK{rMKk${?K@b@6kCyFXe+nL&fKr_P2;7Hy{9Q0VypJnmpnb~A6%nu5mU z07{Amq4WM&ka!=a1|iZF`=5tj4<{viM?P-Ke& literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/boxstockex1.png b/html/includes/jpgraph/docs/html/img/boxstockex1.png new file mode 100644 index 0000000000000000000000000000000000000000..a10eb363fbc2bcd0be6cbbfc5ecfa1f96b4102ec GIT binary patch literal 2103 zcmZ9OeK^zWAICY8F|uszw3wCw~JeBf8~TGVaTWH?p5ih%wC*Q&e$#yIXt4$HTT z=*W;QDg+^nAS8bTfI|W$t?m%~fv?H?^zKGe7vCl-T11a(P8{~KOce{L;f$LEXhPh@ zvusz4MSF$i^^Y)obHOxY-o#^dzgJ$fYdU0#Z<#jQ*}rnc{ox~4ncS$Wmu;3{G}@MK zflmH3vRDD77_U8K!l)s`v%s!-4z##G49{Pqu%rG1>=oW*YQ%O<5>0uFg@y)5@BO%3 zh2Wfs_RjT=M@&gwI4n@S$9#9>m!xF5b77`G6*tmTCL%g!ryFKE`M?A9#GzV=QA!Q@ z_Alisu|htiA>`nK0xA8pFa>wb+*&LYJH15);_H-JPX3z# z_cMYV-6u;dsVkc~e%;i#wH7@6%iD9%e?n7)Y*9l1pd?V}wBD5zc^!o!OzO4IsgY5} z1M>^jx1#{&L6g^GZ%jUpiz6zS8|@8!#)TIP*+kV~MXY3As5(?c-a{ISFJdRIc07vF z=L|&HGOT;1^tZeOwQz!IJC*Xum(=kVYWZ3z=XW6BJ79_=$2JlO1%Qyhv!esFHgoAs z44hCFaExLXTXjuHX+mcCq_98k zE%$1;mcoq@xq!C77G0MNn@@%?t0P^;Bb^GDj03;A$Q?vqiCmN~1(LFK5^fiV*(BJ+ zAiqkDK}Hb9R`>+v7^D}0zA+G>H+=s;C!~5r&93mfRdnXCvQ>2xzwd!qzx-u47<^Oc ziC6bbH;6lNLD17W&}#5>WFa~g;YKMwB^d0v^sQ3ILj!UHV$VmKOjTl0+{n;m$#LS= z_a(*N#6?ya%|GgB1Kp^eRR-dcK}q-Mv35W~$>5oCRVRSzi;rje4&&7~{FDOmx!ZWe z-x^O`d(xPq6|_Wso0du=N@n6MfZ7c&qiTJ>PyD99SsgUha~9b|n;$rYW4`_2R>vDK zxZp#dcd}y~0`7VzJ}pb%P0+(}*Oc0EdJW+=vFyO94DO&>vSv7Q&)&3tnVZ0@7q71R zjJf)HP9=6#Tz*A8xYX8r@Keqa;F7XAqq4S5tH_KVcPlh##tj?iDq?D5p3 z``U;rO;j=(ul_m+IMTQcU*k2#OSm3x$HH|CZbye@=**pA+L*hv=lB-ddo*?K(FQjD zgJ7n%+BVO2E5hWlUl}I$v==-yFBxNT7AZ%Ot-YoQAuI7gTqy+Kq{{PYJ^r{_B4*|O zGd=>aQw687zVtbIXcD_WqC~78T4zoYf#*bC+pRXFrfQicBc=3u%wAI*qE$E75sYf8 zYj)!@=8etAx3 zZOL6!MhtS2nzqCq9P*=gv&x1#e(P`ap|!=6FE%jP*c&m(pFNYUXHnd_UD6ah+ojMF zVWq6HtOE`bp+}~ioF~`rf0xB3W*XkZrKc=UjxIN}+{2=Oj6tg2Wd~9!Ym0$Z-MuQw zm@Aplx|WbX?O!*VtC?;dl^XvJiE#-3)rG-O6u}Of^H=sq6#T$=`BTgtKkHGVd%o2N z!?sNQhOOzdd5mMTAW!B%;r!mBurJ`l6ySE4aoL)Dy-(>M{!0#b-$SUc3qH>)D_{-^ zoSl9xZ}jcD-~gC9*IbYxO?|UH1q>)YpfD#Y@9YbS%?JzkI8Weqx>R0O42XHjTYm0n z_#C-W#S^CZ3|T=BYujbd7!{j--WaAZ?fHCEIGb*5{SI|Pa6tS(3<}P?CXH4g4iinC zBa^*L+8o}0nC}!B;2YMnKrP43ptK{W+2XjhNI*cgmfDF?dwvn4X$4(I$-%BCZqrnY z&8P`)e0|aHFlD8=d!Lriz10=oAo?;^r2llYhyS~md^K67Xo#5k=2L}6MLt#fLm=aH L*wwKH;h*$3O(^n+ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/builtinplotmarksex1.png b/html/includes/jpgraph/docs/html/img/builtinplotmarksex1.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f02c06f7f48f446d2bc8a683f374379124b3b4 GIT binary patch literal 8496 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 KU>-z3@P7a>QP8je literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/canvas_jpgarchex.png b/html/includes/jpgraph/docs/html/img/canvas_jpgarchex.png new file mode 100644 index 0000000000000000000000000000000000000000..0b38633892aa2e002719bdea734eca6fc418c311 GIT binary patch literal 56434 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/canvasex02.png b/html/includes/jpgraph/docs/html/img/canvasex02.png new file mode 100644 index 0000000000000000000000000000000000000000..369b11f5542527a1e8f5e4950f2859d769d34db5 GIT binary patch literal 2113 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/canvasex04.png b/html/includes/jpgraph/docs/html/img/canvasex04.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7a30c55dd84d2ddcc5e94052144213e691cc6c GIT binary patch literal 1180 zcmV;N1Y`S&P)uYl3`XrKjyi;6&|D)N*7L&&czVN&EKBnDDwPULXr=v-g{`!A08kJ@NN--=KQ0S% zD8LRIc`omJ)9(PZvB_A_3s7)b-vPY<1sky<&-*vYE&_3gSvBi37^C&}xPa{URfK(F3Ptqx>SF9Nar)l2m0#cyo>>a*Np zvnoBJIk)~a{=RgpQl1$TG{042kK2t_u}m>`bZxoSB$lWOJ(I(jC5)?t7>H=jSX$=6 z$WgR%MpRBDZD1;tH7{J#wuFL<0m<`44TBM+$tH0 z#+WrS@l+^3CCHEPm{zgEGpLyjuSi#X5bPC(XAr r@2HEy+ObHX>1@-!r(ls4X&k zAyM%|+UUnPex}+9EkY?4Cr#a|TIRus&e>3_SP_HG&{ohbRs?zp#DZ86=p_m}Vnsgd zrK`Y-C@izAi4{Ti8jek|BG79fmc@!duOZB`2^~TRA$W}i)+fC4L%!U7If-f(u_DM= zY|JGVU;|=-E>(Iw10D+7YD|2HweFE8DatJyav(&zkhKc39ukhp5s({oboB?9BXPsA{LX%$d zla}T;54TuU$p)!QIIPPJs!iPb5)*mO%~R3$Kp)pgFY+8U~wDOcWC zNJ|gW;;Di|EQS)>&V(o@k~X@F#rDC?f?E<|AOcfi!q{;&WR>eJ7V|n2K@~r0bZuGX zkg;~)A7gV?ISJhj5{V1%1KB1M6zZfRO@eRq*uq4_aSXkGc+r|u1+Yq3k?}dE5frE#L|sey&#qa1nSkdyMejPnxVit zK~(L9jAacW*{gd$7F*JqJYB6Ap1n94{TSSWRl5w-3sa$ehD?r3t;t=J7SdG?%-M^t z=e?6#u&M|)y;%R5g4``wRR@D!+%*=>rL6>foHjt$+G{}Z-hOE-Bq~BW={4+AVO{D% zqUr>>UL%(q(my7>X9cdB%m$%eYq8GzO}nrx@1yV5lIaup!<&$0aj&sRPJR)>7D#LV z3_wpDi}ZU5!o&j7sMQN%fegy^8sE4BZ1DB7sLXs?CJ%v01Yd>{sDf`dWmh;^}PT9002ovPDHLkV1fz*-!R+& literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/canvasex05.png b/html/includes/jpgraph/docs/html/img/canvasex05.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5590303f5617010cb696e31c2fa75b92c6cdeb GIT binary patch literal 1641 zcmeH|`CHNl9LMp%EAQr!rk09N-jx^2Y2uM#iASXjQooj|sjRec8KQ;PijHLqyh> z3WA!X=1O#VOic~>dQh72u$kJNE&&g4xINFF{So`+^Zp#q=a<*>Ic|ia0<|tf>`6;R0%s$=VI=%R7%a3#&%(fPQb7} z_-8q8_Z=U$w`_NXjuPbpQd2jVX(-uXr-HdUxY#kd4hug_oO)7W0Us1_O3L?P?LAjF z#zoREI2^W0GMK?;KboI^Hos&`vJ|O<^zM{TMRiLv?7KB;8dEN4!Jlx=?mw13Ea8g0 z&4aoTEtstAArfJ6C!P5fadAbOzPh=!@_QdR`lMZgXo4;*>e81pQW{UtWOQ7nd8AuC znn5`n)(qrjyJry>S}^PA)Jn{Y2z<7a|D*}MVT_R<&v7gz@y1@S2OVx`%Zq->Qc0Zn zRoz~A^`eNI#J3Ibw7)KDwN7E`F&L^Pd(l3(xT^I-sntWL5V+Eu)s9}fn{8;^KvZG| zF0{WI@RCrdb^7C)gQ!g8giMVq)2O5~I3?cIMfF_?0)sgI>`%Ge-Z4ojEg_p{ckarv zyB~VuBjn}X^F=3=lA8+-L0#7bkFy`Tc&R4aU`KAta@;ls zBeGwa6eK-Q}~ zagAmKNC^d#W{=|Dee{m@4C1`2=%i<{DEHc@s!M5*GXEifk?FUxvNN5a^QY^%-M3&P ztWZa^0Pa0f&J^z_z`EB?s(~Wg^Ci`0M;M|4hp_yY546GP?t5W7P_=V7t>$F7V|KHC z;_xiTPDJi7FX45WJdAZxH<}muGTu|p=A4pvKQT+6Nj~Mr0H8ZT4uJPi38XL?X5z` z)*x2I#$d0Ku-(P02^y&mN-5AaSahkM74{;6#s2bzl}EFi7N+NGwFniip(g1;02|(> zv~-!7cAU3MJGi3yeAYMRianD>tngwsd@tu08*JH4VAY2Wzi~Dsd0)qEe7+VvW`bWu zu%S;EvF9dce~UFRZ9;iRNA1UrKGs*27$j0KQ84V~9$4(wY3nz)eFLp64#n+ag7W(H zw1jqxF^86Ra*7^fF59<}&^$JOpedmC4FOFXnld)=JjkEqTcYxU#lz$M-Ol;nJ* literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/canvasex06.png b/html/includes/jpgraph/docs/html/img/canvasex06.png new file mode 100644 index 0000000000000000000000000000000000000000..ed11c48313427d4c54f13dc65e15655dfc8bb619 GIT binary patch literal 1400 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/color_chart02.png b/html/includes/jpgraph/docs/html/img/color_chart02.png new file mode 100644 index 0000000000000000000000000000000000000000..1524911a5005a4b0bafab42006050ecb52909618 GIT binary patch literal 13777 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 OuGT&MyCt_DJo`T%_4O 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/dateaxisex1.png b/html/includes/jpgraph/docs/html/img/dateaxisex1.png new file mode 100644 index 0000000000000000000000000000000000000000..76996b0a9b912723d32c4bba9fd01387fc723eeb GIT binary patch literal 3236 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/dateaxisex2.png b/html/includes/jpgraph/docs/html/img/dateaxisex2.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a691fa8e2957fae8f3c5aa7a10d4489a42f34e GIT binary patch literal 5513 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/dateaxisex4.png b/html/includes/jpgraph/docs/html/img/dateaxisex4.png new file mode 100644 index 0000000000000000000000000000000000000000..48eb2881afd12a3ddb6f487f59288b2b2918bb2b GIT binary patch literal 4905 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example0.png b/html/includes/jpgraph/docs/html/img/example0.png new file mode 100644 index 0000000000000000000000000000000000000000..6e08b33e7d2abd3786b3ced12fe26873c0415aa3 GIT binary patch literal 2692 zcmb_eX*3j!8XknAk!y)2yGWtPSSne^zGR>5JJTS$+@U1bm>EkWVvLU&V~de(h-{Ok z5{evqolbML=#6mlG_n8yTxKQ^UAyQ%)+QaJq}BP@2Yd)_=$3QqCuX@=^%;ZL+G8X~K8S1% zPAX&rnpd05cIy{k_qDgcnWUk&K^q$zh1wiS>DzmU1R8+_mktAPLD;M$K+jld009&S zQ3niQC$Y%!0(Ij5e^4Ze9;>x+XeRLwE}Ddp1fh@?qD7dVo@O4(@OH;tI6lY@r!Uma z&dtruB(b#ZEfC_|4w8%t>8Sqx{`d_Z`RLmq{2v7xg#K)kcxfJ9yCcWWNL4zDtt%1? zs@#6wEAGR>usTs<OIw^!bCuGeht6-+CiPi--D4^Z9If70 zX=#rF&(Z+w@;7B}K-glh3aQZmOvUCBUf?FDEs~oCIC;qp{oRz!II6{^5zUE#B7-k` zX0L=e_sJoujDDBRXycC1OnUCVBHV|CuGyE!J}Lkt0QW+ALiWR}>tFB9S5c?5w2sA& zu3h}G%bdQDgy=uXFd~nWcNJtN+#)~8s7+5z8OC7`+e*&ANV+pSkE=9D_5BdaZRvF| z9*6R*|6;8TVswP^pp{)RE~+*xD0FpE7<%f+{j~igNnc%qY?F$uAbMiFD?Gdr6n109 zPAr2T$e+$VDZHEn>0EWVt2EV~?()Dt9EEfod!Z~y<9&Z8rkn?|X-V?rTCTq^*Ft~^ z-*5d`+kM57SuUJ)r*I0z5{p^4Pbh=VgTr)dIx1GR-VInx7Pxs@&>!dv%V&B^OZ{Re zc?$3J^cfm<_B89B!i5Ev?yY{n^rD-emLZ$HkWRqzt36;ElKpW)SV8WHeqJ-;3+VZ0 z*EB)&OaeZl>iRJ-7a^0zMYHNlWHKKwZCbo>Q3{PVJ|hmL#tiQSN0lV#l~(4z!!{x= zM^zyf-^L6tWwyi&7Yo|At{VkJ+8}He+CRTjENN_or!TpGm@*;|#+QD+?I7L@h?6hJ z_^rcLq0DlBnfzC-3NN2@0xvC83_ELsDwBlkYMQXzkZ(mX!!n`_JzKH$tyJ1;@~~&O zf4F2oLFu7QY(_1jRAU5d-xijWRZwXOK9jWr7(4AcH@|^?tsb<>%*3H}+>VAtyDWaR zQkMdG^)^rt7#Em-C9KNWz4 z$Osuf9E2IG$gez1*Ui;V4i7}hW^1~NA7viv-rvr?)>85mJfXF($n>6Ju%a!Rh-0;V zJ$KBsVb-%6?a0^K0gXXUk#Yap%uQ28_9iMi%Wvn# zonK0*o&F=i!HgKJ-f5INNt#zb=jVGQBUUFzMkg;`_F9JFY%5q3M^iLMbfkN=CK54t zmr<<7-wqju%3FC~+K8w&4{zTB^5b0?&Xgz$T_pK%km3QXiD4iXlIKfN;xdCh!)}9{ z6~b19cFye60k3-XyoY;15=3WuNDE;D%c7Tnr8n8MJHnF8+=JCm`?2BDT56jZ%FPdK`H1&Y&9>6WFD23QMVb{xtZTfa4Nj8= z%%z~iRn>=0tz6B z%4L>G@I7ZmIX!K*ug93Z`pQ9v)HNwty+>lgIUjwOX$ad9cdNRui6gy!RKg{nNv==i zh7m!F3#oxg&4n?;!T4Qv%w)u3rH;GefYFnY756v({dI5eXKGEgE~}^Rvsz4LEff3u z*CG(fwd(l=JGRnQPwGc8D*nv!X^5uar>BlkexaLo!O8M?v9QlW)G+83-PG%5ljMtZKaL*P=is$Ea_OS#O z()TN_>Qz_FIFMmD6`@t4N2x4LsVL@E-c;z(C#whd$;XL<2jO&`Wc>6*z%h-|YUCm= zetPq}KWITXz6KInar~YDGdJ$aI>H9pA75*Y$CFRLb!?kRz+!9{{cG%4S0wdOFV|&X zKZ|`Umt&&4TGuN^6Y^j+FaJC42C%R_Qxd#X-55wg64--!l&+5ZhW$y3$C!&aWNCs{ z@jNeidQF9a<$r%F74!65A>H)IUJ^c74gKWg7cot{C@YuU%LgHjIoI#eXkuMf!b$;E5;hYje=+mU)Vq^W-97& z^I-9HoCB@e{~8_H3*L<&4i>{vOHEKmhl)8m+MJ9=EgL1cJizvfY(0$G3JbU6^Ma3U zzbrnCk{W_b$wBpPQhg0%e{)p_SrK$c~skB$Gfbe3aEpCZ_E-E@vkJm2OM<)kE%aE6g7YWpzl@ow2$YM2 zm$J%t&4b;WOPA^*-A(JYw!hK)9DZhGJ2O zU2^285`|MYW+nC_Mr(1ucdx9y7WE?R4fG;(AE;s|KoUO*nV|EIQ z004d2_uc*VA0pbeO{g*e+>Ui!y;uGxQV#%t1tJ7M7>E!6Vg8Y>006h+*RNmhuZV=4 ztm_(1yDQ(RpPAYs0wQ5Hp~E4)3~GP~voVr0QuO4Pu14qbwr#GjTj_>6Ir`hERKm(c z%MAbgsLb>iK?;b3lfdQr(clJ}f=JjL8zKt+keuA(GL<)GC?I6j;f}GNNUQ2Xj{M_!hfIBhCkcp{_4I6063yng#WIqm6`n+!UG_kS`kL| z=EX(;zzJ+~LN_Fau`zse_~Q517guEf=+EE3f6M-mM}$!YUh{h9)Ei4x01%>BgbYg* zN8t_tkV35pLj^{MngDRJ}{1$1c-1n!qA6cn2WNs77{aKV#1&e zhMHVz7}OX|RD}Ef_zx6=L1`{(v}eI^bSO?7NS|*FfDWVa9C>K|^Iohk8N~6TAA(^z zR&|<;#&hJMcgUJ~5jyORj(&XrTm>pHTCE7fgVo$?VW2}!PTU00JA^d0?IKxFJgu8DLQjsGr+3~(1k78?=K+uO07%p10M zRTCaX7!Uo}-+~uejE1`?W+!FH1nm`|z-at;QP`;<#K}*h$4F0dG;(PZIivC4ML|y; zc2%IUpn_gan2#L_JR|BM)@YxLhzm8ji{j+<7uZi*6Eb3R3UoEADayDsplIhc#kMuq zd=tlkL{X{9ysIO{fD%TVXxkc`&w?0OfSl1L5+S|na2hGrG-Mhh)R1e0?nawSghceQ z&lwVP`)LG2j}(IldCvGEjM{5T9hPx(3*<{fDUeo2qfL<=Jz@ec ztgJZ(r3G|1+W5oKb0*Lsak$0M%`c|1)xC^1xCpa$RNm7O5ey3~(AQ@M7op+O%7f~V zx3*)oy`FJK^0OpnE*W$;jBn$|#oQFKVGo$(EW;UFXVxClMrL5EXu!zS0zzVkYagxm9h zz)k1V@%5ghS%;0Pq`AqAj5d-VJUd$1ODT8C7Jcx22BqVS}Wut~Q0oMd%Gdm5xZc(6)rwx(;^;hU{%@*;yZ+F_R@c_gE+I)a@q6J+T|Ym{|0* zAD<3&P}0&-Xm$=w(wy*oL>iuTZ*Qk)d*Iqoy`3&*)n1=3j{8&i&mE)fH~SuiZUi{f!BL!S^!U;x1o7sZM zRTC{f#r%)eXlxh4STcs7Wp`0LJMXhw87g^ujQ$&b#1WSlPB0?a%oaqinqbEoEx5j- z_$~@xgwcGA#vL<#W;LBt7lLEpS!anY;Lgyz%n4bRB8Hp_h6p-k&ySu)dm{Z8(}yMv zM^D7*-p)(Uyr_MVKRepr);Ea~b2PJC6Ig@cwFuXBJrUt~V&;P4yD0kDy7N6DQe#o+ z>rfaF%<*yF<;xG8j~Q9-Ujkx0-dmPB{6VwM3>|PYbz8Gr3@ry+0ha zK~G~wRK!L4jMl`xf82`=HB`IKH zCT*UiV`do2Z{H81qIejrW{^mzz%5?Ltk3n#SD`1#+5CJb)et#^EM6j^n~!mSZWS1F zx2FkBYef6t>u(d?-HZEGi_x#>l>tu4ZP^sQcW66oQ- zuAyJ9X28XIandq0*Lj7oKs|KNLb{WlR42E^Wr~=*Np6~q31w(Tp4Ivm=9 z%i;*BC{~Qr{JLP6vKF6PfjNR?~k*dzn@3SC)U%p z>+$C*TlYd{14FE>zP`SR3eWgIxFg_=h?eD1@`&&sgP*~^lk?DYJ%~*U4zLuvbMjDkxCpJYBr;)bN zlx}2Wn*<(z?f_lbDf}X|Q^AWXnVuXvqRPdI>xs=}wO`*bk^^OSGz^o#%sLFvm&IVX zpU_IqJ^emWfrhhhNYmoP#p+g8tO(jQk^?0)uzV%3=o3fk%K~bz%RW+CS;9v16L(3S zdeM`3FWYFeHvd6d16yr{O6ZXXuwj572@_W)cyLZzQ*O9yuR8M7gV&WeKf!%epO4=&fCHsX5cn0C@VVplWkhsx_%FTg;qLG( zMPzfcf(c=Hzn;12d89$9A=W_7PQ>kq^K(LD*pP_yEKwL#8Lm9Jca)(?&Ms(=hgXu| z%*1@`xqaDi96riK_kNPFc4Bjqz&LfO!-M^F@)``;YMwI$Jz}6>c({REN`V@lFyKrr zlumB7OYwLh%C;z9s=#3e6i*HxW$MA{T@+GJ7_d2$Hz-Y3<6u6-xcA_5VTpmY)##4s zobc+%!~R~#oL&z-sdH+vDZB&G(n;VsLv&=i5;H`44}Pv<) z!!~J{6L<~ig^$W7MN|$)oo}V7HikI&RBhcN)=LbA?E|0-uK`2t)t9eQgfZAd!4L{` z(HRUM)=QUDUj@3<7?3ygc?=-J7DKYJ6sT}edRUW_VAy367^UW0ZV~!CG>Nd+AtGZb z(4bI<SKTLpQPQo~H1v7s%Z@faL}Ww-8uV27;#&wiQ@J6iCA}Bx5c)inWk*ln zThF)(bde2)XEuy#Oo0Lo=U;ly(C5K_?x=U_cIsg>$*WBDkEo2RKs^usUVOTF#Hr$` z+@^Teb2~K=t2R0OxBOV{v}f(gTu{|)su_gs? zi(PPzfvAgMFwFQ|O$u~Tyg#TEXg5h}3OtGN|}7k&|DL_gaLJ%=vdH3LU~WW<~DW@5YuK@)rT3mEdu_@>&{ zPm3{EaQM3@h)Pb>N`H@rQ3o$>&b`|#aXvF@fM0|i?gmX<^O;zI1~-k~REKlqwA9jM zINB~TW4X-GOs_yo>vfC!SW*fFOBB`jzlP3nH^1qyes~j0ilAWI+7BWs$z>mn#O|g* zL!)si2BIBMux;&kRRJFNRG^{V{P2dx?1`rAXa(L81GjY=-jpfAU>~GKSbe}@*!|yD zfd;OWDeTz|X%QN3dD>)CxQ3>%X9t>OM^mv5@=;Zc%?-k1TxwFL7>M>nRD=~N84t)W zO6Af8tl9?!!%?jp?dPB%Rf90t83iH)jmb*YARp5oi103CrD~wSo9R8 z!XHFG@XdGSM28rNN+Bx3-+d3Y0z`Bb5AkjE2gA`j5~fTs91#Q}yeZL?DZ-!#q9Vi! zp)^pP1{6F`h>?&eR)-Lz6bhavWcuS0a@fH18@*x}4I z0Op{H2+hIU&>;XRG&y(FoVErX0+51^hkDI#4CPHbckfW3^6Ie{$X>l-Bt_^QPul97 zU;uO@Bf@qka|19O{BuG(6}-3?4FEtyjk2Rghfp8@DYRNAgaQFb1UqH`5C$RyKp2P+ z0Aa+|3D>UhlQ7o-i`~8NkGX>@rD=-}8{mO~kBY8_Rus3;q!ctU=CO0iv11B-i=rFw~ zfk@cyi(wC3T!SC>CiBMXM#FC|T%XocL&lnjZs2C6#h6NGU#?uzO^d28HaARlU=k7P zREx!a>&okS6I@Bl*2FNw5=Em#D;L`n;!f_VWr)6}MQ*};HMu1VL_#+#Py@eY9Ioi} zB;Fd{t-V}DMcud{HA?15TAii`U`p0?{rU5!`^pT%Q2>SpA_PDfh!6l_CRw5YAeY3v zV27*~A|V(LZ;|GF%_e<+U-X?F(w2uJ%xdS+pMhj6b<_)5w!m2q8~qU(fF1xEiV@jWLRJ{oXC zhv1SUU0H0`Pcf;4uP46K{k34jNw`kfHZgPF{qSzg1-C+cJ1*nAsjUb-v3ZiSg9<&P zb1)EYETZlkzZgGGI6LY}5r9MrvW8ThCarwu2@w&7v)<_5aQEZG_he;Ly-&o@6kK9G zBqh~H!9>m-&4#n2^LKjx)Fd%uKk_I&V_%_QUK>tx>3B|f^a>ORCMHbG;3*0Kx)O>I zJ7xe71|kGNn12X6#Q+dx+4tT3{nxKwQdI%qo?ti%fG`jt0K!0o00;vS0wB!)0f9#x U@5B+pX8-^I07*qoM6N<$g8!<_HUIzs literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example13.png b/html/includes/jpgraph/docs/html/img/example13.png new file mode 100644 index 0000000000000000000000000000000000000000..ff795689f4c3c31f209390bc27ac78b7e2abf06b GIT binary patch literal 2163 zcmYjTX*|?x8z$R-rW{kGZ5We|EeF|`IGsVV@8pbzDIt49vV>?PI*nwBF?b_O8B3DE z*mab3jL{h8%$dB#46>A6ws+E(_rrBR&+qwg|E~MFuj_uER0lf?aqwxdfPjFw(a1)Dz21lr{|) zF~9#jYbZL+;7>VRJo?ut%Z|1X5^{qAQ!Y(UPybI>M}HHlrd57FIZMbN1Q(V>0PFJ2 z0$(xzvf1PW@Fdvw`S&-si48`3+TGrijnra)9Ii1kD`t?lUB*o)uJc>o0?=MamX255 zBB|UM5V?gLn!Oyt_#QAd5nQ$&zsxgbT5rC#z_n3F$$lnr->OJi;np|ynqGmnCu;0! zj_Rx}%*ORjh^5DmrP%+o`H}D-u*hU?64Su5HM*XL4>Kbj;uCajH{2>H&9lJeXtXox zj#>kxKB6VJ2(_L;cnn!TKHE%`X`>|2DhgdQKp<9^BZ4t@q<*z6oRy}=%OBmYDY1ve zmF%3IW^S%h{i?p3v8ImcM_3M7J5n}WW83VdzQnY)wYJ_#KPi*!jW0h6nRcHQC{v3Z1nVu*Maou$#MI zy)%q9J02_173bYjyPI#1PRGJ}a#GB9Y?Mn^HY4|eoI^60ITriz zjSjYZuA01E0qrVQLCX5pO{2vdE?z9?h3IBqbkdI_a(GF(>p5w+ zaYGL_5=|o;)9&Tk(oOq7lRKaLb~*+wjz9R(As!#xpGYEn89JrY#IG=$AKX?X@97z6 z+z`>7m&b^O#36&PEmoe}(6gH9Ma%s}?$?YeX|42z@x#TaeVhcLx@s zqak!FV0^-41?$zDc?rejxJp$jfKnt1qrWeurzf-`L7Zt@HKaBBL481fx9=yWNg(_4 zd|zlZL)PP6;F%U;uXUaiiV|jh?XD#|XN0-@RKAh~_v9Q}M2;w8Q%&Ht`OBGW!S2Hy zM>ve;`>~DF=w@D+O5(o47n*y~u#a&~P#{qLEXP?4PfU@*DAUGlcGpzmpQ?U-7{*sy zP^jPmv@PJdd@1sIXTV$j5y=tExu&+?AX^o7r!espAbkpwVR60q5WjU3{x*9aIE?;#aDG=DcWqP)u{iZ1AEeLlkUes6rIfX(w ztsYniNy?UZQMH85RvDxYB<6+N&^PGMVNDeTXO7h0FW!p9QWZThqI44W_d5b2EFNdXifmMF^s-csDNkiz`xr|1<9-*Iq&8J)GD%o6r zLemw5e%qc2Mc`DJNbM7AeQ=Kcd!JopLPfozN`N8qRv>WrMO@+w^Z`RO^EiPWf5zYC z6(}ESCC91w1kJwm@umHNLHPrRsg5nbY8<{BGIzn~d4LP)q?qzZv2#}VzGS7s{PxTv zwf>|?6{Ti554-x}D4ygQ$u5*DEuMR04|clhWV*w|q{}ecem>0nTW!z>bHf(e1HbKiowKvtu$a(auCXdiF zl@`F&@ zBdR7eG?XQ;yPy22kDh|K@|UywgPVs#|2`t@EV*2-X%QFj*E?dd0_TyN?T6`_h%<3M zQQcPog9>UgzLIeLc>D--Iyc6-K+9w9=AFj+n^EV=^YB}X<^WtwhtLNLwzM1ElyFz& z)QHcR5I^_jD&tF_qwCz6^+WS3^Z*2|vg&bj!s5=Nk%J`0Ed3g>_I7T>lswFLLCHe9 zrPeqcTIwF%P$n8wChHOE?b{gX0-)WyApy7pS@X3X|59>MQ-H$3kXg+M?d|Or$3;+? h+=HR~^UYxF$6lIAW62Mq_@4;@OLIH3YJ_*v{{R%wDhL1o literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example14.png b/html/includes/jpgraph/docs/html/img/example14.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7793e843b19fe5a63be16366053f2fe345add8 GIT binary patch literal 2124 zcmaKuc|6oxAIFt#kac8ikEM{1JJ}+XT{HGwmtn|WG1&(Z1~)EatC(RXX6zY}TXQXU zLLv>qSXw6LS}IG)b`6I6tLOE4{(Sy9=e*88=lwmO&*yv2U1vvIVL@3zE-o%%*cB^R zF0Nx*zr8R6D!u3%yK+bip#mnUjufM5>`8@SEN^Xs!Q~SH(!93 zjfB@+3_<6Gfo%45j(;RK>e0ab`J?Xx&=a&&j-bYguF8GRUxpjR!e}nAIjDz6nP*=d z!IfxCBoa3jd08UY9_%I0d%GnZ==33{_w%d63MkZ3#vXlz*}$f`Fg4Mp8L05auP^a8 zQvb2%uR1k6c5buK&d1-4I)ZP=YdKhZh_KqFcu@$S-@etIJ=|cZE^39-{qZ2DQ*1fAGH)!2oHH{$VRQH;dwuIeFM`Rb%CJnGeM^+OLYuxZn8}-xDNyJEH`|j-I zvlfCn?Fw6P_OCq(f;M(Q1=%zCrfV8km=Qoxfy{6JV6j-XIEf@?AJg8pGARx0Cb?Cq z`65`s}Ow+lAiUk9*q-ptpa;Q&y*dJB@4%sHpd?H>!^x@j5M|cXx-SQ z_|E*JH%1GU)|4{wWTF2qhSJsR*Zy(?%=Ejph%^I<||2dOUF%U)ul34e@7e;1yA@XlLtFT)rsXuL9! z=|Py|j;j8Zi1Jgdjhk=6qG}*5=#5}-}P3S6%0Ya_{ zgpmm)dCk^VgJc=RtR1!1X{Mkw=bSul12y*hhe!`N8l+0t5zsAR*NPj)@$#Nos3&fq z1|we_?|XfT^_n#tT67w3{z7S;L$K$={GEw_7TV`?odl(xlR^rv+F`J$S zCy?dH=djMF^{tEyJzZ?0QRl0`VKPD6Z|#* zIr@$EyVj1<$LE@iIuPe;yKU3?*~=gV98#Z-ROx}l4ohc*1I6H zVfQqMb*c~JIo+7*%Ez!l+tPSgCaF?R3E{UQk%RVI?RmdtA>e0LAeuL%u%YinLQ1xw z3p}iyxuKosbc0s@OoXJ^h_)ao1j5VnBrk(+53TW1W(IKSGEnF*DcxVc$0A<}-Y~QY z;)}d(fivzak*Mj(K@x^u)R-z9wQ!O+;}FabLp~lH2!;sLE2{d0jiw$n|3}v;49S04LrJ?`J@R@O^TyAI&gD zCVf(EWsSK+hi9%|B`-1nX#;*^4!K)##hjEvS^mfi`Pm)hxQ`ih*yU$flrTuX5Nf;b zqenlqaO@1^i>_eh`4Po3zJM*Dw=DoWf*`LdS68xbIz(6iTHttC?lQSHi48X$sFe%V zCX33xW*jAY3+DtKrJe7pfCC)9o$0)sJW~UU(ThPYohsQTlwK(xJewOcpx|EZ8n0b`}O%WL3G=;Vp)vE9lZ}~(8 zf37kqca*}I?&^bmio-S3pGsRgHD&Gpsm6Ac$K)-Cb?gls9rM(D$qg@doV)?WRC*dKu?%5T^p~^#2R)6N~(x;15m4;M!o6DW`>*IJZf54u8JYCgsRKlZp z%Sui){8w^?CdwW*KKhN^@g6m$yXoTEb@HWt4IX)S3PVQJ~J81uvn;kBn*)4oj(WY+OsYExlN2Z1_{zwf_tWM4@Y z=G?pcWTlaSR%m4IK+b?5*jWMV1OSR%CSQvIe&rNsKFH4E+ z_9gZx!fxYjF?!e*yd~0D1rb literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example15.png b/html/includes/jpgraph/docs/html/img/example15.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6d8f27d397e94eee0566cf2cad3f201247e710 GIT binary patch literal 2795 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 Vt%#4o@nHY}002ovPDHLkV1m59(GdUu literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example16.2.png b/html/includes/jpgraph/docs/html/img/example16.2.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd30ef3681ea563c11e2752052d3b71ef5bdb4b GIT binary patch literal 3115 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example16.4.png b/html/includes/jpgraph/docs/html/img/example16.4.png new file mode 100644 index 0000000000000000000000000000000000000000..947cb518a4e05bdb0304c235d74e5160e55fb252 GIT binary patch literal 3486 zcmV;P4Po+$P)$K9YOu!k$^<2_VMwYp_24PPi)lS#9L98RA2NHU1!T+tZYUR2x!eF+y zHbP7a0HnI#@8*C0QA%Admrff40AAka&jKp@QaHcqGrE7CnkY_lKHE+ zVUxlQ`QE;|@ZvmK&7OQq#_y1%T^HU_&XYW{b$y8A_k5tCn69_E#};wwIQE}mIXREF z?@QqOPAq=b%(t)p&|MzXreDPkn-tSf%#zM^>g`!Qg`7(!ZD-Q1vzPR}J@vEO(I=;& zoG-)qK^>q=c$5rFTB_V~d!&8#Oqm~NH5%ru+?h1hX2$(+UcUoJ30RwdzLJ{IKXfYi z)wgr|s`m5^&fImGZ|{4E<6GacqXeu5gy-Zjn^)vy*zx7UA{$&b;taPBGfismpVnEb zRMzjF??wCPQNI{oXJlvyFC1vS>?S$C_s)g_>x@4YV`|~6?+q^;Qwvwtu3P0RrQ2_h zY{+-u!W-c0d+zL9KA+DYA0Or``wv*nq<-^68E%8S$UMaC%Z^q%yVVwe z93_V}C~M{oGA{rHRk=z?oB~io&)FKLX`26_`VJsQ&wxdo0+588p8*Vm3H*RYxPU&( zsc{pqfOZ&q`uh5s^L7zM_b^Ibz@Gg4{LFv6yu75ow`SvPW#(M-s?3$VzP<|2HYT~fF$91xtW437K^O1i!H`ebO(l{^DHwe z&G}T|74!enRd$_)nTs|3Fwy7|0#d~EHk>^{UzgDNO5k0-7v(7V5DIge8=n0IBoQ7d zgedcvuf@Z1<`(!&(Te%7VnjY$Nbz`~!zeW$mf9NfI@a>IHD>@kUI+ntN*U#!4@-IG z7j?d(jC-f;#bVx7?-n0!%>nxRZ}4X0|F50)I@R*chh;9H-?g|k+J2XFhOE_hIsYhy zfCUW3&YtW)eA6vNPK(^7rx}BQ1@yO?Lz!a2!Cr@q@gP;;KsL{ZC1i#yo|*&f&9?cl z>~}5R82_$%xJn3&BxdTX@M1}`XxT5WzAHR;b0)fk0ER)p0x%2$7RDESGXO?M(f#O# zzx8L{{%KM&HxETobjPr_{+OYbXmtz>9L1P)v>GZ@2^q~aE^ok^CyimE7>F}$Vl|&f zKR-XcH)LS$qWj|E5j;x*QkaR=P|*rSc&`%btcvssB23eu-9Qw?RYHtlN1^KF<)!x~ z3~Z%_RkbrnoI;cxMJr@-cM0w1N;KIR;2GUOJo9E)NkPiIlDJ692zJyFUfeWZDx9C2{GT$%=A{Ua8Si$cpU~MR|J42G$Jq*OG#oZph8vN~cOWmqt zs=cFXumAM+_P4F;Ri!ldX1q7-dcCG?79=S@tRX(Dio8mAI-Ry}&5_jJQFYhKz zg!(!Xtp}`d;XGV)598LH^w8$ui#0urOGpshzimQbCN3=pw1!im5j5u`^L@N}+lb=xy z4`fDZj@cUQ>0*HGNUu;185Zgwy+Q>~8J1b7GXJiWaMdolPtoVhoh+a%YVD|_=T*W6 zMfb=#l28TF3Z+GL2^o`x1at;b&3eG10FNz5uTVkH*&47zq*thk*&0v|wRTk2XSRla z&S%A~IeSI4LN$Gg?*F@7)I5QoQg@})`{N(RMQ0H8m6@%gOjZ2Ocgj>N)cJIM#<%{!#VuVlNKr z-|cBqN}cq#zufP6?T5U#(dSY1j~|k7>kXbGABjiR53OgwO7uWkA62g&F{{N8d2+6f*xP8%8?Yk7jc>8mH}tq77pGAR zL@PApzBOmyr{*jo*E?fS>!34;9^4sLo3K^)7Q*|Tm{lF=725LNnxmeFu#Y%r!=!tK z#H_MNuh7ZfA3{N#Dvnw^`teRLqsGjtyhyUjB3hvbcZPMjT=o;K7PnO+2c1E5<*s41 z(QX32FJlr2@~nKMSLkGfdkKpmX5}NjLT`I7x|`@5X84;^kzS#nBLyr)Zk3H_g{}@3 zur!jaB9K#fKnMwr8nD#! zb1o1@9ts%_9I%ve9x}qniS!e~96Mksa)$`)B8btm=-%$uoEX!@Rj?Y@rRiuT;}`+6@&Rk{wC6EqebCdB60=N1D+p61!x|$M0+v;?TfcZ;?q>%%_;%`+SOI!CLzmAE9Ow-{0Q_w*(s; zejJu<@npjTqB97o$_K2)Rl*@1GiFh1hj>-GgrgSSO@}SOlU_kEhBf#}h*{IrsA1A8 zjDTBnf_lZQMOW00CS~^+`JL=u|Uvt^~)`vJ8IJTYv zYcTbaELWWJa)y<6*Lqf0H7~Nd1Rw^(8X{D>XgE#3|8y(!zYV_BWUj&7VEdnE4S;-P zSaAv#vy$?u&77;%9|0H>MfYf#F{@3S3bPxXw`z#}4^VVZvms`^D<%1{$@lxzY~%!x zjV@uL$cu*0SMesL?$SaPFdzcfR?Z}AG1`EKi2+3su+o_w!`ghX=y6YCO zxZnaH6;}xX45NI&(xoe1%mRQSs$^Jm%pzI=D63YNkZ1*IOt^BIu*YhY{S@{+nDz=Yn~3}f_TQV?D=dDjYizUg zKrEWjyN(OuE%muIM;~K-yzM`d=&zBzl2T1H_!PFlnu|1He}o2#@1^#fUobS#Ct%sX zgqerjetYpI>@@_M*w$9eHfJ`m`VktCe|po)6RShOTKqayYNhsBQR7oI*e#~OM>zNy zyLuqZ3YYx&yC>CaSb?v8FX(S-`4&kq1uIGc5gE zWcFqBE0w-v&L2Q~ONum6^}1f!Z4RuwNWReESVuOYi{+J$H5pbflVXoc)v=mOAvuhq zdmHET`Qzime5L1%qmYKIArcu@F9a;P+MfxWd-2#;UF>9}JAfk~!@_PwUaz2YHxM!` zNR%`#EdE9x=aR&!fe^4Dl=BY9B#e{VAG(B)XfbXp5O)@F%^sv~zY^0`jBFi^5wIYX zJx0{ooAZsWwTG(4kHR$QiMIz%DEf<)V9 zkI1}Sn7Jex;9f#Vv?v>`R*@E2SYYfz}d)fCXR}1S|l< z_@fR#fj59rO!xcU{O`}t&t97X0AX|q0StqH1z;EiEC9nGU;!A$zlex+Wi5F`*8l(j M07*qoM6N<$f`h%XfB*mh literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example16.6.png b/html/includes/jpgraph/docs/html/img/example16.6.png new file mode 100644 index 0000000000000000000000000000000000000000..12ef14c55d2c7b267a9313744a873a14b9ec8bd8 GIT binary patch literal 2457 zcmaJ@c{J2*8>SIIvP_1M2~%0hnkD--cr977g+caVELoz0DE2^ z4ruU!VBNec^tDOhr<`~XU-s}vOD(3yJfr>vB)m-xYTRf}mt9@rK+r*(cdUF(dK}%x zJ4K#us-9k(h}uYlXJV700^8yr;YWX1)?U{S%)5viASG0Pl(kC#+y*K3rV>Cs-j;XQ zrc>BZjewDhB>&qR?3hxYi z2bj0pIJ>)`iHf(TN3R?8(zaxMZP{tz?7O+EmxI_znCOa3Lq|VOU>?OIWl^I2dEyBd zVhU9R(Y}v|3fSgxzwS?ue#}3{G)w8x>I_M8!s*e~Tens>iOroZoDaR`>$q$#cJ{UD z8wRoTT=X0!lD^N+bF%94@K8(N^dws`z~Mp$`kPZ|r8ymYe%}c8yw!hg{_Xbv0R&)e z5}p&cD=(PWO0dY&ai*-Zt_=;sMLvpMvo7;<_M3h4BG1)ZN>S94+cSP&GPAQ?WQAi^ z#~z17ozsAH5k(7XP|~Jmp|;6Dlo`@LS5T&8;YI+{AVf^sT_x8BefsM=2yG1KLAN%2 z(>4KC`nKpiX8 zVua(rHb;kv-;58!=a=&ZX;NWlqatF8e-b(T3^w)Y0Ep2oW(2!e0N&9D`~%B%V1lJa z(LynpncBL{a%fdqv$w*MrgY33OK$ipUMO*`ug3)?R(wBe(Gs^a_{Dz1?!FAc*0`O@ zxKk$&Foz~}6m2AUV0L`PKIM+f5U@_2D2~*xL^*Qw?em3>&<2&*piyYn&5qhJXtB*~ zT!z~-m(Y;_$pFnOM1K#ByyYr^w(9eQ8Y9*^5Be%uEDTVFWs0*RwnMttJb*C#_Nf4+ zj*Ilcw|EY#7Xt@@GK+L;92R@!dQy-i6ky@BX;>;md-GbFsZT{Lo5v)quF z*b@av&4vWBzcq+)^~g7w@MmQZZSyQ*ucde|%c0<@Nl;D_zGg+b9p7F_Xb(sh!N?ce zC8r{wYA5J&AC84SOg>87{V z?-X|zoY7O{Y`i5^UG?BeD|Fz8v3315KIV5N9`WNf~-YB=gR=@&`J zFEI&!*!T{7U*1mb+HN?RQq=oE2yT){Y5mq&dr2Z}qKGfycLf;6T^-FyQfT3E$uE#9Hbyf4b1<6fUKk?Z1dbSIA5dzjXGwHy5y=Y4nQ#`eooXB-y~Gl|;ccYP@9k{L#yBK8kLiD)>8{~xItL@fUtpkGCA6^Aha=26<-bRIG-&cyacw%Pz~8H#$BUKGEofJ+a0Rxle8dL|F?WqU9{m31NrndH^nsk_r0 zs4@@+amy+CBzr(G3j4&)wT^okY*wP6=l!C%hV$U>m}`apfM1|o<2K}?J_s4>b!J9) zXNYB!K5SA=@6^CS&g^)f`1t1`LOceab?Dhro-DwMm3umRXJdngJLoOgKXPwC2@^hN zEIOFRzq-oO($cY30Hu$iSA5#gW@^TH_cm(MaLU$^cat2_XS(MBaC&Rh*BpN~_CqCU(f<{*5hpViqG!V=s8b`bm z=f@7Sw3+vS-Zv}_BkS^Y^uG00`7xTUDwc$70CgkMCkAZijFBIyUC~*+?&-yLYJM^} zJlHA56l?d>2k`MffD71iJ2fnL`zdcBANjMQKK-_kf7DJ*+_R$u*)9A-d3p;5;nwFW z(obYNh0!u>6vlo{W8;iqlr6x@8!X#X2EcALwG7=?vXfc+3%5L2EBbr$|G}CN4lQ#C zt!Nab##cAp&ZwTV-0--$zB0r)Vyc1u9+7fZYhCF==hg~ScRiJ{>?BC`4TOAD)q4_r zw8*hWt-zQ{$IuZn7CDp=i<%o9sSGsNz1bS|aL09iEfD)!%9G!j)CaCxBF!4XM1@ic zW;DQXfu2{%k-x0^mC&v$#>mW#$%7(J+U7TUBk2UJj{7s8ia*@}OLv_!J|ipfwqMmV z1Cd0BYbQb!KBY3!Ps9|O-41#ld?>tx!XWp0G<<^G(Mn>Zv(=^0WrNf>S_*@Euzz_D zJ0^!Ktkf#E77FI1bUC!E0I=gub@?ZNDoXDI|i)l&98r|Ey*Z3bU0cQty`$l-^MKQ7e E04gSn3;+NC literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example16.png b/html/includes/jpgraph/docs/html/img/example16.png new file mode 100644 index 0000000000000000000000000000000000000000..b03ccbaca7c3d0884ebf80816daa796b78486081 GIT binary patch literal 3146 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example17.png b/html/includes/jpgraph/docs/html/img/example17.png new file mode 100644 index 0000000000000000000000000000000000000000..0af9f470f3a31d563c8769246f257dd4770ea67e GIT binary patch literal 2752 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example18.png b/html/includes/jpgraph/docs/html/img/example18.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa531bbb5e3fd183733a22c7c0ad2277e61edda GIT binary patch literal 1925 zcmb7_eK^zm8^&C_s|)AEo+&0+`1 zMx^9nX>@Qrgtka*Qp?8djMTU(Ki74C-uLUe?`!TyoU|bZ z5H&S5?Ssw^N7dBS%~j_P&t&rW6^PI4g1;wWB8q--He$8b$Ym`i*mOx`X^$0ebt(~yQi{XEY0`Jwg zzBfB>6ECD^&Z@0PPy(tdC`nG;^Q=0JGWz{yn=h{&g-i@y^Ct9ljsk$rMV~h=N`zgrlH&dY%Cl6z=N{w< z%T<5+Q3;})(6C+5fx#QyI8jqx-H>3OM814kA9E`DR)`t-gU8)*V%WZhg28)}R6+2w z6{xX!zL@jXDb2*ou*J$3eeX4`sd2@fS~O*lMYRgrm7dA)qDM|d55-^-7L}fpLHE;| z6TS~vhvx$rbfB&BmD$^8E(mi=-=W*L=`1^I8}<`K zQ?3=5;(E>}B_OMgMLSZql%ArKQ`(E*a_lNaP<`wM!sm}7diPoKcX|C}eqZ6ZsRk4a z+Cl+bL5Mp57D<2s-LO>}TzKkoeS`=2K) zH2oEA+-6P5`Dme}xc8=Giq_$YyTSq-t&0j55InuqhfI|}iZE=2>HUW@VzIc3RI!`2 znwF#w+GFcx-CUyY?mlp|w6SuyvMtJ(kmL!=0mIL&S=nvc>>C^Juolt&a@%#>*a>co z`Ey_S0eP0-OSlv}wBIvJK@}_-e3O%AFjCt$+9SBR4_6HyZ-@SylAV0CKG^}Op!;5&dHBMd1Z;D_oT+)fVvA^@@Xw6{bk)9G)TD3m$RD+u-xvx8# z4iFvbK=KKkI%nCbA0&CrkBh|vgjN=^%7yMeZS0>5lyr>D8w6CBvQ=K&l`-R8siYS_|&5Wam0`{Os9e`J&*QF=(r>$OcIE292v7VN#8TH1(UuW^lK=}X)~~U0{TzMo3=`fxa5wld&L!UFbpL!g|7q2#CwO_JF%7@++a#G*YsYY4sXqc(1HL zw~nI`yYLWv+K$uqJ$12UsPyH7ipN(|n>kO3bya|7XhOdHj|llqMf~b(SE;rrCr0?B z9W$F}UaMrZ+m1 zqF4;w-_I}YChPrW(t06bLOuhI66pVO;lbO(k-hgz9@O|+V? zzfiyk?-$=?sQ3+&&oyM#6ASA<2_FG9c(e3DGXsoB8N$fxg-_oe<0|#S-@rquHF(Kg zhQ#gu;r>wU)9r6?t^S62g2aN%9o|-Z_maHdTN;fE@K1?6?Z)BlhHq|L&I0+p%st49 zS7i?XEaBYyw4QbU8h=v+QHG{5Z$c`Km|KuY!g%E`EdB?W#WgIs__S@xj#AZnRXd0~ K;!ueVNd6n?G@uOt literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example19.1.png b/html/includes/jpgraph/docs/html/img/example19.1.png new file mode 100644 index 0000000000000000000000000000000000000000..aee9ccbd1a12d10349048f514855e699946263c1 GIT binary patch literal 1421 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example20.1.png b/html/includes/jpgraph/docs/html/img/example20.1.png new file mode 100644 index 0000000000000000000000000000000000000000..699b08a90df3b6c75000e832827d680dd0b8f6bc GIT binary patch literal 2285 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 i2TA}$`v26t@`yiUU-IFc!|C{?;5 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example20.4.png b/html/includes/jpgraph/docs/html/img/example20.4.png new file mode 100644 index 0000000000000000000000000000000000000000..250de655e5b881dcb27e082fe12848e52027956f GIT binary patch literal 5023 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 T;i-?`cmqIHbyVt=EW`c_GR~`X literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example20.5.png b/html/includes/jpgraph/docs/html/img/example20.5.png new file mode 100644 index 0000000000000000000000000000000000000000..00a457229b6c8dc65d778e53bbdf43f2cfcb342e GIT binary patch literal 2223 zcmY*bc{~)_7oTBbNDN7mW#-X~BF2_2F=mX3Oe1NruUTS{ku8kI5~2k|7|+rz=$M@dzIiLGE=iYnH`JVIeiYfXCuNW@?062m%LYe^pKzX*z z0CTX{u|{L|2KL7w_00n^R>npMIa+{7d!He5WfrJ$cFaw>$3)TVH#aCMK=Q^A4g|KB z@w7fzlWVhUPPpf1;HnJh4$_fay%=`Fado@lqeJ-Ao6Tj<9jvbeKpp{(5k%-MlfQ9< zPtoY~hVL?@Nco=6GWYFjoNfO=E3DKDg@P}9D%R4{wh0Z~D7o}vm^|ELax}{%=NnJ< z{_FKTOmAp0BfD?0aQBf9t1b0Lxs0o_H2&_ z!T}Ze)nJ+6n3`3VluFLh+MO>MLVIt&FEt4&=l$YjwVe7sq~Nm@V;tB7!Z(P$LT86&rF)Ra}Vr(}M<=>9vNBU`|)=o78> zbge|XT%vkoo{m^|ju!8aV8=r^97qs|G$~xvK=>C1asR7@f!al>fS)K#_|I9kmi?~R zkV8LVND%&E;l{VTep)1VprkG&B|ty*Pz&dDo~@YY`?|USZ#&RU3uoVwe4<&uWioND z!uIRdR$dc`c5WYn3b9Ut#hQnHKPYP=!3G+v)WgrdjeeXD_3j>AEPOP&(Y7C2>oIil z6@~~7)OG=gQ!j&K;Bg!fN0CF&f4LTAU&!CUb*bS;S4@bRIu)BoOjA zwEj**q&Np$-36Dy+n1d0NNjmnGxUTqt{V?eq)UybL^h0F9U0l%T)=KP`qQ2Vp(NUk-Y5RFIWDE*$@I(MP8eUO+Zx@-PN;??6Dx7GmpaL{ zsubIzFHR=yMD5lQM||5{v{8+VvMaA`&x3 zeRg->7F2O8UOlkF9L?hQ{R_@|cJ^%Z))`}hUud_Fca=wTcn8B$C@RbL!`!9Dr>MIg zmPPll8pJ8>bNmyI4NT4g0s9c^DrR!fsl(kvf5xt$qM5m`X`Q1?&fB+&Y6r)0elD}_ z?%yD9g+ZoWW)jt!rRz59m0W8VuyMyG)zy@cFyva`tx`bkLvcdca;-?^k7s!uWi4QAa!xv;FJ2tDaO>n-w7;vf!C!uTGtlaI@6p$D5p5=C4?Wko-QKpbN@3<`HBr=w);-T(w3g@G1g zo{0Dj0MUIy7=~<|=+%cHL{;<%RW4r=T2mJQw;~-~rJ+Chq43piD2NaD$KvX)Am0F7 zqSL4Anc6JwwQvVJ! zUW_IO6v&1dc45#OIg7cP48(BHhFdf03!7a&8MvlL)cAm*P-9Hp>|+oI-1i!q&22xv z#}EvJvl~?P`8a9_Ik9oAU^tMO)laG23%2t6{+>%!q;+GvrGA2`Jkh^#yK3Rg-QP+= z_!gI|@I_i@c0g=jg7<4SufAkmOVwjpU<&s^hrjcZ%U#k`ikmX$4)5_UQS-|nyvg66 zpDQT&nz&7P(5`D}Jcvs!4z*7kc868=bxV`DNtrJ@Mzi9nWFduX=#}y^r{J!=y;s5- zMcOA`%?Q=)jg)?UkZIz49Q4JLvM{nT@0I;unpGgY0TdwpC%b|@WO;DXc!0DHMKEk_ zWS+8-fI-Au3Y0ce{PRIpa*kH4SRgim-^mUCCBV8%N3GY&*ET`k%ijVoFj>|Z*5Wqu%uR7h5c8x0fD4FN*aLfTei4hbR~d$NwW2>I0q=zIcVfZY7fnW=-_{e5eKTyyIGQ~m)^ XRfjX>h6$gDR>@E!E&fCm5}*Vk^;F zVu_`dX>B!9TV-OctxUX;T03f+2yaZ!oYTMG`^R0*bM8IQ^L#(wbJLt1t;AspFaZGp zaT{w3R{;UR3;aDDBE+9(U)%8)(GeR9bGPWCwOPiUX?X6R#gk|HY}xNW@d8g=i4cYDZp}XC+AC?8EvT~ zYeG;Bgme+$NpTtRf?k&LLj{+jYEh)yl@DY0Mtzo8p(O>yK^J4Gsb-^D zDl{DvKNAjJCAMyT&gD(xX|L6pz^r2J!RGU^iwjKayESRElkiFo6gxJ%x@7ilhwb+r zP>YLto5>D$l9a|tVr>||fm7jn~)39&he$%u6}ZoFGVtkAXX+Di(X4%d3I+ z)kBS>1r1>Y2vH}%?IA!u9MnDogODu*yTq*iIROOUuZo;?xqKYDiH05P0|oxQlqQsP z9O`j7ej@m&j&V~_@^91oSKGEyv`=?EywAP$i~bz?!yYS4)G{idP{P3@rgzFzymer1 zpu{Yp94jO_*!wOU4AxV_OdQ(|bA&-M-CbJiV~SQ4 z>Vn65gy0X6jWrsH!~8blWJH9gI~*a#ti!0O%P!dyMDn6V3*MC`#4L^Q>0Ha$#b@~x zs2&5tN1}Bg#doXNIY8*#wRLD!#)*L!*z!ct+24ZexG~~)(=PX`M5^CZof)dMC%uw? z?!RB;d{A1r6akhhunF*0?;4F#bGDbIptz1w@-bdJNaC=TiQX)1CA|m%Q(>K#>K>K1 zJw4;zit;`>{NrzVl2PdKml#_kAsUzL@qphAwcaK4b^`j36uT?S3cuXy@FFR2Q3;dN+W)`vPFdd%K%ScWg&j5SF+*6 z*oXZ9OQT8e!%N_i5=d0Hl|C7Iv4Wx7EH@Si^#hvY6dnx{!3G{C-%*754rnO1c0&Kx zSqQLtvG80NROdJ3tMMA>{=A4!PWu%r@zpKYI(kP#dAn%C0~~F!7rc68_>yzmlPy;_ z?;lj-h_T_xH5=fMYx#8^5VZ#=CCMQ}%^#IX+eQbX zedV)1Cu=+NdLn}?R7l5 z@Gw~KeO`Ngs$KGrRT*WHGbbhzo({z~LdDGL=Urv2>JwN}+^A3ZZ7#-AR zH}2;zgyz7XI;8=%64nm&qf{Y<@`@~k;73yDNB k=lSE=by!i(x5`g;Y%TwQbh8_4<9~4iHkOVS6wo*6e;k}rw*UYD literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example21.png b/html/includes/jpgraph/docs/html/img/example21.png new file mode 100644 index 0000000000000000000000000000000000000000..0ecf22601100d5da356c7d140c3008a7bcd57e85 GIT binary patch literal 1951 zcmah~XIK+R8V;cJBGQCisuyOwU?1plLP<& zGL8-qPXIv3LNM+Z7Z&tu7Xr=#0Adl25L@rWnl%Qa6ytD4G-TH7mk;M`fe)DK(@Wo< zb`=(#558NKi48IE8Os5EEM3#0;5WwJ#Ib*L0G1E!k`Y0Z>V@R%mLh?i1JM1Y$KUaU z!cKdLyFj!%5iLkS*Y?rT)guoGb98FuiOJm!2+EpJ8^_(gcSQqfQjXlGb6jLU<{gzm zP*Gbp%+YW6QkcA>&s|%!Dd*&)&kxvbC;oi6G8@Wxdib$4zmnJ85w>KWgd$8F`-4_L zKP44Re6|{x>C1?b-s?L{{-H>(99aP?!N8qBD|S@W49TnU)u2s_Y`qrbA|}UYx?H5D z(vks=ZD3oJA&vt<1739jxZ6WF^r{s!KR9?Zr2OB|cP?t-Is#A0PWLzxWR6fPxapq$6NXVoiw9`4^msDuOGv@^A zZe_cKA+aquJ$HTW5nda+EwR#)&+a`xT6$CTvI0Q6t4skPm(#cTuOCS9aHgwPA}~+BuY6tMVxi9&RtZPciZ6iHym&aTso(kZj_i3W~4KS!*f_%yMl#}35c*{1bj9cn>qKVS_1D>}fQ>Y%?Gl$QVCm&P2GE?6LA_?b zCXCTz_bmJ$f)}J_Tn~KJ?1&h%@`_w=A`sUTxyG&4&h`flgrt!#I`lBl`Q2h7s~$fd zM>dMN-)-BJn5CXMbwiNf!PIi$L7O*CI{xn~8Qy++B-fM5B*7 ziGTBa`wKLF94}pXXp>?fllJx}ncQ&eCbos*nu*_x|4b*Q%~*bz))tCCf|797U)UC{ zA;|ca*McJw4izkJ|0BQ9lC+Mxai~`^-;&Dg-`J_kOK{t4-|soz->(8a{mZN9BgDKX zB_A}%OAH5?$DW>Q^$m^Z1CL!3dHqYZjXHxs-9Dtr8L`w%FKT#N5z+(UK%c#~AI;@9 zYV(Z62B0NDYFm`lvQi4ad3@KJM^#*J1IJH7yi25bFF?HfV=UT%8p2*Kl8 sNX`(;^oW0OKpJlW5dLdc0t&6AsYWM7mCaWFB=~p%j!;(!4jhv4Z=d|wZ2$lO literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example22.png b/html/includes/jpgraph/docs/html/img/example22.png new file mode 100644 index 0000000000000000000000000000000000000000..1388325329a46afa2b1ce7d39af5c577d4436fd7 GIT binary patch literal 2068 zcmah~dpy(YAD>P`L=>&aYPwRJ(vaK6E^a4@5Zg4JRI*5nkz2Wx5!G>zVnfbRs1Uvj z#px8wWv(5TOU%ZaxikyKS-(@i*YA(t>vjHlUeD|ETt3hH^ZvZw5B>NtTNNcOB@hUt zVsD3Y0fFRq%dfYvvv*36TRnz7aq}&KmL5!)v!B0;xB2@Q_(BO zFs(rKA%##6-Jkxn!(@HVD~Z3XwlG7)Y!vj!-QkL*vlVEdoJB&UsLFr-5Q*ALT=5Iq z_QF9|i9z2NzfdTV1Cb-6qf=wtk{d=MQRq``P5}pqI8RBE$GiC;hWT^hm`if>A(V4z zC{+p;b!IgXt%YEVqBpotF=Ho6R!@5p-q^=!@q5wIU*Yyq zh8JVFhBfsDG=z3A*b+{GU340r@X;GorMFiLPBiCKiJsf9SeP25y>HjN^JOtCpH1E# z42Fv}6E|_p|QApeU zmc{8TqrB-N&6(UZxv72IAi?jfHB05%7K$epm%oKJ6A*Ux>E+1XeU1{CbQK_RKTCwS zN{Nql@l%7RGn#9fn_hNAQD5b14iEl5f2cm7{N%ijLrLlU;+NUkLqobuZIN*c%zLtD zev9*aymqz9b&rNyYx(Ww@hM^{FvsbpB znRLmAEx7^@IrzA7P~?85=B)0LA1b0Ht$n0ZA76Epc1P9bx1ysoP8d6Ioj!28!U`+B zyd`RJkBxUdHxa@8kX?7a;BX2wmSQS5Lp772pF8zW&t#G%sO{?XO!cUa?&*~dc1+L` ztLbu}niimTHxc9e55aqwYIm(6ifskT@edfv-zfhU`Db}6^;+k8z{>Yu4!B3pHu;Pm z-*0P`+Qddk{@CcC*BExX@kv%)a6xOU@0g7klXCY!U{L+3!y6{Fm%lF4gxG?Vxj2N7 zSSRn*x4bxiUWgr`{|ERLDy(WwJ!G8{m}gAAVYPrJA+p#!!;3xD$~jY^5V;&uGRAkB z3d{3B2Gm~)*RAVL$TrT?){fK3yN>wr^h$M|iI=%aAQeYjB)vEtv%j)haPVuvkVSm= z_KbxM!&ha1{f(Ij94vP7dO%mL5q~owrwspUqppV$qO?xAEE@nZqAm!gNyLfuH3F3h zMJi=zoPo4d+;Un>-A#iI{rg_UOjC zq1RPpZ}^&b|CLLWXEG*H($NgvCvKFP>1v;2CLZh-oVI40dtEKzPOf3pb%Qbc z(Fi3C|eh0#qQI{D^y=H;nSI{l+%NONQ3qUKwx^nbBmDq(7+; zYu`$f!jLOBcU+x>dX2{Kcu;}Aw&NT5@ST30;QM}Coo_+nN|00-Qaz!wb-3%^+igAg z^`@m3A=U>N>H6wA`YxUcM?)wa9)EV?QCGd=ihlcRf&$RXF*cyhPmS~otGT1;&M2mk z(*9LUZ6UuhZ31LLvjIh3Ktv>|{mw~3G4U26-W|n+4uHUJ7X(v?SeI{dD96K)G~mVR z8q_gSEd{Vr8HJYoAMJ!I%e~&{(Ne%>y$j_lv|SMVujFI`llMAx=2Pswt<-S0T65Uv zq3>958kkMaijFuKG7h0eU?&cVr2$#JnIpAB<%~f;-D^P^thPbCMryG;4&Ja9?@IS= zoU4$TiheR=fsL@&8>g72pe}WuW%n+|?AAY7r`cLoM zYirCPR6ohhKSPhhSCu^r2^+t(m>No1^OxmZx;-z zgaCW{`)QSr?_151;*6*_R-5)@op0`7Wtca>S9GRk+{Gqy{K%;fI-8!CeK%s}e@$%Q zC6HW@o?)5V#=6tP+~#CxTxsE28ErN?zCV}tAZg!?^!1JY2iJd*FJZ7}cR4we?FP73 zOK0XK#W1O*LJK|}tL3tk{bZH`C1-wFY*OXlB=^;%Jbd7a&BC@`5=?A=fxIE!VrjMJ4e%5@ekycBU@xm zD2I7RSkPOK(l4XysDrn5JYkZl$>~;5JFYh$4uYN(*<|jTQrL)OYOaWuONt9zpXv78`{B;>%$N7P=Xw6;!#VHo{hw>6VIJEw z_GkbAfNfr$5Cj0Q#cuQ7s;;zoN{^yV006akFNm9O{C%ldL@qnBNA>gxiEoI#+u?7HSw*-T)y-f1Zx5k}5bh)7%cuzUCdFWr{FJsRfO%f|YB74^R1oZB?C*|St z+$Sfxes&YsGT#w-5AF+2+{>;jOi{fjtd~Yji0wKyJl-VMK9c4xb%M%P8E={doi5Aw zozyIulsq%iv>$1t%6Y|oXf9~Q&xTaJE_C-=nm%b1Roz7i8&bIXFLWhU+#Q3KsE z*th)aan}_QiIlbtc7)C#{{zL&^365976;DjG9S(?aLdB&PF$o z7Q{fVC~CGUzIPBtF;4}^mQ+@pUC{rs*q{7yq_b7RqbRlj8Lf~*pkQsGKr_Bts90FP;c*la$=4F-ER)m(+ z;q=(byR9Pp6NUY`i4KZ=ncCUwb%h~Ywa$xq@3$+PH%Be*7^ups6z(kS%>YM;rwW?_ zj4Lc}&zAvhX_~#~$t0+rcY-0DA7~yyHN*ZQZNx*D2n7#juj3Op3dEM*kaDe(UtO)D zT^`U*-i3#bX(xYtsF^x$gjJ7v?{!y9FNR4b$18+e!#M+p{^*-0*+37-Z($gWf4jtoC=;K^gdJBQF zdST4?X|1#IoTDUXvqp6c{}2VaN7u~>bJqiJ%5ds=s_bVXI~?@h?RGN|7wO^ed=~iM zKW#`*d1g$6Pr*tUG%FJ6B90gEXe^c~4>w)Ji{nXyez zA(MXOXR+n+DnmBxpy}0?ZtBaO#Z>*HH?PNHN8?A+9>kQewVc*y}@iZv1=g z;u3zWZZFN{2mPSwD<)67?^*;g-gBmT@|Bf{=-yuHt1tc_4HiJF>7BbPfzb8%b{9%1P6U2# zE1}?Jc=^rmoyQQQEdr1w)uL`}xqXZO_kN zZ1`G4Ur^sT(Bw}Z_i>mXSo75+*+A_x7TxPsW=lF{%GE0#Y;onv5ONwCG#nzr>wlwD zh3*Xh`M`H&s{&iiHv*d-sKqakbcfP+$aU0nUBl9tf>GBXobc1Oju`093rOvph1zu- z``#{e1(7abEyXO6#9v%f0=}Yc{NO8!``vnmdr)GfN|iGmZ+ID5X4bE{VfZ7bHxni* z-q*}j!k+dU>lb_HYROM?DSF8zj=}>_cX#;_oezcA5(2;^`ut3SeRr1#f%gB!5{hxl zSx+4sFQir%GoG^-lJXqIg&_rPH}>tWP?%m93WdQAY7nEkJ2BmX#dDT0{CuB=hqaeO zFHWX-s)dPrgl`2gsx~1PU&ZTn>CWaB^meEqq}6lMSvtZ1N6j&gs|WSs zxOoSphu>C#R6D0c3c~A&O`Dk~Zzq9#2|1CqaXH=yxntV2xIcI)#r7%vt|#RiCpFODK?4z78*_5kUy*h=tgJJ_gQ0Bm(h%DD8g;a@fAjB-2k; z$he^-@^p*l-n<{=1n{qL^Dw3BrN`iz)dNPudke>Dku%dvt5abPvCHc*BWK(v*&Ggo z9$fWMW4dTCX%Xx_qEzR18IKwM+ySj7jd|VUGjvSTKkQfvM+c#&h;GGbQhBWq8LkCJ&tYcmZqBVaM{QHH+Ue)u3$J-g=|;>r=DXk5>dXLqPMjk}^W z>)bPUl6NV8BzN+Tu;-o^yk&i3wJFT;LRTZLUFlRNaUA5b2XJmq+nu?{p+w;oP?C;%c~j$SIWnc-?$OT%(y$@wxs5b*MeNB z?Y=D8Ow(vjYKx^5q?e(;B8`>Q?MeTYC>5woVyQP`ul&3++6rw1LR8!)$Xm0w)smA% z!Fd78NMFKZIV3BtzKmj=4Cc8|i1Qx_Psmti+TJIlS!PNk7Qk!nmC1ZoY#eu}BK77U zn`S6IF)?sU?-^lx1i||4XJXb;i9p}GdlojlYmMVr0C{u>XH1i115Rplp`7myBAM&O zFhoZL)Y@h!C8SO!^I&9UXT@y_NmpnMc?bnq`~su-NWHnidj#9dyIxQ&JPvjH41^5W zUwy20t94gbd6()~eGWHQeQ7niw~fQ$kf0jO;Y;NuK~>)1&b*fK@Fw>DUpu@kbyv-y zCYE<2k8eFZ_qBR*!L>%W8zodSd?-+MW+k5QbhLc`08jWZVUopP`4Zlzf1Zqxv&ODC zK%Z=t84VT zW?N{cEmkTJtCFePG;vjfX(M~Q3S5&cvO>JL8r%LU_aDMmP5mX|?flEZ?Sxv$EeuNS zKU?u%d)7He^I^&j${hBtn%7Zglr%M@>A!5xrsW^6kJM9^I0XzMQ+7BiU95)Ky{$IL zj5hrseBbZaDaL<0wS;Ge;J*H~S7=5_ht;h_?T#P-_0}>s)|4obf&}O{yha(glZoT^ zL$zpA-sI2JA1J4Y5J!$xVhG&j&QLE-CBT6pSuaCNWU#?cS`)3)EXp_A!PoaxhJMTT z?HrF9EQlEnn_Wg5B!$46Y?-+QxcbY1QV3rOEzTI4k1T9UIS@wYr7XgAO0C(h8XmLT zRQ~w+I|d1qHy@3LbwddP`|4|{jRr@kG3S`vv4Bc)wXhya$VrvEQQD_%)!;mqsFZ=I z^WUL37`i?E3X$Q7ryuE=`Iqm4)2ilHXiecszPn-2hB<8UzM?qzW~|}ah5KDrzFE(- zf;t<)E*lm5pUwc_tty?cNfFE`QWzxP>L}K)$6<3+6<$&H_o4Xf!8b_1D;m;wNV>PV z1sp`nTWLCrXBwB0^#bST^fhy@BG2Nu-r4uDF)<2Fuema15W@E1`u2ht@pCUb!E<|NJO*b8cfLB-LlBSh}oCS$6`L(g=nSd zCQvCz(;@#yZjuK?uLwEBm{xOfgll*lf^+WP@{0FOsn~&|AGI)DTlkZwXf3(p!cDG* z*soc5$^CBXBDRgw&-L!(85fo38!2BISz(PZ6(PqwG3Qf;oE~{9hbG6!xq}(MMWH3}o5Mo%WTd2W z$SKEY%xQ}+99N=wR-W!n-LLDf>;8PM&--=XaKYH_l-Mf)0)ckg+gY6i zfrJhV?!8d3;GAr66clKQy_LCp0{P2iO&r-sKGm;A-9rnBo%pbu!c&N6ma|4%GuO}b zjed6P)+A-U(xBgu?~|*l%>*ngMz(h(6jPOi{k5m;?6l`4LEdbmfuzLqnebHe;Pd#t z&zr1Evxd1pK)%uzXgE?Nr-jZEdLN~PKzw|;yCeHS=whPcY2M|;o_XV0hhtQngbHE1 zFy7~NF{)Gh@Fp!%^e-8H56;ecnMr~)9RqF^L`p^6eG%q7?mJlMhiUG-=Tu1^i}U5r zw2qY5KdE~7RW^sdWU3m{aV|7=Zd?PqCvt#6J7`!N#aqmdUuTSvZcsH)&t6aMVfY>H#F3NAq$C}vpKgS#PPLFf=IqC6)*CiQ`Me4}dtkm|#!(7p#q*Cz zRZ-=jgh%^q0!K^{v*A?ECVzU`k1x?uw)AXS1yeh$kQ-O>%=o;Q)SAH?S&I0k;XuZQ zkJ#h=hJ?6=Fw^^-mL@RXixTjF`;xlYUm@9v7;nPMX_^FXjS&oR>~HQ@iZKySo=Pc zqwx2i>MR=mIF5+~KmTgKJi9sAt7?|?-Q}sTp6?+7y+ST&99vYNZfBH*VrxkF*b_O` zdCW#Va?QzyX{3b2Y}OU#=w3NL%Sh*-zcFGBpqcINhoH#H}md#v;_ zk(*H%?#`V@mqsDU#kc#Gy47zI1hUV$TG{8e=-!0>Q{EPayJUZ+9G=-OEA$mi%n5m_ZtnmG$8wU+mM1NLl7MA z{JBqh`qe)!@zv+FARQ8fNMlWdcHx=a{Aak0nFG=6HrWrO1eQYtOK&G5eLz9-$dM!Y zCehMnxUC_UXpTGXx^k-~73elanBf?#YZ<%mYVE`4tsp;~1njbz3bnTjae~y#i)|`T z-fw%*sCX1)aM20+(>XNU*%d?$B7&(`WU-17$vR!GWwlUw0pxV z=GAoN*tL{JPX$+wCG2eLcIL$RM`y%J9As!Zb%=@R)JM7u()5wXOYzMVBD_PK@l4TT zycF&6hqVxj`B?l?I+#NJq8QuSUw<%l9b_pGaKH>BUo;|#Hg~5K$=h`4J)tMB27MX^Y9CU-(PrrTj%hCWfqtr>}VXNV+wg{~F{dw|z-J}btK)=n{A89|Rkq9s*ZMo9btCLJqGaad&y z)2iD^J$ty8tcnZowNj3-(zFAy;GEyY)H!WX(*H;to)02ygm!FnCa>!mSqb&}w1m?p zSe>U;vd&3q$Ml2dJrP*lH5y1+0EI3ofc;WUWPfU?0J=X7Oh^a2*hIrzY@kBe*}}4c zN98f~U_Xz?;^Im`wF5L9YqvMqDK@lY=_{$o_raN5`{-LnZV{Er++`G9m?Y(Q^-Fw8 z{$&rfobYHl=2M53o~LwSuYw8^%N6at0j&6%X5Dv)&LP70D+%n^eJn17{b|v!{h_)3 z;{NZ){4AC*udb^1PJY*CO7mo!74>X|ums@OXupf3U}E`FP|mP|=)WTTtA&*iD&RWU zCGOr_(7a^~L~~6-wGwu!x@*TZAjs_zpsOhfR5(D(Uzoo}0%cT25S^g?0k}Tg1z4j; z_K?FaxU^d3T2#A~dfwBgT+8}Q$BVa=;h(M`pOaE}GXNT$TM$V_ii`L&LWtSu{kz8q zcwGyq0EBp5TKo6J4^3AW63zT)sidI3+@xD~=m;kMKi6FNrVSgHG@^+=+u0hu*|*FK z@A7Ozh?NTMhjM~)h~e8dRSjY?K|~Lkc_s7dr0JLtY7Qkfj_UPoXPq^z#)4wU*Snh@ z%Ih?lvi3)??P#u=PCq&i*3c}9Oz+r24N-Bg(%~%mn`aypDvU$6!?VX6=Xf#Fs2INX z+Ko`(jrw;B$zM(cn23;lroKu^Nv(SQUt)<29pM8v7TVmnkM5~iWsrq3mlABYS|V7g zZ%ow0k$Yz|?Y{Uz%=Xzv!!)B>jgMvhT|3OisvHd_dq+j)0i~`6X?-vn$y;l#O6l$U zf(?JS9d#kQf{CTB8?@mq#Vn120^rNj*x@a&=@C&EnNn-}ma^4u7-{0>729FukGf&2 zmHic(!ffES<0vQ3n`Pnv6>^B!7LXIcTzp`@ZvzjCJvV393WSO}deB51Q$WyXqZ=sdsvA z5zC<#I5(5k#xW2V*Zv3qa*FGsN}s*}W`ZkB(nDDN3jl9xr5^p>=~TQix@uV_*XApe z{pj_A*2M)t5d?c*E*1jW*KPu|`8qf{?qxGL8?M5F9T3?~4kYCW=lLmYSn6PN z#dx9E=<3LZQYWZEbsJnsy67IyN`l;>M=Un~{(6@i<7NN_J>gk@ zTYJ6F=yp=->wO$W-+z8b7O0)mXQTfE2Jc(;e7CBu{$Az^yUl?j7|B%_4i&y7OH|)B ztPRRI<=LG66tze=e!7m9$km%~E7G#CkICKg$K0JP zydoFdqFol>`%?(Lw8jiD36C4_4l0ugpMxZtt>wxEHT0#D1ht|vBv?#4H_5G@m+VA9 zyTDf|;U=eWFFCO;s;)nn>1#5VbH3D<8EMCIB$^eecvM}s=q2rog7c@Rp+EI`*+6=? z#(AN}{^R57q}6EPrif*s?z48S%H4Dp9TSm-)dR=$a7`^ulr+;gL4_G43_9h^AOuZ@ zGGN(g{frj_IJ1}mI_{*>b%1o>=e0rqR0uJ{&+BsDm&+ym)pi5OKNXlnItUTM2u)rT z`wJ*DS}}KfrX9SQphb!{I@i9ne|$(j#8D)v4!t}2O`yljS`gO}=b4J(ceN4$GEvf%QKdt1QS1%I0a%K3;id|~RFdk%HTYA2q2chz1M zwwR+y?H_hrG5=ZkO-5Y=TW|zky>(z`|KLkNvN)gmJ6JKVZ|Z)2ppZtRZPPgiV{{L6X*U+V!4Kv=9;95ZWo`TD@2uoX%Okt z%Mt28Lk5L&q1FFEL@!T%%+{G{gUfSEi#wKcV)Caxd+u)PxSI(mFt~xqfZ&i6q!Uvn z>DBtCox{Abg0L*AS^)c2Unv8})fml`nQq&c%s*$!`BKcJf>AHP` z(aKC&cpxf57A)+G;6YUfb3K^ywX{prg~nsJ^v$={8Uv+%H>}AE)d*^@74ac85B`@M!$jrN)#5KycoQ#E{Kkf)!HDFx z;UHb2nPG(~#h~cPOW3NN(}H?ZIQIHCaEGt*(KN3TU5cRs5!w(y2^6d>5B-4jViH`C z6q0yiukTmKG|96Xzm|9Nqwj?U7T0i$(-FI59`;%#{-(FYbF%ICAl=Z=*EQu@k7@tt zviqL>1EaT%UhtR-hqR~29GtFM?9GYk9vtYFR++QWqIojhrZlBI~%eh3Nn zw~UJ+K)a^Yt}`rl-&DHYYK-2?{#CiTZ(;b5P`3Wjg}&^%|Hh9+udNuid=EM$Up@6q zCdmIJCao8UZ7i)|i%ID_pkJMB^ohwt$Rmoar!6_p0+~p4Nf(jx3YjIJ^1&&T7bZyEb*4j}i!OZwUT>9*+P(#~&4i*dXN3q~9&(%+8LnXJ zJdoAsdlH6|9yxTAR$S_ihUrTSenE3zSSD$Rw6#OEe!w8%6_`0{9;zl);}|QM=PTFlH5imD%Jo8Qz-ub2bk+s{?Lc zT!t_0_iKeB4S_@nX81R_F6ZvC2$})QLSal{$Nps#-}Y%LKBy0oyAG+0KdD$JcRTjO zTL`^7E(KJF)-{(<4wlJE6XUXVTU|@($7??~ZKR*+zMvV^1kcqvo9p~#}{cu-Zv;r<^o>EVG zyUUMI_zGbh5TZq#KZ9t%j|Vh$(72xOH~T+dq&cU&9&IdWCV15}U^oOcY@;9`gh)4D zT~IcK&_%xB!m4uv6H%8zqi%8R3GifzGy^+9kS;%+eA9V6C?qOEEXRq$uYZMhsodBT za;D>pU?FgFK#dtBDTrM$H%0T)fy&G|D*di8(8+ti5D(!{_R+ty*B@f3!F6c;{i;MP4mvhneTGN!X?ECVm!~B_p zBj>ChdT`hLdZiKT8|UP9S79{I5TDIX!+lXzv9LE77~Q1UjdEm(oa1dcDI8lrt%k&L zft2fe7j|}b@IJ-=#*VdX0t)cQ-C*_YX$og7FI~dqK6>mYw zBT&u^hPJnTL6Md zr$}7Hmwrm!{xu9ikxnV8krlTk(f*6 zLQc5`lochwgI#pPocb$%K2kX3FW8%qvU>X+B+oNty%u30v_so zfMD=9)IkAE%^0l#{uO0A{JLt6$Q>`t98t<$Sb7vVur?%joz7$magrg^K7PVZOO3Yj zmgpT#8|v}8w)^p5UaPQXeY|CsSrfr1c>K1X&ic~8elifevtn1&GN(Esrj;#hk%%$x zm!_0XEGWA1`22>=`I1!j^`g_c1Cy*8pC|8riFz9dXRlu7b!pW2h;U~+CN?`^Oo%7 zBy{F=_qAosg1M$Ho<(=DPeK-+``{LX=R_jhLv~9vJHZ|#$qOTN_6-u>G%x}Lnj;ZT z1^(S3704L3njqCZ<2EB{G5fsxg{}`aKX(juw!#{pu=YNyo|4=<>xx-D5wwmu_soYI z9A-A3sL0Yu^Z0&bGO{z#v06pRXKv;-*>m7zVXbMqcxb3Q=aYxK^hC$4Q8Fwq@^5bFCt6q6EO)0I|7sA*Eq7CZhn6wg!2ZtNu=R0u2L&T z=k+QVUcG|o<-3^M6FwX^j5}~$k)RgO8_?FVaVpleVQ0i8rTEz;8At2^l#RA1b?uM! zOHEFm&1m}r79r9;9W<}|}48|!cp+e`9(JUw&($~WZlRa5&$@l--*HDX@t)x$fLyqCL{?pQ+=R%C>>Vpy9H z^cR&emEaC}_RI+gLg#1H(hRt_-A}DXSr`vrG}Z&^=(%>u(4AUn9dzBr4y0vxR>wZb z76hm}LPEIJVSt>{dSVcTTvc@W1DeVEDpm z6A|9Mzt*~PH>S?`a?oju%JOdLh&q94C99Aw3xA(_gL<>7D%*JFXzw#!Q>9S-(N(Ld zjk}>Q^P6=qrG$?rAd2P75|VN+9M6)mx+?;dj~)4T|Ge|?SOzVU!OYYlbJ`*-sMvH75w zlZa8^O75z%qUzVZ%E6C!Rqxh4?5Ea`!_BJIk7zZAFKGD81w@tzlZrW+Le=05zEHtv z?dB1~)OX%d!so2i(Zu9Qw9%TT4k1WP9LQd$ogs1SGBtX_a<^yAs-a{x|%6so5X_SgZB z`g|s!0o`7Q@x_EpXM6O=29?9aJ5@bH;bU2_cmNV)VsCPBa9_EVRggpmr=xQ)gkrEd z`fV+$`*%YHwhjJ~QK=>ITq zBZ7GbzU#Q)#E1`vOy=h5u~T}qqo2x+@R@Vint&@r$uxb;{sLv%xo^;rDAGH7CQ>~` zRBsJU(~pC-klDn87w+AKBOHb|TgZ}X?h41FazOfOz|CKth5L~x3Br=IE5KH*Ezwvk zR@@Yx|IJurwd^;A$^Q@nnj{o_s8dE#yA zgXtgK-^-4S{djWAWBcH&a&2`q=rAX)oGLY&?o;Y~uf23%8XB;(B^-osK-Tg52Kff= zwc!Y8chMYG+EnD!Wb4wi`>3W4KUTes6S<(nxurBlBhs5u(MY%|sr^!WX4x{m3JvgX z&(s1reDgn=ah|c}4R_jj~OIEJcznhGDX2t;Ve|7$Ns!W*T8GX?~d+OG()>F+A36 z*LsD9$&#{kl{IU|*32Nrl8R?;uh;YE^Ln0t&gc8b`JVIrp4WMQ&bjY$!A3&-h`5lD zkc6GBwVRNTu(lw64H6NI6D3=d9$!C(KfDSomDpFcQKDa!&Bx zb~jQq_ZiMJTV?NF?Y`TVAYm*3g>Krt5N;(ZDk^f7z*yO+Rr=XkoY*o>y$7FFOJG$m zWWx}Us)fqFJ)oTP**O=DpTyLC`NGqFw%4YsM$B|h+U7somi5Z*fgJB z{l@AhCVI|NTV#^i2p5z z!~EoVWpH!ipedr=WpZk&;AyUT>@In61AuC*%*~;Ze>F8V?f7;Aw{=kI^`eI8v zLsbDPZ~v)Gg<*oo(&P3i<}#+DQ;QOiaXl|ki6LWux=jP#tkY(Z=9CXpWKy!i9&Msy zR8}sdOds|gSldqpR!tNru3+L?K?Ce!0L%05zf`I@mgzZMNurU~fV|I(bvq_GgzCz2#=iMVgS>9>5pyr+5^juY`-!RT2wWQ^NClqLDIVD&x2(g6<9G%xmOmm4u#{H#7Ss!y2b2nlKi27 zH~Dnuh0pc=sqtacqQPukD$Mx0>|KH`^M=Va5LHgptAJ1pKc=`qrELIrdmmcxcAeJL zd{s(J?6Wyzf6qiS%-yA2FSQvs)p)QXqZsBp1({qN(1woBT*x^N1P_S@^Bw9kLfI4s zUUKKTIKfex1r{XDJ9s*4#ETwDl=^t)7N`TZ&EFaFKt7Z|8_0&z)T^A>RR$_l=pw5M zrvJE2fpB4<>e;FXvBB3dCmHQUs zT&|O>qBI^Ic0HCw?m%VKYuUCrWh^DkXJ7|cv^n6L3;MB7pXKAK=0xl3vw{w&Se>|g z-G;|gNu`pw5!8|obcI1z$K{ekp;GU1eG%i`iSDCserJu}@~%C_w?#kB&Iqr+nmiik z`6pPv?{r5L3Tdl%$~}aYSVR849lO)~{IOM?KN&?!` z8T48=y(m+D=lTA(73!)$>rInPQY8O@s^1CNG;K8L;Rax@r(70~dwKD))XrkE$nZrc zzpf`xBd4|r&>z4m#JMuGzoB7^PcP^Yba~bJuXQ6OM7wr?VCBRjQWW?n#H@clu_P;2&WrR`ORqk(|#zINZA^#%yl3HDqUaS^ZUU!^W8Wa=dgxwxGQ6>sn2d=w^Z* zLb+_%ek5h#ZTV!u*ZH*(S3U0V!~~rPOJ>Ln;bcG|2tYQ)qFwnPQ^6#7iy^(32PQ8| z^&SH*zLQ3uLtzxb?FfO#4~2tu@m~7w<7F!iQ*C)|!3;D}iKVEg4J1Je zkCs7DZ$OBHODO_mcJkcLgBYX$NvdNm5jJmN3;L>lPH9i703yTEmpwu0>1~Cp0}F|e zF3vs8^OS*3@C-QKQMp}0mPM*qSO(!-#$6C)rMKk#F`(aSp_eq{^GVhxC^~Q*z#>9y z9NNjv+T`zCVgpubmJ_f-NWD*wJ!ZA$qCs5sE0oO0Jw2;paS2IkSsabw;}oEk3+yA@3#>iT?8Y4In}t{tYg5h{*pFMg2JnU zT2FB(L}^SKZtv)KSD39t$f)%bmpT*kG81jpINnn&VC<4)mllPOYSMLx_%QN0T{6=m z*ynIS8SsXa{;0J&ZSLv1kg1vkBlsp6V~rO{pL@DHE1yWNjI65gzVF?<^dkRk&7xg1 zB&Ior*?2DI`?lfwIpYJ5iMO)5Y+%KY2f$}y)ocCFx>H>|t*i$v4ieavQv7`|&-dTc zQ(CO%dC6m)8Lb){-dIhHV_N+i1)T0A_sP4!q8m{jqXuhemX(MU0*HN0a)QO*?Fe;E zIiz^qUTr-Db_}REdH%k^G8C30M>i>Y8{9vqYe)bgAT{~LS$6r2B83CWLpki)2TC*; zII*GFwea|7<8saA2%ARa7(5Nv$YeG=Z~<4EmTQVp@76t6YL{kV)b^<*mHw*CJ5bp@ zxeA)Wk~GD|*5=o?Il_m%oa3PZqvHPaCAzXGOiv6g4TlH-eX6cYeP|)LzCT|>mH#Rj z_*P4YE3hiHSJ<#i52LJ{J~jKY!M636appFdzw%6moc`nB)+I|3O@65!c=HbO_-INcmUNIBw(dRcvD+KFlq~WSW9a`Y+|)OdAqp0f5h@#0>i&{K nAwr(1xB#^Ov|F_&JSQIgEPQOl!;rt~ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example26.png b/html/includes/jpgraph/docs/html/img/example26.png new file mode 100644 index 0000000000000000000000000000000000000000..2ed5391b57673c44a287306705544200bc1c0bec GIT binary patch literal 2310 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example27.2.png b/html/includes/jpgraph/docs/html/img/example27.2.png new file mode 100644 index 0000000000000000000000000000000000000000..9e86e3616a847dfccacdeb80b9a17ee60d5c18a5 GIT binary patch literal 2687 zcma);dpr{g8^`53HjKI7cifgUvE&xQ+$ly%qJx}?s4%jVYK=`Ow_Jt^soZiWmxWA) z*yI*gMko>HQtmd#`MmER??3P7egApB&p*%ed47LA-vpGiov@Ic5EmDhu!Fs|8yD9R z_+j4z;6AL(Hm5@fSvy!;x?}T}ndadW1`^$2y0ef#Tj?H2w{o`?jQ#UyLnVC{b53F5 zT-k`^?IR!Ng-+vnEx8^6#YM5(KiQ|d>StJP_I2jwTu%2M96^mysyHbHGge%^o>}Tf z>tsh0E+YaMWeYfhE@+VFI{kfThjEYwmhuyr8VhKh=(u#V6JFvVpqXLzJr6L=kK>ec zG(#?pVY#(kSG$UmTyB(LIRbC8b-$iMY+7NoMOn*Q2J+RP)f5WF0~i%KVdiwc&((q@ z<>v#!CYMfX1|EV3NR~-w;x#ask_s8C6it=QNk%KSm8s*(qhugfRo9djXH0J7}7!(`oAF^>aVa| zA#*D7qY3ma>MnctIg=NI!{L5x5WuNhySrDFO;4Sgyp8bx*SbN)ckt^X9~-*T3A%lA z5ej>jCl(j(Y?YZGl#VAKs1izcsC&Co93M8PaLXK0#9CQd9I-`ae>K8dh#;|V(J5cf z^e1UvyVhVcq(rOEB7~BYlo^l)xX$7(9XB9GIx%LKr0i`Au+nxnk1o-yoKm`wCB4_- z(mzMtPGWiPHFs}&uF=ZBgrI_l+ru3defYnZUB(di`JL(7 z6g5y**$j(~G;MP^Ve|_a@IF~2! z6ywhosUfV7L~JdOIpdnh9Z%*UHb6bBi1>>5t7 za1_$(YZ0%YjAOTNjWE9#=zGmPH4zFaZA^X-Mt+rvydYEIuayMOx-9J$*u-7Z(l_ia z!YrV!BM- zI1D8B-n(oRNYT~XN<9Ob*@5<4(tf<6)E?muBCl_6mof>MQi5=p;9K{Tz-da=lyWY) zE>%wGQHOD)R3|?|!de44PG|<*ZDpe-2%`F8o$v_jwCdO3Mm@M19z5s+kf)-+Zh$An zv&YBZ)ui^J*Tp)2pN~hPNYD{QsUb09#W5=*u3i-dBvwSxRhb7V))t3)Zg{FxH^~mL`7)9h+t-WIXfA~8>!HlDv@i_?e{A9(x5!B+!HF)iprBg6^|40GkM#m@}?7?B-Kf~Y;X6A z3tf{shzvX)Zf_@{#h;@nJpSITENAF!96YvBlQxASf-VSF)^F6XlS^4Osk~WwA%M!a z3XKI8HXuGHd1JyNrFg_DE@nVK98h_(4-SiM4%r7^j5dCzdg~tVD8dG?b@&(}t%LjN zsU25~0Z$~qrmFuGu=hO!Ar45$C@1GyENjrvG@V7!W*e8ol&(CBZ^oB06CWgs z038YwWvyVBTaVl8xc5acUB#?4QsqjCj#xRtjF)g7YAgfX$++bFrLJ`x7ZaPX5-B>m z@ws8Gem*&W7%97t-3!}V{We=YrS~Dd-r{|nCib=gzDtH|vGtvp1-b{$pKYH;rCd(l z-@u3YiU(iZuM4XGKA>oJ?V%v33E(q^fAUq_9fA^s`^&xohlrEf(L3purAKuQJ2TLhy=K;2We89pt?l+-2i z*RH9R;P&0~0-OsGwsUR)Mjy*(!lE+RgSju^eZ#})ID#Xr;^Mgp1*xp6yD&UhYWnz> zp}<7Gq1UUqOB?avtZyYq-P9;iAI@JL#4)xiVPlE!_)qtFMd(OaUJ=?eo?+S?QfZ?W zs`YQ*`R~xLUC{DmeqLgsm!g3WfX&tM5Sf+yx}9SOM>o&oZPZP*`)S{_ z4c{w)GFM|_kx{D^Yd^oUK$vv+np lUmWeon@|4F`K23U5b4l5`iR$|R&qJmI9pdCePe`#{suMv1lIrn literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example27.3.png b/html/includes/jpgraph/docs/html/img/example27.3.png new file mode 100644 index 0000000000000000000000000000000000000000..b3ea981c2f98ef8b9d01cd4cccf1c41f6d49df2d GIT binary patch literal 3089 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 Kt+D%45a=IJZ-dSvPGHP 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 a*8t!5NBpL;o?m4)gkVpyE64lO0N@`fP}>~< literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example28.3.png b/html/includes/jpgraph/docs/html/img/example28.3.png new file mode 100644 index 0000000000000000000000000000000000000000..92434d0b67e75804dc31ed92f0bddb1968b21379 GIT binary patch literal 1490 zcma)+YdF&j0LD?IzuTtGrBa9(MLU$s9J1^&5q4`5rO3S=A(mk$`7=yda@lctkh^i3 z+`3Gy(7|yll55kN+`>+j>yGoB59ezi-uHc;_uKn^_$9eI+baP30SO5S1qZAhekZg3 zm8{f`*Lw>aBqXG>9qeq0l)Qy}Wa#J#2<8r>?&C#DJ9xI&?fV{k0=%K2SYMSa@D*W1Swcl zUP3dP;-O_l9#9DJtshDS4?wk@%e$m9j`q9i>N!4-_JG<5@)i@GkY5A_r=&hM3g46T^8eC78#S7;&5Vg zL&*A2Z)4$*1!rYe!A#UG^q-OQTM)dtuWrEqRu*wGI|JvoFj|=$1%SWKQ5+V5_IK9p z=0s|^)`7Q86HoKUfSJ@>RFY^qgq-NHLLrDVx7S8HMRx5%Fjz$54l+pGk z>uYJOyEtq-_@NzwYGgKnk%*=ULAX>2DTW#qDZ??nF!D&E^(PYbz)Dkggtn8b@Ty}~`VRqAYrRj(6o%voJlceY z8HVTy;J{F?w8j-MA=#h?QXxix%@_wzW)sR$X@eziJbjj&CF`Dv)1RP)qkURmgoC=llU;NuUIkt? zNU;4Qp+YClij-+WFF;drUD;JwR87 zlPma7;*UK~lduQge}F2>mr{>|?*i@BhD!QQ)IthK`lcS3S7%`(?Qov=<)Q_H{pc@L z>Vw`n6SiU~W0}t{@)-EO&CA3ymOBb#-m@7?;Y~%CW6Nmx>lB9B5Eu9R9%lB$>T=YP z@htA}yjEVVC|P%0?cvLm|5J3&YPeBbmIa zzfsA9n(nTYDvBa9AmhxHg1lSqEyAfkm+s9>s1D3?J6PGbVqtbYxv`7AD(K@636`x+ zQKRDZz=%tdl}o&-fEs&24$;(#FcK(yL2#xPYUrj5!A^T4{0rECaJxH`a1=z8I+m%> z*FIGi+tRcaqDC0Bxc*&S^b<{by|1EQV-Kp%E5)mCOjQJP+4ZY-HE+gNFu%#VC}4QG z4y)F#vih&?24=930}-+H{%UsHoNjiyK{qaiZjuOyIyQ6Hln<9g1}n8~H2~V;$V2p0 zY#3zcg{f_p=1I;2T+U=wUjF2VO8#eC*xCs65ftIc?Ni~lO$X)ZDeE!`8=1^h@e=Ht z>g(Pf{m14_d7bNWQ^4J`DQ}_QRZaDEh!^tI>~!_WBz-4DK-biTluVmtSs7hmuS^Qt z$RePkP#pu@<-{%%A*3}qppGb@X$+mZCXX&Z-CJx3?$#)wJcqjYC{B4l>z^_HLR6dB zV{Y4lJ=sP0Vq8JO(mRl8G2xv@-mQS}wP9prx{gbI3nK!|J)>=`;?Oifqgu4cXx`q< zKo`T*SqaL;zK5ipv~Z;NuXt;gT>;j4El!h4OIN*@Ju5;sdbT7l1v7H!NZxH0IO~Af z7rY@CZox!s+-Luv^JjI&)W+A9tK F{sD*E&65BC literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example28.png b/html/includes/jpgraph/docs/html/img/example28.png new file mode 100644 index 0000000000000000000000000000000000000000..1fc9b92f62ab89b537ed7f4a73568f0e93407d2d GIT binary patch literal 1488 zcma)+YdF&j0LDEzJ?4*G+REKA#3oTL51FtwW}9I%x5g?o5gnHniD~?qT&Bc?>9`w} z3MDyb5LrP;6?nQg#7 z<@;PfZNgr6KFulHlv!MsTCNH3foq?LlSxq0U6D0IL+0*yE;%QkYyO&HM8^!A33v%@ z@dw7A-V94PdV4sGCw^UR!ffrAa;+CN4)#k0FG{gDDjwL>|8eY~qH8;|VoM&gi%s{H zJOT3c4KvWsWSiFa53@SOk{vWN#Lp6$EWXG-BG^SS3JLnc zA6re@9E1x@@(EZAi%gbfr1ilOQynBQH})#(ZTXvwV`s_R$pF+$)K;`Lb9pUbkU9q)zKYV&AGOY6bJD}LKVQ^QO0_j9TJ!sfrJhV3hkyIHEUh;JFyb`Y35xmoJvb$9FQA`{!)UF$R z5eQ3GX#RRp$b#D767Rq-r^Cn}4@C2bs&sO_<{E+pZn`o$#dm@FnEXknNp) z+nbEd=(Ro*z8AQi2VKK%})J7)}SWgs!>6VDAX0;G4V{C!$ z-T->zgJ_Rlorp4%$($aVsZ>#f&(^%bHFsPNmsXa5DC^&$Qb@O<$qKndBZc)g3YITM z`+R=ntQ(&}y#9M+|YFeVfr#hXpI^_Jh5Sh`%1@m|NQ=zW~aggFnu8+)C! z>Qm@L3f!>@2TA3vYn<&!Rj5++;Y`_*n`t%3?;!Po;a%`)7ZjV6ie|r<7;8SOt2)oX z+(1{}r8h${RB>U;W#oioN`tcsze}&n{sSUv*NCj%YFyYuw0-4PU|V@F%V7d%f6_N& zoHE-fpyDuTWccJ?j+H31zqWI#DD!EeZcKg$w%#zktDklxVzu;w-6x1Lh(Y!Q%IRS` z7JnjYcURqiDa)TT(|S*PX+72Jc&-)=#x9R+FEITi-n`;e;h&?xRn$0pK6r Cg1C|Z literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example3.1.png b/html/includes/jpgraph/docs/html/img/example3.1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1ccee9a6431765c684bea316c974fbef7e18fd GIT binary patch literal 3259 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example3.2.png b/html/includes/jpgraph/docs/html/img/example3.2.png new file mode 100644 index 0000000000000000000000000000000000000000..1812323bb5f3b7b42b0eb5d316de5e4deb99b059 GIT binary patch literal 3456 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 i%s_+yFar?+z|4OYZvjMcl8_bv0000 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 b05kswldQ0uc7Jbu00000NkvXXu0mjf=0sbg literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example3.4.png b/html/includes/jpgraph/docs/html/img/example3.4.png new file mode 100644 index 0000000000000000000000000000000000000000..41650af0fc44d33e9c6297b311c09a270dbc043d GIT binary patch literal 4222 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 U(P) zTXrL@4u$bqJrZXSW<<$UD}%5n;6eC*Am-q@LLtzF{jGj*(l!>9HWGrWTpR$PFR#}t z{qdi3Zki@0V*nTq@BQpI|6{QO01$x)0bm9q1b~@;+y($J96vul>5mYhHR8G-^)@X) zggsam#M&ujnx^H~<&%CEGVTLJ*bn(W9TXVs^xk{#<=bokh>(q$$Io5|X8*hOHg}}( z%=iY$v4HAmKm42hw@q){r+DJ)nW9!TIs4wscg~E2Ci{R$*pHb{hsd_9qtvYEcF1ft zH3R8rA0R?m944HnB?>u-1?eaoMOorbBSop>em10=1EFHRz?O>FOI+_4&BpD~$nwk>~Sy?t}D& znSxyO^O;jua#H~4$Y~K`ivj><=tYR7AOJjFtM*(05A_RaLh!6l~AVL6`fd~O$ z1|kH28Hf-7W*|bKfXn6oCp+wc6Ei?MhUFK)i5Z}V%f+V4ARPswF&_pUL95FwC=$%wZFLGbtJz zV5|cBpo0-Dv!B9AC);D5HfySorO6r$_HhhOugcoORvp(M^Y=KbMsw$L6BYP?E&-%mrUK<&dwAi`Az{!Y`O4lT`vrG2r~_k76JVq+LS^ZP>M2ib8`AA25?+5BhSz3FQmV~?r z@mEy};{FzeKws1|SBQZ93bGqe%DgbMT94@yA!SB`&I&YBo?+>QOcy%jBNFzki0T4G zcF>NjbhNWLP?%$%| z8b=|!g1X$ui8NTCNvo{y6E=LLMaqVoOPI-cOAGAXKaG%FRM!}0-O4l$qOP1MV?aA( z-9<5j%M013b9Mtt5j$UqH7rHST@*90F`yAqbB8En_F1`$B0T1h$sT@0T|6^KNx=?6 zBVnXlbdnYZ6=_e}(9IBTo|{F&v>ubbW(kZv3tU3BC05ZA3)0k@<-2+4j@$kjEK97q9>9)JEEn;Cl=ZP zY*9#;_;`y|+Bu?%iQLJXGNjql8u9=bVZDnYk4B+Dkq=1@hFYdDSGVKZbSGKCK4A+a z@6H2qDz9>DZ`n*oz4y|Vh2+sdodV^=Lphc-rCkb|!g_Y}XtO>-+kcG?By+xyY1Ixz zm!5DFVjppj!QY2aKk6JPAYlfPU_&WIm%C2@j7YzWB0@D58XYJgZPt)xPbP;B&@BK) z)QFH4r4AI(JCE>^bJ1BUcKSqES0mjE(7#POXi`cufxhAY32E%r0EW+6QE%_*^eA3Zl zmtSD>Rwh?bn~B=HdB3N_Pgi=}?|IE%!$6!0WLFpjSes%V>63W}}h zoJEne#Dkn}D?=o}?V#VRzqQ}tD0MrN3XGlVDG!q)$qs#C=69Ne6lTm%-Z3fF@_=Bl zN|WknH|^y(pKb5#Qz}Vi=H8=?EAXMf(F0 z4o!@H2!o73goCo0lp+kW01=K0j zO&FJgad8L$*r7>vH0Tft1R#f2`-D&+0GZ@hPga9xD5dy#r+diT9exh49`uEWs zk~V2uOPi%NFCeYU!p);?ZFx;kTxA{+deY-;X}9Ygowl{KS(0`FGG~WC+7wBz#a`cK z??Qv6%`&8;w3pmbdn9dZ0rD>UHzZB9=yKDRC9o3%gAVhXVu*z8E)03#qDp?qyG$Fa z8>Qb=q&_XjLPASe4{(#xBBzo$mkXD4)28a1Ee%s0Fd{;kYKg?FF5J#RNF~i{Nx;Gu zMWaG171J9>UEC9kin*pmZ6aKn(v}$_VHy@(1HU9pS7dq;t%alYm#V2%H$G7sb>U80 znL`hNNxb*p-{0wPETp3Vs0JbgfEkDo0A`GAQ2>Y=__kar2fPq@zF|v!iD_TH4x_UM87E+t-Bq(hed7N{Kq$IfE8r-KwaT zCrG#6xg>pC$Y3jVh;$UFq&^+3H-PG^5eb1-Vk}C3?ELK{AQA$76jevlw=uqR2b>)R z`j{=l4p(KfXt}cwk@?P=!p!pQC`1TAS8#wE0C7Ns05Ag)0>I2ar{Qr402t=-dcD%0 ye|~ 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 b0TAXtMxiGIz=g~k00000NkvXXu0mjfHlBD7 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example5.1.png b/html/includes/jpgraph/docs/html/img/example5.1.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b4a6bce53f90528441198d9c5534d2c853f2cd GIT binary patch literal 4077 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 D71B%! literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example6.1.png b/html/includes/jpgraph/docs/html/img/example6.1.png new file mode 100644 index 0000000000000000000000000000000000000000..04d9a9e515557771073de581ee87aed6930efdef GIT binary patch literal 4490 zcmZXYXEYpI*T+X0y^KMK7{=%lornp-=uv{`WOUK%2pOF*M(-_R)FJvL(ZUssAcTlS zNpy+mHHc`*>ppkgXFY4ZU-mj5_WGZ*_Bs2%_U|MZ8EP}qanS()07hLM4HE!>?8fDK zkB0m*%4feP0RSw z3P4FT4VgU^j54Z#clIj49v<=Mw|7Jw&225_eHQCYE*w$HXR8*EXz>n|l%ospz0MwGUi85D8T5c1wR z0bv+U7Tg4Uj{Is2Gv*rtMYe54Qo478&G`i2jwjEmEZ5tdbOe7q=sG^!Xo#n zSFU1+pdnMGltPtk^PHdukr$^fJkf%bH`DE$pd_X!vHnVZd)Ehc!=o#98HZ%{tKZwv zuXlK8E20EZIW6A1CxhfrYK!RI(ZbW?HJw|pa{V6I*$(zF#AFaF2wh?m+dK)dDew-L za=4#G*{Sg6+oRKrf~$bCHm}i1mZ?<2)mD)qYFASD*nov0%NPNL1ndPo_KNYP*OMSR zQbn;M8)_fj_N=f&VmRqyGD0Hf$9d<9%tno*MuJCzw40a5vqWRR+-Phyb=! zF#stF7V>Te4H|$fhz~Hlha-OE=K~zl)CxMIv0#Al-Z1NAgdG5sYF)+WQkFl%No>eJ zd0bws5gZF+WvW@fY+vzxBkU`>#;v=pmyj@ zY*uT<1H*TeD;bmter!%S^Y1Y-`}|s%qS$7rgs~v>RonP)%udVEj=TH%J64By9?{8| zHq3w%h9hr!PyfQbpgOj4W0rqO2kfxQQ$3R}aJ=IUk|2VVIzER!qECrAcuZ2C&rPL# zRogVJ8z|->jdn+MtGJrCTW}@=v&%~>m@u_P*d3UP3hi!RT#qGtrJWNmnA^1}J zC)Li6w5i>yDP|G=;30uN{)w7T<@t1Dl(Lg$z)Gek=)g2guM=(S_Qkot7Zt6Lq=Er{ zZ*)~9`TBl}JHaLuUq)nVuObj61N1+qX>aWQSe45x2!>QR>qVc+9>1giWPfEzH$hK) z=y9^mtrHh;&HMwPhsTpQcX3S^foV>mH#}Gl?~c`+bGq?6K`vlIqLET`y|-9e)A$I_ zPb)sU@k1x@JDib$;;%FTSlzEo@9FM-;$r=YGdDps+?84Ac@#}Bdz<%eG+e0;(Zl0z zns+Bbx-PVkmTnxUknjp-ik?vpsOepc4lyJ5aI^Q!)lZTcG%op_7GvPJ;~f4Wd4a6` z_jvr~QLlEaXqkd|LNbPQoRb%$! zl+ZvE__<}{ZH|?wAdAXEcC(r5m=xSvK(&>M)>OzB{Kee1gG%Sx?fOuD{fe9f;pW{J zGG6ut^tL`4cJi<9Pw98K^0b#|N7+to_^NA&XD0B2mZ>|RstztX7QyK@5%TFlSi6*hVc&BOyz7L z^YEm+?Aq?wQ;D*tJ&qM-p;?V{PSp_@TdZy!dp@nj;>nK_u6w6c9q^Fgdc8Rr_Z!%$ zU1J!>YiYi#{OT;(V%7J7a1OE0)7X8TYa&Ert3i~uILG*IMoUSF4Y=(*4|i7~M%v3= z(}C0MQ&ZjeuXJDkx23nIks;#q2U%=>*YVe}3S2prVZS%~5Phsoj+HIiT*l>!cy&|x zE^+zx^Z90rcMLohBU1An)VduqCxctiUiM#TehBZb-A#EBTOn#Q*?WU`+R9U$q&j@x zDNCMWj&T+3aCYGy_@PcMCn2HJC?$K9HrCqNTDi~S<;__6HN(&=f(L2e?`kYlxjy
    xo$YnOSBXIG? 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 Z{u|<&y05pE`#5DKU<@@ksMU9k`48mz88rX^ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex02.png b/html/includes/jpgraph/docs/html/img/ganttex02.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c36524dc52e96836fc9981292a951b95df3665 GIT binary patch literal 2152 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex04.png b/html/includes/jpgraph/docs/html/img/ganttex04.png new file mode 100644 index 0000000000000000000000000000000000000000..fbcf21c968f749a7e03086ddd864f20489ac9619 GIT binary patch literal 4388 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%0D>VE_PZM8Jh@i$TIg`(qOWk0 zqUiD?TI}G7nz209z$oVP1KED*g^qsX8raSM+h~6$EK;Vb&oxL-_>@}5Tc~9}Ei-p`ydg3vTx6jU zSV&GS*!K^THroX#ne7ujGAn5-HL>l!(Jtpe#bll3oEFc~j8if<%{7jL-?I1r?G5)H zp?NA8I{Xp!NlU8>K>_k?C}H!<_Ys7=nM?MX4S&-GLKSQRtf?JxE{}>TIay}iWuUPP z^&m8M;rHys4Y>lxP>%{`Jl{lFP)fMY#aB{6>K&EjOlTCEYLjnwBH+|DPFZr~4>vn|{rr=jaVUFf z$xd7G50A{__!%y~LPW?ybR;A*wetJ+*21=im{rhx_F!SIntD*_YNA0!i&o*QypW+% z>o_mR0MHGRrA7M;wvW2*CSo&&a9} z$8B6 zpKiJp9)PP$D_y0KPu(l@wB3G?xZW?Gmn)?jO}j$0CF0{tYX{$s;l1OMwM6pE-=9@5 zWb;4${N)nCSreLo5Lb)Y*3Gt2I>fjk6Ttrh?07kO(`y-iyXTqvOE4I0ODP2#{CV;Q zVjjGCAnA+`8>AMqXXa0lw;X>Wevmjefj4W|{_|07zKX(#i@-oX#OoMR#P%vwb>Yq6ym%CSDY{M!KSt7;ZVRK!Q5ZOGAw(2?Dh=aou|uNW_mhERTT$^ zgkT>!en6tt`beiOGZRPwDgF#GR+M?u8+6u? zszQ20{xK-`&nUG&&T0Va6S?K|-v#>5xcxh{UPk=aKV);a!43Z|{=6C1d;JVsN7!2l(HfqrZ+pKZ3n4eh?0 z`p;HZRn;5{q^;P`;dQ!>1G12daCdUj>*@}KEB4g-ECBm72J+lZH-AGw@*i8VuMfQ&SL>)e*z^(|Vjt4~^99T9x^ z$j1F8#Yc^}Y>zUs`T~ryCL;>XUh51Ky;B27G>?l@mzAL zZ);979ItccOwZt;h+1*YD-QFGEx}f!ZwL|*5s}`{oJY!~yED@=flu?bFl#j8LQoT4 zH_CXfTdlCT*a1<*mswW){Kgc%rtIx?h561v+@$taO~99FYosio{F$l)lh|zm_J7LC zjg0>{)BeHx=m4X*65ZHYR7y$biozdN{ZD07ux)Dn;bjBTt2pyN9c3v3pAWA+^=Flr ztb%_E#k~BPmlIC&Cfl)IIex;Pl#cvysp8$xiydpJJ|RqcXlQ7TP6F4~uSY?1*(4He zqsKEa%E{5u(IuWIu7|q8=ovH8g|ChK8rQ_ zc|-Uk|I|;|f%?uatZPqo3k&2Oa!qIF&g=)$NtaM8OGt&LeIPq1Gb%L(NWpDLg8)k5 VDzfA>@Jk0|VqmUca>?n@zW{&s1}^{r literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex07.png b/html/includes/jpgraph/docs/html/img/ganttex07.png new file mode 100644 index 0000000000000000000000000000000000000000..63ec02ad05be3cb1205442615719f4d2233367f5 GIT binary patch literal 4606 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 Q{MQ9C&@<63)3JN{UptMLqyPW_ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex10.png b/html/includes/jpgraph/docs/html/img/ganttex10.png new file mode 100644 index 0000000000000000000000000000000000000000..ddaf2c48c3088f26ae1bfdc57983df194499cdcc GIT binary patch literal 5231 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex12.png b/html/includes/jpgraph/docs/html/img/ganttex12.png new file mode 100644 index 0000000000000000000000000000000000000000..91f1d4b51692b55a7c66a5fc567fb04fb66d55ff GIT binary patch literal 4760 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex16.png b/html/includes/jpgraph/docs/html/img/ganttex16.png new file mode 100644 index 0000000000000000000000000000000000000000..d40b88ea4565fabee1f221e048f195494f4bb316 GIT binary patch literal 5356 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex17.png b/html/includes/jpgraph/docs/html/img/ganttex17.png new file mode 100644 index 0000000000000000000000000000000000000000..d108816eb670fcf68ab4a637ea3cbff8ce0ed310 GIT binary patch literal 4976 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttex18.png b/html/includes/jpgraph/docs/html/img/ganttex18.png new file mode 100644 index 0000000000000000000000000000000000000000..06bc561ed4061d77bf767d2866a6c454f2ac1d39 GIT binary patch literal 5005 zcmbtYXHZky+Kym}6b*)E1UvyLQbeQ*1T+K@q*v)pl#USTC6<7IAQq1FfV9v<3mu}u zp-Pbh37~XATEGaQliYpox!=q;_s5;N-?wMp%*vkiX0P=;&-<)*C(hVVhm#G)1_FUN zb#J3gL7-z*z?cMP0X~_7fx;jV)La*J(>x@TI_c%jZNb_}ljpX{q1s9$hf9gZLdq|P zIJYb2u-Lf9{vk1C3a?c-8G8~c5qq0Qi^n*D*AoW&DA_9tc_vY1kkEPSQiKEyb-chl zS;^C@&+Yx%f%96X^Zj78$<@#6%$@hw)evgo0|TFH9t^B$bAcdT>Ox73`$lk-y}f-h zj1~0ddq5+{oiJ2^Ajrw+o-pV(B5x9O*F|Wy^qs7uhTl{RSh-W*$00OyZ(-=v43qK2Q~z$cBZ<*<5u> z*}PGy*%?>mv@zA{=H?cko1BvJV{tL+kk*x<mC?G37LCQ!E5zBQr;aR^}ZTF=j9 zX<``dXEoP|6ZO+kwiXtFa~-GQ9S#2TY;0_HS14yS4=W$eB8f3VjArlg>asFvIF^9h_aiA;Tie;GJAc9kPe)R&W-k%5R_sTRz^1je|EO~9 zI>`w$x3epI>60XcurV?5|MgwB{wu=i!{cHz{1xl!{NRnLC%*SkvBDvkTTOL)6=;`ZY95a$IHXhIJrJrYNfe5^9&hlQEC~vw~*4))6*WqsTREct>8|Isi|q( z?%WG@zAHs(ssGHKn3|fJm`G1e9m5-C13)tlHb_1`KBrHg4&Pbt@9s91U%)UA9Fa(5 zK)|m?^bafqNVcnWf89XK?I4%imX?%+ZLg)JrHzk`Ed@2F$k-}j7!g{1ng?q&DUMOr zV7ZW=PVkOw45L`0cY^5U*S5D9xJoWQmJH;ir8Ro|DRv|{9lp`p+p9+>$;il*mzOUu zFE>2~y$Ys{62S5R%@9hEu=|nHemP|{;UO-?V5t7@| zatLV2ydA)7WuLyf?`cJFm~08Hf#l}oI58PV2Rj?G5)wZ{)GsLee(voZF5Cpv&+(+l zfrATK=FqzT)=1;}!;x_Etv#5>*(kt2{BuR4RPuKosX7`>5FC7HCPDiNsgtj^?u>u z2Y}{?7Lyp}QEM3e91^I+`s(Um!v%LpOh$9qREa8jF(LiL%C5=i@bK{1SZZ2YvCQ?r z6>~4IQpnsgKHD-yeee5Q3kwT?d%&fJAGAKHiwaC7HwSN&+tvq-o2^onE5`-^gxTS@ zl7z~q9yL$ScO{WF+78ZK)UY!)zUnO!2KsBN4Q(wKxu`m{Itc@L+dX_5@KMUX5TOz(x5^7m^XS+3T z-7eVgMRxE1X>_OQ1)r=Zd-Iw{3bmf$7^!x!P4)5(_3-cjCg?xiJDtb3X}J)G2xo)y$~xFtSP=c^JDY(Wzt#~te?1_-%_bW8zR0N615%XrJMmC_^6?KD=Y znV=}<(GI}9ZM|>*;GnFOR5Hv#dTv%8x1(wCb%j*kF0YH9! zM(`XmQxoH0lFa82a?`8Qsx^EkYNZ$tczR!NFHn1QfLy=;wl=0Qy~&qXbSo&hpm9dj z(f-lV&a@Y$LQwwx=M2BL^ATz~3H-Fl;AtX}xUjImdHz~{Rh0?&H4cZ%%JNwVy~QnO z_~=bcObk@n^laU)U%#N@hWP~r<#vtNL`4ho^HE^`-Ji3pr_S7SbK~LWzI5qQEs+SE zZ3Mtz0M#MEK27De@h@I%G_6(u2FW3yQrXZD^6}}3MO6R^8A(Z)M#S!T&4Y0I%J13P zjy5))728XBNp0H`UQjW8cORdlRRSphjh>D=paN!C-=`#PQ|rF>YXKlLF)-EB zh`yLCnnPwoPG`r^d#$%`-mo+@Z!_BX93#G5ovXP(Km-~ea5*pT%spHe-~$c_;L4qh zza5*66V_J=J_(BR7j7cw>73Ous#Iw`ioMhs2m0;xe~gBkKS}xC4q6{p6~28Ly`0*4 z+>DdFXU}%?x2Km&{=mC zaFnjg*D4u#lTYE&=}q%0?vliPl~W(VAmu2#9i>cWu*&KBT{wuG%U7{Wg_bh3cXrGfve zcr&{3hkxUlXrdqpA{H2kF0;Cy`S&lF)|1T0^P!gos1Mn+O@PKQR{|N5JIRaUzcA_V zaArm$0eb9)Fc5P)cOfje0kocWoTnN@)xX)Gr$c3~(O*fr?4XHJwRJZCN>Y8h^tDe% z-@+yf+mve2{_6t4+zX^g3Ur12WXycW;SD$jh0S34taxdu!RArN5BB~1L*{5;?YP(N zos7>J1ltFvY3i8|GWj>2VvZ;!dp3=hoLqUn+?$K+drFC|{kVzeCDx^?VpvcovW>`mND=c(t(sfYYe zit+oEv7;X|7Z1+@~sWie;Fjix=$U zw}r8>XD!7nYg z6c)=kXEg4)JU$%crI5)3sd6G^Jkk}HL`2$+q6-Vfm^=Xi0ZYYnr6IEyf8Afgt<$DY z68`oJ7x2=w`y!oZjG`PF9mE;MDDCa(F=40E=?+rg$kwwBNo-rSw$yw)nKJW(R5BCp z$(6^ZKuIfZhmWi%LsZt8smS5{HTYSYnpr&w8Z^nPX16_LBmR%z#F_ z=;-Ku(f=vPm2E}dq#p$jYuhh#yOrDgWU6-z;g{xr9Iz~TC{N71!u=A2fFJ_bxImZw zFAB+;A?B1Oc+0fv$O_CweHH%@o-d$0?Y6Vyosn(a zh4{ny{`1%7-b~`n+vDCv?oqB~&U1I9_^-66AVa3J-Ej{U&*J+7TMYk%E%LF{`(1N@6YNDn-sz4&qUfzDO?gBGHc`RW$=ru zW^{?DBSR!q-a{m>U%wv1f|U5_pG%k)BS!74GwLo9s>FmuOB}lor`u2M8SK!^uF7Ga zk(9QTnNtMI_ib$&;^O$WHiy!j=)5R63p9P2%083->@ho+XbC1S>)L>1NFK9MPus-P z)03ksdG-Mg7>wK)>2isTM0oH^zE=+>M>X8J_*zd~%YYfkai^u?JTi7bOGXcqhr9Mt zYS&Fj!d(OvDSZy(%rm!#3WUO<#)j12DP;5Ql2YnyuQn;ft*CrCb9p}Jsp5(kiD^Ii za6JLSw$fBXnU+`JZXycFBP*p$1jXas@d;3Ndm6oz1Y?maL&|6K-xE<+y;&j2Km}&H zzfJZxhCgap5)cc*$i55(_ax6H=BgUjYW1oV4e@NY`J@`3Q+5az<86nxY>bnQMD|rh zu2SS=zsTN`F3t-<)h40YCS|^LUv*vg8dP4}j#(YRx`I#qyBGvLxCKmxGyDE=bMMK_Ip?1DInVRn6RD%E3Z`VG1c5+cbv5Ou zAkZZ&aNkUR8Mw9;;ZPtD!!vc|NBZ8G>r=0s7@plF+dS_dWc*TFqq9+#$f5Y+$#*KY z_c}V4%0zM246eqI8VRxpGI}GLAOW<%duE{_35nogfs}q`bbQAds>Xf<;SPKHuJ;%%t}9Y>PDXahxPJH`jW5zVl1>W_Ox6 zw&}=GQ!|>dVA34mU$oI4u`zY28mtNd zCp&!#fr}WgGty!<6{8?WuGfseS6>#KPdl@ttIMR)T18u18-*fuCh&#dV0rrVshI2Z z*VR!hB10-RqRwf28_#6ncf4Nj;NYO5qS6OH$h7v|-(5cr)YKgJ z-ap)$OG-*AL}cG23kkVS-P_k^(d35$>YPu-LJZK5)w{SeJUaUJ4*W}L zX=#2wH}j41=k*)2;dgm+YhR59>#=!#5P6{+rOoc~NECR--r+Wwc7u*X9 z3Ov2MygWU5czD3f4=jIu3pzhNu;8FkQ&W=$Hp0MwQ8VGW%V!=41R^Q9cS71xu6fZJ z5BM4EDZGu`_-SlrhDl9L#bBmJMi_698J3%VemTIYPEa^M*@0nhpuvIW-?H7+}rIDlx>kzEsh#+(eV%e99ii)zb^|4Bui*4JQYd5w+ zAP~&~Pnx7X zqb6l82#G)dAm!+2P--OV^7E5TdmPZ4s77r6R3Z$FjCJ+()kmyKs>IFN))Wy7J9_2B^mJLrA%3^8=dO*CqN492 zl7*fdn3*+tu8#QrX*{TGzr!YO7xT%)#YMQ`b^Q81-9Y%=05#?1c(s_NNc4}&hL?U6oZg(XhPS?oE`sZ#$YfkEG*)7-IfhCQE>3&*`pA$Q-Jl^q@0)m{s-!J%U@3Q z?VVGg1Fl~VYH4YiZ4Ixlt)kG?dw}60vHbyonE33(_ zhc$%&@Ib`U(m<5Lf#>?^@Ku@&F5s!l(f3a1ckJ?;~~%fQ2ozGaDlK(uXW8iVG5Q$c@0{K|Ux zr|)Alpns4%kb}N)fG>d}F3uD;2LC(LnaGhG6Je2N3&w-k-HrMnI-q}LQi-(%eCMs| zmK+;8Gz>gQI8Z}qf+9BI zwmRGtkEDb|-f2~6(Oyscsw{7x6L%8E>4MDW1u^GCUh>?9t0ePA?dbOL#@awh>@|s? z2Wm<>9NKqDY64xDu8wUrtl@R?Ywh45HK{|o?ApJEVh)wdy6D5;wnEiOYhDCux&2zJ z?eSo7D<^WOTHH_dHnd`-k5gpHz2u@8S^RYx<7=e*AMKM*hHHl&FYq>248}ja%IqRTPX=K_;8hS0&#KtBsZbu>tbEKHNml3&aA{-#JMOEou z=xn(~yLw>YmWDRzA1QdwszJ;^;Q$mIlVIc z$>AUK4x5jjvOA$!gC^E$s$}t!lK~|S80H2Kr_V09la*B+)tQ=1$bdJa%G{4*hOjzr zc4hnfm4~74eR7adh?Khn;Y$w2ewDtE$H$#4n*GiQV*<~;9CT1rI62;4SN}JQz#m1p znW@DBCtF6riy|F8!MEF2EY3VKVmZ2%=7{tu%5{S5Ra!C^hx);%NvFAnu)tbKms*rc z?%wYYLh_V3)SD&Xk*aqsr@1NZbN7UW8B3XTn?XlkPax zCmc5fJ*dWMzQ6ek{qEPg8>J9?++4q&oSPanGGcD?74SLpPVt`@Wrx;)HhycGg()fQ z%iYKy)640%!`vEkl@Sm-cUNXL3Gur|bRs!}j1hQsE5cC4s(WGu&K;LkwHyJZwn|^+ zfk`YL4e^=yIEJ`T&Y#w{yC)_b4AD*D#`;;gvrCeV>N)8huUZj)Ram@j5!-PG?D@Ft z@(*Ud9ytYtcGICpU66*h{2{#r5!HN1Dy9<(>F+op&^o-l#QcPLkh%XIPcl~=Tl&qu z9j9Sh0}d&n6Ok#u-XOt-`(*`%FY-djw$CPPWV$+iH4Kd6)Re^OavwdVTgma1DJ+c1 zZm|FSpCqy9mat3_?nPfTOrV)KW?3? zMSdbr{BK%e=iM8odU|@I#F@0*8^&?!1?gWrE*u#B?PjT=`1YXA^_6z(Aw%iGil=DI z6%~K@D0jWwS~`O*v{Mu=sdRB29()oD$TL0B;(HY|e0K;k#Vx+aV54+ft;yEbl8qBt z^*L?brO2;4Jtt#6HS4j0l!qFk)*RvUOc5?pYds5(AFqJJEln)l694 zFf(L$tG?>VZh}$rVa;}lxA9@Eci{x*6>Rw~51hD;$y#OK*)KI6lT=S}aV&ms-Yx)- z^}I+Ywkc!63c>R4%CL(!4@877y*<@Qyf}-FDiFntjLyR^3HZ^6EY&_k*4gs#78QMPM zeIlu@&4P)%OsebT#ckOS#Og1;=~`Q-5!3bNXHn3I*L|vL&iNJ3=$~TKdSj0F`iZ0x zERB~kvSx$UWUJpm-$sd)sx3cINa`@&0LOCC$7HZ?jV^hM=`oCqj=n0k!}D`D#<4vf zCnvol@Bemnj+gHuBHmunFuCDn=bE7fVMd40h!?d%yCqyXOXn`^7KJ5RED6YbQ-Nmd z)s2j>POgISuBt_=Z|6Pdd5DTJcOxSr<~o;p$msVobU3Fs#z@u%!sAl6>R*viy5i9= z@IrBZs-8)UX1lS>b=6!+X8P2ATSeYrXFcgU{?EdE^RH4Le{GHqhGYq^tgZqdR%Pae zIXRH~_caTGXZ{#se<2%&ne>#DLVU!DdXTOQRDLYT5IBG3OXep|Ekh3CeX(E74+3ok zU3BjScLAdRpBwsLn;Hnu<4^b^Y;bf6gT>L(y9~|KFWi~gOm6kjBXBk?ob*0!4O8(H z{hISOtvX&;htGDKrVXj@mT|)DcdxU_|XRUruo-M$o2F=w-X9SMa(tD6uv^6%DuYs7;!+_5|mN_^1R&!2)fRU=Zfe7jo8 zs&TU&d+|g1Sgw1znbmV!=rc*xCZm^}?4%BD=35$sLE6-2$ z;i++pY!Gch#DI;Gn5;#qWDfYa!_cCS$G7W!N>T5<`_q~_Vi&N0oGFU?IKA|4GICK2 z(Sc6f;-Iuq&7MQ+N(D1Tx*KR)?~e7~AX(>7n9YW|3#Oh@vXLri!*BYsz@@nJcJL6~p+D{#0TPNQ|a;cy4lX+ZP#{UE8WGrK!z z?=MAIY&P7t&If}=qf1K#lPCk4EgFL-*9|PRz+mu7PXr>2zd?O#rPzn<+iNmE1k3*m z8vX|uSwkxvE);lpPKIu-4Fp>HQ0&mub?yVpA`-3LDB3QjYyMv}6MgzGgN#`Je!RdT z8E{s97z+5b{CocPPZO>jy6X*l3ud3=-b0FJ+l9b;~j-7v-R5y T1udJvoDrn1qODx6Xc_!(SvTp; literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/gantthgridex1.png b/html/includes/jpgraph/docs/html/img/gantthgridex1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a97839c0c8de6732f5b2a85fc4e668dadfbb6b7 GIT binary patch literal 15017 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/gantthourex1.png b/html/includes/jpgraph/docs/html/img/gantthourex1.png new file mode 100644 index 0000000000000000000000000000000000000000..b5b3931e78c6cb7bf1018bbe90283577a25b6fb6 GIT binary patch literal 6517 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttsimpleex1.png b/html/includes/jpgraph/docs/html/img/ganttsimpleex1.png new file mode 100644 index 0000000000000000000000000000000000000000..f995c204563d9551f5cf8d5e2feac624e336a0bb GIT binary patch literal 3836 zcmbtXXH-+$);*#~6NqrR78Hz^rWC~}O=>{tors7KM5-Xggcb-v4bnwLKxzb~OF{`C zT`3nO5X2y%NRi$GMgjpsdAWYq_l@`CjW^zSfA%?htg*&9YtFgXnmfkAOrM|kI4=MI z{Dua4Rsg`k$9|vX=3uYl5)TXkK;XTho{mj$CT+y@SxNQrgHBe_ z*-_}kS+WA^aMS(;5QjL_DcmJE+bB=v=xv@dM~SZ%FaT6*16$kKX$(>XWJt6?R?ny_ z@X|tvBjN=XI3)!Jq7AuUTGR~F0_*vAlK3~|DS>KSLH9Gz8AAQI3jZ}_)~6Qcz2->T zbH73UFJWKfMIK2GPLHd~H@gm*AzY}%bM2S=#lZ?wxU8krFEuLzhB8%6H^;5`(Eu`$nz*2D+5)z*h^H|!K2*$lveX> zJNrGCh88n#Z0w36j0OnCp=PM>65B74Jgnrp5g$nP)Te%fu$wA)A$*zj)108`BcUGF z7bShov1{pcJKad}8?YV!)j%%mW3EGRlt=Ea6mmuxp+=ccotY!7I)0OEQ5v4uv#neiI=i_1FEL-Wjg?h^vh};UyY-q`mgmWEoGi#4l{~y8I>)Zt>@@=t40Qv@fT?0tg%=8 zoZ-q%m0X{UWwx0sx1z{hjh&FzPi~owA;tseJf~Bi7(thOJc4)RpIdM2o+rsp_U(K~ zYb@?^#*!K;LP&xikW@%H7sd9>^%To|`6=crxT?EJX4GSR;M45zJ=#vr`k<^}$8yHJ zYtos9GQ}z^Y;^t5m`IaiWA%(fjEF*0jv6QFD`^wv7PRZ^b6L0bR2JgPjF%FUR~2b> z%n^SGo^IRH#^aFtop$&;QvM$ApyRN`!=vFh_wta6Lb6?Qx30&x<&F2YNDIV-^B}Ih z*!=uSlZ_RUE+n}m2Wm1-s!AB9NrA7o+hda8AIq%mLMxH|zURD`0_$r9_Bn99WuOmb z-Ss)*Z7$9c@va-41{^*8Q*?myzi9Bk-wuc;r8JHB$R_WPfT1xMb2N#FEi7Kx3^PNM zzBwqQ&aQ?uk1b-t(da=VZA*nzQhd-cSB}3W4>%_gbOB>eL4IW_{)fBLssqzmatll`T7G2Ag_+=ar;`dl_mbIYh5&wU-l{cGdTw} z5YdKWW&2*40BsTn07agC+Fb$Bu(u~U`~V?m5&UU|5AfLci|RVu5t4@7|A)>Zs3R4l zYk^5OhO)l<6=q^J+urkQgdLpm=gx}NY%^TD{Ck#ks;Y(rC56S1 zL>&6fbbo-ApdmCfOWjFGpHyVP?R3i&(*mN@CxP6l;or4UQhmgYSuj{YK|MoMtsUX{ zwCHn()wDJW5l%veC5fSySY1!n%M~wb5Y>H+*ku0dAGHGIyjlltq|kWkpMXkKK3=M` z))<~uPu4IuErG!Lg|Wc(XTMrabbv#+ahGTFZ)SqsXF7Sj)R3*u{7@cdn`*9_3qGY; z#TBYIiySRkr>|>_;2?}Y{b22mu*>GAUaGE_ua@-sD!Q-qUy7}HV+~VE(rk;}in7Ud z^%Qu&TRzZLltC6T+A20I-L$6?Q|7eeuh9}1r0t1)H!BPy!0=#s<2>(%8Ccoxlq_IB3SZ>9pL|g2PLp!QNc3`&1^DYtF@iwBi&j%e>hbykwWVe|mrw;3u z`(CK=;siC=h&gO9{cp6{#Kf*{f1OspR7$oPTYk(;CkWBIn3Ob(1bpSK02D_O#^wA6vpb;M$?5iuB_`+^}*dtcq9rMuxJ z8h82c++b(0v;WGYma%*^KJUx?C_}NksgSyQ^XX-C*B)!if=RM`LH-uVer^o!R7@32 z?XAr2n6wOXh%z(Z4Od^ldrdH2W7DtQPL_Y2PiSsL)#fLU97ng+uk>f8yM2xt7fdXZH6IY3j)^N)ZD*+IqS`$uq-&WyIED$(k%{%XJ}dpp?GjmA}QK;5oam&^C%BYS>{8- zAHv?QdguK`jP=hFT#~c?I#>f!nr%F|9K~XczyujhN}*)2q)OYeSa+7cQfJ6$K+X^f zfRaG}>>DQkacjS!`ehAWHUe%q0Efdx!#azyo9<Q(VE;e2Evnq*vFg*8A4XK-?aQ)5A0)54=M;(sbDj>{^&N z-==SurVTcDA>BTF5PCPn4!BhJeM`z*M0)->Rel~Aws(DA^lIeeoZ#t5hbR0-oZ3S^ z7{T6S*$Yh3bWUKP{daV!TVbP8a|q}4)@>}e{Z!8T+}=nE#Qoe=c;);u zlhx6o@B9&m!!bChivdXeuRnD>a>T&)^^M#LQ5y+_q}NJ+UT5vP&&g6x*q=T$Ig7r5 zn0lYgIG4y4ku}L=khE3bQ?5g2W=qb3$+?-g1&+c#9JvO~go5=&pAfKwQmjgo&|`?x zqmkwYp^5Q8t(FMeC6-7ENMA~990=S#Z5-XYwYEqdy#l0^Q>k|UioJJSXnjQ-fk5Eb z%qy&qFJ+6!;dOqvQ4kR z%#9kdpp}{$O`9dZHodYs9ikx?&bO_k!rm}E08##-HDja7*7df4h0CGo=xLV>j^LzQ-0gnHRlWn zdxs`6imA^7eD3cCtK+F&EZmwNq%v)_j!h3y{P=DE4=EppcU4W^dK#4+ zI-yz?`(xr3q=X3`;%BaIdWS#j+r4WQ>b94+juL9s|5gwDUKXO9i!iL(i3-(ijB>@a z+t@3ETT<%M2B&l|AK8BUIQl&xw`^5)oW3S?V~h4}C)^hv#jWd{;4jT|_wf>P)j6c?hRcqz+7bD4Xhb z+pttY-3%&~x`uMtK76=DOJ}ZUOj&Jj@!lq4dRBRg$g)r2It6d$6upy=r!G#?J${U% z8kGbq@bDYO2KHJ7b=Q2O18+N+o1|0Vv$&qwc(RUrH*IYSqxMer(GdQ;#6qwKbb=nd zy}kX$viPJ>Zjm3PSC!!F`!q*&=L^}ZzV%X&)IH6UPSw5N=zG%|t{#H|dR015Mo$w< z-rIeVX#S1mP8U5Y4}SOH^Q1UN6USsVLMm|w;yQGzrURnESrEp0{m?mD=nQ@gcymWa z;({oS-3cDDe{CV=H`T1D#!_z1@B-~?SGk#$B=CHh63z3 z6E5ttNJbi+{U40A(&jP55y8igkxHbH>dzr}Ze$fzu>D3rMW@*%d2my6v+Y?fAWyOL nfcAeLH~&AI0KkNfAxB5p<}Q}3vG25i;T1DIJk;p{FYiA9(9%`v literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/gradbkgex1.png b/html/includes/jpgraph/docs/html/img/gradbkgex1.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4fccce7d947dac1e4f86d13a45648c317ff542 GIT binary patch literal 7849 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/horizbarex2.png b/html/includes/jpgraph/docs/html/img/horizbarex2.png new file mode 100644 index 0000000000000000000000000000000000000000..fef62c94bfc46c8ff874114af8b8bee86cf0e526 GIT binary patch literal 18031 zcmcJ12Rzn$|M%6>q);kCNs^K5GK(uZGRh`9TT)iGmXIXbdnF0kB(p);o9s$P_6W&( z-dE?G|9zhOKKK81->>KOc%5_Z`=lgJH& zB7Z&K!S%l#JRGyYSj576bSRRrcx|wzvg|N{pxxTgQ0B&ZFn(-ojACR5p^W#pM8zP{ zWr}Z`38(1}W)N=j?ov;q*}M1XN_B#?pU^8|^WT2^?P3YdoR1yDk9)Se&q&`m%^7lB z+i7iOA#D8JJL2Zen+M_o0|WUj+D>$FjWBDQIQTY@-I(Y;pRTSR4KoS2uqx>?opnvD%FKfh5PIXSs-9xuU{Uew8UX@0!Q zbDKx}Gt$@aaAU&t>(`Bqjp;uM@*m33Ow%oOTlqORI;=wwkzQL}k@jP-ymBQnBEtFW z2TCTkW5+sPUhh}ab!~0bwkWLIr|!9vQS92M(`U|{F)~W@_iwzpZo~TZ>sP1!+*!A0 zDCEjV2?d3Q{+O*7?<;m*@MLt$$jC6AAzm4*33GIGloQxXMfHZEE${iU@_~duuCqSN_$W`}gltZSxQl6RWoz9cfM3zkh#~r=6W07EpoBP~CL@ z`w-4c0%lE51WNA<_PJyi6-9O&=itzKWt)8Zpk8mKrD@KQzTT0Mk%oo~1zL3?F3Ufr z@l%_Ym1x!Qgo<%T+dOV}9A{-!&oRBItQ?qWB@Kn~noux^oFiV!ziMY=lbx4Gy7sUfDsLjY+6xy| zO-ld5!osTP64xajx~dn}Ek4xhSY`E`0fB+#ra1biaQ6Ix{nK@7_IfIssNshBQmk1GDVPJJxJo6Uu#9`k~9zr`HeZg~J_X z0$TI(tlr``p0fVhoTPALvR511x1nLGRw`7wQSyaoTDAQfJ& zQtpAN(p-fWelB^v+`BW<6GKCL85rb=tE;Qo#Igt;J+gz54#$yAx(-iTKTm4Ca!fm=84-{qOx2#=E46XV0FkiFRM^XUwH$=OGz0mU7h1HE?g`#*RrJh`P3y51H*XG^=kLa*F}o< znZ|BXax${Ah5}-1%Ql0=)!cTS+4*@ECJzb!u&{5FlL|zMxT%!%lJHYDPbK0$R97#3 zZ&nD~nJgR5S6N-1684j>(DvJ7Yum+6i}c))f>(p(TT>VM+)LHcb*emv>SNSO!uFS! zm*WO%@**N4tk*CZ!#%_#t@2|h&$0)v9ywIzZWOu~I#>O}yFE8&% z&!^eNQ>RWHJ9ca@mrjxUT1i!-_}X&zksv;+A5)*JEC(&S?@7fhjThgTWZ

    Vj9%$ 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 Fe*xy*6^Q@< literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat-1.jpg b/html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fc8ebb6a63da65bbf34229b29b689fb114860f4 GIT binary patch literal 7531 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 b=|>E!QrKuqpz6P{|M{@t|J^s>>ifR|%Nc+* literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat0.jpg b/html/includes/jpgraph/docs/html/img/imgadj_b04c-07sat0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f7e5d40e353f8515e4b11da1b50668f5cae5224 GIT binary patch literal 7688 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

    5e&wtyL;G zsN?Fn^90tV%VrhYCa+UOZ-^_#T6Mf%?`$bm-6ZMOzhD>xUNJp1{W8QY*`M=Cr|U%4 zN@-+A1W;-v3mn=5phl&x@WU@(&bauPju@T1ccl6R9iozVpS+CTU-cv@%UiFp6xPv* zQ2zQxA=XSaO8(y=4HVoL;hQEZ#*iqn;jH#0NBWr2o+(J_^N8bPgCj0m;?4yAC2uz{ zcs*vLgI3s@I!>?zyD9hBsf!zo__P0e&%gCf^bM{F-)&l!ra9tJz5UA9JWCWzY4E@r z^KF)C)x-WbUmFyt@*pXZ_k#3J+lyXlR0-w_Ey&Zk46d*g-y0y9S!Q2NeTSEq@v-}w z(U3BKe}%E`H{xDU&3Ue-fGI@kWddi^TpcQ&)0Y;bC}zf_N?H7DSa|FBXW&eYTcr&p zP48!iX%1XP;Y=oBrsYK&ERw>5ofT68Yp9s6 zX5N?!8o-yGjc<3KnJpYW51J@5)kj|kH8f0{s-*PL5NvO{_XeFwm9G?>Q(HT^xVpHw z>Dbz3ng%R^O8wXY#4UubA^e!wLSM`Fkw|f)=yAl#8Leu(qxeWIE_xUbcYe5|p|4@o zI3|kAV%;S7m9kYVl(gaijTiSy-bz!594pl?c%luo%Z6sdqAXog-}`_qA9@)-g|v96 z((hWYJ_^+8U0YX8KTI8Qb^|+X@5i?tC%)?*&|g3K^D(gR500w9RmJ<@)uExHy}tlQ#Kw=7R(O$lI<{;E`Ih}DG z5wQsX$Vsz$gS%)N z+s$?wEUy2$Zi2ahPlSxEFP^<^FcC|1MsMr9Xz2PJWcv9vLApQABs)o*$2`2}3xa5T zTi}$2KZeJB#Zy20CQgt$2&^VtAwQTB+G~b?lBzT1;$l58E*xBhgkjUv=V>q0vOF*H z3FnllfdyN03$3HREyr-9)BTA+p)kN4jgof#h&+?QqHjR+ph)wtIAUiL(I)B@HpP$M@|mPG}Jn% zTKc^#D-=_?XQ=AX{5=S<`i5vZtMsKYWIV2dkwwl*j!MiX8^BMqZ_#1Y+8pS^Ok*zm zuyA~MTfIAEFX*IO1k_9HsuAuW%e$|xK0Fm;h(#nlr5}6Bj&Ne@P)%@bziUgf)|mdR zBggCqd}wB0t6?zP55#E9=!|B6pAC^H^^0|vKM6~9A4dVN4rG} zq1^-?78#_uP}V`!e=V;%yR@A?nZ9Y`>RaFbq+Pva#xrd$9EaSk?h?$D0-)ziZ7dgD z*e5Lsya}hRy9REeU-m?y z_6BYHTi-dKVDVPD*QMgb%E9fb!J?^@@9VjPbm}0Jf|ng1HKw9Ejb_S* z%yO}0v6#OB(UT|cV2BZ|);zVQj#Y;W(}twc7wsRqUuwm5U!!NE%FIG}=bh$=7u$6Q zKyH`c%f*L>8oZjVLV=8tSLNwWNO8x6i(_kN=Z}84^${=Qfo?C{d8x2QRW`lwlH5Id zi!|U3|GH)dzDS4G=^6uHCEhd>;sPDR#wANV#L%e^(sg7g0Ny(?jj{ZzXesbh%AEa& zHjO%kW=7x^k7u*kpxCD4&@R3C z`k{^6Ihr=5A4Tmd+bc`9PY-g*#6LNRhl>#`(LgB9sYOisS0jsA8{haZ5%tz0{i{AP zV(4`jV*3zZsg~vPvF4gs)_>OZos9IZQ$L6QwV~~dWyo>UV#U+JvjqebK%c5-aEbfn zLkZv`6BgiRa7@jTVp?PL;cD7Y?!U~0msV7Ixu)O70ES(S2{&WMMN~=y(w}G}?}+f- zg~zs6fjit=SWv27MMKZ6d<-K`i9fVxgF^F5tI%J>ipuC-*$H72>-!cy8&4`O#pbG_ zTh3zNi7m!xn~C!H^li1XFI(TGVXNJ3S?p^q~p&fSOZ>6oiKK;V3@$D<^G zu&i2q+Klv_m0F`iYFXUWCUL{N$`LjLzzMSrE#8HAcz3+#2j<0)YPbvHE%Y#lo=b~xWq5ia+@zhjM83W(YD-L&lGd zo{AXWtxWU3Z?5x!u{3(kFwQmFnZJ-15agp*e&yq=`4zPpyfqRd(B8>Q#f& z(6}2RrkQl@&S@9HCgbXwpJPA{_a7lU$*o`-Pt3qtG$f69Rl^@5M+ZmPEWvH^8(_?k z_KwZ=z!;R~h+TO4*|ykv>ee<+hi+%no<9UBZaUWoGL63- zZqDVTAe0Okq=M_Cv9%LmYl#qiFPP`Rx4_lmzp0X1nE+((v7tzIq75x%2&98!11XR6E2pFK|3A5onMo zoKHTcL6~J~f#@13xt=-tOsKZNK2y0|)4J0*+n`><)A`|CU>%=RE2r|*Ti4BB){&>u zL5}*hgtAU=sd?eO6~&V5snNn}Z%n>k%T(@-sU3}dOdqwD{*TdbX-mAoaPe%L=;4Re zFW#JE&MMK<8ne~jEzC*$S;msz?->02(M$US2{nrX6i$0Bsj3Daq;^WE>(MWnXQKK^ zXGegERPTk$HX*3|E1l-qV)L!#^y89~u++1uk+92iS(6J@;)EGX6WjF!}d zbNq9?{;y81D;f?p+!AF-5D^l+1R**>jOf7-AxiWaT|^iq+89Z+kYKdY62^$$2csMH zI1wdAH_D7Q5@Ga~qeQN=?!6E9;jX*Zeb}%6!@s`&U*Fzq?+q|0p@s5%`U((x2$sC! zcXe5d)2fDg5pXw#DVX_XTl_pC5DJI5W?xM32yb7jA4(8^94zBa5 z*Te9ZNj4YLCH-Kb)Mkz|UA?Pi4<922kowE1GY4@PPNbaJC`rwKy z8^-{UjhE%~zCR*SGhPm?y@E@?g_+t(E6IEt+`uf0eaPU6#E;$ZdB;pn(ucflf=@MK z@3TncSyJn|a+d$QDW3JJ#kXm=rx z{UksfalW96;0{3eR#<4hJQ(!p)&lHPs>4)Wi$RgwEuKOj&Lt|)H|2~m+HmLAsD<^K zf>`f4@UU1m;YMoiH?qXzHtb$M^_w{Kf^HOJjT;PcQzhsHwcoQ{zK=|G!nEl4&nyXP z2}^nzhn4C&KYH$XR>!|70J104EEqMUJKP+i5aX{Y%fsn&6 zNIasM3O(hQ(0dL`VI@~W#Z;EyAuG9S{e;@VojS|Hr|BLMm$qC$shIGUR!ef-s$u!` z4|Jm4rC5A|wq3E0bKT2&--w<5L*;>sm6b7y;1`cmOVQB(Ylr2U)9P^_puh&7_oBUt zAwHGp{Y^YPj$`J*nQlEBoNw?xioiwAdDuABu92BiIVY9x(rjEy7bF;C3lq2TqY~a` zay#7oEN?#|j}*A;nF2N;2Y_0{Ee=uu)SwcO3dNyG#thA$2FY7G>>6AvwJUPhNr1SF zH#J?7w72VB_WbXck($d~6Q+{lNhFuKt=8DF<}~7-U1RccFlcwHUdTMAsK=Z^I4qz? zsm}2R#I7nU=X_-R=kR1HS7*6gLA<1})@MYN`ip`H1=+*q3<1|QSPvzYkoUIqd=D%T zr)b~vnP@lLo-XqN3f+-N*HbrO%fZtRfHCfyKPNm-8ju~E zX=A?!!Od9X1Dl%Oe{6>4fCt(S3dg6zl;*KMLy%5_mn+6@n7aacqvD8{Iw_iyA3ar- zgq2x!>YZz0))+E<_b5`K$f)-A68bz6uX*~1DjDRiR@+9$n|f&-d84wkdu`x51K<3tr;8ntF(|0Mp#S&G*UDj=YAJLcFx>ru80o!zaNj z%5JMZ+KmxF!KHF8US2mpueQC5RE_#2lFl3f|3K%iT+tKyV?oULby`+~;|&HiLiRsy z10Es%Zlfo+CJG>Sf4RU0*(%p$#tlrl(zj?Mzz8IRfJG$g<@fUhSQq8soNKrJGR2-) zP0AZ2)~v0MffthuSVIj(_8aWYJw;wE+eA=F!2mpO%_d&$9bC=cn0xq}`{K*&ljLg* zsRwmfx$dRt2|nOT)!aAhRd*1=9pU50la$wgy7yH{`b$DL+M7p4NX2~byoZrDdi%P- zhjZX}h>oY>?BY|(>G^ej#kCLdU(CVydk64YNu^pj&BcMQLKztdqvY7`|ILLG95qCyyh z$`rr1H@7g;+Y5VSaH{adE)m~6h3BeW3YTVLna)dn)3U6Y3M(nG6LUgb;?4dE z}wxOcPpZ7WA7RKZy^4TMkKQ<{`->rtH6UM4^%Pmlm2d;Y>d273C zYPu;et;*%RGBSx=Y%2bpt7Rgf8B~)THCGQHN)HYU3ehQ*Y6>TiE7UHpm1gUw7*D|0 zXXvdUM@?L*MfOBZ!Q>$&Z043;d>~7Ku0*$h*@gCo0+2m2 zQ-LR*lO0w1^U!Szk54pN$st_OB5HK^q1Y%vtc;{Ynjc)Rn>iokWR;Vn2Z7qhcVuVY**1T4aFKgzl_={p!3Ml*pVOVsG{j(PsIp+;w-h9J1H~K6 zQD112@Z04EPQc^us{5#beN-TRi9zG*0+#=tfT^wf40J{NyEwQu1<94n>uf+n`(|y# zJLE!OVqx&>>&hnE+Rf4mgx~d+0Zcp8*TaMoa*Fo7?&KiJSwg_^Ib=gNyOx`j$_nC7 z$cLl<{`~(JN(^x6%g<1*c?XB3W5zEOH=RlIST=Z)w(0%o$Pt=JgtdB@-*K|AfMTrs z>po)YSlz%$hvsLc1qDfjLM;Eg=k>CRuo6TBjqKh%u95PQ6UE1@6kT#qR)st2gr6 z116$CYHJaDvJqQ-lp)US!DIPWWqq?pK41=aZ~yrucGg#Zpi%eP4F2#6m(b!VW6=U1 zVohaZj;}q$s{)jmG$?1&(o@zJ^#EhK3L#UIJ@I3G$ z=yh!-lHh@9YMSq8Yq+Evv*Jc*^Yom~i;#s&!MV-1)3f8tHoMo@00ItQ;{)N|FCHn6FV`bm`>Q7jsySid-HVu} z$rYGHQckjh_0fd=dcl0@3drl8{xfZ)b~lO8rJ1SOUoEKpGvIR5j8yLX%7YCUHejcl iQ{nHcOM_guDoW2CZ7|a_O!+S>)W3G9{|~7D%>D-^lSr}v literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/imgadj_orig.jpg b/html/includes/jpgraph/docs/html/img/imgadj_orig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02651a74fe67edd85d6841ae68a71f9591f7b15e GIT binary patch literal 15015 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/imgmarkerex1.png b/html/includes/jpgraph/docs/html/img/imgmarkerex1.png new file mode 100644 index 0000000000000000000000000000000000000000..18df525c077cc167a0e6dee6637e6061d0d6eae6 GIT binary patch literal 10529 zcmb`tbyQT(A3uEQ1&IZTC6rpEJ5^d*I#fV%DQW4>l`a86N~B8~q#GA0X=#w|?*84+ z_c_lW&pE$8pL6cnnVp$CGk5MgUa$B2hO4W}6W~$d0RTXts34;W0B9Uw{Wk<1{GD%k z4Hk5OqKuTbNBUldrw3_I%ERLJ_WpChR7yquU?vy30nU`Jbl$6!u9(V%S`}$X_#RD6 z!XS5ewPHGQEg7S{>ev*L_0EuM>tAhr zmg25V7_`wP{NcA327R}y2xhp3Ya%-j373Isa}^I}_$NpMI%DXLBZP00VHIze`+exE z=ngUyINsdJR511NaEPeO%I5vyY1hMnx7T&8zn{ogp`TiH-m@{koENCl&eyH_W4H%f z8!v(nTZCht%vE~)Nz38%Xa6&G;Xs5_W)$sn@JZtC;_ubUBJ9JIDCf=ZV_IT={Y;eO z6GB$(N@hA~+9|iSQE%s-k$|D+A5gc^595#1*#FpPNT3PCpL{AG&^t+%s^aPXvUjk1 zb&e6H0q;$OcC)-bw8Yv$EfzOqbZK8lIf< z$<^2whr6Pomc&AHZiz?0ieIzO$ftj+WK4jg@1p!!=sD`Udb%0?Jp*O{@1k#~9uFQ6 zBUY`g6*PH%@MHQXC4hSHXy_HRtteMTzc=o3Z8u$d+s2s65#l2Mr^N_8AirwG3w!=+ zXXw37Rc>A^jd%Z?_p9)hgNdNPWuqUkqr-2R)@$4{&`BK(fH-@FT@*lY@G z+neHlUEbWrt8T=sP-VCJwNm1pkWUB2Sqt?s6o|SRDR)TRFIjBs_nfV1aM;CfYqS!$ z>%X^_t5sLBS;GRLgKvPti8m#K(Lh|1gyv$}8xd?E_0P9m=W;Ve>Z{)uXD&+P)iy?$ zfbCBU)fUDG_t=D8I1+-^&VN&uKIDIO+(dnvN)IUeSrd>{v zS!r!~*JtngFBI2n6#oJj{WmQEDJlJU{C=H z?XmD_x1IXu4trP2DM_Ab=V*ZG>GfydCFTO;fd9pC=h)z5|At};YCWzm2R@fi4a!#h z>+yjaW64FPusv=Lq%1H@nm5!!uUEn*$p}d5r45yPvrer(*;HB1rNf0wS2MrVerV=Y zW}CdfA|}8F{vB5N-|2rw^#8bRG#-4Sc*jE8&40vW~^S*yb3jH<#(*b1|pKh)5IGgKm|u#W*pQv_yas~;bsB)XL*+5 z+nMh^ZBO*R{m}bA!RQQ)eF$&= z*v0}hyB8hU%88WoIeS@P^zP~Q_>v>th|Cmc)qIhIsAH9e>T4We*O+9C@dP`FHl$R;!-zm5y=pPW26o76^YpQ7bpzn=CFanlXmcqGS9 zaH+?}U2pLREg&hv88D{RpW9f-e`NXR;bU}LzV)^Loo*cs%cqJ)_D~F5ohN(YKPcVN z$czn~{FeFwGP5NHA@AECy4(H+Ej~JyXR2CTpg1T2GMsY@g|({Fk?Q7jK>e?{7Thk<4v=jzoK# ztK$>Y*9FY^v0SOuOF2Juov{>??9S(KXj4y;_pS?T#4l8@&mJXY>LmzSqXV$rKVVnm zP6kHOZgb&0mFn^1hsqoc`l(fdaRZ@^)z?WiQ}21P4=ZzCAy*HPzNQN9xv^YIOju6Y zVT(Hkoc$$@%F0`;Voq=9YxLq9?Jpu*XOS7}})%)<_t>vVaSKGU0yV=1EfKHk?Bt46(A@01M@HuYG z;?CXSQIBkbq890JjrdrX?k6b8uiK`B*2@KNeB;rJwnc4?k4G&RK-SUXB`QebmOgQ# zKzKv-W&`(zy`foDT+G+- z{!j+HLA4wY%ofojlp*eWJn{CC-{q@m3k(4DZu9VPZ-J86w42$#;vRSsw3|5kdR;27 zx!I?Jn;1hghm_+8&uP{Fe#0~1ZDa%tQ6lrvyoac&z$HVS^$q$D%)+_KVBT|4>8w2p zj-)TZ+w+6TlOH6%)bEGg+7v!7Xb={#Hzjkv0zztPgef?TQ?UUDu6OE2Z~kg|)iHlm zNrwRFC?HPQk`REzW174=clg#SJLUR|9yOCpzf2&l%8+y6^VjG0-Kkv2D z9sX^!NlXzR`}*8BFm9FZ$H(6u$@t7mS5mKDS>4E1rw|__WIN(rb})!s(w-7gqha5M zXBWs2GJo7GW*5sVIQ8JI@A`|aUr0tqmbq=NqzXP|92-`+FKfIpIaVk?>~xj>_z@lp z1}1RWo7_-w3jtUrkTJaO>f{uDeTFDaeECCl06<}^|-d80BjhnV@ROGLR zJbx8N$X&qg%fQ0s=|6k!zd!4Klgo-jxVzZ)5HPuOhU3%m-BhiP0(?jb|FYs@B`D_n zib+(4s-=m^l9rm7>zy1Uz{$y3t5;fWF<3D@N-W)O^%XIWqlbYAPJ9&{Zq9!Nj6uIVfs>Pe(lenA=t_ENK#pPB#nrp@z!V_ z6B83~8uM~r#C3aornbCse&74R;GfG>m)=*e$V!KV%L>6iaa}uhY@X(OZ?3 zIy&r`zWG0Y{x#-Nh(|)D8S)|KjdR%?H$LJm6xs*jS&3B9a!OnK^G%cGMnu4~gb&-} zMX!@MdV71PYd)Nm88l&Z&^QW*O5npNJPhG&)<+}yYe*(J(q zB(14E+oU(ErE=)~LtdHd@*`K3bwbvP2PUAB0RM2ZJ{T*0t&%xp`7=L-z(co4M3>HHLH};jB|1G_$I~Yl`_#N{R^?gsFVmkhwp%}4 zVtcw^{FKp*@-exI*LQxwBLjul5M{aEUAIR;-}PlF8Kul8TU#y`-Hi?~)N$S-4RA7? zM1nC9?E%DJ3X6-ut2j_Hpio9br$vbpADda_n}EgcSAB;ko|lJ95_caBK586ICUJc9 zo&y(){AF7Cm7SeiP(Xl`f?{KRZDwyP)^~?kF`fq$J7N--@TA1VTi^a9R;~Oww^>YZ zJZ~CH9wacISOtN!O3nX3r6F)O`Z+l7p!w{oX+LS1MY>E(6@QpLg0r+0g+dwg6c)3g z7!ddfj($Frc04?|!&ra{OKMm^8j`|i-bXvx!ltO{=O>PO2gOt>%4Px2jFr0_CS*I6 z$eIu>hmoT_#zLQn6@)({F+2oH@%H!!x2BfH>nfIrj_)K8OvngJ9@_}1><2rWv#VRq z=mik%l%z5Thz`zj8c@$Y6lHCJg|hRvHNSTi#|oScK4oTbVAF>l}KtT$CfOVgHx zfo7qb2asj5nJg=5b^1lCE`BpTO$V_^DEjfkegzc`8Y5U_j$E|f?H5_}_&@1li*r*n zhc~W6l-l4<0H`!8R+N&A-s&U6VR1)U_9kQyrT1U31w4^#;_vy{KJ8Nh3WJ_v3 zakge33u9yQm;k5GX^Oa!7!>lm3LZg1&O_R|=?!LO79m{@J3H~rHWiu9tYDmKXZw`r&K7cVAsxmd9*2&eS6A!n>+-EvRw`%a zErv?0Ofu$AN^qo;1u-!K133DSi%IaW?^=!94_scHA1rP-HAq{Wpv|R^2Wl!oj&APcs-Ls7 zztS4(@9!5>%2!D<)b;FLb9(#MsB(6XQ7%fv@t>s5MBdQAS5`$5gz}hx4pX8g5CSE^ zl!DF(hCoMW6RPIK$KF!V%PNpo1|a+T`i_rJ5U42Xmu|b$)f>zzsZM({6C*jHPsDvz zom{_kEy+MMN)cF8m|6u3`@61z#$3{>@x=RbPyH^J5c09JqkD4IDJ0t`H(ZIC?jkgw zJ~6VI+t>9N^L!Ke*!=zbzkeOUwSsS*oSb~bGg%_CI&6aIAVB~+2__o7qynIXg$9~h zMH0b20hRwWPbVlMpQLl@?Al9Opl;Up_VOr&-x3WHRatG>|Ko!NrnH4cNSD1@^>jL6 z==?sNjPGVvd3ZMLxW-@>`5u`LM_E@6qzTvM=l@xwB!^(OEMV)WmWCMETOU(JhwSd! z0&(!l*4C%=+Wu$7JuAgUMOld^QLoO_hb5e#pEQ+NUqK)v+B!Oa6DNEa*xQ zlfm6-A#pQ~)h)sN|Ipwgi=~isNy1>-o$> zcVY%Q>ro4C5V%Evx6sCQiY3>xdFV(UlsV&9hB znw}sAU}s(};+fo>gKQB~RsvgEfnAa9FD*!7##yksbLgTzL}f)pCL8+Sm4_11HiAeZ zo2C8T*;@a_oO5i~l4FBtny>>0J9`40RZMK2u0M)bM+faY!iTc+UBLMpdh!=F@~l{r zfcArJ2P`iY`$^R}i=Ca_7jw^%Y*{KM0^w%;1>Z?4J`*WN5t?{-it@8iG3Q(4$4Clp zHm+~q-Am3fDNJq^qctUc@H%0^puVsR))r?=-gs!t4F4-FF3V3WF1F@@@umM6_`#tI zdV*^lTq!7YyO0STo#t9R5Q=f$drUt34J|;EQ=l{)N`jAVvtw;zv%@mMgYsLNi9Bcdu-9jExyRU;?nZgy|{wB=uhN0h(pQv@xUarLyV&@8jRd-!|OnV9QQ*gW;= zmaVU$z~~h+!=_S$lO)uc|2vN~>k@U#MI?Tdg5LvindIZo5bxvvur)HTgs!Ro#B8!# zp_6TkOz*Ph9;bOzYf-1~@PJy(^XePnZlb24p*ZmPd3wk93P)ehtFEI)FOQYy4F!C8 za>;U_(TgvpgNXG`IW*3b-Dt|_J$VwPCm7lls2~H|PWn^<$;v=AJBcXDaNF~6;XBp} zKBbCI$c3k(XBjcjKVuCbPD>=$L=6B zC{kl+lKRK6nk$N1Ci!0}6kh&c>9|Y?qDXT^JYfi^CfZE8q!3X7DrP1{1}y2SArKX6 z0)|i4a;bXPu)#SKOyL>e+&tUqo_A--yXRjZr6foR)%3#ayDS5JT5sE0c&SVwoSS=U zl&|8XT-vG@?mE8?=YEeI={`7Xy_qP-PD_2C@T_-hYclqUH{#yMcQR0?M77Ky(tKLn z$;?J)V)3bmv2ij?-2cAt)1w?qC#BC(_D~Owh)t*4FK?j;N?BPW38&nm#_NlQhPOmd zM%|y>?>V3uFa0fTsJ2XAT~kCYbbY<}y=*s|ZDDWyITsI;t8YmZ z&I$y?&|%t5mZ3>+U0s3jkcjq$S#RIA*CiV=j%9t(_u|*Z0s=^AeYneyh=@FB!GT0S zpoGb9mx!`NC3GgHzOYd$7-FH9$H+ZN=rZZ;!~0odt6PN$h>jKPY$=by+SxrlX?+g7 zxtr!U7W|rKyIAQbUb?^NiItD~Ql_hQwiK%Sn3+#Wt@XNiaVOe==xeZVV< z`MHgfkqL_wa;F#AWMiD)!OI%nQ19zKpY;kbKJz#)eRnk3wC`nkWa>MKl&8fCn6wzY zzWe`4Hlyn*t^sCA3*U$hdz2F?(sj#NQ+r6`=U&3*a;mH3C*iX9Pg7zti7zNi+Z(!Vz z5H~bbZbjzPrJP_S9tLjoUmd^Cw1OV+45F>A5FP-y%RB3x<>c`99&i!kVS-x+izdY) z4!KBgXvq%3BEt&XR61WOP$C+a1GbzHKo~C`;Ke2O$|LL;Z7Shw;}d{&j1+&QErv2f zz1nfpWk6>f5+ee2Xxo&L4o-`x;-v>5ugQ{c0myLfA899^AkfUp5m zYFO+kYHG`coSa&StbX2os;)Ts${4~xd^q5g0&*fUS2&2%Xi-brRnda#Z zg-mRXf3(DVZl9*SHT3+oc4TJWki>0dXkZY{i-IwB3q%tRQI>tsv$3&ZdBG>Gpg}7A zI}igWiOWDwQxjeCpnfGrt3VZ`ImNSkt)Q<{4Hf(GGrJD9qBqk)uR{j$nbI3L^h#4Q z)V(QLQ(F-CmDACg=(Ef$DlHX+;m5=2k#S+H(kWbZEdAn{Y6n;o?6--UIU@?J^DW*N z*JnFu?Ph!`882LW2P6so~@|)0xe&)icYObl3ReVOp5N(+!?lli zwcwyxCAnIvsMlP55(<@?`a&@tq#R%KKRm1MT{*%ZDNBPRBP$k9=U^7YSv1lxjAxMg zsw$@q`6i*}BNPamC^+6#*c>c0&o$T7xa5qmK)!0=LBg{k0U-n@W|oVcEYxCNiSzct zDFft@)7I5_v!h~9i4X&30x>kt<2AQ0ZV2S~bExQeD4D8fIUzyzWad$rUkq-}7yK7} zS^1%&wexh2#0&5!Gz>ZI?BZhZD#k`f%O;W4Ib$>Dfu#$0j()8~*tfW@E_H=Ioc6f> zlKo|*U)8<$v0!$TlN=;bWj~t7hlkbQzfVs~wy7(SI4_llD|W&V8ZrvQOyIjbzTni) zS59%7wR_9~jxY8zvR`frDZVPSC#y#s>Wz);Wyga z#vCzJg4RcG$#E54IG_7CBb?h0CdDk(HE`(xNr;K^7|yV}0G}>TAsCsc48uYLWE8vO zIgC4O`4p=-a5*F-96(TtL%2_L8O&AZz0mB*Z#gj6aD&J!SDDNbR_H#ec1RInl#C<& z>!yMt7JAi9AnjkkcXlw&D)5E1nNGazVNiJSh3~a(x&B4&V zKY!kk<^3%ClWO6)JG+<%5jMQAPL&H&V$F%#G*lg{IUKQspaFQ8=v5ry*+{G?SrC0y z1n^=58l(m(lskW0yg(Xp8{`vgd+5~y9#!)}>rMVpa}FrF4SCQ15%H)XqWY@LYQJWB z?^8zpBH??9{UU04B`gR1u{+zCq-sVsgHJ>5YJ+8FCQsIsS!GS_mCwBpF>WZ~(}6z? z=Ia9~AnL;oUi#P3wYIjAmX=0)wVoq5k$mRGnwJO_6rjcGwEw(t2vYGXj-5eS(BVfY zbORvunB7}wSP2Fr1-xK{e|;T{O|tRxR~Hq1nEaFRIKp8}0Nf!MxZ>HoxCugQ8{3*{ z^Uv&G!%NAKVTdXxQm)k{Wu>Hw{{N4Rwf<<~l8%UDF-61u^5qNoEIm<_!fv}$)s{nQ zsRC;=wIw<7L@#|Vf3Iz`g?5EQv-NtE)FJt*E%RG0s2%c;*H}c+{V1U z`uRDa5U&=3p91;>O>^U`f>Z?4)6)Q*qN%U1m~`R&woYu1j+WLd)-G7+cGh?QRXV)9 zM9mN=G`py{m<8QjyF5#?FF*q`5!%T@EV~8z2rMitWZ`3G)rFc5T5=)IbM=+%-waKJ z^ylpBCalqnVF(m}px0iB-kIN~eWf1QE(@by;xdrjT=1sg2?0r|bj>;nbvu_1DrH}l za@h5Z&BKmU!^!cn+rh#h%(>w`P*dn3Djg&j7QjQG0x`n}wiZuyrxGiNYgzK}3-`&K zokGCq=hx~hsPS_{HJq;x^C@>+R&m&iqFBQrmsHCs2Z?0=tWA#~1v5Vj!$$e2U zRrwv1hAWN!IaWJDzMzZf1E@5(b;W*svn0D#Q=_bq^YP`%W`%NdE~ z8WcVPKQ%3_e0;n(0)1~q_QR{-y5h!EO;9;HjDI`6;IFPS13kzNEgVxyvM?tJ0&(2D z!IZ|IV(!!TQ9Uhw)wGefncXTNcY*EuLf=V8{IPuC$G{luWDt8+535Mb~Zz2Lg=#_H-`8U{IAJ0F*+u{uKqDg z=zdb)Tx?uk4$KfD-J#B6e%pDRMRSq%Rvstg>qIT=Cc3Q4%0Tt(=0ViA@puc+JPRel z2(X+H=(WHIn5+0Md}n%jdu36e)%Lt(_&7~SD13>5=Dq3M%t$#I8LQ#-VOQOLLnxcl zI|pJQ;Gz=?yW%n@7Cxp@dim31_9y)Us0gwmVck3Oee>^;+Ukql z@OpNh?tnb2-afwEJXa;#7O#nqJEdI~1DAaZEi0|}uEw^r?rpPsOD#QjPjkg{;Y`_N z^)K^WQUenBa%ys9msxmZYGxuR8Rh+M=AQe$1e1DN{?}R+4GjeYV!!U5O5AZrweWPm zM09S+r#S*%JF9Fsi~@SdyBpqDu`?4!C8k<TjFUiK zE?NJU?59m~b;B>*_p>r@bG=qj|MFg|tgS)l-0yGWjxz8x)zys^UO$qcLHs~VpK4;U z?1tP8WZf>!9x2*naWX^ppf6oNy<)fvb$PFmQtLO?`P^pG0<;+0n53(A&jZ&~a{)8U-dSx1b*C815pY&ce9j|8<~ob+#&+U>$pOg#$#< zLNeewk8xV@{b;+}3Bbl8DhCnidWbip5ShkP2N5Q4dxQ>;&lQS=uv|Twm%0NZE4(!| z1DEWPJ=Cf+^^hidCbB79aOB5-47~UbTvPaKAL0BZZXY-PFgs>=350RiZ6#uU$ z#iI)&_^te`;*y>f5gmA!)V~v4w2*A{*)6V7mRMmL8xlRFU%7iNM|op-C@~(+?1z`> z^d;@zHrakd!p+V+#@{wC(f@8w?ueC2aOi6GRMv4=$M+JMGURi_a#~hxqj(_5!#}@n z1KIwh(rbs~vwBeZ49}ggoJaz}Bwww;!iOLKj5mi5&ipPfSF(F^S@B$u$6MWONMI#s z$hYjmu|k2=e!|S#$9)EuPoF>DO^-w2F!RadK|ANeqoOVQ=X|mE1EDC zxj4*#DKkDI+6AwD8Vo3YNKI#F{#XIpzejm_RfFelCiKS5hjY)x{H^qfjLEZjX;jDm zC&j!x%({A-qaMd*78)aS%->kJ0z;qeL?3k3pXc$uN=Kqu3ocCSc z;ifd*8O%g>g>(6OOP_z}9K-2-#-W(ypOu&GKbFD(^ zHp}5=MLH={mhA7GE~gN5Tu$kKBPP#Z1;9PlPQae=XIWzOv4s7Uc-`9n&jerUKgq3t zLufKY2AEgDO1h)zUEjuk71i#aD*sI*VgNhUB^7;Po0*GR#ZdSXlxxg^_w>n6HO-Z} zM@5=(q?vu){~H#*^)lD1cIY zM#e{V-y0qyjTj8Yc#Do^KWVcn?7rr0zd{m6OJtaHCCG+oefMl%>JEUvLxglG+L7=I zP=)g6!n)N+X$YA~>f=PxMY?8@G^*)K|HTCH{|g&h#w#Ng?>J$;so##fr;5>__GX%} zxkur~5=Lu6`MJu%Q-kr;sg;bJBQo@(>9O5Xd*S#XP)@l~M24*K?~n#Ys^Jg0O?qFW@`ksZiR08m zkenKDVF~O!g*U`*$Mi>n>lO-Av{r2jqdlMLgqY>iDw4euWnx98;~QlZ?L@nK@4@dT z3?{W6sVOet(AxXd$wsD`-@yf+;&gAVGpj_VbWz$aPXs2?OlS}?e_Hw$*A>qHKx-+g Yw>a>bj2-;&5m1y>l_`@p4#LCxKgL`jXaE2J literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/impulsex1.png b/html/includes/jpgraph/docs/html/img/impulsex1.png new file mode 100644 index 0000000000000000000000000000000000000000..e56a0cd1dd7efe6c7479ca2a43feea976cba635d GIT binary patch literal 1856 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 Ic)*o^1N${v^8f$< literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/impulsex3.png b/html/includes/jpgraph/docs/html/img/impulsex3.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f129feafd779ac131ae20e216cd78e11ee1fbe GIT binary patch literal 2684 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 Q9t;7O|FXVVbHOd)AHahe(*OVf literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/inyaxisex2.png b/html/includes/jpgraph/docs/html/img/inyaxisex2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8d09dc9d910068e72b54f78d52773ef93ef8b7 GIT binary patch literal 17294 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 CGu3+l literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/linebarcentex1.png b/html/includes/jpgraph/docs/html/img/linebarcentex1.png new file mode 100644 index 0000000000000000000000000000000000000000..2862f9f5ecf50f01dba30bf77133bff497c3f42d GIT binary patch literal 3443 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 S|KFaFmb$K5tttjfN%=oA_<_m* literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/listfontsex1.png b/html/includes/jpgraph/docs/html/img/listfontsex1.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd5dbc08a3ca64849eaecb9edde4a680b67ab8e GIT binary patch literal 34037 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/logbarex1.png b/html/includes/jpgraph/docs/html/img/logbarex1.png new file mode 100644 index 0000000000000000000000000000000000000000..b9939e86ce8b71e64abf57520ddae8bc50286c4b GIT binary patch literal 7481 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 ajwGXfq?6R|)9S;Ih`h7{Do;x9_5T1^z-vJO literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/loglogex1.png b/html/includes/jpgraph/docs/html/img/loglogex1.png new file mode 100644 index 0000000000000000000000000000000000000000..041827de9089cca9caec3346735275858a65c3a0 GIT binary patch literal 4502 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/manscaleex1.png b/html/includes/jpgraph/docs/html/img/manscaleex1.png new file mode 100644 index 0000000000000000000000000000000000000000..68cd5eb9bb4c28a125ea2f970a322755a8c9aa1d GIT binary patch literal 1905 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/manscaleex3.png b/html/includes/jpgraph/docs/html/img/manscaleex3.png new file mode 100644 index 0000000000000000000000000000000000000000..f8a9783cc8f80928de6c265571cd9e2664b17ba7 GIT binary patch literal 2058 zcmZ8idpr|-7biX}73T8x;+d2X-iReJ*CON|dsd2!HkVwQ(KNS5$#tfQdc@;Wj7;03 z63Q(m*@%ab%Tkk-W?PGyndP1Sc%S!u|M>mR@0{QHe7@)We&>8oo}Z7~9wluh85x;9 z9_}t@q;f;LUITVWcOSdULozaoBOWf!fyosdhIjFU%uy>KhLhF>Ff2^)a9^PbQ11n8CC!j%{;EE7mZ!>1s_oXzyh?S>NcWSRb z6_cW$qsUc+M>O`so+yj(hD7hw{HfsQ4sY>j!O%n!q_grKE+=?gS>)kMTw zE+DH-UzLe>%7yIM|9?s?KVV`3u9)gpJVuKQ@+-=3D5%BQFGNz zPXqijUa8*!Fs#Kc*)}1&q|a|b=EGyl$pk_+!+b??Gcr%iwT+o2^!#QWhK8D!&ZND% z0F5jzBL#J9wm`_?WRojCNOH9Cba(8sthXf^O21Kmu6`brO=UHvW3SvS=~I=WZ9j&E z6pb&HVG7%Ic7lU%#0 zOlR=P!milwifzi)y_UU)$@9446!oxxCv?l+a9^=1FR6w)MYZg0Ax7OJE=kfcG-e8X zVdsT)GlTXy4-D9HH zUM_gXT`WFtM8u7?FY!rm)t8+&@RTgPIMlg{B!c_Y=TwIy6?S2rnMF5scn;B{{`!6v z>Ic6Z{ib+=YVSU}OKod#y#-=!mruAXj4a$x+p|fwC@6dFZ0^1}8HqCb;(0I~Q8DvJ z^+L%|GG-Q$wR1yOd)*)tNC4kPb<1}u4%`uEH#t#D8P;6C$q}6>Lz%jK zk7!}o;hgH}yn9g1QFtcyfZvzxjgf;`BBDVI>j!|;R*%g%0wK}maN zt3&>&1M%L{qNeY&J*@9l@V?L6Q~P1~TALJNp!malJw+OiX&X$=Jf$Io=`(7@FyJ#4 zqa2ah)#0!rM|V1(E6=#KqR=(oJgotiXUMhY@i2kM`f+`pI6%xDU>7e3bOW{iGGNNO zg7CTVem1F?C?x#pZrAaYuauEQ1(|*6=u^eiUSjl+paC!aRVwfHfyar?1=LWr6EFMd25 zUeUmU0J}8O^f}zHN$}&t(uR3_$f@7)?#o|bWADorLv-rA0o&sUmqrKl<>?^o1(A#tbN$^$v@xo6(2&SS zYStmaZnrn~*zo88x$D$?Ej}Vk7BvGR)c%sa-PY31!%2w>hxu=o+3xv6NY&TtsHv@D z71E;i^pf#5`Ak25LN=*TFMzNcdmWqk+$NIJ)=;#t8KeE_=%cGMURK;x580T)dEics zCQ`l=HAqNHg36vO?%#bb2mLqc28tO19zxK4_uaShTUO@r66+1&Y*L?(fJt_23l)85 zyEtbQ(Su2x%g8Y>ir;9W2{ueC0j?bfw|9u{vUJTWiD%exvu;siqtTO^hIgkvr7ed& zYOr_ls!G>pF$yI$EVo$xXqu0Ag0 K6QS3Yl>QAtD-=%v literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/manscaleex4.png b/html/includes/jpgraph/docs/html/img/manscaleex4.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad8d2c6f486a7e014288aff527542c046d34ec2 GIT binary patch literal 1889 zcmZvdX*3&X7srFvPRrOy!$g>1qO`*#(y=GPl%CMm5-CDUYpBSO5IT)2#;!@zvDX&G zOQcK}OGk@XO0}lbQQIh?XrmPpiKUY>^S(W&=k15*{?G5jJ-=IloM-$1vbv8r@g{OEdCNBJL!| z3TL)?X`3OdGdab)Lp;5RJIN;s%8G4~J=2b>&)&#PmlSp@n3LBU9WItHrV4oPm_irqWH|VaH~*_+ zBk7Ndi6x{^Up!H~Ub`^^n(pV%$xZ2Y~+qektvFOOS9 zuyLvAB`B-Z_n4?Rqw^RX;qL(w&_me?8wSegOdYw${Q9i|l_ygZ1%=O45(am9EzH;_ zNQ+%z8+~*SgF=HDy$xU5R5wjA|A^l;IVP%3dkV=~i@bv-Z8Yb@9QE%5zd_F=Cn)uq z8ce8|2S(E9z8C#IM7`>IK>0<(pwc?b4I~G=p>voLy5{cFNz`+rxK^QC<6&1g)d8 zNAFohpafleAB+JGMK!n&^SIv`ol_h+qqvlE;(JZ-O#}stQVuiq|Lte>fy*D8Yz+A< zEN(+V`P}u(xr_qE5~{O$aqOq1ep2@*0JdH+n5(@hgTcZsH|fwauQ27oSXUVoTG3i9 zAv}7$OZdfN=#p4=u6E8+9}7b)_Sb|jiQ8^uFy$jrD^BJJ7jhIEd`pbaKTD(ile|su zSPwPzcdGb*$3FS_zmQ2$Cms|SEmVr-KWFm)QfwLAd5!(6vf#%|eT9&?xB%-2=mQxK zN`D|X{hhwUTc@FvUlFJf7Vs7}Mhvj7G<&G6TqSFl(6&3fhT4L>x3hm~`9(dzDm9N{Q zzc}@$|B`L!d@6jA((iQcMt605OjJ|sV3LbN{NPp`YqKzwP@ch`pWZ*QoHP^sr8b9k zWoq^=tK(+kybw`V&)2dFC1B;=p97w*W-@`NY&Wyd5B+6{=z6Vq;VOf32FS#p&4;w~ z{e%@Z5<-a98AU_@utyEdBO^v}0eNge=PORTRyH${`AS~W4COW&_iS47OcA3KnIdzk z%A0L)%%SJT;{qiGL?ZB9qt)};QXKa;KYX!|Qt%A(r09%Rr48g-z#{f)aN07navlae z9;9<>g?Mf0HQ7ZMe?9TY6$zaLQmFLgo_6sheUGN}`Zk8xdu8S6j%{$l3S+Km0?}1` z=7K!*X{*t#Ax;ve*fT3nTjTw+D%IQ?H?E0|-|`&3$ErH<6Eu^H1Z9b~cgaYr@^=C;^}+0O!b4E#ca%}n2rsL;acgrj zd=Xw9`|bR7?doi-&`>}nTjY`Xfsel5?Q7l4@FtW$ab=)(`cG~`!^&M@BEF!~2W|$* z-FoYgUqJM4rcgQx)uExeG->3THFC6Uo|*98ku?0kvd|uQ?RhDwQvYLBn?v$|E1BaP z^p~Yx@5`0afyp84xJL%vw^fM!L#pvr(KQ!zOdhpPo=$_&&a(wn#Kx@Ri2Y~BSGv9b z9c->5)-GEYfr3fwZE5twdhS?Fn6}kj7-X)tCo>zXi8pu?d1sJ`BM~(Y_=H$OT4m>C zbGn_?A9|%3y|~~h6%F?hdlYT|#>Yj)E@MR>)>K}_)akbmLKY(EUTs3N?OxT|X!g$C z)Jt`19A}tGN=I*SV{6o$FXw#s!6QDs=%`GwCOfPmq7D4{+>(G5gOD z#@{F>J1iR78jP*~n9zkEYg$NONpzI(UlwJKvAw$u*|E?`y$Mv|3(#nj=W5?(#%;>J zAI^e`N8)m9APY%1oCPyM7^RD9YbmoM_Nq$%9SQRjh|@k{C91Yq2~ M-I`rOXv)fe15vnffdBvi literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/markflagex1.png b/html/includes/jpgraph/docs/html/img/markflagex1.png new file mode 100644 index 0000000000000000000000000000000000000000..de13832be8b15b87ce3b2c2f1f76b3f0e3fd5ecf GIT binary patch literal 8137 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 JX&?^H{{UgjB~<_b literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/partiallyfilledlineex1.png b/html/includes/jpgraph/docs/html/img/partiallyfilledlineex1.png new file mode 100644 index 0000000000000000000000000000000000000000..868f0e772906ba66472833442da8ca3320d9c13f GIT binary patch literal 4284 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/piecex1.png b/html/includes/jpgraph/docs/html/img/piecex1.png new file mode 100644 index 0000000000000000000000000000000000000000..3e151d810cb731122fa208fb75f17e71b320c5f7 GIT binary patch literal 11485 zcmb`tbx@VjyDz>$y1S7QBm|_pQ%XWXT96LuZrF5pDV+jRlG2T|bcb{!uxYr<@0q#t zi!=BBbC}u8%jTUo)_UR-Pq?az93~nW8UzBtd?PQd4uQbE`u9PB2j9S`NNFJuYRDUD ziFfW_j=uW5OEO*QZ;zs*#@RqA38M?6O{bAl(=#1uDEZ@vfqY3&EnFl^p{BvinOE zibs;;rj?!BmG;%kpC@R}TWm`W<5sZrY`S}N~KR=V06M7*TxJHUcBXNom z9!KpSA}x<2EJgbQC5r|Z4`B==0YykiXmN27xtJ{whnSamJp_|nPhX#slJe`C?;H|WJHB?k!b`&XR!j6}JI`64NX20u4Mnvo%9-3I9p`nqHlb3z_ zX0wps>+o=Uxwf`8K0a>fd(+!Yf8bKz5Rs%n@4wh!r`rGv`1CWr8Ui;;F;rE7A|xm{ z7dkL7fJx5leY;njo}Lc*_U+r>^YeKvL`1}5m9MuWcD|n`Q!XMyLPBCmSn7Nf9~(3ahKD54-EEXXio(6JKI`Q-B4n zaR2P;$8;GiSfKKOD@C#b)z%m4$vvv14Nk{&F;LvOay zkV?$=UgNDuuW6Il)v>N!D$ndc%rv2|P78Mm0r|n^*CpP_N=YcpH zI5;@1N`s?{lHJ|i_3lu=hs#;W!r~(Fs}CK8?M^$R1#c3c``w?B^L^fRnQ@l+f_(OK z^&tjRMqIoDoPI}v+(-3vEjLqVIay@8Sg(9_VPfnKUfO&(jpOrDW0_WE+s$_7r~Vih z7nkUm7_)#MqH=xGgKo!5s3<6DAZFZFeXjlvvESX@2?+>1+|IVQd0l<)^_iela{9%` z!QlCU_Zf1;5z*J)-rn*E@YC1VcX8qD=H>=bD6A=rb;01ft01F=7xLc^R_VxAktgB)~i3}r2NKKv9 zJu3eVg(6gFW+o^1{w^*mvZ`D7(;r*w*M752-a4A`Jq$B2i#};+i-(8DC*}rR;PTfO zPE)kIUl*sm+}u@kXu*slSLw$H*RS*x1-^Zf;(6#?#5ob%Lm<(7d}nsI2vS&-~ug^R_RVe7>sf z?)WEz6%!NF1gl}LYLy;%@BDlz>(}G2L|-Hh;^E=J4(GcO_V)JXCnhGw$L&woIL_$#wkfN+v$HeE((>{=sa!*C5eph7 z=2mmQdTG7g>ZmA{u>1IhKb4ScRN)sca~1F?%`OLDzJ7hFl-AM4Bhtdk%Gx~1CMxQ? z^()ziq)w+|4=IyPfSo;-MF12VF0MqMpVqT%k#~7QX+=YP`Y|g@RW?Xi&@9)*5@)c; zU%y7np<-jRGcm2>9WFLt`|GjITGiRw+77Gq_4Y2e`FMft1Eu3o*X)gFenmxe^wdPy-%F38`ZbK=oukK1Uis#}31L41myKWA|)A_*S-w3{bty-b! zq-Yo{nd_4?wl$PW?h4{}viPlef75E#yzXReN}0n(PxxU$(X^GWj?UbUXlO%qb^KjA z>}aug+6tReum{1ixzi_Q_-iB`E$y7;#Nr}($Jw8L)`Q5Ej~Q&M&H~L&-5aF*IFJD& z#kq{}-d=hxuF3g%ffp}&R#y%A0(2^nIy?<@bbdYBT3DQ(of#=U#l^*mc){-Xwc0t= zA`=r6BO?{9tq;IHcXxF`q-AAmDistJiCJ|DG8;=u!hGcA(v_h^R3M7egY@6+9C?U+rn zg&@V>6Thd-=|-PBS1m0qSNonY+$Ght=LW|S16{%B`1tr|Ydez`+{??$QXv?76`k8p z_Li2GQlVIg9kQTRw8bW$GSsuTD+% zU~O-04Vu)@E2h{i{Mg$o&gLzqWsv+F~?7$lp&jyAyxwk8w*83q;> z()jdra!Lx)$D@ThWGo6$gy!n3i6QAqeP3~%g{+%tUBitp_otU|)0K)QEHW}Pm46iE z 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 WJzt0lhL$03WK^WTOMVPQL;GK<1wSPK literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/piecex2.png b/html/includes/jpgraph/docs/html/img/piecex2.png new file mode 100644 index 0000000000000000000000000000000000000000..2423350b005ae5a498e947956f697f1705feaa1f GIT binary patch literal 19535 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 NT%6n-si%Tc{{~X<91j2h literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/pieex9.png b/html/includes/jpgraph/docs/html/img/pieex9.png new file mode 100644 index 0000000000000000000000000000000000000000..92b101a2bc1147062bdca5adbc796a71d847937d GIT binary patch literal 3033 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 MYwc)Nd)6!NKfSmM9RL6T literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/pielabelsex1.png b/html/includes/jpgraph/docs/html/img/pielabelsex1.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf4c7905d5e548c1a00d787263fa8887fcaf237 GIT binary patch literal 13195 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 T@GmwX83{%4N>Sq=1cd(uhXZb> literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/pielabelsex2.png b/html/includes/jpgraph/docs/html/img/pielabelsex2.png new file mode 100644 index 0000000000000000000000000000000000000000..cc1d2193cbed8f4b866220fde1cad52cfc3b0ab7 GIT binary patch literal 13890 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 ALI3~& literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/polarex0.png b/html/includes/jpgraph/docs/html/img/polarex0.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7f8bf161d060826e45718a2c796ab6850fc807 GIT binary patch literal 6687 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 P(PT)tp>{3IHu66Jf~N2w literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/polarex3.png b/html/includes/jpgraph/docs/html/img/polarex3.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2fe0652f3e1dcd059daf07e1f33b07cfccfac3 GIT binary patch literal 6052 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 E0~9Y>{r~^~ literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/polarex4.png b/html/includes/jpgraph/docs/html/img/polarex4.png new file mode 100644 index 0000000000000000000000000000000000000000..62ae5a4e0388ab1178e634165e3d2bdec93104f2 GIT binary patch literal 9022 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/polarex7-2.png b/html/includes/jpgraph/docs/html/img/polarex7-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b7bd0648af3729ebadf90eeab21ba7345a2db54c GIT binary patch literal 22871 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarex1.png b/html/includes/jpgraph/docs/html/img/radarex1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a7aa13251610c282b98e52d399f14736c1db05 GIT binary patch literal 1873 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 Q92rM|lfA1Q&c;9WpKH`f^Z)<= literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarex6.1.png b/html/includes/jpgraph/docs/html/img/radarex6.1.png new file mode 100644 index 0000000000000000000000000000000000000000..1e093188b5bd298155e49eb7042c9b5dad8e755f GIT binary patch literal 3127 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarex6.png b/html/includes/jpgraph/docs/html/img/radarex6.png new file mode 100644 index 0000000000000000000000000000000000000000..ffece19f77581840e622582bfd43ff47d930e75e GIT binary patch literal 2952 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 PwwUV?lyjqFaN0ir%y7j} literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarex7.png b/html/includes/jpgraph/docs/html/img/radarex7.png new file mode 100644 index 0000000000000000000000000000000000000000..fc76f93a3986b1a3726ff2594fad744aa4a4c407 GIT binary patch literal 4243 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarex8.1.png b/html/includes/jpgraph/docs/html/img/radarex8.1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d704c861ba000aeb534cacf33fb1897d5993636 GIT binary patch literal 7479 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/radarmarkex1.png b/html/includes/jpgraph/docs/html/img/radarmarkex1.png new file mode 100644 index 0000000000000000000000000000000000000000..de79ed6312865c059cb11e64778a46e087e7af9c GIT binary patch literal 9064 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/rotex1.png b/html/includes/jpgraph/docs/html/img/rotex1.png new file mode 100644 index 0000000000000000000000000000000000000000..981d7889f48df89dab09af643f90ea99dcb631b0 GIT binary patch literal 2991 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 lJjWz86BAu@28{dqrSp48TLYewm@3;T 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 WpcD=x9{>OV07*qoM6N<$f(i;DMRDQ) literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/rotex4.png b/html/includes/jpgraph/docs/html/img/rotex4.png new file mode 100644 index 0000000000000000000000000000000000000000..e4619c445ae839bb30e76e65764316abe60ada74 GIT binary patch literal 1540 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 V#pF>rLig_UFdkTUHahy+e*pxyR4f1h literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/scatterex2.png b/html/includes/jpgraph/docs/html/img/scatterex2.png new file mode 100644 index 0000000000000000000000000000000000000000..c51579bafa302f295db0d373856926a4992a6907 GIT binary patch literal 2359 zcmb7Gdo&Y#A7^q6&$859hRH3a5PEF&(3qjQwMOLk7r+0&t(B9_M*+}N%q${~ZADrNO!Wli})V{A48z`CP z^eBGWv%=a?AzlWyy2HDAkx4$IonoM&DJyT~F>KmLiMsYCIwt0>j9At&I=*Js(%wR3 z4;2VJM2&r$)FcvXp{}m}OIkSRCUZko8||N7s|Bd9LKUE%M;CSJc6JuOo8jPdX#D_ z-D7?bEq-YgpixaH49t96(P4ZRNfRE{o|Nm>xRF6x$uO8rHotwZKVapbaa?js(dbu4mGzrP@nA+NOf`OSS!L76Q%<;D6kIl|&oi-}z zh^U$gWyrCv#jd)AVLF4Ep8xtLg}g5&{Qa-3Y<7SBIceWxW8^hHj4g=j0S>8(zxX|@ z*VLy`tzw&(`bcNb3n{3Et(2%SQi`?@X_X8FT>9BoF!X@*yia0Cdu@ zgAcNkk5d)TX1(`XAG~_Bm%7&n)s-EB9j))3TMS2dgQsb^xw&hSCzaa|$-NJ@C10+tDXQvNNH&FtN|e(w@czYIc6Hbfv6i)3_Y1 z#J_Lb(Aw)i5O7gR;b)z9x>SsNL~nu=bPv24f5e8g|7k57|C=LL=#UD2$K09zkhFZK>+;QlX{rpyvS&9G{`JQ>mks4ypT8- z$TymFQAcx(?wX=~Ib`dW@y~J8=ntmp!x^l*EFlU zsRNzC3nK#aU`$xa4+XpBkB}CV!iSa#0LZby18#(Qnc+7_1HIIX*N9Oy7Vt08(gXso zunaT&ry4VChrO6YZ3J+rT@`81%ZwJIUQmorM(@ZKpXw9|!onU0eIm+FXblV+i}j3g z68*=rSvpi=*KK$|2=FxF_9lnpzQr2;&+aAT7$U}Q1oEvs@1m3~>MzD&C%DtuMk!C; z56VI@ubJ>xS7JyQ)u@g*zdm0OC%Vf$7M`C9!FC?}oS&yVrh|MdPQGNwvM5G7mtGs8 zvb7%H>_MF%F0I`G3g34O{F=~r;A?*4#4$I*CLSx_Z-UqDn|xELpH5OiptL0?A0CiU zTTR6=E-^A@4i}%2P-7x11KJ_jponMs>HRaC$$#E6OD2nK&e+I2R@Plph3Q`v8pK#)jD2Aq}9+wuz{Vi0w;_G1;Zh*0h%ImX>#))v-*lP2Whe z7WfT#N>YxD_|)UC+-RDU1>RiEzGV>_idV*)QoDGsnUeDp`EetROO^O5voTg+#DN_L zTYz%}Nd2LaJBXh=6z=t#Gp(fR9EeZbw2UMFo)EGCc6}u3u{%g?q;jWcLPx^;fMZJq zrA>nQgz`p;47+{tEUAyMrm&{BaG@9!vlfDZ`p9bVvEWR?zxs~%z7iSM0S|L&!D zWnsa2P%}f$Bi(s$G2qh&YwMM&w*4eLS}eC_CODq4p4YMhl`UywUUJM5o~HF6l-oDp z-QNqLv8|))$Nf!OIwCk2sHS4%r`jnH2sSeJdV>IS$p7CEy;VsCB4?~? oK5TY&CKl_(I+~*Y)l_%H9LGWe*a{Tj?uSUk9_3_HhV;4h58IGW=Kufz literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex1.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f80cb500f1aa2d707aac3fa2281eb0249c0b3e GIT binary patch literal 2751 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 Zr#J}}%~Vj8$MFQoWMX6isWfnn{s&s%GnoJY literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex3.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex3.png new file mode 100644 index 0000000000000000000000000000000000000000..6e015e52769a851cda771a43f81cea02c92edf22 GIT binary patch literal 2433 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 T>fxODYbD`i?_yVHgTns>`PZ$g literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex4.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex4.png new file mode 100644 index 0000000000000000000000000000000000000000..941070aefe9b9eb80e6b0ef28c03c58c5dad290b GIT binary patch literal 4156 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex6.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex6.png new file mode 100644 index 0000000000000000000000000000000000000000..00ce90199489ae22ee53fb9fbac9696f0c4769b9 GIT binary patch literal 2192 zcmZ`*c{tQtAD0Zqq%rm_%QPapYAnf(Y363^%U}>qdhKfwF{HTD7}HC{*vXa(6RB*W z$v(17Docz|meOJwj3w{yx$k=KectCe-*f&s-}C)^Kj-r~&!O1aoD~+572@IH5yqOM z9e}k52$~=-FpIa^+3@fPx?s^}xU2bJCqu2oeB}jxOtDZBA|h@u{WsGQ)UjLP5M#1w z1VQq=?j4fm1-(4I_r_)wM?OQQmO9yfG%aNz9Yl^^>)5g5cC*iL;4wcjWG=?_vDMFo zdl}CAV0`XPQc@wl#1{6IotT#OZHmsv>4tfum41`KU9JS2ho2V~eM+H@yw4va-l>KaMx7;I&~ zb6%UvyG$*us`^Y;%pe|wB$()g`a8X~tgfb7SR(nupEgEs4HS&n7HW>ym<7nR#Bx*H z$yv@WZIL?-m*-(*5tjdi@=>Rabsulv?mg>r9t{vRDTvF}iCu%i>~*C#IU{LwZHA9~ z_`>by4D%=h7^u5@e@hEp%N>4g=h4M(wqcx`Ohb=}K%yD*+9qvy8@Y9esmtphWS7hSI}f zpO}3`@iypi#)s0WYhsr#CkF-`IFvS^?3zLv!B6`RCf)y0UH_3LFgb~SvNCKN%;ly& zXOEehHnwQ#*!J|w{Bq^J+}+1s!{Y+ArPua$j*kTmY;C2Fy9trX z@_Uy+APM8B0c+bS?q`j!p7MP(7^`Zqq9y0V7w%*Td}U)zB(1KPF*NN5^`HB>>uH~{ z$5Ax$@|&M~Jc^Uf&6f`e&1%b+mA*PUGGA4#Qeqk!8s=3(nC;3hfzQ9IZiPtw+SKe4 zyHmT;t?>)DBWls%12dBx7k6np7sCJ4Agp!!8^Jwq>MMPsPIYMb&eN-x0A2l>YJSli z7FadmRC(*$1X>b8i)D%D=E&@R$~xV)Im51>vS6gsz9IzA6ckL4xx!;&HolGiU2bJ2 zH|g=?Iu}L5u)y!^wiLyY1#h2-j3oKKtU##GrReCNO;_&JhwiOTMh)&%V?0v7FdhvM|xaS!^N7 z8bjCCMC_OESzjVg2ly$KFvL`QHaT~Tfm`hyz`vHICcP{k${w*q4*+Mbcsw^R9(w%s z{duDp-1y~ytDAr$wkE%2K^1W91$YTFZd+lU({F8Cxnv|?*cd+*wU}P|JeHes=u-FW z!$)na{RYLVwt(_2i`rHZP^WYk*Q3HtneT3kGiBw%Ei7hI)Ftqm_`T}dAbp~lnXBV) z@?OmpcdB>DNxZ; zQO&_qx$)zNb*e=RRg{MpT2fWKArE*9o+L=X4wnh7wHHJYZV>iC_#k*C{0m;-#S)aP zF|D}{N&sm}8scA`YWy^s_5Ez<&8~<59I0OJI_Mti|0XBECo~Z(FPJWLgS0hcQlb)Uu~Z(_ zc~F6CpH#x~TfeV`^;XBxhdxP{TT^y7;&(3kZ9_e^d}XmQj^{5v;8zoN0AUl6{{bwb z`6pHqn)(oSw@wacfO%+odLmlje+c{|9+mYMsJo=* za_wZVK0CBZP}mBv$WI_`FA5S z;{kxTj@gx$k_$z*JAO)QD~!5Qjfz%N+KTel!<+;)BR~*<_Y5ZP{!R@NMKM9}0SI^l z|H4u1{2>R&6~$6zd=9)fm8C1e`#Tdm5`SQMbib>57u?xT^?L|;W1N>Fh{;oWr^)wXY*q6dqL!Htln!t-E^SEf%U%iweKQoQw}zH&&B!o;J`_ze~5gU}%Vxk*1E7e{O+9*Nd>jy{;cWF{?r7#= zBUIbds6^$251P)>d4^%7HV72WZCv_*7^rX-il>^Ix;#Dk%gb0S&+TjS-J`OLetw)K zk&x0iJWPrjHJ0dWDPeKqw5tRuZSn-qVhMN zS}b>>uNpWS2aQ(YwbmRi|zqZmz z{PI8k8LKs%ealHup z#<;rWRMU#l_V#y@dF@)XMaGdm4rwCh=?wj&%O805B>~|su6bthZ>$9?WV4Vi)5>9s zK4$G~cOT@>`$iRmi~BWR6kdI@AkB>w^4av+*(vFixm*Gf2a15y*QKpY=k@e=B`4?J zV>A@qeNSp!>^Z5A>r8g+x_L`aBFnqiT%D6ku)_}Xc*Cu&1K#Due0zuei?YHU1Fer7 z9nz1)(erbAuIeZ8MOZ)VP?GufJQSYhK&VpVxYK}Nm7H$3@&ItJJ*cvA*o~P!p;GaiJ@t;rVn8^tVmF#S)<( z7qjqNt{^s2um&$C1mr&ga$MnV2ZBbKl^2YVG;$E5BJ8q19*0U&*4n7WIL63aPgoC8 zhhXrSbt+0KC`0*$pT0FnFm%gUPHhcYp-w6w|90$5+2n1P84JGp0%NB1|8=24dHZU+%eH9g&?_t85H5)hWFBraiV%Am#E zG#Yq~-=ixqh@5P6ozO|;Xw z@zMlth)|{~Q&_nqScJwc@mU?0h6hk*h)k`%~ z7+0S9=t$2-UEZ3qPsvo=rV#(DThK6f}*%nBO0tg3M!>ay<=wY2(Pa1~}&R(#3D2DJqgA3c5 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex8.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex8.png new file mode 100644 index 0000000000000000000000000000000000000000..31f8b23204c26a4f1645965727424198b964f3e8 GIT binary patch literal 2824 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 R4nADK#OS(Vxq)N&zW_63Z^8fo literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/smallstaticbandsex9.png b/html/includes/jpgraph/docs/html/img/smallstaticbandsex9.png new file mode 100644 index 0000000000000000000000000000000000000000..80ca770fc719baa8db270dcfa69a37dc525b06a0 GIT binary patch literal 3091 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 aZ;zznMyFAY3G|fDK9# literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/splineex1.png b/html/includes/jpgraph/docs/html/img/splineex1.png new file mode 100644 index 0000000000000000000000000000000000000000..435f8223a0693d6a362456170ace6d8f78463274 GIT binary patch literal 4549 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/staticbandbarex7.png b/html/includes/jpgraph/docs/html/img/staticbandbarex7.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa524f88af35dfc6bc80a97a705dfacf43536a5 GIT binary patch literal 8292 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 V9%=SQ7c79FXEI9CMUn>o{{=;u`}F_- literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/stockex1.png b/html/includes/jpgraph/docs/html/img/stockex1.png new file mode 100644 index 0000000000000000000000000000000000000000..8d154e139515baee5885c906171e0b633fb264d4 GIT binary patch literal 1999 zcmZXVc~}zI8pbuPuyn*qOB0EEi=0do_uS|rMkb|ZHd-zaGnyh=D&m%=f=oG*O}D@( zog_88E))@Jr2`n4AzAJSE@hILSePc`(xqmayUai5oaa2>InQ_A@AtjuY~VqZ(He_2 zIyyQ=e*2JzbaZrgYS(Rm71~kp&|f>PzU+tm$KkZAQwmtdpv$IJnA-vLa6azNym#~d zjB|54RACNK9|tJ)^~g6_?a#OP=5D=FrZfEUJ;tU||Jfo!XGKn=-JYAOq{au?OXdng zw`#hwYPft*CuTbthz39yK!iPnjA=o+j@U((mi>%Ux$4PVdT%L**?uzx@Bssoe}0T$ z6bNp%o5pF>i%th(^=@THZI=xF(&31GA<4nerZ+$=w3FQaEF8x1gg!`RNUfYW%$=5zuEz3- z+=e->gRA6%=Cb3lv>7HoprLb_5`FjjfT`n4-O&%>FdL2DdES-fDQeZjd+E|6oO8QQ8Bl733S=q0pIL4|gRd8BbN%LC8OR5aZ$2vKdcT z)TKwZPHAZq?-$$;uN~~fkWzZkr=KeR@@oy-)Uhio`_r=5jctLg^c?T_K{gt|oAn$X8ansD-I7mFY`I4` zk-8zz6o5^#uq?=fMsE>ENXeCZAyK(NX~BUNkc%*g{(1xe`nCA%Hbg)~-|TRxyYQqv z+Bqi;S-{p@^KX97?<6X!X-0}5K&8q${%$8Fk{jv^z_MN zt9V}gv^FO^XdK-?40mp1#a)OQColh$@N2%Q+xmm`!y#&*ddh2kr2mNTW1qHQZCDOx z?g2fkw|Wf1$zGf{QIHpQ00kWt(*a!X;tucZ#ZB5BwaH3-8?ZpM-zv4w*R^Qxh6acv z1>OI=`*q2#+oQ1kG=oHM0NQ;07l!|oQv1G2)oY`eW@(W)kd#8gRxZBV>V`jSdi+_Q^~-hiQ-I_;wm?wTxLOim+o}& z1FG+I9k$%AI*zAl#p$~KA7%qVbQ8fVH#|y@se9WBBp7QyySl~QvUrUgC}}nPO4Evj ze(RDj%c$<=I2aEo*!x)WVt6>4kXd^Cm2EeOLYOOHx8yZ{vdF9YoJ=4NnvPTig;q!y zY~w+hP2t5;1mZRrzJ?m+&&0i@j!~Tc;nPi)QWdvB|bmmJ93LV0v$Z zFvovC|3e}v#dE;{c~BA5_8kW8w%Nsij24lB60b=Jqc8*VAKZ63keP|wOe@NdrG{*8 zLMw*ehI& znwo;&>uh2Tw!8N=sDsqJr*v>i38GXGh^Fo&0GVLbGUhx25Wk+EYt1{hRsJqdnzO)Cy#deovqrF`1daG?kf(jY%9-Ob61tL z(|Lhv;E~3@OS8MBF3Ys?j@27oV65epAF`0T{B~;KW1rB9`)?=Bp~1U^!G2rD($ceK zn-Q4vTAFcRJtwqZN$%;88wLlOI^P$$eB9ygS=Vu3ywCtkd@>*sBW=Z~B7!P}l=fE6 z(^Wic`sT+-qEU1Az_|Z4s`$xF@Fy-|=8Pkjct5SC$>#>#AucwVc%R4Ph_T0`DHg^T z`s(2k(xmSej13@?5Zns9(}zjv444Xxu7>40TeU8wXEs!l$)KWp>Vod2f_A^Ico<(0cElYbj`jOx~Y)H;5?2a$CM HOy0i%c(K0T literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/tabtitleex1.png b/html/includes/jpgraph/docs/html/img/tabtitleex1.png new file mode 100644 index 0000000000000000000000000000000000000000..c3930a6375f51cb5ccb28f4034735ece07256125 GIT binary patch literal 5077 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/theme01.png b/html/includes/jpgraph/docs/html/img/theme01.png new file mode 100644 index 0000000000000000000000000000000000000000..18f8ea04a38e6e1cd5e964b10e914c6f741fc6d0 GIT binary patch literal 3698 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/theme03.png b/html/includes/jpgraph/docs/html/img/theme03.png new file mode 100644 index 0000000000000000000000000000000000000000..aaad2758c4ce2961de2b2f81382b5828f6d71c1e GIT binary patch literal 2280 zcmd6pc~H~&6~IwzSx|7)ZjnVf7UO|fDmTFdlt2ItQAp$ppss-2P>viB5a^-;8Xz1Z zmo9P`jzACsIbbO(39tbnKr~!}fe4tOkr+Y9Z*kntbjJ3-PN&~L-t~Pm@BQ(4Z{F<- zZg36t@6=UPR5V^D2M?;XKL_0DvrF*p>%~87aVM5RdXw zDg~B#Sx}QK&$EDe3ozY~6_f>ZcZXN=RDcu}X#z^NLqkR7n`jr<85FKmQks=lX}#N# zEmR}|Kp4HcyX~;fRfl^IM5PoL{^404S$FE2OErJkD)IZ%OMT;TI9K7A{QT8@U7(#~ zk!vT3L5PMDG5gmBbh)4Mokfn*H8)sXoj-3GP5LIXjGg#gD`RdJ>&h8_k;X3B_fcLs zTKJx{|9;B6nev`Nu9oBWFTENYTa_<;@R%HGP?V{ob4Q?KBybMyZ6kxoe|?1kI)s3j zulEK0sGOcXS1E6nYU5^#?{~3n;Ojdg`V;jp7R6@{znPDhJ$e>*dDT=wsF8E(zMp4m@S_Fw1*7pA zlH}nkI7$E2rCJiBm71WL7uqI_J%Sv~DDn)=#>;OHWPlNjd=`AE?GvoYRC9bhsk+n| z;{G?9AMca9OU$8UE$qOhhF_0upw|fM6-AzO8xW+*rrMYhd27GR(%ZSgpIPwHHe!G_ z#{fT6Q(o)MtGT6%wh1|Mf(b&9F#xD|dZM2MG6Km{vsr{=$XtQeLnzEI)OMIN4=EzF z2l3Hen0wkOhFCp}Wo_UbW-Otb*A2l7h7bB0x~k?OzVGSMK&c=riOmueAmKPIGL~tl~Y!+`XmY_EUhJw;yD^5Y`ti#xBNW2ThRX zS{^TYbt62Be4h|1uFIfvz%ag2J;0-1$KtOCqec@&JO7EK91-+@y=(TO3 z*R`^Rp5ABl#Q#_5{j8d|a%!NgTC}-Y6t&qITL;GNFImB=N(t{z1VxerJ(dsucgSfZ(Dba-pRpu7c49{t4v{_RxG^!u`XHBR~o%yM@` zB6`Y9e3PvlA^VW(bZEuFglIUPtr}Dx5b><;oJD<{0o|yh7}4gDp583JlZnADHgzOZ z)XdUD=TV$OVMf`$qi)Euf|LQh%Z+^ma}P0mf&f7$2%oU#-n+iDDiCCwtTX{&8AGyi zgsN7;T-^J<@&t9$s{v_uEGF(CZ#^fa1%4Vt^*P~-KNm=;-iF_N8V9k_O6va4fB?Ql`%alIq9MSf{ zFSklH=Ft_pRZpr!teXek?aDwv8iudHM8-eUK}gIq0;=wb|!p}Ik`wF*x9F;PpzS5N){8WpqFp0@2P z?tc%wjO0RL`|trGDx`7o-OOj?hjaxnC39;E07)tfc^l?0BC7u{w(QsI9Qul+y$^r! z@RwfguXHFdEA}Ni!_#*bH`tW^1063QpIEyFbCnSzk#q+ghDAkfR2$xxD&T*(oK4P6 z?acNHiZ7cm@DPXbwGE?^-`;<>4HZ~Lp30@4_}F93@5!}le_ket8e8&RXK_0!+2t5y zad#jEWJmvSy|+t}P3tY%&5mr?ru3$#fW1%#>kp*Q7?X_c8c&bkbS2vKqR8v<3dNi8 zrFo*8DEcYgeo6S~>B#%C@ijki`~&lo;gYyAUB&AoL(+=xZWy_#7Nxn1pB(~aTz!;L zd>~}IrBMl`l^u?|bWI;iu4q+u#>y6~7U7#E`8)rS@T9N2fF4lllgFaOlMZO>apIiB zp|qaG(e-aTpwPzF#23*KB8}nTNeBEMrQqpJ*}@gBA_uEcCq_^)wyQT!O%30+D# zF`;@SZX(n)huLuKG4_Q%x?*if$nVshIZ2$Oh9mpJstrm0NGUjPfp#Y8T*mSMH4@q* z$vIC{6-|XLc5v;b3;YW*QlO{Q-UcmKg9iAE6U&UKKqs7uszC4R|3w(pY3N(St%r<- z1vKi7M-%a$cixSKpG;34@^8>N$u>3BG|>TerBUxpf*F36mGJ3I0ZNfZR?4`%9;C5E lLHd_F;6H)-@8UO}Z|qUyPZVO8TIxUlyEwYR8qZ!%`wdobVKM*! literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/theme04.png b/html/includes/jpgraph/docs/html/img/theme04.png new file mode 100644 index 0000000000000000000000000000000000000000..24e4c91b620e36e373b8dc258dc67e6185594680 GIT binary patch literal 1649 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 O2iFUA=VABc<^KtH{!AYL literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/imgadj_b00c00sat-1.jpg b/html/includes/jpgraph/docs/html/imgadj_b00c00sat-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6071541106b01ef18cbc4cad73861aebb889efc1 GIT binary patch literal 14354 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 Fe*xy*6^Q@< literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/imgadj_b04c-07sat-1.jpg b/html/includes/jpgraph/docs/html/imgadj_b04c-07sat-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fc8ebb6a63da65bbf34229b29b689fb114860f4 GIT binary patch literal 7531 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 b=|>E!QrKuqpz6P{|M{@t|J^s>>ifR|%Nc+* literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/imgadj_b04c-07sat0.jpg b/html/includes/jpgraph/docs/html/imgadj_b04c-07sat0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f7e5d40e353f8515e4b11da1b50668f5cae5224 GIT binary patch literal 7688 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

    5e&wtyL;G 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/imgadj_orig.jpg b/html/includes/jpgraph/docs/html/imgadj_orig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..02651a74fe67edd85d6841ae68a71f9591f7b15e GIT binary patch literal 15015 zcmbW81yCGKwC@*p2n1Q2Ai)W)iw6(x8Z^k_?ivV?#Wn!~!Civ8ySu~Uy0|-pynNT| zRoy4Ir~WftHC#jL-`kXU=7XNGjUMb2d$N~@$004x)2jI^OKulUgMp8>vLzu?e zlHJbP%9_TLn}d^v$-~Xo(V9j772kCfQXNP zgpcs27eM`&69wU48sOg=0wNMJ3Mv{p1}4_u0d=nchzLkXh{#AND9FfvM+f}94?xC8 zA$Y?jiTYaI42{->kUJzH8=X$7s*6Zt>YSd(+%*&flb8fZO2+V(k%^gwmycgSP)Jz% zy^O4!yn>>pmbQ+rp1y&_-^sGJv9)t^_we-c_VEq-93Jr{GAbJS?R#QU@{g3%oZP(p zg2JNWlIoh;y84F3rsnRR-oE~U!J*;lnc2Ddg~cV<=GOMk?jC&q;PB$|>iXvP?*8HN zA1(v{(!XN;J^w4%|Hg&?mkSXY83`HfA1(w$ufIaVM@D(Wg-Rf)j%McanwC2Rolq(v zyQ&L=jz{C1$lP@blbD`&li}hYw0|M{e*+8sACdhB*ne`t0N6+fe-{r4A0Q66gE8gA zhek7HA^w|i=?4A)2x`v|dnlX`+GgL9#?H}Wguh%-Ig2Bi1QonY3OIRoI8Nq(U0t^@ z#&15}N*Zz9(tm3F2$^1)xDe5}n$qe|U<*36r=CrPUsKmaNv#y79tX;Ibp?u0@B7|f zmu(`?7ifMnq&C}sY%6HVGdT3*cB*fR^QGFZ(u{@RN>WDB)tOXq-*dSIx#S#zg^#Oa zkJ(F3`cb=D)+;L7d>zc^QgRlVa-yX%!HqFk4Vb73*M*vT%to9W7ZMb*KQE+}=J^h4 zOId9tC4ayh&B#=OTBvv$@A{l#95uMvXI`HE0FHFWGH4{hTUd+um9$Msd^FqNU7M&Q z%LH3JwqyYO6(UTOQwqOj+=T`1RZwDfr*p)D9Rd=te!lfUqL-s#zehy7D(0Oau=Oov zQ#Xn%k26&G1MuR$lw5$<;=8cSr=L50+%2r!H4FlxV8=FGG`LQ6XGP% z$7rS^w!bq4_&@0?E^-}<<|1*}u09!YT{8yRQoboxi&RjM6lVf0LvX-l4<_EZPH1vS zeZd136`nHO3wUu8`~$F(6?{y%uE=95(X`b|MqXXo!M`W(YX`I&D|PGA8Ae@DJO&Ku z>3=KVb6xZV(okWB0tN@gVsh@2dh`>@r1|Re$(&NVH$S-b3y#>EVi?5>K#GsSKilrp zk%i0lGHr8LC)j_DVTn}t|I*snF7B5+6#3Nj+prhSB+=2)9ZN)He=<+t+^&Lh)QAEw z@`@qQ+><~nBWvo@4X$OasFx5aq3*j)ae{!B9@mNDab%e9aZ8hVwiRYB4^AsfJ;nf# z=24fy>*A?9sb+|Jk*|peSokApkSOvfW*l!1g_Y2^>te^Oy)WY5*`xd3sX@Xaa9tiW+h{L-_p4u#vVuT2!3w?c(% zE9a|6CKgdsHYfHsHan=y3d@V9G!>1aF}60afbqg@2L{l!8^g44Sop(hxW8{2tM9ES zYe@8w?a{=1GtS%FOUd@xQTm47c7M}v2&6qb&ca?t5I02yzU(pSQ?X}X3+F?u&M%El;!>hfkXglY)?t%%0& zzx2OQpZ8@q&Q?sJo#)`3!V8Gx7$3d*06u4ZaR?^;cY&PePp^fGQ(xBPfR^t8&DM?D zJC^VU5H)RBUxvF#sv1P>92BU%p9()g@o=F}*e3&tDLUcY&f1d6bix)j5aZh76;94f zxC#&5Y$jD4wq;ry)d)O4t{Db*HOQ`N$8u##1-KdXD?2JhTbt!QOSR1GwA9xxu?fWU zYSNc@W{7FdQb6Ewg}!h;uxV0zx+W3IA` znU$Bztv_f+hMe<@P>%>MN%qcm_H}uWT; z|EON8k8rw_aw%sK?CTa{#GhL*WZoHS`T3HXQZ$C5e1Q?xH4-0j`vO<{G2-%ek5Lc_ z>9S;2BcyS|;zBUbCb6E9umUSWmS#StZ9f@vopnwG%=)$E{#RC9Kra-13W1_Zu-`Y3 z?=+C?-kR!Xo&rN#MrP4rILYXfAF7OF9u4NQoa&EDmw1V-ViDk+y04+;z}z6nGGnXR zkor|)Z9{~TH=qW2S+;5uixW}$E$65n3LIn)Fm*rNnG>(B6TChnyf>Kd5nO!-El+@Q z7shmbzaA7s6Z=B>K9F*{&_j<`RCKj{pZKDP@lY0RzQQf>iV;}-~loP7Y+e7o=5M&)$HR_(mITNZE1tCfDjo;Ty1`m)_zp+19W z(KmPzGbT9i)T){qUiDdfYOEp*zPHq65e?%32zGB+0E>#POZa=-WX}^|Q!+#evxMq0 zfd7;vDUcUo zmXqj&_0*@W0*9`E?ZUQ?EOkRIZE=CBWZt&3JYXFcq%~XQphsd>9oWnG)r+X( zMrO=?*;n}s?a%|V@at6GBL5Rf zH3iX@jgar!8Y7cwxS#)i^b&_fGNsf_(8}&}2VPK`1(4K~!EzBYtL`oI5ZOSr>XIT$ z`|Y$~RZ>ybc@XKgvPi%0doNF@Y{MHQBSW;2_bR?m6wX0Kys4F^?v|GLP@V&$@b#Xt zcbY!QT6!D~I{@ylR{Dl%&oi#~N0a5;;L4oO$Hbt!z83&vH}^pXX7$YVNXja~ehzx- z)_VF>Z7{Kr;J9zFoSRWW*g2#8v_-P^MMgf+7X63IKJr@5zPK%JOD+K3EqEE+{~~-} zAmZ>=97js-r?ULx~>f0w3`JQ9Dkrp#P& z^5AlL1)k=RskLA9xST{WUnY-#=y~PZ_$%nuk*`>O;lXXH>KD3cak%52LW&*O8dT`5EV2F^K(AwvaP?Sx^j9|3gMLe=VJbS1DdAzTvSWHB{Q-Pxv_x~IQvV{w zLZl{5&}nLkX9BMN*~`C1Fk7=Z5?OKc9-vgF{3=1(Sv7&Yoa8Bg*^Qr@KUA{sf+X65 zn#icnr}W|V$DHqe`H`}h739(=-RZ3x8&u8;0CQ#Slj5fHoFS)HKbv1JRlra`;s>64 z$BE64nnt$8whlYXfv3D56QxcqPE|Eji}%`qp%13mC-$x#nPp<1ZO12s@2d(i+Ns2H*&L8>z3?+R;cmJ7-Cvg9 zwH($>-xKt+X5#3tmv&oVK+px z_ZWF~=iy1ov~gnO-p{=*XOGXd@c{p;_+F z<7iDFUG{TYj0JfGdQ#bFSq(YKHZ6AL%;AQ_c57 zZP{#N?X3@8&}s15r0%Ry03M=`_ml1*-RlZ%cHnxGD9mzr7$XiDoHE+bH(pu&IHmT{ zPLCYiSNzR0pXRP(=HTcp_0iD#=N70LnipryqX5EUArfbkOG8>t4z=;f6?*fZTaQ zbHaFDvId;19n(QI7IPSE{5=B!=}%ybypU4ew9aprn^rU-Al|rWDUx*Z6NblG$lP@gvB-?=f0Pe!WBWdnc(x%ot!>Y73QhC z2z!~cmMoNUTyKw65l-yN8SYWe$Od10RE)=~J%D}I2Q|wws6SAy-=BC9H+bI754nK3 zm9ZeD*@JwWo_A!fm8cFKXUu;9n1|QYujC49*z+!`g|IKu;sbt{3Q1SxS*=_vE2)Jk z&Fr-{dgyIw3^0=R`OkQdZG9y8+49rp#@IMm~%kz8+5QnFTyp~k&0oY!$xdP zV`k%Oj44s(BWF!uW>)NLQ(V2lL)HIyh;M9k=xXrbYt@#fNDLcZZTBfa+I#a=Ayk4C zTj7}XC&Y*P(U7riGwe>EII24M4z0YSuX3NgE)V)GCHx<0ou~mV9`UV9n3rO`j0_Azo2hE!?JgvG& zVFS-iNY#B;(IkJO2ZXW;}5rYwU zig7UA5|#JFpUHQ0L8yKvXa?m<^R)&ZDeI>wYki&l**k<<`zB6%zKmdGT-Rn6*%s(l z`)cJ|oOEnYNSwks4zwVg=uzUfawY4MJ(Y_z_Dy^f(yZHk^i?Lhji)%i#FP7L9I=(W zaV&(k7KE@g>K~pU7g*bcO z7M(jmu@g5aZ1yT-#-+2XB9BbO@5$n&TyMpc9|_6mOZ3V0*xP=q&|x|^*D(%6l!tpN z3;b)~4GfJ^rdyfYGBGam%%6*mvnQZXfz6ABhY`AxJ)kCwK{V?fv_;R>J<#jN{z*N= zJ?qE%Bqu3LkZQgd>qY({an~j|A8HJ(CSraCWDF`aNk59Jk5g@FP%_-_b;}T&&BDI= z*5>;H9!oz*V zD{4Yoh7@XlDkS&UB@+!{nU*0ZS!g!8n~8EVV!!-uS2N}& zKH72T5+zW(1@|S?hYw$y2m;Ny4m3uXDqE5jby=C*2#?hjQvjAQjB%1Zvy3k^+acQT zILODZkOS>eP_IksCvhC+{@VpZf<0#xwSc)|?$zZTm4b=`MmoZKx_<(g9+qBZTltNcJF z3iQ0RM1o+J`4H-OW?IW}xBjZ;!6s5e*wlO7a^}|AFM6mve5)hin+P+|gN=E(z4eqv zwpy*^c1B|iR(5yx7VlL*xO?>n&@E_{v{9s=Nh|M}mLAMWEg&85>k^&3>3_cLFFCWD z;k}{CvFSfVK^r3086_j@6O-5meH)&USDx22a6 zd^xHrbaW6b%A&FN*?N_tCMIutai1eLSEQ`0Z70f-4j{Al83%%$2wd?cP?a3oAdB_$ zlgu8o!X9%GUhR(VehKugQM^qL!!Z6n*r9rRr$<%d# zCEKM-oN2qx-L_~+G5TUnVz`GU3SrELI_A0qU(cK2wTWMuPCtFjCo=!C7FwQWIdZMz z4LE(QtQ>{ofqM4~C9TAk?DrFYvj{x#B0jiX!UMVLCt~GVT({{TH((Z1+25lhcojvzZ2D-GDNE10&m| z3{l=87wjt8$!KmKrso(wP)89~Ss=8zEd_fvi ze(ikk8%N6)Q+BPqMH1KE7%N^P9U8VgrCWTKMKL8B-NGlmV|LI_EevcH#F8RlXT`g7 z_K8S`>)%qh{adSSL^W)hG%j>Sl!Tn-5~6X^hWO9&GZpsH>u9x2$fY^O9%36I837^| zZ5X*KvWao;S`x?eK}$Ukqf2+=V3QGrWXHvd0lA~Dbi^tUc+fyYloJ(v;9jbRV;~L-j z?FO;NU%X(VXqA`KK*{+E?=4@9g2)62+pUvNQ?ZFZHNUkLKw(XjA&zTHoXOh{pSS9Y4H0_>r2D4g8R zzAgP;PkH*E5u<;N9uZw7_r~EXmwT6E30jfpXhM@l>~}BKLTUi6J7Jx0I8uYy%=Vb= zH8tADwcc#_B5f4UUCN+Q;QP$(cJq15Byw+tP)+1ihYM+L!7HQ2qa7S8-dRNK4ev3tZ+OD2&E<{r zAOsbaC-j!Dqp$H|1U|rUf8;Mgm0C+{!dg*47ia584Mtk4$C^rRk>>@)0cIP6gKO1@N7f_n zwifyA+PY7%jPemDJ5;~rA0{YyChU$tf$X&t*z!}|73BV3SXZ{seD_L|cAE4v$( zY0N%c8Jq!#xec6dx8q!NXdF<_+lm@PER%O-V^^}#XhO-ID4AU!(ka&DM1R4^4QHMz zLoPe6OVGyui(A9t1jp`(eS301qrc`9XV$&4*5KM!MW4*`Pr{Jc?2n1z&6 z#u!u?LG7vxnpK9$4&|o~xxE6=UOFdEANo+>McT#nk@~Mm+M>&);cNSomyg@(#1g@8 zcL#eQaM3@2iRt|Ms-|XpNhh{N(1VR3wGk#l`F8k3ieaKr!uXgH)Bai=N$;1U6IpHdK5^%;4jGWEM4$B{*~AmUDMTD6W7rn zKuS(OxY+0COh=V;K}N^ZEbblZs}qx@^X-9YnBjn9vkE2yQJ0@vQmg$fp z3ZMDMW;tU#M^(_AkB!%ul`RekCJCOs!K>ZAtEv{-UUm)q>^ncD8_nZT%p={CL`6G& z{k6WjxjqRfAtn{EN*k(Tp{qvP76H8II$nQuZ_Ms~RG)D&jgE@BJbLLPfe^M^zy7@m z`5bd2!n6U&NgpIK)sJP)lDIz!ZtZOHDQ^~H$p`w@cQevpb^uQjR}s3|sy_mw<+hDdywafIch~3r#uyr02IZQ_t}u)1HDgOihL$EQ zXH8t^BMU<-dF#nKf^ourylvOR<{n`iVtkaaPa?34YYU6_L8E|YGBnpInM#NM5q*Z@0yTVAlF6Zl<3 zx%DN<34YSU!-nH$yn(+_>Gl|dDTg<*bxC_nYZ%DkNs{rNpG6-74&mD=+xqG%#M-bP zkOj>j0H-+1Y-0z$ZIVk4>mNYHW(`D`77lU6{B}b*Ksdkf+87N;>x8#vhgnoDx+71> z^q~E@H{{?Bg^bYN@rJxlFS4d4Ndt(}y2Z6jIvPfGpS^MEFJRfF6i~4Fqj+Bm8+RL0 zGZ({5fQN49R=Rh3>21FS@n8We4p3{U*mC8pCWUwoNAZnLj}=QTZ-vp9I7)^8_7c*@ ziZukd1-sU%;;bJ)Ku12g*g5YB`qiov;$?jyWH;pCMiBcZ`EM2bykyND;$$aUM8?>; zu=lc@p2^sHPz(f@A<`!7%KMJaRPD7q3-CQWmAr~-(u`rTfGF^kFeGfzU8tnGE#=$y zhOZ!g6rBvdPq6$>#>r3Z-)FXGK208zjmU>vHh$*yRA)gPtA&;b;=~kwgKRUBj`?3z zERGa_8$31p>7XPqEs9&9c;sH&AHe1qgo^WCJ1E~yBdpyEi{A7!#uzD(p39MIF~E+W zceOOGw%Mz$v00gg73-%0{}6zt5g}5@3MnCWiS*QWK`3i&(O-tdz_Y5L$DurrncGBv zdo-SZwG86F?(f_iEVK<+kjxXUukzGu zZzoO^N_BJxHVFyimWrj9$X+<<$aZNXjKrO8#};-t^}-J-sO~-2dz<;jx`UIQ`9~Be zOfe8Tg{Zq#hnJ|`tt2It*7!c3^oCOGi1ay9E$!>1KFlptdK>fO1%2gqwIQlyX1bv{Dzy^HpOwlj%X#j zoBP@+jUO}Kb^S}rz2l|AufQRY%K&>x2};Ze;*ahOpJO@Eu3vl2iMah^gzEZ9|L!n4 zQxl$;Wvb3#XJhy!eP+czT_xxG{c0h_@Lq@fZ#el6z*buH$xb~N))^(7Q!pSTGYH&_ zI+}~BFujj*plBxoH<8;^r8pv-O%_szrEb^i(S22&MdadIHpXhT2&3p^rnoJC{C^O8yC2@u2W_m2yxt{+af%{l3has-yvkhG=AT9L+QA+UYD zsj)J4&AZe*HlKiD)rye`w1vq9SrDU>Q?c07a-)4YwR?ThuVQg*a%UYtX#~AXJSSo7 z?@?dFm4gKWV~2*>=f!#wiJuk^&Yuyzh0IPegw<9f5+^c2s+-DzFrNyCmno1F{WsvY ze=Uo=AW)p2XMC=+-zAhaQ|Y&d`+=gjcXBijtg*KBhPn4ZnV@H2Gy68nnfXAS}*;lhms=qKE5c|7OwOhN|6gvv90F}dG2F%7t!B&5e(8U7l_`V)h$m>OR37P&fk93zbw7K{o=$oO%0Q%e1;xofm+Shw37bXf65 z|2=C9kYzhUaNH#xZ&ssamB`96MQY~#JRiANYt4)kM>gd7QW8u4b;nq+%l+KIdH(7z zEVrUny`|-99@Hnr4?7|0KWW*92MR|CeG@e8Qcp|S^K_s`0m&($6Wr?H>DfO0 zrf#jN)81)?M35$7*3x%@Kk4>jzt{)P)dGf=62#);OR}l>)dUN^yf!&GKlq#L*u?7i zDOXw7G`H3K2k@SRf+YpixEgg7TooE1wcW{-Z!H96r#^}J)| zI)IjOUrL;T(0&f_@;$rd8!KIuxZ^6D&$s3Jq~#b%XVz)|qJ4_Z_wIyMd`%(=!-1yB zXgAfqd>U75pZukXYHr+)A2zp|-v6~^Wm)mDKhLb5e9U z$eMNvS7`%6C4r=af+BJAjd9Ur8s4h?Fyo|jKQFeV`pQA*=u`SfpXIQl%eZ`xRNb$T zZ-#n9IMZuOGT6!09}rn_L8BH7KSdg`<_rsX3?5P#tUfshy{3b1T`s6Y$wSDcD)WB1 zhKF%kQ8)+M$E#|lg2=Z|l)Bfbp$jUlp)gxUTOKyE29%G@Jn@1_7<}gFGRb(T3*6@YsHRcHTt7G2UqNeI3*M)IHXU@1B^7z z05}?9>a2?$EF*LC#OTOZtKpjh;_%haFRya?jTf2Bxq>m4Te2Tg;xyG1u#Ajlytr&m zlisHts|5>Va}ZvlQy{%8Xd2ar7p&X|>3e52p>WW~qUSUuSjGC~X!%&iEMrmLi#lTf z0nyh9Rz$O`0Zvrs$5Rmr6Q}E-8du5X2&p!Ney&=x5RT-nbX|$&hOcTtCs^Wq7jXX= zZ2je~eR;s9&ma(u-AJ`hlx*7gyx&}cHnM4 zSDZ5p2@yv*cBomR!>9Ecaw{mh?IZaoUf-H6YQLU!f!jg_y+;dRh(+gz6O z^JrDFg!~$L^RV{%ij*WhrWtf@$T*YjYJljQQ9P-xZm5#1Q@J858LOqMfu|-bqohan zw`NNMg;0Y40jVhq6BYvz&d3x^96pV(THJ=UewA-;sGYTr(6w*^^Ujm#4}OAh=?YSP zc08M*{;1d7rWc_i;#EO&4-xAslCH4*>zVCeCMnBIwW}?ulP4al=n6++I&?dc`D%O(TO9yR!VSrUC^>RTe!$8^uY#>IeMa9M1&jUze80 zw)7J>4L{qkn={vPTM{Qz%F4sIc|K3b5*=fg9BO~(P6$OGq^Lb@P{-y%y z>N8I+PZPtBMVW6IttZ9o&u=zMbym^7TsJNY4a4LzCx}2tRYvXBBhH34Fi6hynKZv9 zQnRf?p~oORji3`70-zHGi)&8terjsSRBUWZ8cev2997!uFAeT<-S+bkCA6N@oy&MP z=~Q<@D#@}!1wjGblJNL#=kfG34+kw4e@ZE?=x zA=`X%m5c|Az0!}{=J3^tj&&qa45L^aJkvvWT`J6}ymRf2h;o$O{-5?Gi?8w7S_}g* z&c01p=#4d2mmv5gP35GXLN72Gl(`d?k7 zvHEMpkSE(@O@L4aJD=|YJ>s^WmRs0$t``*;YTGS}Q%U80KpWM~l!b{SmWYD%SDpRv zfyw#xSL{~mLzN2B?&FjZ>phM^8``)H1$`B&d8mdRH4{w+dXwL!TYQV`&6H3 zDUB%V1_I5c@GI7a%1Q^uo{q(@mi5yH{q!=IE2SCSO3ql6y}yqy1`xmY*H1r-`vegT zkig7%2I(ZS2zRT|G_U+Tv-wll>4w}x=o`3~(Eq+gqR2qYhm#$8d`7g;LbP(OjAz{f zZ(Kug`fKf~87Ir;h_&mVww6PlQOVw`ojZa;G#-padyPuq!8)uFTQ9lhJ@3&t`wWx5 zHK|G=(9WfN=inhKxcvT;a%|$Ks{=JdQhWa{55nM|Su@JDl}Hgr4sb@`0R-`bvz%>7 zq|-0m2&L6bsgy;K|ejOxIaYqd=mEPaT{lKwTj|x zh=Iw(OH6aSOJ43=K#)RawMm+Zg8MF++VzWvB7NhMAvGtn1l17O4t{|R&bGciuJup}R zqW<(ZIP|v|#%c4UTkilmz&k~!czF0eq$Prp6Z8NMrtREN*?0)=JVys0j$z z)tE0{u>U)=ARmdU7NDHT5{R8}uEdJRVd8?k_TT1UIe??1yW3Z28ZqT7fJf1o|?dYgR>_G3j zhPcDp$vx6#T@}KZ)}xjm7s{VircU`fzQD@rQd?HpOf1!NPC4YXmsb+vMRr1kDp2md z{M>B4+zLmqO8fiWW90`0DHI#UzSs^_J@ZHOyNP=Kt!R?pi&fwtVz z!A+s6OXv8}ocx7v^{s}EckZ_#vn4&V4heCVk2ogmpV{*nnpfGZAhvV}d;PKs^ta=3 z+KPz^Q&WN7;Y5BUs6a!6sSF_hD2*l1qn@Hm@BXhBCEVZU-r+<&9)@34>mnV zK;_v6^a(lNnI0?q?6B_C@BEW>d5U*fnf!bKvBB4XG}L{!nQPQ9G`lP- z0x)|HhUPTcL49mLAC}IDf!~)w;`!2>r84cac(nL~7t| zDi<--+-oy7FqY+0frJEGOlAa?`Fe#oG%mm?8G|Z z99(rDUZ`S@#D3DY^}Lr_wavljQ(+s{#EE&oHP)4 z8D|eEG9i$Ufe-<6`F-JO*i9k21=<@K1sMQs`4j}6Ha+!UD}j~S8!8k5^fFNXmw$La_VahK1{aR_ThPr@2dNKAK33K0Pa&aNm#(abB#mmHAr#kpjnq*lMAa9u z@ny|cvuqj)?C&LreYG^<@SRvG9G*s@mB4<6QgQ#?i@2?Ugc}fXf@@A=X%2H z{WjvjQyj;9PgX6{r^sEg^GLg+h8}fW?nT~* z-vE~^5Z)})S;YaL3MqLqUgq}Nfz$0%fz{&{mv5x2*>=Oeg?b;8#NFdRi(d5@2=6}{ z3^afTk%-{Cz|9~`4~EH9mqYu%<(VP>Vu}CVIQ@55O+8Cz1hMNwCM51lG_Lf*jE$g7 z-<=z2Hw*>=B;yN&2z0a~Eyvo$Lg`MB7iob=CcpRJeeRP{ak1?=y)J9-xg1cPc}UDm zXtxP)F-Urpc0o+GJD1q$%?QPiMcrS?y;!Dupoo5S(m%KNBBkZTn{Mss4ZPMN2VOBiRT*n*Z25()p~X|576mtx+ZCr3lg^2oU@Nl?`2ty zXp={TpW7~7PF1&ccw0U-H(GuTgnvx$!AqXJS{K~DIGNxAgFW_w%@Sl~|KbV$EoI^L zn-@4$S z1wW&Ji1K6ETgHp>=(TfsgmKA})UKAF27QOjC5PKAuFSK+|20qXf9orkLQE}Yh)lpt zpT;$dPIPRtu(3L@myN8sLIdk2*1S>YKP2D}%(pyprJ}hFf4UDqYBuCemP-A(_VToDw?7c@qhVO5AlE4$NRJNzW^?DtRw&c literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/index.html b/html/includes/jpgraph/docs/html/index.html new file mode 100644 index 0000000000..4fb4c1400a --- /dev/null +++ b/html/includes/jpgraph/docs/html/index.html @@ -0,0 +1,26 @@ + + + + + + + + + +

    +
    + + diff --git a/html/includes/jpgraph/docs/html/jpgmanual.css b/html/includes/jpgraph/docs/html/jpgmanual.css new file mode 100644 index 0000000000..cada8cc6dc --- /dev/null +++ b/html/includes/jpgraph/docs/html/jpgmanual.css @@ -0,0 +1,154 @@ +html { + background-color:white; +} + +body { + margin-top:10px; + margin-left:20px; + margin-right:20px; + width : 800px; + background-color:white; + border:black solid 1px; +} + +sub, sup { + font-size : smaller +} + +pre { + margin-left:6em; + font-family:monospace; + padding-left:10px; + border-left : black solid 3px; +} + +div.exscript { + background-color : #d3eae1 ; + font-family:monospace; + font-size:85%; + font-weight:bold; + padding:5px; + margin-left:7em; + margin-right:7em; +} + + +div.page { + margin-left:0.5em; + margin-right:2em; + margin-top:0px; + background-color:white; + width : 800px; + text-align:justify; + padding-left:1em; + padding-right:2em; + border-left:solid #101010 2px; + border-right:solid #101010 2px; + border-bottom:solid #101010 2px; +} + +.page p { + margin-left:5em; + margin-right:2em; + margin-top: 0; + margin-bottom: 0.4em; +} + +.page ul, .page ol { + margin-left:7em; + margin-right:5em; + margin-top: 0; + margin-bottom: 0.4em; +} + +.page h1 { + margin-left:0em; + font-family : sans-serif; + font-size:2em; +} + + +.page h2, .page h3 { + margin-left:0em; + font-family : sans-serif; + font-size:1.2em; +} + +div.caption { + font-style:italic; + font-family:sans-serif; + font-size:0.75em; + margin-top:2px; + margin-left:7em; + margin-right:7em; + margin-bottom:2em; + +} + +.capture b { + font-style:normal; +} + +div.abstract { + margin-left : 7em; + margin-right : 7em; + font-style: italic; + text-align: justify; + font-size:0.9em; + margin-bottom:3em; +} + +.abstract h3 { + font-family : sans-serif; + font-size:0.9em; + font-weight:bold; + text-align:center; + margin-bottom:0.2em; + margin-left : 3em; +} + +div.phpscript { + margin-left:7em; + margin-right:3em; + background-color:#E6E6E6; + font-family:monospace; + font-size:0.85em; + font-weight:bold; + padding-left:0.5em; +} + +div.note { + margin-left:7em; + margin-right:4em; + font-size:0.9em; + border-top: black solid 1px; + border-bottom: black solid 1px; + margin-top:1em; + margin-bottom:1em; +} + +div.note b { + font-weight: bold; + font-color:darkred; +} + +div.example { + text-align : center; + margin-left:10em; + margin-right:10em; + font-style: italic; + margin-bottom : 20px; +} + +table.codedefines { + margin-left : 5em; + border:black solid 1px; +} + +.codedefines th { + background-color: blue; + color:white; + font-style:bold; + font-family: arial; + font-size:1.2em; +} \ No newline at end of file diff --git a/html/includes/jpgraph/docs/html/manual_jpgraph.html b/html/includes/jpgraph/docs/html/manual_jpgraph.html new file mode 100644 index 0000000000..492013be01 --- /dev/null +++ b/html/includes/jpgraph/docs/html/manual_jpgraph.html @@ -0,0 +1,8893 @@ + + + + + + + + + +
    +

    1 About this manual

    +

    +

    1.1 Version history

    +

    +

    + + + + +
    VersionDateStatusWhoComment
    R1.82005-12-28ReleasedJohan Persson +Additional info for JpGraph 1.20.1
    +

    1.2 How was this manual produced?

    +

    The bulk of the text was written directly in Emacs on a GNU/Linux + system in a mixture of PHP and HTML. A number of PHP functions were + used to automate the handling of formatting example code and figures.

    +

    To generate the images automatically in the img directory a custom + awk-script is used to extract all the used image script from the + manual. The script then uses the client version of PHP generate the + images from the scripts and stores them in the 'img' directory.

    +

    The final set of HTML files was then processes by HTMLDOC to + construct table of contents and chapter links.

    +

    2 Introduction

    +

    +

    2.1 Version

    +

    This manual covers versions up to 1.20 of JpGraph. A 2D graph + plotting library for PHP.

    +

    Even though the library is known to work with version of PHP prior + to 4.3 the library is not tested nor is it recommended to run with any + older versions of PHP.

    +

    2.2 Software License

    +

    JpGraph is released under a dual license QPL 1.0 (Qt-License) for + non-commercial (including educational) use of the library and the + JpGraph Professional License for commercial use.

    +

    2.3 JpGraph Features

    +

    JpGraph library is an OO graph library which makes it easy to both + draw a "quick and dirty" graph with a minimum of code and quite complex + graphs which requires a very fine grain of control. The library tries + to assign sensible default values for most parameters hence making the + learning curve quite flat since for most of the time very few commands + is required to draw graphs with a pleasing esthetic look.

    +

    Some highlights of available features are

    +
      +
    • Flexible scales, supports text-lin, text-log, lin-lin, lin-log, + log-lin and log-log and integer scales.
    • +
    • Supports both PNG, GIF and JPG graphic formats. Note that the + available formats are dependent on the specific PHP installation where + the library is used.
    • +
    • Supports caching of generated graphs to lessen burden of a HTTP + server.
    • +
    • Supports batch mode to only generate images to a file
    • +
    • Supports client side image maps which makes it easy to produce drill + down images.
    • +
    • Intelligent auto-scaling which gravitates towards esthetic values, + i.e. multiples of 2:s and 5:s
    • +
    • Fully supports manual scaling, with fine grain control of position + of ticks.
    • +
    • Supports background images with different formatting options
    • +
    • Supports color and brightness adjustments of images directly in PHP.
    • +
    • User specified grace for auto-scaling
    • +
    • Supports up to two different y-scale, it is possible to have + different left and right y-scale and add plots to both
    • +
    • Supports, line-plots, filled line-plots, accumulated line-plots, bar + plots, accumulated bar plots, grouped bar plots, error plots, line + error plots, scatter plots, gantt-charts, radar plots, 2D and 3D pie + charts.
    • +
    • Supports unlimited number of plots in each graph, makes it easy to + compose complex graph which consists of several plot types
    • +
    • User specified position of axis
    • +
    • Supports color gradient fill in seven styles
    • +
    • Designed as a flexible OO framework which makes it easy to add new + types of plots
    • +
    • Supports automatic legend generation
    • +
    • Supports both vertical and horizontal grids
    • +
    • Supports anti-aliasing of lines
    • +
    • Supports background images as well as unlimited number of icons in + the graph
    • +
    • Supports rotation of linear graphs
    • +
    • More then 400 named colors
    • +
    • Designed modularly - you don't have to include code which isn't used
    • +
    • ...and many many more features
    • +
    +

    In addition to these high level features the library has been + designed to be orthogonal and consistent in its' naming convention. For + example, to specify color each object (i.e. axis, grids, texts, titles + etc) within the graph implements the method SetColor() with the same + signature.

    +

    2.4 Getting the latest version

    +

    The latest version of jpgraph can always be found on +http://www.aditus.nu/jpgraph/

    +

    Information on version numbering schema

    +
      +
    • 1.x -> 1.x.y, Bug fix release 'y' for version 1.x does not introduce + new features
    • +
    • 1.x -> 1.(x+1), Added functionality. Mostly keeping backwards + compatibility unless a very good reason not to.
    • +
    • 1.x -> 2.0, Support for PHP5
    • +
    +

    +

    2.5 Planned future addition

    +

    For the latest update on planned future version see the web-site for + JpGraph at http://www.aditus.nu/jpgraph/

    +

    2.6 Known bugs and omissions

    +

    +
      +
    • Background images does not work as expected for rotated graphs
    • +
    +

    +

    2.7 Acknowledgments

    +

    The idea for writing this library grew out of our own need for a + high quality graph drawing library for PHP. When evaluating potential + existing libraries we found (at that time circa 2001) these three

    +
      +
    1. "chart 0.3" http://quimby.gnus.org/circus/chart/chart-0.3.tar.gz, + by Lars Magne Ingebrigtsen
    2. +
    3. "ykcee.php", http://ykcee.sourceforge.net
    4. +
    5. "phplot.php", http://www.phplot.com
    6. +
    +

    All these libraries implements some fine graphic features but + unfortunately none of those completely fulfilled our needs either for + available functionality (for example none of these supported both two + Y-scales, auto-scaling, and logarithmic scales), or general + flexibility. We especially needed the option of two Y-scales, which + none of the above packages supported. Our own preferences for design + was closest to "chart 0.3" so we started by fixing some bugs in that + package and adding some new features. However It was soon realized that + to add all the features and flexibility we needed to "chart 0.3" it + would require a complete rewrite since the original design wasn't + flexible enough, especially adding a second Y-scale would require a + more flexible OO architecture.

    +

    2.8 Reporting bugs and suggesting improvements

    +

    Defects or suggestion for new features can be entered using the +JpGraph BugTracker available at +http://www.aditus.nu/bugtraq/

    +

    Before reporting bugs or feature suggestions may we ask that the + following facts are considered.

    +
      +
    • The 1.x version of the library does not work with PHP 5.x
    • +
    • The 1.x version of the library is only guaranteed to work with PHP + versions >= 4.3
    • +
    • The 2.x version of the library does not work with PHP 4.x
    • +
    +

    +

    2.9 Getting support

    +

    Customers who have acquired the pro-version of the library are + entitled to prioritized e-mail support for a specific time after the + purchase. Support tickets may be created by first logging in to +http://www.aditus.nu/jpgraph/pro_login.php and then create a support + ticket.

    +

    For other users a public community forum is available at +http://jpgraph.intellit.nl/ where many common questions are answered + and discussed.

    +

    A collection of FAQ is available at +http://www.aditus.nu/jpgraph/jpgraphfaq.php

    +

    In addition there is a growing list of "HowTo" documents available + at +http://www.aditus.nu/jpgraph/jpgraphowto.php

    +

    Finally, we regret that we are unable to provide general support + regarding PHP/GD/TTF/Apache installation outside the specific scope of + the JpGraph library. Please see the corresponding documentation and + relevant FAQ for those products.

    +

    +

    3 Installation

    +

    +

    3.1 Preparation

    +

    In order to make use of the library it is necessary to ensure that + the script files can correctly access the library include files (as + described below) and that the PHP installation supports at least one + graphic format, i.e. it supports the "image" extension in PHP.

    +

    This is easiest verified by either checking the output of the + phpinfo() standard PHP function or by making sure the PHP + installation make the 'imagecreate()' function available.

    +

    This means that the installation + + must have a working GD-library together with PHP before the library + JpGraph can be used. Please make sure you have version 4.3.x or above + of PHP since JpGraph is not actively tested with + versions prior to PHP 4.3.x Ideally you should use at least PHP 4.3.8

    +

    Please note that the 1.x version of the library do not + support PHP 5.x

    +

    3.1.1 Verifying that you have the GD library + installed

    +

    In order to make sure that the GD installed the following example + would be run. The example creates a very simple image using just pure + GD calls and outputs an image in PNG format. This could be considered a + smoke-test to see that the GD library is available from PHP. Please + note that this is an absolute pre-requisite in order for the + JpGraph library to work at all.

    +

    Store the code snippet below somewhere in the document root and make + sure it runs correctly.

    +  $im = @ +ImageCreate ( +150100) +
        or die (
    +"Cannot create a new GD image."); +
    $background_color  += ImageColorAllocate  +($im255 +255255); +
    $text_color  += ImageColorAllocate  +($im233 +1491); +
    ImageString  +($im1 +55,  "A Simple Text String"$text_color +); +
    header ("Content-type: image/png"); +
    ImagePng ($im); +

    +

    If the above script does not work or some error or warnings are + printed on the screen then it is necessary to correct those problems + before proceeding with the installation.

    +

    3.1.2 Verifying that you have GD2 installed

    +

    To access the more advanced features of JpGraph needs the GD 2.x + library. This will allow the use of features such as alpha-blending and + trucolor images.

    +

    The GD 2.x library is included in all standard PHP versions from + 4.2.x and above. To make sure that the GD 2.x library is installed the + following script must be working.

    +  $im  +imagecreatetruecolor ( +300200);  +
    $black imagecolorallocate ($im +000 +);  +
    $white imagecolorallocate ($im +255255255 +);  +
    +
    imagefilledrectangle +($im,0, +0,399,99 +,$white);  +
    imagerectangle +($im,20, +20,250,190 +,$black);  +
    +
    header ("Content-type: image/png" +);  +
    imagepng ($im); +

    +

    After running this script you should now see a black rectangle in + your browser.

    +

    3.1.3 Preparing True Type Font Files

    +

    JpGraph contains as default a standard set of bitmap fonts which + only supports the standard ASCII 7-bit character set. In order to use + accented characters, UTF-8, Chinese, Japanese, etc You need to download + TTF fonts. Due to various legal issues no TTF fonts are supplied in the + JpGraph package. To enable TTF fonts there are three alternatives:

    +
      +
    1. If you are on a Windows platform you can just point to the TTF + directory in JpGraph to the standard fonts directory (e.g + C:\windows\fonts\)
    2. +
    3. If you are on a Unix platform you can download and install the core + MS WEB-initiative fonts from +http://corefonts.sourceforge.net/
    4. +
    5. It is also possible to use the Vera Bitstream TTF fonts available + from http://www.gnome.org/fonts/ +
    6. +
    +

    It is also necessary to make sure that the PHP installation supports + TTF fonts (either through FreeType 1 or FreeType 2 libraries). I n + addition some suitable TTF font files must also be available. To make + the font files available for the library the directory path to the + location of the font files must be specified in the configuration file, + jpg-config.inc

    +

    JpGraph uses a standard naming convention for the TTF font files in + order to be able to find the correct font files. This naming convention + follows the standard naming of the available font files.

    +

    If the installation of the library is made on a computer running MS + Windows then it is recommended to use the already available font files + in Windows (usually located in C:\WINDOWS\FONTS).

    +

    If the installation is made on a UNIX derivate running X11 then the + font location can differ between versions and UNIX brands. One commonly + used path is "/usr/X11R6/lib/X11/fonts/truetype/".

    +

    Finally we note that it is possible to install additional fonts not + natively supported by the library. Since this requires augmenting the + library files this is considered advanced use and not further discussed + in this introduction.

    +

    3.1.4 Using non-latin based fonts with JpGraph

    +

    In addition to European font it is also possible to use non-latin + based fonts such as Cyrillic, Japanese and Chinese.

    +

    In all cases a suitable TTF font that supports the non-latin based + language must be available.

    +

    For Cyrillic support the define LANGUAGE_CYRILLIC in jpg-config.php + must be set to true. It is then possible to use a suitable Cyrillic + font as replacement for the ordinary fonts.

    +

    For Chinese character set JpGraph supports both BIG5 and GB2312 + encoding. For BIG5 encoding the PHP installation must have support for + the "iconv()" function. Furthermore the define CHINESE_TTF_FONT must be + set to the name of the Chinese BIG5 font that is to be used. By default + this is set to "bkai00mp.ttf". To use the Chinese BIG5 font in the + scripts one must then specify the font family as FF_CHINESE.

    +

    To use the alternative font files "simsun.ttc" and "simhei.ttf" + (which uses the GB2312 encoding) the only step needed is to install + those fonts in the normal TTF font directory and then specify the font + family as FF_SIMSUN, the "simhei.ttf" is used when the font style is + specified as FS_BOLD.

    +

    3.2 Customizing the installation

    +

    In order for JpGraph to work it is necessary to adjust the cache and + TTF directory to suit the specific installation. By default the TTF + directory is "/usr/X11R6/lib/X11/fonts/truetype/" and for the cache + "/tmp/jpgraph_cache/". These are defined as PHP defines at the top of + jpg-config.inc

    +

    Please make sure that PHP has write permissions to the cache + directory if the cache feature should be used. If this is not the case + a "Can't write file xxx.yyy" error will occur when a graph that uses + the cache feature are generate. More information regarding the cache + feature of JpGraph is available in the section Making sense of + caching system in JpGraph

    +

    3.3 Required files

    +

    This is the base library files, which you must have

    +
      +
    • jpgraph.php, base library, always needed
    • +
    • jpg-config.inc, Configuration file
    • +
    +

    +

    3.3.1 Plot extension modules

    +

    To add plots to the graph you will need one or more of the following + files plot extension files depending on what kind of graph you need to + create.

    +
      +
    • jpgraph_log.php, Plot extension to support logarithmic X and Y + scales
    • +
    • jpgraph_line.php, Plot extension. Needed to draw various line plots
    • +
    • jpgraph_date.php, Plot extension to handle date scales.
    • +
    • jpgraph_bar.php, Plot extension. Needed to draw various bar plots
    • +
    • jpgraph_error.php, Plot extension. Needed to draw various error + plots
    • +
    • jpgraph_scatter.php, Plot extension. Needed to draw scatter and + impulse plots.
    • +
    • jpgraph_spider.php, Plot extension. Needed to draw spider plots.
    • +
    • jpgraph_pie.php, Plot extension. Needed to draw Pie plots
    • +
    • jpgraph_pie3d.php, Plot extension. Needed to draw 3D Pie plots
    • +
    • jpgraph_gantt.php, Plot extension. Needed to create gantt plots
    • +
    • jpgraph_radar.php, Plot extension. Needed for radar plots
    • +
    • jpgraph_polar.php, Plot extension. Needed for Polar plots
    • +
    • jpgraph_gantt.php, Plot extension. Needed for Gantt charts
    • +
    • jpgraph_regstat.php, Statistic extension. Needed to plot spline and + bezier curves
    • +
    • jpgraph_stock.php, Plot extension. Needed to plot stock charts
    • +
    • jpgraph_antispam.php, Special extension to generate anti-spam + images consisting of letters+images which are very hard to digitally + read with an OCR program
    • +
    • jpgraph_gradient.php, Internal module. Contains all color gradient
    • +
    • jpgraph_gb2312.php, Handling of gb2312 font encoding (used for some + Chinese fonts)
    • +
    • jpgraph_plotmark.inc, Handling of plotmarks in line and scatter + plot.
    • +
    • jpgraph_iconplot.php, Handling icons (small images) that can be + added to the plots
    • +
    • jpgraph_plotband.php, Handling of plotbands added to the graphs
    • +
    • jpgraph_flags.php, Handling of country flags used as plot marks or + as backgrounds.
    • +
    • jpgraph_utils.php, Various utility function
    • +
    • imgdata_*.inc, Encoded images for plotmarks
    • +
    • flags*.dat, Image data for flags. Pre-compiled data for country + flags.
    • +
    • jpgraph_canvas.php, Plot extension to make it possible to draw + arbitrary graphic on a canvas.
    • +
    • jpgraph_canvtools.php, Add on to the canvas graph to provide an + easier way to draw arbitrary shapes.
    • +
    +

    In the pro-version the following additional files are available

    +
      +
    • jpgraph_windrose.php, Windrose plot extension
    • +
    • jpgraph_odo.php, Odometer plot extension
    • +
    • jpgraph_barcode.php, Linear barcode extension
    • +
    • jpgraph_pdf417.php, PDF417 2-Dimensional Barcode extension
    • +
    +

    +

    3.4 Image formats and external image libraries

    +

    Per default the standard GD image library supports PNG graphic + formats. You will need to have that installed together with your PHP + module for this library to work at all. Please refer to PHP + documentation on specifics. Note that the newer versions of GD does not + support the GIF format due to copyright problems. Hence by default only + PNG is supported.

    +

    If you want JPEG support you will also need an additional library + for PHP, again please see PHP documentation for specifics. For most + practical purposes PNG is a better format since it normally achieves + better compression then GIF (typically by a factor of 2 for the types + of images generated by JpGraph). In comparison with JPEG format PNG is + also better for the type of images generated by this library. So, the + bottom line is, you should have a very good reason to choose any other + format then PNG.

    +

    By default the image format is set to "auto". This means that + JpGraph automatically chooses the best available graphic using the + preferred order "PNG", "GIF", "JPG".

    +

    +

    3.5 Detailed steps to install JpGraph

    +

    +
      +
    1. If You are insatlling the 1.x branch then make sure the PHP version + used is at least 4.3.x (preferable 4.3.10 or higher) and that the PHP + version have compiled support for GD library. It is absolutely critical + that GD is fully working. Please see the earlier sections on how to + make sure. JpGraph supports both GD 1.x and GD 2.x However it is + strongly recommended to use GD 2.x since that will improve performance + and support true color images as well as alphablending. +

      If You are insatlling the 2.x branch then make sure the PHP version + used is at least 5.0.1 (preferable 5.0.5 or higher) and that the PHP + version have compiled support for GD 2.x library. Please note that the + 2.x branch will not work with PHP 4.x

      +
    2. +
    3. Unzip and copy the files to a directory of your choice.
    4. +
    5. Set up the directory paths in jpg-config.inc where the cache + directory should be and where your TTF directory is. Note that + Apache/PHP must have write permission in your cache directory.
    6. +
    7. Check that all rest of the DEFINE in the top of JpGraph.php is + setup to your preference. The default should be fine for most users. + (See also Note 5. below) Specifically check that the settings of + USE_GD2_LIBRARY reflects your installation, (should be true if you have + GD2 installed, false otherwise).
    8. +
    9. Make sure PHP have write privileges to your cache directory if you + plan on using the cache feature.
    10. +
    11. Some windows installations seems to have a problem with a PHP + script ending in a newline (This newline seems to be sent to the + browser and will cause a Header already sent error). If you have this + problem try remove all trailing newlines in the jpgraph* files
    12. +
    13. Read (really!) +the JpGraph FAQ.
    14. +
    +

    +

    3.6 Troubleshooting your installation

    +

    For 99% of the users this library will work directly with a recent + installation of PHP without any problem.

    +

    Experience shows that most of the trouble are caused by either an + old buggy version of the free-type TTF library or using an old + antiquated version of the GD library. In order to narrow it down the + problem the following steps is helpful.

    +
      +
    1. If no background images are displayed (instead a solid black box + are displayed) chances are that GD 2.x is available but the + jpg-config.inc has been changed so that true color images are disabled. + Correct this by enabling the USE_TRUECOLOR define.
    2. +
    3. If background images does not work make sure the settings of + USE_GD2_LIBRARY corresponds to the actual installation, i.e. If the GD2 + library is not available then this define must be false!
    4. +
    5. If you are running IIS and Win2k and get the error "Can't find + font" when trying to use TTF fonts then try to change the paths to UNIX + style, i.e. "/usr/local/fonts/ttf/". Remember that the path is absolute + and not relative to the htdocs catalogue.
    6. +
    7. If no images and no error messages gets sent back to the browser + then there is a big chance that HTTP-Server PHP module (e.g. + Apache-PHP) has crashed. This is often due to a broken PHP installation + and more than often a problem with the True Type libraries. The best + way to track these types of problem down is to investigate the + HTTP-Server logs or the general system logs for evidence of a PHP + crash. The other reasons is that in some rare cases the auto detection + of the GD library could fail. If only the GD1 library is available and + the JpGraph library mistakenly detects the GD2 this could in rare cases + cause PHP to crash. Please try re-run the example by setting the DEFINE + USE_GD2_LIBRARY to "false".
    8. +
    9. If the system is running IIS on Windows and some images which uses + TTF fonts just return an empty page then try to set the TTF_DIR path + manually (in jpg-config.php) to the directory where all the TTF fonts + are stored (normally c:/WINDOWS/fonts)
    10. +
    11. If the cache is enabled please make sure that the permissions are + correctly set for the cache directory so that the process running + Apache/PHP has write access to the cache directory.
    12. +
    13. If the TTF fonts only shows up as yellow then you have a buggy + installation of the freetype font library and the only thing to do is + to re-install and setup PHP+GD again.
    14. +
    +

    +

    3.7 Compiling PHP 4

    +

    This is not meant to be a complete discussion about configuring + or compiling PHP. It is meant as an example of a configuration of PHP + that is known to work well with JpGraph.

    +

    Below is an example of a standard configuration that can be used to + configure and compile PHP for use with the JpGraph Library

    +

    Please note that depending on the specific installation requirements + other options might have to be specified, specifically the paths to + external libraries might need to be adjusted.

    +
    +./configure --prefix=/usr/share \
    +--datadir=/usr/share/php \
    +--with-apxs=/usr/sbin/apxs \
    +--libdir=/usr/share \
    +--includedir=/usr/include \
    +--bindir=/usr/bin \
    +--with-config-file-path=/etc \
    +--enable-mbstring --enable-mbregex \
    +--with-pdflib=/usr \
    +--with-mysql  \
    +--with-ttf-dir=/usr/lib \
    +--with-freetype-dir=/usr/lib \
    +--with-gd --enable-gd-imgstrttf --enable-gd-native-ttf \
    +--with-zlib-dir=/usr/lib \
    +--with-png-dir=/usr/lib --with-jpeg-dir=/usr/lib --with-xpm-dir=/usr/X11R6 \
    +--with-tiff-dir=/usr/lib \
    +--enable-ftp \
    +--enable-memory-limit --enable-safe-mode \
    +--bindir=/usr/bin \
    +--enable-bcmath -enable-calendar \
    +--enable-ctype --with-ftp \
    +--enable-magic-quotes \
    +--enable-inline-optimization \
    +--with-bz2 \
    +--with-iconv
    +
    +

    4 Quick Start: Dynamic Image Generation

    +

    The purpose of this chapter is to put dynamic image generation in + perspective and illustrate how HTML tags is used to call image + generating scripts. Even if You are familiar with PHP it is strongly + recommended to quickly browse through this chapter to make sure all + concepts are known.

    +

    If You fully understand and can explain the concept of MIME types, + HTTP streams and why the "Headers already sent error" error is very + common when generating dynamic images with PHP it is probably safe to + skip this chapter. Otherwise it might be wise to read through this + chapter once.

    +

    4.1 Scope of this chapter

    +

    +

    4.1.1 What you will learn in this chapter

    +

    +
      +
    1. The principle of generating dynamic images in PHP
    2. +
    3. How to choose a specific image format (e.g. JPG, PNG, GIF)
    4. +
    5. Various ways of using the generated image, streaming it back to the + browser, sending it to a file or getting hold of the image handle for + further post processing
    6. +
    7. How to specify fonts (both bit-mapped and TTF) in JpGraph
    8. +
    9. How to extend JpGraph with your own fonts
    10. +
    11. How to work with Cyrillic fonts
    12. +
    13. How to specify colors in JpGraph
    14. +
    15. List all available named colors in JpGraph
    16. +
    17. How to effectively use the built in cache schema in JpGraph
    18. +
    +

    +

    4.1.2 What you will NOT learn in this chapter

    +

    +
      +
    1. Any details on how to generate graphs with the JpGraph library
    2. +
    +

    +

    4.2 How to generate images with PHP

    +

    As a general rule each PHP script which generates an image must be + specified in a separate file which is then called in an HTML <IMG> tag. + For example, the following HTML excerpt includes the image generated by + the PHP script in "fig1.php".

    +

    <img src="fig1.php"  +border=0 align=center width +=300 height=200> +

    +

    +

    Strictly speaking the "align", "width" and "height" are not + necessary but helps the browser position the image correctly before the + image has been fully sent back to the browser.

    +

    The library will automatically generate the necessary headers to be + sent back to the browser so that it correctly recognize the data stream + received as an image of either PNG/GIF/JPEG format. The browser can + then correctly decode the image

    +

    Observe that you can't return anything else than an + image from the image script. By definition each HTML page (or more + correctly each HTTP stream) can only consist of one mime type which is + determined by the header for that particular stream.

    +

    A common mistake is to have a space in the beginning of the image + script which the HTTP server will send back to the browser. The browser + now assumes that the data coming back from this script is text since it + hasn't received an explicit header. When then the image headers get + sent back to the browser to forewarn the browser of the forthcoming + image the browser will not like that as it has already assumed the data + stream was a text stream. The browser will then give the infamous + "Headers already sent error".

    +

    To include several images together with text on a page you need to + have a parent page with several <IMG> tags which each refers to an + image script (or the same image script with GET/POST data).

    +

    4.2.1 Using the JpGraph library to send back images +

    +

    To get access to the JpGraph library you will need to include at + least two files, the base library and one or more of the plot + extensions. So for example to create a basic line plot the top of your + PHP file must have the lines:

    +   +
    include ( +'jpgraph.php'); +
    include (
    'jpgraph_line.php' +); +
    ... +
     
    // Code that uses the jpgraph library +
    ...
    +

    +

    +

    Note: You might also use the PHP directive + require. The difference is subtle in that include will only include + the code if the include statement is actually executed. While require() + will always be replaced by the file specified. See PHP documentation + for further explanation. For most practical purposes they are + identical.

    +

    4.3 Using PHP directly

    +

    It is also possible to generate images directly using the command + line version of PHP. This works the same way as the normal "through the + browser" generation with the exception that no HTTP headers will be + generated. Only the binary image data.

    +

    Please make sure that you run the command line version of PHP (cli). + Using the CGI SAPI version will not work since then the HTTP headers + will be generated. Note: If the CGI version is used the generation of + headers may be suppressed by the '-q' option.

    +

    You can easily check the version installed by running

    +
    php --version
    +

    you should then get a response with something like

    +
    +PHP 4.3.8 (cli) (built: Aug 29 2004 22:48:10)
    +Copyright (c) 1997-2004 The PHP Group
    +Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
    +
    +

    The important thing here is the

    +
    (cli)
    +

    marker. The JpGraph library check from what SAPI API it is invoked + from and adjusts the header generation accordingly.

    +

    If all the above requirements are met then images can be generated + directly on the command line and stored in a suitable file. For example + by

    +
    +$> php myimage.php > image.png
    +
    +

    Please note that the file extension on the image file must match the + format in which the image is generated.

    +

    4.4 The basic principle of JpGraph and the creation of + images

    +

    The common pattern for creating graphs is

    +
      +
    1. Create a script that constructs the image, type, colors size and so + on.
    2. +
    3. A wrapper script which contains one or more <IMG> tags to position + the graphs on the proper HTML page.
    4. +
    +

    Of course it is of perfectly possible to call the image script + directly in the browser to just display the generated image in the + browser.

    +

    You should remember that it is also possible to pass arguments to + the image script via the normal HTTP GET/POST arguments. For example

     <img src +="showgraph.php?a=1&b=2" +>

    +

    This could for example be used to control the appearance of the + image or perhaps send data to the image which will be displayed. Note + that this is probably not the best way to send large amount of data to + plot. Instead the only practical way, for large data sizes, is to get + all the data in the image script, perhaps from a DB. Another + alternative for large amount of data to be sent to the image script is + by creating a POST request to the image script.

    +Note: Forcing the browser to update your image Some browser + may not send back a request to the web browser unless the user presses + "Refresh" (F5 - in most browsers). This can lead to problems that the + user is seeing old data. A simple trick is to add a dummy time argument + which is not used in the script. For example +
    +echo '<img src="myimagescript.php?dummy='.now().'">';
    +
    + It is also important to be aware of any internal caching the browser + might do. The general problem with dynamically generated images is that + the image generating script (file) remains the same. This makes the + browser believe that the data hasn't changed and if the browser already + has issues a previous GET request and has the data cached it will not + send a new GET if the timestamp on the file is the same since it then + believes it my use the old cached version.

    +

    When it comes to the structure of your imaging script they will + generally have the structure

    +   +// ... Include necessary headers +
    +
    $graph  += new Graph($width, +$height, ...); +
    +
    +// ... code to construct the graph details +
    +
    $graph->Stroke(); +

    +

    JpGraph is completely Object oriented so all calls will be action on + specific instances of classes. One of the fundamental classes is the + Graph() class which represents the entire graph.

    +

    After the creation of the Graph() object all the code lines to + construct the details of the graph are added.

    +

    The final method called in an image script will most likely be the + Graph::Stroke() method. This will send the constructed image back + to the browser. A variation of this is used if the graph are supposed + to have image maps. In that case the final method will be + Graph::StrokeCSIM()

    +

    In addition to this standard usage pattern you can also choose to

    +
      +
    • ... send the graph directly to a file
    • +
    • ... access the GD image handler for further image processing (also + needed to include the image in an PDF file)
    • +
    • ... make use of the builtin cache system to send back a previously + generated image
    • +
    +

    The cache system, which lessens the burden of the PHP server, works + by avoiding o run all the code that follows the initial Graph() call by + checking if the image has already been created and in that case + directly send back the previously created (and stored in a file) image + to the browser. When using the cache system a filename must be + specified in the initial Graph() call which is used to store the image + in the cache system and possibly also a timeout value to indicate how + long the image in the cache directory should be valid.

    +

    In many of the examples in this manual the following pattern will be + used

    + $graph = new  +Graph(300,200 +,"auto");

    +

    The two first parameters specify the width and height of the graph + and the third parameter the name of the image file in the cache + directory. The special name 'auto' indicates that the image file + will be given the same name as the image script but with the extension + changed to indicate the graphic format used, i.e '.jpg', '.png' and so + on.

    +

    Please note that the cache system by default is disabled and must be + enabled by setting the proper define in the file "jpg-config.inc"

    +

    4.5 Choosing the image format for JpGraph

    +

    By default JpGraph automatically chooses the image format to use in + the order PNG, JPEG and GIF. The exact format depends on what is + available on your system. There are two ways you can influence the way + the graphic format is chosen.

    +
      +
    1. Change the default graphic format by changing the DEFINE
      +  DEFINE +("DEFAULT_GFORMAT" +,"auto");
      +

      +
    2. +
    3. Set the graphic format in your script by calling the method + SetImgFormat() For example, to force your script to use JPEG in one + specific image use
       $graph-> +img-> +SetImgFormat( +"jpeg") +
      +

      +
    4. +
    +

    +

    4.6 Alternatives to streaming back the image

    +

    If you like to save the image directly to a file instead of + streaming it back to the browser then you just have to specify an + absolute filename in the final call to Graph::Stroke(), i.e.

    +

    + $graph-> +Stroke( +"/usr/home/peter/images/result2002.png");

    +

    +

    Please note that the user running as Apache/PHP must have write + access to the specified directory.

    +

    There are also two predefined filenames which have special meaning.

    +
      +
    • "auto", This will create a file in the same directory as the script + with the same name as the script but with the correct image extension.
    • +
    • _IMG_HANDLER, (This is defined in jpgraph.php). Specifying this + filename will not create a an image to file or stram it back to the + browser. Instead it will instruct the Stroke() method to just return + the handle for the GD image. This is useful if you later want to + manipulate the image in ways that are not yet supported by Jpgraph. For + example include the image in generated PDF files. +
      Example:
       $handle  +$graph->Stroke(_IMG_HANDLER +);
      +

      +
    • +
    +

    +

    4.7 Working with fonts in JpGraph

    +

    JpGraph supports both a set of built in bit-mapped fonts as well as + True Type Fonts. For scale values on axis it is strongly recommended + that you just use the built in bitmap fonts for the simple reason that + they are, for most people, easier to read (they are also quicker to + render). Try to use TTF only for headlines and perhaps the title for a + graph and it's axis. By default the TTF will be drawn with + anti-aliasing turned on.

    +

    In many of the example you can see examples of both TrueType and + Bitmap fonts.

    +

    There are a number of subtle differences in the way builtin fonts + and TrueType fonts are rendered to the screen. However, JpGraph, + abstracts away 99.9% of the differences so it will be, for the user, + completely transparent to switch between the different fonts.

    +

    4.7.1 Installing TrueType fonts

    +

    Since Internally TrueType fonts are rendered by locating a font + specification file you must install the accompanying TrueType fonts in + directory of your choice. You must then tell JpGraph where these fonts + may be found by specifying the font-path in the FONT_PATH define (in + jpg-config.inc). Please note that this must be the absolute file path + and not relative to the htdocs directory. By default the path is set to

    + DEFINE( +"TTF_DIR", +"/usr/local/fonts/ttf/"); +

    +

    Since JpGraph must be able to tell the difference between the italic + and bold versions of the same font family a standard naming convention + is used to name the files. The available fonts are also defined by + DEFINES and hence you can't just copy your own TTF files to the + directory and expect it to work. At the moment there is no "easy" way + to add new fonts but to make some (small) mods to the code. However + this is expected to change in future version of JpGraph.

    +

    4.7.2 Verifying that the TTF fonts work

    +

    In order to get TTF fonts working with JpGraph you should first + check that the following pure GD scripts work correctly. Please adjust + the font path according to your installation.

    +  DEFINE +("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/" +);  +
    +
    $im imagecreatetruecolor (400 +100);  +
    $black imagecolorallocate ($im +000 +);  +
    $white imagecolorallocate ($im +255255255 +);  +
    +
    imagerectangle +($im,0, +0,399,99 +,$black);  +
    imagefilledrectangle +($im,0, +0,399,99 +,$white);  +
    +
    imagettftext  +($im30 +01040 +, $blackTTF_DIR. +"arial.ttf" +"Hello World!");  +
    +
    header ("Content-type: image/png" +);  +
    imagepng ($im); +

    +

    The above script assumes you have the GD2 library and will create an + image with the classical "Hello World!" text printed in black.

    +

    4.7.3 Specifying fonts

    +

    All graph objects that uses text allows you to specify the font to + be used by calling the SetFont() method and specifying three parameters

    +
      +
    1. Font family, Specified with a FF_ define
    2. +
    3. Font style, Specified with a FS_ define
    4. +
    5. Font size, Numeric value (only used for TTF fonts)
    6. +
    +

    For the builtin fonts the third, size, parameter is ignored since + the size is fixed for the three builtin fonts. The available font + families and the corresponding name (in JpGraph 1.7) are listed in the + table below.

    +

    + + + + + + + + + + + + + + + + + + + +
    Font familyTypeNote
    FF_FONT0Builtin fontA very small font, only + one style
    FF_FONT1Builtin fontA medium sized font
    FF_FONT2Builtin fontThe largest bit mapped + font
    FF_ARIALTTF fontArial font
    FF_VERDANATTF fontVerdana font
    FF_COURIERTTF fontFix pitched courier
    FF_BOOKTTF fontBookman
    FF_COMICTTF fontComic sans
    FF_TIMESTTF fontTimes New Roman
    FF_GEORGIATTF fontGeorgia
    FF_TREBUCHETTF fontTrebuche
    FF_VERATTF fontGnome Vera font, Available from + http://www.gnome.org/fonts/
    FF_VERAMONOTTF fontGnome Vera Mono font, + Available from http://www.gnome.org/fonts/
    FF_VERASERIFTTF fontGnome Vera Serif font, + Available from http://www.gnome.org/fonts/
    FF_CHINESETTF fontInstalled chinese font
    FF_SIMSUNTTF fontInstalled chinese font
    FF_BIG5TTF fontInstalled Chinese BIG5 font + (needs iconv())
    +

    Please note that not all font families support all styles. The + figure below illustrates each of the available font families and what + styles you may use.

    +
    +
    Figure 1: Illustration of some of the available fonts in + JpGraph [src] +  +

    +

    +

    +

    We finally show some example of valid font specifications

    +  $graph +->title->SetFont( +FF_FONT2); +
    $graph->title-> +SetFont( +FF_FONT2, +FS_BOLD); +
    $graph->title-> +SetFont( +FF_ARIAL); +
    $graph->title-> +SetFont( +FF_ARIAL, +FS_BOLD,24);
    +

    +

    +

    4.7.4 Adding additional fonts to JpGraph

    +

    Note: This information is only given here for very + advanced users. No free support will be given in the case you run into + difficulties trying to add new fonts. At the moment adding new fonts + require code modifications as outlined below.

    +

    In order to add you favorite fonts there are three steps you need to + follow :

    +
      +
    1. Define a new "FF_" constant naming your font family with a suitable + high index number
    2. +
    3. Get the TTF file(s) and add it to your font directory. You need + separate files for each of the styles you want to support. You then + need to add the file names of the font as definitions in the class TTF. + Use the previous defined "FF_" name as index in the font specification + array.
    4. +
    +

    +

    4.7.5 Understanding text alignment in JpGraph

    +

    For everyday use of JpGraph understanding of the alignment of text + strings in not necessary. However, if you like to add arbitrary strings + to the graph (with Graph::AddText()) or when working directly on a + canvas it will help understand this.

    +

    Text is added to a graph with the creation of a +Text() object. And the alignment is specified with +Text::Align() Text alignment might actually be a misguiding name. + What you specify is rather the anchor point for the text, i.e. when you + specify that a text should be positioned at position (x,y) how + is that coordinate to be interpretated.

    +

    The image below shows a text string aligned in the 9 possible + combinations. In the image the red crosses indicate what coordinate + that text string was positioned at. The alignment used for each of the + cases is shown below.

    +
    +
    Figure 2: Specifying alignment (anchor-point) for text + strings [src] +  +

    +

    +

    +

    +

    4.8 Specifying colors in JpGraph

    +

    Colors can be specified in three different ways

    +
      +
    1. By using one of the, roughly, 400 pre-defined color names, e.g
      +  SetColor +("khaki");
      +

      A named color can also be modified by adding a adjustment factor. An + adjustment factor, 0 < f < 1, a smaller value will give a darker + version and a value of 0 or 1 will return the original color. A value > + 1 will make the color brighter. A few examples

      +  SetColor +("khaki:0.5" +); // A darker version of "khaki" +
      SetColor("yellow:1.2");  +// A slightly lighter version of "yellow" +

      +

      +
    2. +
    3. By specifying a RGB triple, e.g.
      +  SetColor(array(65, +100,176));
      +

      +
    4. +
    5. By specifying the color as a hex string value
      +  SetColor +("#A16BFF");
      +

      +
    6. +
    +

    +

    4.8.1 Adjusting the transparency

    +

    From version 1.10 JpGraph also supports the use of Alpha Blending + together with GD2.x This lets you specify how much of the underlying + color should be visible. You specify the amount of transparency for a + color by adding an extra parameter to the color specification separated + by an '@' (at) character.

    +

    For example to specify a red color which is 40% transparent you + write

    + SetColor( +"red@0.4"); +

    +

    or to specify 90% transparancy you write

    +  SetColor +("red@0.9");

    +

    Below is an example of how a bar graph with a background image can + make use of transparency

    +
    +
    Figure 3: Using alpha blending in a bar graph [src]  +

    +

    +

    +

    4.8.2 Available named colors

    +

    The chart below shows all available named colors. +
    +
    +

    +

    4.8.3 Theme colors for pie's

    +

    For more on how to use the different themes to set the colors of Pie + plots please refer to "Working with 2D & 3D pie plots"

    +

    +
    Theme 1: Earth

    +

    +
    Theme 2: Pastel

    +

    +
    Theme 3: Water

    +

    +
    Theme 4: Sand

    +

    +

    5 Understanding the JpGraph caching system

    +

    To reduce load on the web server JpGraph implements an advanced + caching system which avoids the burden of always having to run the full + image script.

    +

    Depending on the complexity of the image script (for example if it + is doing several DB lookups) this could significantly improve + performance.

    +

    The rationale behind this is of course performance, and the + observation that very few graphs are really real-time, i.e. needs to be + updated absolutely every time the graphing script is called.

    +

    +

    5.1 Enabling the cache system

    +

    The enabling disabling of the cache system is controlled by two + defines (in jpg-config.php)

    +

    + DEFINE( +"USE_CACHE", +true); +
    DEFINE("READ_CACHE", +true)
    +

    +

    +

    The first of these, USE_CACHE, is the master-switch which must be + set to true to enable the caching system. The second switch READ_CACHE + very seldom needs to be changed.

    +

    This second switch basically tells whether or not JpGraph should + ever look in the cache. Setting this to false and the master-switch to + true would then always generate an new updated image file in the cache + and this new image would be send back to the browser. The main use for + this (admittedly) strange setting is if you like to have the side + effect of the script that a fresh image is always stored in the cache + directory.

    +

    Once you have enabled the cache you must also make sure that a valid + cache directory is setup. The cache directory is specified with the + define

    +

    + DEFINE( +"CACHE_DIR", +"/tmp/jpgraph_cache/"); +

    +

    +

    You can of course change the default directory to whatever directory + you fancy. But, you must remember one important thing. The + cache directory must be writable for the user running Apache/PHP +.

    +

    5.2 Using the cache in your script

    +

    To use caching in your script you must supply a suitable file name + which will be used to store the image in the cache. You can also supply + a timeout value indicating how many minutes the cached image should be + considered valid.

    +

    These parameters are supplied in the initial Graph() method call + which should be among the first in your script. Instead of manually + specifying a file name to be used you could often use the special name + "auto". If the filename is specified as "auto" the cashed image will + then be named the same as the image script but with the correct + extension depending on what image format have been chosen.

    +

    If you don't specify a file name no caching will be used no matter + the settings of USE_CACHE (without a file name it is impossible!)

    +

    The following call to Graph() shows a typical use of the cache.

    +

    + $graph = new  +Graph(300,200 +,"auto",60) +

    +

    +

    The above code will use the automatic filename and a make the cache + valid for 60 minutes.

    +

    So, how does this all work now?

    +

    The first time you call your script (no cached image) everything + will be as usual, the script will run and you will in the end send back + the image to the browser. However if you have the caching enabled + JpGraph will automatically have stored a copy of the generated image in + the cache directory.

    +

    The next time you call the script the first thing that happens in + the initial Graph() is that it will go and check in the cache directory + if the named image exists there. If this is the case it will also + checks that the image isn't too old (as compared to the specified + timeout value). If the image is valid then the image will be streamed + straight back from the image file to the browser and the script will + end it's execution.

    +

    Hence, if the image is found in the cache no code lines + after the initial Graph() call will be executed

    +

    The design decision behind this is that your image script code never + has to include anything special to make full use of the cache. It will + just automatically work.

    +

    5.3 Using the cache with Client Side Image Maps

    +

    You can also use the cache system for CSIM as well. The cache system + interface is slightly different in this case since the cache needs to + store both the cached image and the cached image-map. + It also needs to change due to the way CSIM HTML paradigm work. The two + major differences from the "standard" cache is

    +
      +
    1. The cached version will not be stored in the + previous defined cache directory. See more below.
    2. +
    3. You must call an extra method, CheckCSIMCache(), to check the + cache, see more below.
    4. +
    +

    +

    The performance benefits even for simple CSIM images is around 50% + if the cache can be used and can of course be several 1000% if + construction of the image requires DB calls and other complex + operations which can be avoided.

    +

    Before reading further you should have an understanding on how the + CSIM works by reading the section "sing Client side image maps".

    +

    Please remember that when using CSIM you must end your script with a + call to Graph::StrokeCSIM() method instead of the +Graph::Stroke() used for non-csim.

    +

    To use the cache with CSIM you have to call the +Graph::CheckCSIMCache(). As with the caching for non-CSIM you have + to supply a name to be used for the cached version as well as an + optional timeout value. The default timeout value if nothing else is + specified is 60 minutes.

    +

    The name argument requires some more explanations. You must specify + a relative name here. For example "myimage" or perhaps + "firstpage/image3". Depending on your installation of JpGraph this will + now end up in the directory specified in the CSIMCACHE_DIR define. This + must also be a directory accessible by the normal web server. By + default a directory called "csimcache" will be created in the same + directory as the image script itself.

    +

    This has the drawback that the directory from where the script is + executed must be writable by the process running PHP. Best practice for + this is to keep the number of writable directory for PHP down to a + minimum and re-use the same directory as is used for the standard + cache. This however, require that your system administrator setup that + cache directory so that it also accessible by the HTTP server from the + htdocs root.

    +

    The CheckCSIMCache() method checks the cache for an existing cached + version and if found it returns it and halts execution of the script. + So, this call should be the first call after the creation of the + Graph() and before any heavy work is done to create the image so that + you can minimize the execution of the script in the case a match is + found.

    +

    So, the general structure of a script that uses CSIM and the cache + is

    + $graph = new  +Graph(400,300 +); +
    +
    // Check cache, 10 min timeout +
    $graph->CheckCSIMCache( +"image1",10); +
    +
    +// !! If cached version exists, execution halts here !! +
    +
    // +
    // ... Construct the image with heavy DB calls etc, etc +
    // +
    +
    $graph->StrokeCSIM(); +

    +

    Please note that you do not need to pass any + argument to the final call to StrokeCSIM() as you do when not using the + cache.

    Note: The CSIM caching works by storing + two files in the cache directory. One file being the image and the + other file being the corresponding image map as a pure HTML file.

    +

    5.4 Some final comments

    +

    +
      +
    • If you want the timeout value to be "forever" then you can specify a + 0 as the timeout value (or leave the parameter blank). To regenerate + the image you will have to remove the image files from the cache. This + removal could for example be handled by a nightly cron-job
    • +
    • If you use images where you have enabled the anti-aliasing you + should strongly consider using caching since anti-aliasing is quite + time consuming compared to standard line drawings.
    • +
    +

    +

    5.5 Common feature for all graphs

    +

    This is a summary of the available feature for all Graph based + charts, i.e. line plots, error plots, scatter plots, etc.

    +

    5.5.1 Clipping

    +

    By default all plots are clipped outside the plot area. This means + that if you manually specify a scale and then try to plot which has + values smaller/larger than the scale those values will not show.

    +

    The clipping algorithm is "perfect" in the sense that for example + line plots where the plot area cuts the line between two data points + the line will be drawn up to the edge of the plot area. The algorithm + used is O(1) in number of data points.

    +

    The disabling/enabling of clipping manually is controlled by +Graph::SetClipping()

    +

    5.5.2 Commonly used properties

    +

    +
      +
    1. Each graph can have three titles accessed through the properties + 'Graph::title', ''Graph::subtitle' and ''Graph::subsubtitle'
    2. +
    3. Each graph have a legend accessed through the 'Graph::legend' + property
    4. +
    5. Each graph can have a left, center and right footer accessed + through 'Graph::footer::left','Graph::footer::center' and + 'Graph::footer::right'
    6. +
    7. You access the axis through 'Graph::xaxis', 'Graph::yaxis' and + 'Graph::y2axis'
    8. +
    9. You access the grids through 'Graph::xgrid', 'Graph::ygrid' and + 'Graph::y2grid'
    10. +
    +

    +

    5.5.3 Commonly used methods

    +

    +
      +
    1. You add plot objects (bar plots, pie plots, texts, bands, lines + etc) with the 'Graph::Add() method.
    2. +
    3. Each graph can have a specified margin set by 'Graph::SetMargin()'
    4. +
    5. Each graph can have a fill color in the plot area + 'Graph::SetColor()'
    6. +
    7. The plot areas may have a box around it 'Graph::SetBox()'
    8. +
    9. Each graph can have a specified margin color + 'Graph::SetMarginColor()'
    10. +
    11. Each graph can have a frame or not 'Graph::SetFrame()'
    12. +
    13. Each graph can have a specified drop shadow 'Graph::SetShadow()'
    14. +
    15. The grid lines can be either behind or in front of the plots + 'Graph::SetGridDepth()'
    16. +
    17. The plot can be rotated an arbitrary angle with 'Graph::SetAngle()'
    18. +
    19. You can add a background image with 'Graph::SetBackgroundImage'
    20. +
    21. You can change the overall appearance of the axis with + 'Graph::SetAxisStyle'
    22. +
    +

    +

    6 Using image maps with JpGraph

    +

    Image maps, or client side image (CSIM) as they are known is fully + supported in JpGraph. It gives you the opportunity to create hot-spots + in the graphs which allows you to build a set of "drill-down" graphs.

    +

    In the following section is based on the assumption that the reader + is familiar with the basic concepts of client side image map in HTML.

    +

    To shortly recapitulate. Client side image maps consists of two + parts. The first part is the actual image and the second part is a + mapping that gives the coordinates for areas in the image which should + be marked as hot spots (i.e. click-able by the user). The library can + automatically generate these coordinate maps from a given graph.

    +

    Through out the manual areas of the graph that may be used as a + hotspot is given in conjuction with the general description of that + area.

    +

    6.1 The basic structure of an image map script

    +

    The standard structure for an HTML page using client side image maps + would be something along the lines of

    +

    +
    +// Image map specification with name "mapname"
    +<MAP NAME=...>
    +... specification ...
    +</MAP>
    +
    +// Image tag
    +<img src="..." ISMAP USEMAP="mapname">
    +
    +

    This poses an interesting question.

    +

    Since we normally call the graphing script directly in the <img> tag + how do we get hold of the image map (which is available only in the + image script) in this "HTML wrapper" script?

    +

    In JpGraph there is actually two ways of solving this.

    +
      +
    1. Use the preferred "builtin" way using the modified Stroke() method + Graph::StrokeCSIM() instead of the standard Graph::Stroke() method.
    2. +
    3. Directly use the Graph::GetHTMLImageMap() which gives you fine + control at the expense of more complex coding.
    4. +
    +

    The first (and preferred) way modifies the stroke method so that + instead of returning an image (like the standard Stroke() method) + StrokeCSIM() actually returns an HTML page containing both the image + map specification and the correct <IMG> tag.

    +

    This of course means that it is necessary to treat an image map + returning image script differently from a non-CSIM image script, for + example you can't use it directly as the target for the "src" attribute + of the <IMG> tag since it sends back an actual HTML page containing + both an image tag together with an image map.

    +

    6.2 Specifying targets for image map plots

    +

    To turn a standard image script into a CSIM script the first thing + needed to do is to supply the appropriate URL targets for the hotspots + in the image.

    +

    What the hotspots represent depends on the type of plot you are + doing. The following plot types and graph areas support image maps.

    +
      +
    • Line plots. Markers are hotspots.
    • +
    • Scatter plot. Markers are hotspots.
    • +
    • Pie Plots and 3D Pie plots. Each slice is a hotspot
    • +
    • All types of Bar graphs. Each bar is a hotspot
    • +
    • Legends
    • +
    • Text strings, for example titles and title of axis
    • +
    +

    To specify a link for each hotspot you have to use the + SetCSIMTargets() method for each plot (or specific area) in the + graph which should be a hotspot.

    +

    There are two arguments to this method

    +
      +
    1. $aTargets, an array of valid URL targets. One URL per hot spot, for + example if you have a 10 values bar plot you need 10 URLs. If the + SetCSIMTarget() is applied to, for example, a text then of course only + one URL target should be specified.
    2. +
    3. $aAlts, an array of valid alt-texts. Many browsers (but not all) + will show this text string if the mouse hovers over a hotspot.
    4. +
    +

    +

    6.3 Using StrokeCSIM()

    +

    The simplest way of creating a creating a CSIM image is with the + StrokeCSIM() method. As mentioned before this method actually returns a + (small) HTML page containing both the image-tag as well as the image + map specification. Hence it is not possible to use a script that + ends with this method in a standard image-tags src property.

    +

    There are two ways to create CSIM (or get hold of) the image maps

    +
      +
    1. Use the CSIM image script as the target in a standard anchor + reference, for example +
      +<a href="mycsimscript.html">
      +
      +
      This has the drawback that the image page will only contain the + image and nothing else.
    2. +
    3. The other way will allow the image script to be included in an + arbitrary HTML page by just including the image script at the wanted + place in the HTML page using any of the standard "include" php + statement. For example +
      +<h2> This is an CSIM image </h2>
      +
      +<?php
      +include "mycsimscript.php"
      +?>
      +
      +
    4. +
    +

    Note: If there are several CSIM images on + the same page it is necessary to use "include_once" in the scripts for + the inclusion of "jpgraph.php" and the other jpgraph library files + since the files will be included multiple times on the same page and + one or more "Already defined error" will be displayed.

    +

    The process to replace Stroke() with StrokeCSIM() is strait forward. + Replace all existing calls to Stroke() with the equivalent calls to + StrokeCSIM().

    +

    The only difference is that it is necessary ti supply a minimum of + one file name in the StrokeCSIM() method. The first argument must be + the name of the actual image script file including the extension. So + for example if the image script is called "mycsimscript.php" it is + necessary to write +
     

    + $graph-> +StrokeCSIM( +'mycsimscript.php') +

    +

    +
    However, it is possible to apply a small "trick" here. PHP maintain + a special variable called "__FILE__" which is always set to the current + file name. This means you could use the following construction:

    +

    + $graph-> +StrokeCSIM( +basename( +__FILE__)) +

    +

    This is a better way since the script can now be renamed without + having to change any code in the file which otherwise would be needed.

    Note: Why does the script name need to be used as + the first parameter? The reason is that in the creation of the HTML + page which is sent back we need to refer to the script in the image + tag. So why is it not possible to use the PHP_SELF reference? The + problem with PHP_SELF is that in the case where we include the + image-script in an HTML page and use the PHP_SELF we will get the name + of the HTML page and not the actual script in which the PHP_SELF is + used. We also can not use the __FILE__ trick in the library since in + the context __FILE__ is set to "jpgraph.php". Hence, this must be + specified by the client as shown above.

    +

    The other arguments to StrokeCSIM() are optional. Please note that + if several CSIM images are used in the same HTML page it is also + necessary to specify the image map name as the second parameter since + all image maps must be unique to properly match each image map against + each image. Please consult the class reference + StrokeCSIM() for more details.

    +

    6.4 Examples of Image maps

    +

    In the Example/ directory there are a number of examples of how to + setup the various types of image maps. The following examples are + currently available

    +
      +
    • bar_csimex1.php
    • +
    • bar_csimex2.php
    • +
    • bar_csimex3.php
    • +
    • barline_csimex1.php
    • +
    • barlinefreq_csimex1.php
    • +
    • boxstockcsimex1.php
    • +
    • ganttcsimex01.php
    • +
    • ganttcsimex02.php
    • +
    • imgmarkercsimex1.php
    • +
    • pie3d_csimex1.php
    • +
    • piec_csimex1.php
    • +
    • pie_csimex1.php
    • +
    • scatter_csimex1.php
    • +
    • titlecsimex01.php
    • +
    +

    In order to easily access all of these examples it is possible to + call the testsuit.php example with an additional argument "t=2". + By following the link +testsuit.php?t=2 a separate window will open with all the possible + CSIM examples.

    +

    6.5 How does StrokeCSIM() work?

    +

    Knowledge of the exact technical details of the way StrokeCSIM() + works is probably not needed by many people but for completeness we + outline those details in this short section.

    +

    The fundamental issue we have to solve is that we must be able to + call the image script in two modes. When the user includes the image + script the StrokeCSIM() method should return the HTML page but when the + image script is later called directly in the image tag it must not + return an HTML page but rather the actual image.

    +

    The way this is solved is by using one HTTP argument which is passed + on automatically when we use the image script name in the image-tag.

    +

    If you look at the generated HTML you will see that the argument to + the src-property of the image tag is not simply the script name but the + script name with a additional argument.

    +

    In the JpGraph internal code this pre-defined argument is checked + for and if it exists the image is send back and not the HTML page.

    +

    The name of this argument is defined by a DEFINE() statement in + JpGraph. The define is _CSIM_DISPLAY.

    +

    6.6 Getting hold of the image map

    +

    In the case where you want to store the image on disk and later use + it in an img-tag you need to get hold of the image map. For this you + will have to use the function + Graph::GetHTMLImageMap()

    +

    An example of the use of this is shown below. With these lines the + image will be written to a file. The script then returns a HTML page + which contains the Client side image map and an img-tag which will + retrieve the previously stored file.

    +  $graph->Stroke( +"/usr/local/httpd/htdocs/img/image001.png" +); +
    echo 
    $graph +->GetHTMLImageMap +("myimagemap001" +); +
    echo 
    +"<img src=\"img/image001.png\" ISMAP USEMAP=\"#myimagemap001\" border=0>" +;
    +

    +

    +

    +

    6.7 Image maps and the cache system

    +

    For version 1.9 the cache system has been extended to include even + the CSIM maps. For each CSIM graph two files are stored in the cache, + the image file itself as well as the wrapper HTML with the actual image + map. For further information see the chapter on "Understanding the + Cache system"

    +

    7 Working with orthogonal X,Y-plots

    +

    The purpose of this chapter is to introduce the basic concepts of + creating scripts with JpGraph that will generate various types of basic + plots. Throughout the text it is possible to view the exact source for + all the graphs by clicking on the "[src]" link in the caption of the + image shown. This will open the image together with the source in a + separate window. This way it is easy to compare the actual image with + the script that generated the image.

    +

    7.1 Line plots

    +

    The first example draws a line graph consisting of 10 Y-values. In + this first example we show the full code. In the following examples we + will only show interesting piece of the code.

    +(File: example0.php) +
    <?php +
    include ( +"../jpgraph.php"); +
    include (
    "../jpgraph_line.php"); +
    +
    // Some data +
    $ydata  += array(11,3, +8,12,5 +,1,9, +13,5,7 +); +
    +
    +// Create the graph. These two calls are always required +
    $graph  += new Graph(350, +250,"auto");     +
    $graph->SetScale( +"textlin"); +
    +
    // Create the linear plot +
    $lineplot +=new LinePlot($ydata); +
    $lineplot +->SetColor("blue"); +
    +
    // Add the plot to the graph +
    $graph->Add( +$lineplot); +
    +
    // Display the graph +
    $graph->Stroke(); +
    ?> +
    +
    +
    Figure 4: A simple line graph [src]  +

    +

    +

    +

    You might note a few things

    +
      +
    • Both the X and Y axis have been automatically scaled. We will later + on show how you might control the auto scaling how it determines the + number of ticks which is displayed.
    • +
    • By default the Y-grid is displayed in a "soft" color
    • +
    • By default the image is bordered and the margins are slightly gray.
    • +
    • By default the 0 label on the Y-axis is not displayed
    • +
    +

    This is a perfect fine graph but looks a little bit "sparse". To + make it more interesting we might want to add a few things like

    +
      +
    • A title for the graph
    • +
    • Title for the axis
    • +
    • Increase the margins to account for the title of the axis
    • +
    +

    From looking at the previous example you can see that you access all + properties of JpGraph through the objects you create. Graph(), + LinePlot() and so on. In general all objects you can see in the graph + is accessed through a named instance.

    +

    For example the title of the graph is accessed through the + 'Graph::title' property. So to specify a title string you make a call + to the 'Set()' method on the title property as in:

    +

    + $graph->title->Set +('Example 2');

    +

    So by adding just a few more lines to the previous code we get a + graph as shown below.

    +
    +
    Figure 5: Same basic graph as in previous figure but with a + titles for graph and axis. +[src]  +

    +

    +

    To achieve this we just needed to add a few more lines. (We only show + the part of example 1 we changed, to look at the full source just click + the [src] link in the caption. )

    +   +// Setup margin and titles +
    $graph->img-> +SetMargin(40,20 +,20,40); +
    $graph->title-> +Set( +"Example 2"); +
    $graph->xaxis-> +title->Set("X-title" +); +
    $graph->yaxis-> +title->Set("Y-title" +); +

    +

    +

    Again there are a couple of things you should note here

    +
      +
    • A default font and size is used for the text
    • +
    • The default position for the title of the graph is to be centered at + the top
    • +
    • The default position for the title of the x-axis is the far right + and for the y-axis centered and rotated in a 900 angle.
    • +
    +

    +

    A nice change would now be to have all the titles in a bold font and + the line plot a little bit thicker and in blue color. Let's do that by + adding the lines

     $graph-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
    $graph->yaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
    $graph->xaxis-> +title->SetFont(FF_FONT1 +,FS_BOLD); +
    $lineplot +->SetColor("blue"); +
    $lineplot +->SetWeight(2);   +// Two pixel wide
    +

    +

    Again please note the consistent interface. To change font you just + have to invoke the SetFont() method on the appropriate object. This + principle is true for most methods you will learn. The methods may be + applied to a variety of objects in JpGraph. So for example it might not + come as a big surprise that to have the Y-axis in red you have to say:

    + $graph->yaxis->SetColor +("red")

    +

    or perhaps we also want to make the Y-axis a bit wider by

    +  $graph +->yaxis->SetWidth( +2) +

    +

    As a final touch let's add a frame and a drop shadow around the + image since this is by default turned off. This is done with

    +  $graph +->SetShadow()

    +

    The result of all these modifications are shown below.

    +
    +
    Figure 6: Making the image a little bit more interesting by + adding som colors and changing the fonts [src]  +

    +

    +

    +

    7.1.1 Adding plot marks to line-plots XXX

    +

    It might sometimes be desirable to highlight the data-points with + marks in the intersection between the given x and Y-coordinates. This + is accomplished by specifying the wanted plot mark type for the "mark" + property of the line graph. A full list of all available marks is given + in the class reference +PlotMarks

    +

    For now let's just add a triangle shape marker to our previous graph + by adding the line

     $lineplot-> +mark->SetType(MARK_UTRIANGLE +);

    +

    This will give the graph as shown below

    +
    +
    Figure 7: Adding markers to the previous example [src]  +

    +

    +

    +

    If you like you can of course both change the size, fill-color and + frame color of the chosen plot mark.

    +

    The colors of the marks will, if you don't specify them explicitly, + follow the line color. Please note that if you want different colors + for the marks and the line the call to SetColor() for the marks must be + done after the call to the line since the marks color will always be + reset to the lines color when you set the line.

    +

    7.1.2 Displaying the values for each data point

    +

    As a final easy modification we can enable the display of the data + value above each data point. The value is represented by the 'value' + property in the plot. (You can read more about the possibilities of the + display value + in the class reference.)

    +

    To enable the display of the value you just need to call the Show() + method of the value as in

    +  $lineplot->value-> +Show() +

    +

    Adding that line to the previous line plot would give the result + shown below.

    +
    +
    Figure 8: Displaying the value for each data point [src]  +

    +

    +

    We can of course change both color, font and format of the displayed + value. So for example if we wanted the display values to be dark red, + use a bold font and have a '$' in front we need to add the lines

    +  $lineplot->value +->SetColor("darkred"); +
    $lineplot +->value->SetFont( +FF_FONT1, +FS_BOLD); +
    $lineplot +->value->SetFormat( +"$ %0.1f"); +

    +

    This would then result in the following image

    +
    +
    Figure 9: Making the display values a little bit more + interesting +[src]  +

    +

    +

    Note: You can achieve more advanced + formatting by using not just the printf() style format string by a + format callback function. This could allow you to change the displayed + value with more advanced formatting such as displaying money values + with "," to separate thousands.

    +

    7.1.3 Adding several plots to the same graph

    +

    What if we want to add a second plot to the graph we just produced? + Well, this is quite straightforward and just requires two simple step:

    +
      +
    1. Create the second plot
    2. +
    3. Add it to the graph
    4. +
    +

    To create the second plot we need some data (we could of course use + the same data as for the first plot but then we wouldn't be able to see + the new plot!)

    +

    The following lines show how to create the new plot and add it to + the graph (we only show the new lines - not the full script)

    +  $ydata2  += array(1,19, +15,7,22 +,14,5, +9,21,13 +); +
    $lineplot2 +=new LinePlot($ydata2); +
    $lineplot2 +->SetColor("orange"); +
    $lineplot2 +->SetWeight(2); +
    +
    $graph->Add( +$lineplot2); +

    +

    Making these changes to the previous graph script would generate a + new graph as illustrated below.

    +
    +
    Figure 10: Adding a second plot to the previous graph [src]  +

    +

    +

    There is a few things worth noting here

    +
      +
    • The Y-scale has changed to accommodate the larger range of Y-values + for the second graph.
    • +
    • If you add several plots to the same graph they should contain the + same number of data points. This is not a requirement (the graph will + be automatically scaled to accommodate the plot with the largest number + of points) but it will not look very good since one of the plot end in + the middle of the graph.
    • +
    +

    +

    7.1.4 Adding a second Y-scale

    +

    As you saw in the preceding example you could add multiple plots to + the same graph and Y-axis. However what if the two plots you want to + display in the graph has very different ranges. One might for example + have Y-values like above but the other might have Y-values in the + 100:s. Even though it is perfectly possible to add them as above the + graph with the smallest values will have a very low dynamic range since + the scale must accomplish the bigger dynamic range of the second plot.

    +

    The solution to this is to use a second Y-axis with a different + scale and add the second plot to this Y-axis instead. Let's take a look + at how that is accomplished.

    +

    First we need to create a new data array with large values and + secondly we need to specify a scale for the Y2 axis. This is done by + the lines

    + $y2data = array( +354,200,265 +,99,111, +91,198,225 +,293,251); +
    $graph->SetY2Scale( +"lin");
    +

    +

    and finally we create a new line plot and add that to the second + Y-axis. Note that we here use a new method, AddY2(), since we want this + plot to be added to the second Y-axis. Note that JpGraph will only + support two different Y-axis. This is not considered a limitation since + using more than two scales in the same graph would make it very + difficult to interpret the meaning of the graph.

    +

    To make the graph a little bit more esthetic pleasing we use + different colors for the different plots and let the two different + Y-axis get the same colors as the plots.

    +

    The resulting graph is shown below. source)

    +
    +
    Figure 11: Adding a second Y-scale plot to the same graph [src]  +

    +

    +

    +

    7.1.5 Adding a legend to the graph

    +

    With more than one plot on the same graph it is necessary to somehow + indicate which plot is which. This is normally done by adding a legend + to the graph.

    +

    You will see that each plot type has a 'SetLegend()' method which is + used to name that plot in the legend. SO to name the two plots in the + example we have been working with so far we need to add the lines

    +  $lineplot->SetLegend +("Plot 1"); +
    $lineplot2 +->SetLegend("Plot 2"); +

    +

    to the previous code. The resulting graph is shown below

    +
    +
    Figure 12: Adding a legend to the graph [src]  +

    +

    +

    As you can see the legend gets automatically sized depending on how + many plots there are that have legend texts to display. By default it + is placed with it's top right corner close to the upper right edge of + the image. Depending on the image you might want to adjust this or you + might want to add a larger margin which is big enough to accompany the + legend. Let's do both.

    +

    First we increase the right margin and then we place the legend so + that it is roughly centered. We will also enlarge the overall image so + the plot area doesn't get too squeezed.

    +

    To modify the legend you access the 'legend' property of the graph. + For a full reference on all the possibilities (changing colors, layout, + etc) see class legend in + the class reference

    +

    For this we use the legends 'SetPos()' method as in

    +  $graph +->legend->Pos( +0.05,0.5,"right" +,"center");

    +

    +

    Doing this small modification will give the result shown below

    +
    +
    Figure 13: Adjusting the layout to give more rooms for the + legend [src]  +

    +

    +

    The above method 'SetPos()' deserves some explanation since it might + not be obvious. You specify the position as a fraction of the overall + width and height of the entire image. This makes it possible for you to + resize the image within disturbing the relative position of the legend. + We will later see that the same method is just to place arbitrary text + in the image.

    +

    To give added flexibility one must also specify to what edge of the + legend the position given should be relative to. In the example above + we have specified "right" edge on the legend for the for the horizontal + positioning and "center" for the vertical position.

    +

    This means that the right edge of the legend should be position 5 % + of the image width from the right. If you had specified "left" the the + legends left edge would be positioned 5 % of the image width from the + image left side.

    +

    By default the legends in the legend box gets stacked on top of each + other. The other possibility is to have them sideways. To adjust this + you use the SetLayout() + method. Using a horizontal layout with the previous example give the + following result.

    +
    +
    Figure 14: Using a horizontal layout for the legends [src]  +

    +

    +

    +

    7.1.5.1 Adjusting the layout of the legend

    +

    For more advanced fomatting of the legend it is possible to adjust

    +
      +
    • The number of columns in the legend
    • +
    • Specify vertical / horizontal margins for legend columns
    • +
    +

    In order to adjust the number of columns used in the legend the + method Legend::SetColumns is used. So for example to have the + legend lined up using three columns the follwing lines have to be added + to teh script

    + $graph-> +legend-> +SetColumns(3);
    +

    +

    +

    7.1.6 Handling null-values in line plots

    +

    JpGraph offers two ways of handling null values (or discontinuities) + in the data. You can either have a "whole" in the data or the line may + be extended between the previous and next data point in the graph.

    +

    If the data value is null ("") or the special value "x" then the + data point will not be plotted and will leave a gap in the line.

    +

    If the data value is "-" then the line will be drawn between the + previous and next point in the data ignoring the "-" point.

    +

    The following example shows both these possibilities.

    +

    +
    +
    Figure 15: Handling null values in line graphs [src]  +

    +

    +

    +

    7.1.7 Using the step-style to render line plots

    +

    Step style refers to an alternate way of rendering line plots by not + drawing a direct line between two adjacent points but rather draw two + segments. The first segment being a horizontal line to the next X-value + and then a vertical line from that point to the correct Y-value. This + is perhaps easier demonstrated by an example as seen below.

    +

    You specify that you want the plot to be rendered with this style by + calling the method +SetStepStyle() on the lineplot.

    +
    +
    Figure 16: Rendering a line plot with the step style [src]  +

    +

    +

    +

    7.1.8 Using logarithmic scale

    +

    Using a logarithmic scale requires you to include the logarithmic + add on module in "jpgraph_log.php". So you must have the line

    +   +include("jpgraph_log.php" +);

    +

    on the top of your code. To Illustrate how to use a logarithmic scale + let's make the right Y scale in the previous example a logarithmic + scale. This is done by the line

    +  $graph->SetY2Scale( +"log"); +

    +

    This will then give the following result

    +
    +
    Figure 17: Using a logarithmic scale for both the Y2 axis [src]  +

    +

    +

    +

    You can of course also use a logarithmic X-scale as well. The + following example shows this.

    +
    +
    Figure 18: Example of using log scale on both X and Y axis + together with a linear Y2 scale +[src]  +

    +

    +

    Even though we have so far only shown line graphs logarithmic scale + can also be used for bar, error, scatter plots as well. Even radar + plots supports the use of logarithmic plots. The following example + shows how to use a logarithmic scale for a bar graph.

    +

    +
    +
    Figure 19: Example of using logarithmic scale togther with + bar plots [src] +  +

    +

    +

    +

    7.1.9 More on scales

    +

    As you saw in the previous example it is possible to use different + types of scales. In JpGraph you can use the following scales

    +
      +
    • Linear scale, the standard "scale"
    • +
    • Logarithmic scale
    • +
    • Integer scale, very similar to linear scale but restricts the scale + values (and labels) to integer values.
    • +
    • Text scale, Similar to integer scale and used when only the + numbering of items is relevant. A text scale is almost exclusively used + for the X-axis. A typical example for this is the X-axis for a bar + plot. The labels for the text scale is usually replaced by user + supplied texts. Text scales can only be used for the X-axis (it doesn't + make sense for the Y-scale).
    • +
    +

    Any combination of these may be used. Linear and logarithmic scales + are pretty straightforward. The text scale might deserve some + explanation. The easiest way to think of the text scale is as a linear + scale consisting of only natural numbers, i.e. 0,1,2,3,4,... . This + scale is used when you just have a number of Y-values you want to plot + in a consecutive order and don't care about the X-values. For the above + example it will also work fine to use a linear X-scale (try it!). + However, the scale is now treated as consisting or real numbers so the + auto scaling, depending on the size of the image an the number of data + points, might decide to display other labels then the natural numbers., + i.e. a label might be 2.5 say. This is not going to happen if you use a + text scale.

    +

    The normal practice for text scale is to specify text strings as + labels instead as the default natural numbers. You can specify text + strings for the labels by calling the + SetTickLabels() method on the Axis.

    +

    To specify the scale you use the + SetScale() method. A few examples might help clarify this.

    +
      +
    • "textlin", text-scale for X-axis, Linear scale for Y-axis
    • +
    • "linlin", linear-scale for X-axis, Linear scale for Y-axis
    • +
    • "linlog", linear-scale for X-axis, Logarithmic scale for Y-axis
    • +
    • "loglog", Logarithmic scale for X-axis, Logarithmic scale for + Y-axis
    • +
    • "textint", text-scale for X-axis, Integer scale for Y-axis
    • +
    • "textlog", Text scale for X-axis, Logarithmic scale for Y-axis
    • +
    +

    As you can see all your graphs will require at least one call to + SetScale() in the beginning of your script. Normally it will come right + after the creation of the Graph().

    +

    To specify the scale for the Y2 axis you use the + SetY2Scale() Since you only specify one axis you only specify + "half" of the string in the previous examples. So to set a logarithmic + Y2 scale you will call

    +  $graph->SetY2Scale( +"log"); +

    +

    +

    7.1.10 Adjusting the grid lines in the plot

    +

    By default only the Y-axis have grid lines and then only on major + ticks, i.e. ticks which have a label. It is of course possible to + change this. Both the X , Y and Y2 can have grid lines. It is also + possible to let the gridlines also be drawn on the minor tick marks, + i.e. ticks without a label. Lets see how we can apply this to the graph + above.

    +

    The grid is modified by accessing the xgrid (or ygrid) component of + the graph. So to display minor grid lines for the Y graph we make the + call

    + $graph->ygrid->Show +(true,true) +

    +

    The first parameter determines if the grid should be displayed at + all and the second parameter determines whether or not the minor grid + lines should be displayed.

    +

    If you also wanted the grid lines to be displayed for the Y2 axis + you would call

    + $graph-> +y2grid->Show(true +,true)

    +

    Note. In general it is not a good idea to display + both the Y and Y2 grid lines since the resulting image becomes + difficult to read for a viewer.

    +

    We can also enable the X-grid lines with the call

    +  $graph +->xgrid->Show( +true) +

    +

    +

    In the above line we will of course only just enable the major grid + lines.

    +

    To bring all this together we will display a graph with grid lines + for both Y and X axis enabled.

    +
    +
    Figure 20: Enabling major and minor gridlines for Y-axis and + major grid lines for the X-axis +[src]  +

    +

    +

    Note: If you think the first value of the + Y-axis is to close to the first label of the X-axis you have the option + of either increasing the margin (with a call to + SetLabelMargin() ) or to hide the first label (with a call to + HideFirstTickLabel() )

    +

    7.1.11 Using filled grid lines

    +

    Another option for the grid lines is the possibility to have the + area between the grid lines filled with alternating two colors. The + example below illustrates this.

    +
    +
    Figure 21: Using two alternating colors between the gridlines + [src]  +

    +

    +

    In the example above we have also made use of alpha-blending + (requires GD 2.x or higher). By default the filled grid lines are + disabled. To enable this style you have to call the +Grid::SetFill() method.

    +

    7.1.12 Specifying text labels for the X-axis

    +

    You might want to have specific labels you want to use for the + X-axis when this has been specified as a "text" scale. In the previous + example each Y-point might represent a specific measurement for each of + the first 10 month. We might then want to display the name of the + months as X-scale.

    +

    To specify the labels on the scale you make use of the + SetTickLabels() method.

    +

    To get a localized version of the name of the month you can use a + nice feature in JpGraph, the global '$gDateLocal' object which is an + instance of the + DateLocale

    +

    This class has a number of methods to get localized versions of + relevant names for dates, (months and weekdays).

    +

    So to specify the X-axis with the short form of the month names we + use the construction

    +  $a  +$gDateLocale-> +GetShortMonth(); +
    $graph->xaxis-> +SetTickLabels( +$a);
    +

    +

    This will, now result in the image displayed below

    +
    +
    Figure 22: Specifying text labels for the X-axis [src]  +

    +

    +

    Note: It is also perfectly legal to override + the default labels for the Y (and Y2) axis in the same way, however + there is seldom need for that. Please note that the supplied labels + will be applied to each major tick label. If there are insufficient + number of supplied labels the non-existent positions will have empty + labels.

    +

    7.1.13 Adjusting the ticks on a text scale

    +

    As can be seen in the previous example the X-axis is slightly + cluttered with the labels very close to each other. We might rectify + this by either enlarging the image or just displaying fewer tick label + on the x-axis.

    +

    Specifying that we only want, for example, to print every second + label on the axis is done by a call to the method + SetTextLabelInterval() Which would result in the graph

    +
    +
    Figure 23: Just printing every second label on the X-axis [src]  +

    +

    +

    +

    If the text labels are long (for example full dates) then another + way might be to adjust the angle of the text. We could for example + choose to rotate the labels on the X-axis by 90 degrees. With the help + of the SetLabelAngle() +

    +

    Which would then result in the image below

    +
    +
    Figure 24: Rotating the X-labels 90 degrees [src]  +

    +

    +

    Note: The internal fonts which we have been + using so only supports 0 or 90 degrees rotation. To use arbitrary + angles you must specify TTF fonts. More on fonts later.

    +

    7.1.14 Using filled line graphs

    +

    Using a filled line plot is not much different from using a normal + line plot, in fact the only difference is that you must call the method + SetFillColor() + on a normal line plot. This will then fill the area under the line + graph with the chosen color.

    +

    In the example below we have also, as an example, specified plot + marks (see previous sections).

    +
    +
    Figure 25: Filled line graph with plot marks [src]  +

    +

    +

    Note 1. If you add multiple filled line plots to + one graph make sure you add the one with the highest Y-values first + since it will otherwise overwrite the other plots and they will not be + visible. Plots are stroked in the order they are added to the graph, so + the graph you want front-most must be added last.

    +

    Note 2. When using legends with filled line plot + the legend will show the fill color and not the bounding line color.

    +

    Note 3. Filled line plots is only supposed to be + used with positive values. Filling line plots which have negative data + values will probably not have the appearance you expect.

    +

    As you can see from the graph above the grid lines are below the + filled line graph. If you want the grid lines in front of the graph you + can adjust the depth with call to + Graph::SetGridDepth() As the following example shows

    +
    +
    Figure 26: Adjusting the depth of the gridlines [src]  +

    +

    +

    +

    7.1.15 Using accumulated line graphs

    +

    Accumulated line graphs are line graphs that are "stacked" on top of + each other. That is, the values in the supplied data for the Y-axis is + not the absolute value but rather the relative value from graph below. + For example if you have two line graphs with three points each, say + [3,7,5] and [6,9,7]. The first graph will be plotted on the absolute + Y-values [3,7,5] the second plot will be plotted at [3+6, 7+9, 5+7], + hence the values of the previous graphs will be used as offsets.

    +

    You may add any number of ordinary line graphs together. If you want + to use three line plots in an accumulated line plot graph you write the + following code

    +

    // First create the individual plots +
    $p1 = new LinePlot( +$datay_1); +
    $p2 = new LinePlot( +$datay_2); +
    $p3 = new LinePlot( +$datay_3); +
    +
    +// Then add them together to form a accumulated plot +
    $ap = new AccLinePlot(array($p1, +$p2,$p3)); +
    +
    +// Add the accumulated line plot to the graph +
    $graph->Add( +$ap);
    +

    +

    You might of course also fill each line plot by adding the lines

    +  $p1 +->SetFillColor +("red"); +
    $p2->SetFillColor( +"blue"); +
    $p3->SetFillColor( +"green"); +

    +

    Using some appropriate data this might then give a graph perhaps + like the one showed in the figure below

    +
    +
    Figure 27: Accumulated filled line graph [src]  +

    +

    +

    +

    7.1.16 Constructing smooth line plots with Cubic + Splines

    +

    If you only have access to a few data points but still want a smooth + curve between those data points JpGraph can help you achieving that by + letting you construct cubic splines. If you never have heard of cubic + splines before, don't worry. You only have to supply the data points + you know tell JpGraph how many interpolated points in total you want in + the graph. JpGraph will now take care of constructing a smooth curve + between all you data points. The new, smooth, curve will be made up of + exactly as many interpolated points as you have specified.

    +

    To construct a spline you need both the X and Y coordinates for the + known data points.

    +

    You start by constructing a new Spline instance. To + get access to the Spline class you must first remember to include the + file "jpgraph_regstat.php". You instantiate this class by calling it + with your two known data arrays (X and Y) as follows.

    +  $spline  += new Spline($xdata, +$ydata); +

    +

    This call initializes the spline with the data points you have. These + data points are also known as Control points for the spline. + This helper class doesn't draw any line itself. Instead it is merely + used to get a new (larger) data array which have all the interpolated + values. You then use these new value in your plot. This way give you + great flexibility in how you want to use this interpolated data.

    +

    Continuing the above line we now use the Spline::Get() + method to get an interpolated array containing a specified number of + points. So for example the line

    +  list( +$sdatax, +$sdatay) =  +$spline->Get(50 +);

    +

    Will construct the two new data arrays '$sdatax' and '$sdatay' which + contains 50 data points. These two arrays are constructed from the + control point we specified when we created the '$spline' object.

    +

    You would then use these two new data array in exactly the same way + as you would form ordinary data vectors.

    +

    The following example illustrates this

    +
    +
    Figure 28: Using spline to get a smooth curve between the + control points. +[src]  +

    +

    +

    In order to make the example more interesting we actually use two + plots. First a line plot to get the smooth curve and then a standard + scatter plot which is used to illustrate where the control points are.

    +

    7.1.17 Adding plot marks to a line plot

    +

    To emphasize the specific data points it is possible to add plot + marks at each data point. Plot marks can be either

    +
      +
    • Simple shapes, (e.g. square, circle, cross, etc)
    • +
    • Arbitrary images loaded from a file
    • +
    • One of the built-in images
    • +
    +

    You access the plot mark through the "mark" instance variable in the + plot, as in

    + $lineplot-> +mark->SetColor("red" +);

    +

    To choose between the different plot marks you call the +PlotMark::SetType() method with the correct define to choose the + plot type you want to use.

    +

    The simple shape type of plot marks are

    +
      +
    • MARK_SQUARE
    • +
    • MARK_UTRIANGLE
    • +
    • MARK_DTRIANGLE
    • +
    • MARK_DIAMOND
    • +
    • MARK_CIRCLE
    • +
    • MARK_FILLEDCIRCLE
    • +
    • MARK_CROSS
    • +
    • MARK_STAR
    • +
    • MARK_X
    • +
    • MARK_LEFTTRIANGLE
    • +
    • MARK_RIGHTTRIANGLE
    • +
    • MARK_FLASH
    • +
    +

    To specify an arbitrary image you use the special define

    +
      +
    • MARK_IMG
    • +
    +

    In this case you must also specify a image file name and an optional + scaling constant. For example as in

    +  $lineplot->mark-> +SetTYPE( +MARK_IMG, +"myimage.jpg", +1.5); +

    +

    +

    If you want to use one of the built-in images the following images + are available. Please note that not all images are available in all + possible colors. The available colors for each image is listed below.

    +

    The following shape (the first class) plot marks are available

    +
      +
    1. MARK_SQUARE, A filled square
    2. +
    3. MARK_UTRIANGLE, A triangle pointed upwards
    4. +
    5. MARK_DTRIANGLE, A triangle pointed downwards
    6. +
    7. MARK_DIAMOND, A diamond
    8. +
    9. MARK_CIRCLE, A circle
    10. +
    11. MARK_FILLEDCIRCLE, A filled circle
    12. +
    13. MARK_CROSS, A cross
    14. +
    15. MARK_STAR, A star
    16. +
    17. MARK_X, An 'X'
    18. +
    19. MARK_FLASH, A "flash" shape
    20. +
    21. MARK_IMAGE, Use the image specified with the filename and scale as + the second and third argument as the mark.
    22. +
    +

    +

    For the second class (built-in images) the following table list the + different images as well as what color they are available in. For the + built-in images you specify the color with the second argument.

    +

    Note that some of the images are available in different sizes. The + reason is that even though you can scale them by the third argument + there is a visual degradation to scale an image larger than it's + original size since some pixels needs to be interpolated. Reducing the + size with a scale < 1.0 gives much better visual apperance.

    +

    The scaling works with both GD 1 and GD 2 but with GD 2 the quality + of the scaling is much better.

    +

    Built-in images and available colors:

    + + + + + + + + + + + + + + + +
    TypeDescriptionColors
    MARK_IMG_PUSHPIN, MARK_IMG_SPUSHPIN Push-pin image +'red','blue','green','pink','orange'
    MARK_IMG_LPUSHPIN A larger Push-pin image +'red','blue','green','pink','orange'
    MARK_IMG_BALL, MARK_IMAGE_SBALLA round 3D rendered ball +'bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'
    MARK_IMAGE_MBALLA medium sized round 3D rendered ball + 'blue','bluegreen','brown','cyan', + 'darkgray','greengray','gray','green', + 'greenblue','lightblue','lightred', 'purple','red','white','yellow'
    MARK_IMAGE_LBALLA large sized round 3D rendered ball + 'blue','lightblue','brown','darkgreen', + 'green','purple','red','gray','yellow','silver','gray'
    MARK_IMAGE_SQUAREA 3D rendered square +'bluegreen','blue','green', 'lightblue','orange','purple','red','yellow'
    MARK_IMG_STARA 3D rendered star image +'bluegreen','lightblue','purple','blue','green','pink','red','yellow'
    MARK_IMG_DIAMONDA 3D rendered diamond +'lightblue','darkblue','gray', 'blue','pink','purple','red','yellow'
    MARK_IMG_BEVELA 3D rendered bevel style round ring +'green','purple','orange','red','yellow'
    + Below we give two examples of images using these features.
    +
    +
    Figure 29: Using an arbitrary image as plot mark [src]  +

    +
    +

    +

    +
    +
    Figure 30: Using the built-in images [src]  +

    +

    +

    +

    7.2 Bar graphs

    +

    Jpgraph also supports 2D vertical bar plots. Before you can use any + bar plots you must make sure that you included the file + "jpgraph_bar.php" in your script.

    +

    Using bar plots is quite straightforward and works in much the same + way as line plots which you are already familiar with from the previous + examples. Assuming you have a data array consisting of the values + [12,8,19,3,10,5] and you want to display them as a bar plot. This is + the simplest way to do this:

    +  $datay=array(12, +8,19,3 +,10,5); +
    $bplot  += new BarPlot($datay); +
    $graph->Add( +$bplot); +

    +

    If you compare this to the previous line examples you can see that + the only change necessary was that instead of creating a new line plot + (via the new LinePlot(...) call) we used the statement new + BarPplot().

    +

    The other change we should do is to make sure the X-axis have an + text-scale (it is perfectly fine to use a linear X-scale but in most + cases this is not the effect you want when you use a bar graph, see + more below). With this two simple change we will now get a bar graph as + displayed in the following image

    +
    +
    Figure 31: A very simple bar graph [src]  +

    +

    +

    You can of course modify the appearance of the bar graph. So for + example to change the fill color you would use the + BarPlot::SetFillColor() method. Making this small change to the + previous example would give the expected effect as can be seen in the + next example.

    +
    +
    Figure 32: A very simple bar graph with changed fill color [src]  +

    +

    +

    Note: You should note from the previous two + graphs that slight change in appearance for the X-scale. The bar graphs + gets automatically centered between the tick marks when using as text + x-scale. If you were to use a linear scale they would instead start at + the left edge of the X-axis and the X-axis would be labeled with a + linear scale. As is illustrated in the (small) example below.
    +
    +
    Figure 33: A small example with a bar graph using a linear + X-scale [src] +  +

    +

    +

    +

    7.2.1 Adjusting the width of the bars

    +

    JpGraph allows you to easy customize the appearance of the bar + graph, for example to change the width of each bar. The width of each + bar can be specified either as a fraction of the width between each + major tick or as an absolute width (in pixels).

    +

    To set the width in fraction you use the method + SetWidth() and to set the width in pixels you use the + SetAbsWidth()

    +

    As an example let's take the previous example and set the width to + 100% of the distance between the ticks. The example will now become

    +

    +
    +
    Figure 34: Setting the width of the bars to 100% of the tick + width [src]  +

    +

    +

    +

    7.2.2 Displaying the value of each bar

    +

    You can easily choose to display the value (and it's format) on top + of each bar by accessing the bar's 'value' property. So for example by + just adding the line

    +  $barplot->value-> +Show(); +

    +

    Will enable the values in it's simplest form and will give the + result

    +
    +
    Figure 35: Showing the values for each bar [src]  +

    +

    +

    You cane see a small nuisance in this graph. The auto scaling + algorithm chooses quite tight limits for the scale so that the bars + just fit. Adding the value on top of the bar makes it collide with the + top of the graph. To remedy this we tell the auto scaling algorithm to + allow for more "grace" space at the top of the scale by using the + method + SetGrace() which is used to tell the scale to add a percentage (of + the total scale span) more space to either one end or both ends of the + scale. In this case we add 20% more space at the top to make more room + for the values with the line

    +  $graph->yaxis-> +scale-> +SetGrace(20);
    +

    +

    +

    This will then give the graph as shown below

    +
    +
    Figure 36: Adding some grace space to the top of the Y-scale [src]  +

    +

    +

    +

    You can also adjust the general position of the value in respect to + the bar by using the + BarPlot::SetValuePos() method. You can set the position to either + 'top' (the default) , 'center' or 'bottom'. The graph below shows the + value being positioned in the center. In this example we have also + adjusted the format to just display the value as an integer without any + decimals.

    +
    +
    Figure 37: Putting the values in the middle of the bar. [src]  +

    +

    +

    It is also possible to specify a more fine grained control on how + you want the values presented. You can for example, rotate them, change + font, change color. It is also possible to adjust the actual value + displayed by either using a printf()-type format string or with the + more advanced technique of a format callback routine.

    +

    To show what you can do we just give another example for you to + examine without much further explanations. Just remember that to have + text at an angle other than 0 or 90 degrees we have to use TTF fonts. + Even though we haven't explained the SetFont() method it should be + fairly obvious.

    +
    +
    Figure 38: Making the displayed values more interesting [src]  +

    +

    +

    +

    7.2.3 Adding a drop shadow to the bar

    +

    One simple way of making the bar graph more attracting is to add a + drop shadow to each bar. This is done by calling the + SetShadow() method. An example will clarify this.

    +
    +
    Figure 39: Adding a drop shadow to each bar [src]  +

    +

    +

    +

    7.2.4 Adjusting the alignment of bars on a text + scale

    +

    As you have seen from the previous examples bar graphs are normally + centered between the trick marks on a text scale. However, you can + modify this behavior by calling the method + BarPlot::SetAlign()

    +

    7.2.5 Using grouped bar plots

    +

    These types of bar graph is used to easy group two or more bars + together around each tick (X-value). The bars will be placed + immediately beside each other and as a group centered on each tick + mark. A grouped bar is created by aggregating two or more ordinary bar + graphs and creating a + GroupBarPlot() From two ordinary bar graphs along the lines of

    +   +// Create the bar plots +
    $b1plot  += new BarPlot($data1y); +
    $b1plot->SetFillColor( +"orange"); +
    +
    $b2plot  += new BarPlot($data2y); +
    $b2plot->SetFillColor( +"blue"); +
    +
    // Create the grouped bar plot +
    $gbplot  += new GroupBarPlot +(array($b1plot +,$b2plot)); +
    +
    // ...and add it to the graPH +
    $graph->Add( +$gbplot); +

    +

    The following example illustrates this type of graph

    +
    +
    Figure 40: A grouped bar plot [src]  +

    +

    +

    There is no limit on the number of plots you may group together.

    +

    If you use the SetWidth() method on the GroupBarPlot() this will + affect the total width used by all the added plots. Each individual bar + width will be the same for all added bars. The default width for + grouped bar is 70%.

    +

    Setting the grouped with to 0.9 would result in the image below.

    +
    +
    Figure 41: Adjusting the width for a gropued bar plot. [src]  +

    +

    +

    +

    7.2.6 Using accumulated bar plots

    +

    The final variety of group bars you can have are accumulated bars. + They work in much the same way as accumulated line plots described + above. Each plot is stacked on top of each other.

    +

    You create accumulated bar plots in the same way as grouped bar + plots by first creating a number of ordinary bar plots that are then + aggregated with a call to + AccBarPlot();

    +

    An example makes this clear. Let's use the same data as in the two + examples above but instead of grouping the bars we accumulate (or + stack) them. The code would be very similar (actually only one line has + to change)

    +
    +
    Figure 42: Accumulated bar plots [src]  +

    +

    +

    +

    7.2.7 Using grouped accumulated bar graphs

    +

    It is perfectly possible to combine the previous bar types to have + grouped accumulated bar plots. This is done by just adding the + different accumulated plots to a group bar plot, for example the + following code would do that.

    +   +// Create all the 4 bar plots +
    $b1plot  += new BarPlot($data1y); +
    $b1plot->SetFillColor( +"orange"); +
    $b2plot  += new BarPlot($data2y); +
    $b2plot->SetFillColor( +"blue"); +
    $b3plot  += new BarPlot($data3y); +
    $b3plot->SetFillColor( +"green"); +
    $b4plot  += new BarPlot($data4y); +
    $b4plot->SetFillColor( +"brown"); +
    +
    // Create the accumulated bar plots +
    $ab1plot  += new AccBarPlot +(array($b1plot +,$b2plot)); +
    $ab2plot  += new AccBarPlot +(array($b3plot +,$b4plot)); +
    +
    // Create the grouped bar plot +
    $gbplot  += new GroupBarPlot +(array($ab1plot +,$ab2plot)); +
    +
    // ...and add it to the graph +
    $graph->Add( +$gbplot); +

    +

    Putting this together in an example would then produce the graph as + shown below

    +
    +
    Figure 43: Combining grouped and accumulated bar plots [src]  +

    +

    +

    +

    7.2.8 Horizontal bar graphs

    +

    It can often come in handy to have horizontal bar graphs especially + if you have a large number of values to display. Even though JpGraph + doesn't directly support horizontal bar graphs this is easy achieved by + constructing a normal vertical bar graph which is then rotated 90 + degrees.

    +

    The example below shows a simple example of this

    +
    +
    Figure 44: A typical horizontal bar graph with the Y-axis at + the bottom +[src]  +

    +

    +

    +

    In order to achieve this effect you should study the above example + carefully and you might notice two things

    +
      +
    • We don't simply rotate the graph we also specify that we want the + rotation center to be the middle of the entire image. The reason for + this is that by default (See the section on rotating plots) the pivot + point for rotation is the center of the plot area. + Since the center of the plot area is not necessary the center of the + entire image the rotation might be a little bit difficult to predict + since it will depend on the margins specified. <
    • +
    • The size of the plot area is determined from the original width and + height of the image taking the specified margin into account. When the + the plot area is rotated 90 degrees clockwise what was the left margin + now in effect become the upper margin and so on. This is a small nuance + since we conceptually want to specify the margins directly in the + rotated plot. +
      In order to more easily handle the margin with rotated images it is + recommended that the method "Set90AndMargin()" is used. This allows the + image to be rotated as well as specifying the margins in an obvious + way.
    • +
    +

    We finally show three more examples of horizontal bar plots. In the + first plot we have hidden the Y-axis and in the second we have + positioned the Y - axis at top as opposed to the bottom as the first + example shows.

    +

    +
    +
    Figure 45: Horizontal bar graph with hidden Y axis [src]  +

    +

    +

    +
    +
    Figure 46: Horizontal bar graph with Y axis at the top [src]  +

    +

    +

    +

    In the final example which is almost similar to the two first we + illustrate the use of labels with more than one line.

    +
    +
    Figure 47: Horizontal bar graph with manual integer scale as + well as multiple line labels +[src]  +

    +

    +

    +

    7.2.9 Using gradient fill for bar graphs

    +

    It is possible to use color gradient fill for the individual bars in + the bar graph.

    +

    Color gradient fill fills a rectangle with a smooth transition + between two colors. In what direction the transition goes (from left to + right, down and up, from the middle and out etc) is determined by the + style of the gradient fill. JpGraph currently supports 8 different + styles. All supported styles are displayed in the figure below.

    +
    +
    Figure 48: +[src]  +

    +

    +

    +
    +
    Figure 49: +[src]  +

    +

    +

    +
    +
    Figure 50: +[src]  +

    +

    +

    +
    +
    Figure 51: +[src]  +

    +

    +

    +
    +
    Figure 52: +[src]  +

    +

    +

    +
    +
    Figure 53: +[src]  +

    +

    +

    +
    +
    Figure 54: +[src]  +

    +

    +

    +
    +
    Figure 55: +[src]  +

    +

    +

    +

    To specify a gradient fill for the bar plots you make use of the + method + BarPlot::SetFillGradient() . See the class reference for details of + this function.

    +

    When using gradient fills there are a couple of caveats you should + be aware of:

    +
      +
    • gradient filling is computational expensive. Large plots with + gradient fill will take in the order of 6 times longer to fill then for + a normal one-color fill. This might to some extent be helped by making + use of the cache feature of JpGraph so that the graph is only generated + a few times.
    • +
    • gradient filling will make use of much more colors (by definition) + this will make the color palette for the image bigger and hence make + the overall image larger. It might also have some severe effect on + using anti-aliased line in the same image as color gradient filling + since anti-aliased lines also have the possibility to make use of many + colors. Hence the color palette might not be big enough for all the + colors you need. So if you use gradient fills you should also be using + a true-color image since you otherwise run out of colors. +
      This problem is often seen as that for no apparent reason some + color you have specified in the image does appear as another color. + (This is not a bug in JpGraph!) This is something to especially watch + out for when enabling anti-aliasing since that also uses a lot of + colors. Since the numbers of colors used with anti-aliasing depends on + the angle on the lines it is impossible to foresee the number of colors + used for this.
    • +
    +

    +

    7.2.10 Creating semi-filled bar graphs

    +

    Semi filled bar graphs are in principle the same as normal filled + bar graphs but with the additional feature that you can choose to only + fill a specified range (or ranges) of X-coordinates. The figure below + illustrates this

    +

    +
    + + +
    Figure 56: Semi-filled line graph [src]  +

    +

    +

    +

    In this example we defined two areas along the X-axis to be filled. + You can add filled areas by using the method + AddArea() and specifying range and color for the filled area.

    +

    7.3 Error plots

    +

    Error plots are used to visually indicate uncertainty in data + points. This is done by for each X value by giving both a minimum and a + maximum Y-value.

    +

    Before you can use error plots you must remember to include the file + "jpgraph_error.php" in your script.

    +

    The following example illustrates a simple error bar. We will have 5 + points, so we need 10 Y-values. We also would like the error bars to be + red and 2 pixels wide. All this is accomplished by creating an + ErrorPlot() in much the same way as, for example, a normal line + plot. Doing this would now give the example shown below.

    +

    +
    +
    Figure 57: A simple error bar [src]  +

    +

    +

    You might notice that there is one displeasing esthetic quality of + this graph. The X-scale is just wide enough to just accompany the + number of error bars and hence the first bar is drawn on the Y-axis and + the and last bar just at the edge of the plot area. To adjust this you + might call the SetCenter() + method which will adjust the X-scale so it does not use the full width + of the X-axis.

    +

    The following example illustrates the use of this feature by + applying this technique to the previous example

    +
    +
    Figure 58: Adjusting the X-scale not to use the full width of + the X-axis. +[src]  +

    +

    +

    +

    7.3.1 Using line error plots

    +

    A line error plot is an error plot with the addition that a line is + drawn between the average value of each error pair. You use this type + of plot the exact same way you would use an error plot. The only change + is that you must instantiated an + ErrorLinePlot() instead and make sure you have included the + "jpgraph_line.php" since the line error plot makes use of the line plot + class to stroke the line.

    +

    To control the various properties of the line drawn the "line" + property of the error line plot may be accessed. So, for example, if + you want the line to be 2 pixels wide and blue you would have to add + the following two lines

    +  $elplot->line-> +SetWeight(2); +
    $elplot->line-> +SetColor( +"blue"); +

    +

    to generate the graph as shown below

    +
    +
    Figure 59: Linear error plot [src]  +

    +

    +

    You may of course add legends to none, one or both of the line types + in the above graph. So for example if we wanted the legend "Min/Max" + for the red error bars and a legend "Average" for the blue line you + would have to add the lines

    +  $errplot->SetLegend( +"Min/Max"); +
    $errplot->line-> +SetLegend( +"Average"); +

    +

    The resulting graph will now look like (note that we are using the + default placement of the legend box)

    +
    +
    Figure 60: Addding a legend box to the line error plot. [src]  +

    +

    +

    +

    7.4 Scatter plots

    +

    Scatter plots are very simple; they plot a number of points + specified by their X- and Y-coordinate. Each point is stroked on the + image with a mark as with line plots. The stroked marks can also be + connected with an optional line.

    Note: Even + though it is only scatter plot that was designed to be used with X,Y + plots it is perfectly possible to use use both X,Y coordinates for bar + and line plots as well.

    +

    Even though you would normally supply X-coordinates it is still + perfectly possible to use a text-scale for X-coordinates to just + enumerate the points. This is especially useful when using the + "Impulse" type of scatter plot as is shown below.

    +

    Scatter pots are created by including the jpgraph extension + "jpgraph_scatter.php" and then creating an instance of plot type of + ScatterPlot(). To specify the mark you want to use you access the mark + with the instance variable "mark" in the scatter plot. The default is + to use an unfilled small circle.

    +

    To create a scatter plot you will create an instance

    +

    A simple example using just default values will illustrate this

    +

    +
    +
    Figure 61: The simplest possible scatter plot [src]  +

    +

    +

    We can easily adjust the size and colors for the markers to get + another effect as shown below

    +
    +
    Figure 62: The simplest possible scatter plot with adjusted + marks [src] +  +

    +

    +

    Another possible variant of scatter plot is impulse-scatter plots. + This is a variant of normal scatter plot where each mark have a line + from the mark to the Y=0 base line. To change a scatter plot into an + impulse scatter plot you have to call the method + SetImpuls() on the scatter plot.

    +

    This type of plots are often used to illustrate signals in + conjunction with digital signal processing. The following two examples + illustrates simple use of impulse plots.

    +
    +
    Figure 63: A simple impuls plot [src]  +

    +

    +

    The next example shows how to modify the color and width of the + impulse plot

    +
    +
    Figure 64: A modified impuls plot [src]  +

    +

    +

    Note: You may draw impulse graphs without + any mark by specifying the mark type as (-1) . That way only the + impulse lines will be drawn.

    +

    As a final touch we show two more advanced impulse graphs . In these + graphs we have used more advanced formatting for the Y-axis labels as + well as adjusted the position of the axis position.

    +
    +
    Figure 65: In this imuplsplot we have adjusted the position + of the X-axis to the bottom and also added more decimals to the labels + on the Y-axis +[src]  +

    +

    +

    +
    +
    Figure 66: In this impuls plot we have also added a lineplot + with a dotted line style. +[src]  +

    +

    +

    +

    7.5 Field plots

    +

    A variant of scatter plot is the so called Field Plots this + is basically a scatter plot where each scatter point is an arrow with a + direction between 0 to 359 degrees. This effectively allows the + visualization of 3 parameters at each point (x,y,angle). As an + additional bonus there is also possible to define a callback for each + scatter plot to also define the color for each point.

    +

    To create a field plot you create an instance of +FieldPlot in the same way as you created a normal scatter plot. The + arguments to this method are Y-coordinate, X-coordinate and angle. To + specify a callback you use +FieldPlot::SetCallback()

    +

    The following example (and code) illustrates the usage of the field + plot type.

    +

    +
    +
    Figure 67: Example of the Field plot type [src]  +

    +

    +

    In addition to the parameters mentioned above you can also adjust + both the general size of the arrow and also the specific size of the + arrowhead. The arrow size is specified in pixels and the arrow head is + specified as an integers between 0 and 10. These sizes are specified + with a call to +FieldPlot::arrow::SetSize()

    +

    7.6 Box and Stock charts

    +

    JpGraph offers two variation on what is usually known as stock + charts, candle-charts or box plot.

    +

    7.6.1 Stock Charts

    +

    Stock charts is used to display data values where one is interested + in 4 different values for each data point. This could for example be + used to display a stocks open,close, min and max value during a + specific day. Hence the name Stock chart (or Stock plot).

    +

    The figure below illustrates a sample Stock chart plot

    +
    +
    Figure 68: A simple stock plot [src]  +

    +

    +

    For this type of plot the Y-data array must be consist of a number + of quadruples of data where each quadruple consists of + (open,close,min,max). The open and close values determine the min max + for the middle bar and the min,max determine the end points of the + "error-lines" at the top and bottom of of each bar.

    +

    Note that the data follows the following rules

    +
      +
    • min < max
    • +
    • min < min(open.close)
    • +
    • max > max(open,close)
    • +
    +

    To separate the two cases where "open > close" or "open < close " + different colors are used. These colors are specified with the +SetColor() method. By default a positive bar (close > open) have a + fill color of white and for the negative case where (close < open) the + bars have a red color.

    +

    You can specify the width of the bar by setting the width (in + pixels) with a call to the method +SetWidth()

    +

    The final variation of stock plots you can have is to determine + whether or not the end point for the min,max lines should have the + horizontal line marking the end of the line or not. This can be + adjusted with a call to method +HideEndLine().

    +

    7.6.2 BoxPLots : Stock charts with a median line

    +

    A minor variation of stock charts is the "BoxPlot()" this is almost + the same as StockPlot() but with the very small difference that in + addition to the open,close,min, max values you also specify a median + value . The median lies between the open and close value and is + illustrated as a horizontal line within the bar.

    +
    +
    Figure 69: A simple box type stock plot [src]  +

    +

    +

    You may modify the median line color for positive and negative data + points / bars by using the +SetMedianColor() method.

    +

    7.6.3 Image maps for Box and Stock charts

    +

    In the same way as for other plots you may associate an image map + with these plots. The "hot" area for each plot is the mid "bar" + section. In the same way as other plot types you use the + SetCSIMTargets() to set the URLs you want to use.

    +

    These plot types, though normally used without explicit X-values, + can of course handle a supplied X-coordinate array without any problem.

    +

    7.7 Combining different graph types

    +

    It is perfectly legal to add several different plot types to the + same graph. It is therefore possible to mix line plots with (for + example) filled bar graphs. What you should keep in mind doing this is + the order in which these plots are stroked to the image since a later + stroke will overwrite a previous one. All plots are stroked in the + order you add them, i.e. the first plot added will be stroked first. + You can therefore control which plot is placed in the background and + which one is placed in the foreground by the order you add them to the + plot.

    +

    To start simple we just mix a filled line plot with a non-filled + line plot as the following example shows.

    +

    +
    +
    Figure 70: Mixing filled and non-filled line plots in the + same graph +[src]  +

    +

    +

    +

    Let's now go to something a little bit more complicated. How to mix + bar and line graphs. Let's just take one of our previous bar graphs and + add a line plot to it and see what happens.

    +

    +
    +
    Figure 71: Adding a line to a bar graph [src]  +

    +

    +

    Not too bad. But we can't see the line so we change the order in + which we add the lines to the graph and sees what happens.

    +
    +
    Figure 72: Adding a line to a bar graph, in different orderv2 + [src]  +

    +

    +

    +

    If you want the line points to be aligned in the center of the bars + you can accomplish this is two ways.

    +

    If you use a text scale then you need to call the + LinePlot::SetBarCenter()

    +
    +
    Figure 73: Centering the line point in the middle of the bars + using LinePlot::SetBarCenter() [src]  +

    +

    +

    +

    You can also use an integer scale. This places both + the bar and the line points centered at the tick marks. As the + following example will show

    +

    +
    +
    Figure 74: Using a linear scale [src]  +

    +

    +

    Note: In this example we also have + illustrated the fact that it is possible to add text labels to a linear + (or integer) scales as well.

    +

    As a final example we show how you can combine a scatter plot and a + line plot which could be used to illustrate a regression line fitting.

    +
    +
    Figure 75: Combining a scatter plot and a line plot [src]  +

    +

    +

    +

    7.8 Specifying the scale manually

    +

    Normally the automatic scaling should be doing an adequate job in + most circumstances but there might be cases where you like to manually + set the scale. For example if you have several graphs where you like to + be able to easily compare them and therefore want them all to have the + same scale.

    +

    To specify a manual scale you have to add arguments to the standard Graph::SetScale() method. + So to specify that you want an Y-scale between 0 and 100 you need to + write

    + $graph-> +SetScale( +"textlin",0,100 +);

    +

    When you specify a scale manually there is one additional thing you + need to decide. How the tick marks should be positioned. You have three + choices

    +
      +
    1. Let JpGraph decide suitable tick marks honoring the exact scale you + specified. This is the default behavior if you don't do anything + else.
    2. +
    3. Allow JpGraph to slightly adjust your specified min and max values. + With the default method, depending on the min and max values, the end + and start of the scale might not fall on an exact tick mark. For + esthetic reasons you might still want the last/first tick mark to fall + on the edges of the scale. By calling + LinearScale::SetAutoTicks() you tell JpGraph to make the smallest + necessary adjustment of the end/start points so that they fall on an + exact tick mark.
    4. +
    5. Manually specify the tick marks with a call to + LinearTicks::Set() For example
      +  $graph->SetScale( +"textlin",0,100 +); +
      $graph->yscale-> +ticks->Set(10 +,5);
      +

      Will set the major tick marks every at 0,10,20,.. And every minor + tick mark in between (0,5,10,15,20,25,...).

      +
    6. +
    +

    The three images below illustrates the difference between the + possibilities of ticks for a manual scale.

    +
    +
    Figure 76: Manual scale, manual ticks major=7 minor=2 [src]  +

    +

    +

    +

    +
    +
    Figure 77: Manual scale, automatic ticks with exact limits [src]  +

    +

    +

    +

    +
    +
    Figure 78: Manual scale, automatic ticks where we allow + adjustments of the limits +[src]  +

    +

    +

    +

    7.9 Adjusting the automatic tick marks

    +

    You can adjust the automatic tick marks by telling JpGraph how dense + you want them to be. You use the + Graph::SetTickDensity() method. You can set the density setting in + four steps

    +
      +
    • TICKD_VERYSPARSE, Very few ticks
    • +
    • TICKD_SPARSE, Few ticks
    • +
    • TICKD_NORMAL, Standard number of ticks
    • +
    • TICKD_DENSE, Large number of ticks
    • +
    +

    Taking the previous example with the manual scale but automatic + ticks and using a denser ticks setting gives the following result

    +
    +
    Figure 79: Manual scale with automatic ticks but with a + denser tick settings. +[src]  +

    +

    +

    +

    7.10 Handling date/time scales

    +

    With date/time scale we refer to the plotting of data where the + independent variable (X-axis) de-nominates a time value. This could for + example be the temperature measured in intervals during a day.

    +

    From version 1.18 and onwards there are two principal ways of + handling date/time scales. The manual way and fully automatic using the + special "dat" scale. For most cases the automatic "dat" scale is the + preferred choice but in rare circumstances it might be more appropriate + to use the manual way since it gives slightly more control (but not + that much) of the overall handling of scales.

    +

    To be able to use a date/time scale at all we will assume that the + data points are represented by both an X coordinate (time-value) and a + Y-value (anything else wouldn't make sense).

    +

    We first start by describing the use of the "dat" scale.

    +

    7.10.1 Using the automatic date/time scale

    +

    The easiest way to get a date time scale for the X-axis is to use + the pre-defined "dat" scale. To be able to use that it is first + necessary to include the module "jpgraph_date.php" and the + specify the scale, for example as "datlin" in the call to SetScale() + as the following code snippet shows.

    +  require_once("../jpgraph.php"); +
    require_once(
    "../jpgraph_line.php"); +
    require_once(
    "../jpgraph_date.php"); +
    ... +
    $graph  += new Graph(540, +300); +
    $graph->SetScale( +'datlin'); +
    ...

    +

    The above code snippet would create a date/linear scale for the + graph. We will first show a basic use of the date scale and then go on + to illustrate how it is possible to tailor the exact formatting of the + date axis.

    +

    When using the fully automatic formatting the library will use the + shortest possible string that uniquely identifieas a date/time. For + example if the entire intervall falls within the same day only the time + values will be displayed, if the intervall falls over several days then + also the date will be added to the label.

    +

    As usual it is also possible to manually force a certain label + formatting to be used this is illustrated below.

    +

    7.10.1.1 Specifying the input data

    +

    The first basic example below creates a data set that emulates a + sample rate every S second and falls over a total period of two days. + It is important to note that the input data on the X-axis must be a in + the form of timestamp data, i.e. the number of seconds from the system + epoch. In PHP the current timestamp value is returned by the function + time().

    +

    This means that it is always mandatory to specify two input vectors + for a plot. For example to specify a line plot

    +  $line  += new LinePlot +($data,$xdata); +

    +

    The example below show this in practice

    +
    +
    Figure 80: Using the special date X-axis with all default + values [src] +  +

    +

    +

    Please review the script (by following the [src] link) that creates + this graph before continuing since we will base all further examples on + the above example.

    +

    7.10.1.2 Adjusting the start and end alignment

    +

    As can be seen from the above example the scale starts slightly + before the first data point. Why? This is of course by purpose in order + to make the first time label to start on an "even" value, in this case + on an hour. Depending on the entire interval of the graph the start + value will always be chosen to be the largest "even" time value, this + could for example be on an even minute, even 30min, even hour, even + day, even week and so on.

    +

    The alignment of the start (and end) vdate alignment can also be + adjusted manually by using the two methods

    +
      +
    • SetTimeAlign($aStartAlign,$aEndAlign)
    • +
    • SetDateAlign($aStartAlign,$aEndAlign)
    • +
    +

    These method allow the alignment to be made by specifying one of the + following constants.

    +

    For the SetTimeAlign() the following symbolic constants can be used

    +
      +
    1. Alignment on seconds +
        +
      • MINADJ_1, Align on a single second (This is the lowest resolution)
      • +
      • MINADJ_5, Align on the nearest 5 seconds
      • +
      • MINADJ_10, Align on the nearest 10 seconds
      • +
      • MINADJ_15, Align on the nearest 15 seconds
      • +
      • MINADJ_30, Align on the nearest 30 seconds
      • +
      +
    2. +
    3. Alignment on minutes +
        +
      • MINADJ_1, Align to the nearest minute
      • +
      • MINADJ_5, Align on the nearest 5 minutes
      • +
      • MINADJ_10, Align on the nearest 10 minutes
      • +
      • MINADJ_15, Align on the nearest 15 minutes
      • +
      • MINADJ_30, Align on the nearest 30 minutes
      • +
      +
    4. +
    5. Alignment on hours +
        +
      • HOURADJ_1, Align to the nearest hour
      • +
      • HOURADJ_2, Align to the nearest two hour
      • +
      • HOURADJ_3, Align to the nearest three hour
      • +
      • HOURADJ_4, Align to the nearest four hour
      • +
      • HOURADJ_6, Align to the nearest six hour
      • +
      • HOURADJ_12, Align to the nearest tolw hour
      • +
      +
    6. +
    +

    For the SetDateAlign() the following symbolic constants can + be used

    +
      +
    1. Alignment on a day basis +
        +
      • DAYADJ_1, Align on the start of a day
      • +
      • DAYADJ_7, Align on the start of a week
      • +
      • DAYADJ_WEEK, Synonym to DAYADJ_7
      • +
      +
    2. +
    3. Alignment on a monthly basis +
        +
      • MONTHADJ_1, Align on a month start
      • +
      • MONTHADJ_6, Align on the start of halfyear
      • +
      +
    4. +
    5. Alignment on a yearly basis +
        +
      • YEARADJ_1, Align on a year
      • +
      • YEARADJ_2, Align on a bi-yearly basis
      • +
      • YEARADJ_5, Align on a 5 year basis
      • +
      +
    6. +
    +

    Some examples will calrify the use of these methods.

    +

    Example 1. We want the time adjustment to start on an even + quarter of an hour, i.e. an even 15 minute period.

    +  $graph +->xaxis->scale-> +SetTimeAlign( +MINADJ_15); +

    +

    +

    Example 2. We want the time to start on an even 2 hour

    +  $graph +->xaxis->scale-> +SetTimeAlign( +HOURADJ_2); +

    +

    +

    Example 3. We want the start to be on an even day

    +  $graph +->xaxis->scale-> +SetDateAlign( +DAYADJ_1); +

    +

    +

    7.10.1.3 Adjusting the label format

    +

    The default label format always tries to use the shortest possible + unique string. To manually set a manual scale the method + SetDateFormat() is used for example as in

    +  $graph +->xaxis->scale-> +SetDateFormat( +'H:i'); +

    +

    The above example will force the labels to be displayed as hour (24h) + and minutes.

    +
    +
    Figure 81: Using specific label format and align time axis to + start and end on an even 10min [src]  +

    +

    +

    +

    7.10.1.4 Adjusting the date scale density

    +

    As with the linear scale it is possible to indicate what density of + scale ticks is needed. This is specified as usual with a call to + Graph::SetTickDensity()

    +  $graph->SetTickDensity( +TICKD_DENSE); +

    +

    +

    7.10.2 Specifying a date/time scale with a manual + call-back

    +

    In the following we will assume that all data points are specified + by a tuple where the date/time is specified as a timestamp in second in + the same format as is returned by the PHP function time().

    +

    The trick here is to use a label formatting callback routine which + gets called to format each label on the scale.

    +

    What we do is that we specify that the X-scale should be an ordinary + "int" scale (remember that the data values are timestamps which are + integers). We then install our custom label callback (with a call to + SetLabelFormatCallback()) which given a timestamp formats it to a + suitable human readable form. In our example we will use the PHP + function Date() for this purpose.

    +

    The callback we use will be

    +   +// The callback that converts timestamp to minutes and seconds +
    function  +TimeCallback( +$aVal) { +
        return 
    Date +('H:i:s',$aVal); +
    }

    +

    Using some random data we can now generate the following graph

    +
    +
    Figure 82: Example on how to format an axis to hold a + date/time scale using and integer scale and a callback routine [src]  +

    +

    +

    In the above example we have specified the X-scale manually to make + sure that the min/max values on the X-axis exactly matches the min/max + x-data values.

    +

    SetLabelFormatCallback() will be called for each of the displayed + labels and the argument passed on to the supplied function is the + default label that the library is assigning that specific label.

    +

    This means that if the data to be displayed is based on, for + example, timestamps which are given in seconds the displayed value + might not be aligned to how time/date values normally should be + displayed.

    +

    Using integer scales this will not work very well since the library + determines label positions to be at even positions (e.g. every 2,5,10, + 20,50,100 etc) to suit the auto-scaling since the library will assume + that the data is integers and not timestamp values.

    +

    The best way to solve this is to use an integer X-scale together + with a a callback function with a manually specified scale. In order to + setup the scale a bit of manually work is needed. Depending on the data + to be displayed one should ensure that the scale starts and ends at + suitable times and that the tick interval chosen fits with an even + multiple of minutes, hours, days or what is best suited for the time + range that is to be displayed.

    +

    The following code example illustrates this. It creates some "fake" + data that is assumed to be sampled time based data and sets up some + suitable scales and tick interval. This script may be used as a basis + for more advanced handling of the time data.

    +(File: timestampex01.php) +
    <?php +
    +// Example on how to treat and format timestamp as human readable labels +
    require_once( +"../jpgraph.php"); +
    require_once(
    "../jpgraph_line.php"); +
    +
    // Number of "fake" data points +
    DEFINE('NDATAPOINTS', +500); +
    +
    +// Assume data points are sample every 10th second +
    DEFINE('SAMPLERATE', +10);  +
    +
    +// Callback formatting function for the X-scale to convert timestamps +
    // to hour and minutes. +
    function  +TimeCallback( +$aVal) { +
        return 
    Date +('H:i'$aVal); +
    } +
    +
    // Get start time +
    $start time(); +
    +// Set the start time to be on the closest minute just before the "start" timestamp +
    $adjstart  += floor($start  +60); +
    +
    +// Create a data set in range (20,100) and X-positions +
    +// We also apply a simple low pass filter on the data to make it less +
    // random and a little smoother +
    $data  += array(); +
    $xdata  += array(); +
    $data[0] =  +rand(20,100 +); +
    $xdata[0] =  +$adjstart; +
    for( 
    $i=1 +$i  +NDATAPOINTS; ++ +$i ) { +
        
    $data[$i] =  +rand(20,100 +)*0.2 $data[ +$i-1]*0.8 +; +
        
    $xdata +[$i] = $adjstart  +$i  +SAMPLERATE; +
    } +
    +
    +// Assume that the data points represents data that is sampled every 10s +
    // when determing the end value on the scale. We also add some extra +
    // length to end on an even label tick. +
    $adjend $adjstart  + ( +NDATAPOINTS+10)*10 +; +
    +
    $graph  += new Graph(500, +250); +
    $graph->SetMargin( +40,20,30 +,50); +
    +
    +// Now specify the X-scale explicit but let the Y-scale be auto-scaled +
    $graph->SetScale( +"intlin",0,0 +,$adjstart,$adjend); +
    $graph->title-> +Set( +"Example on TimeStamp Callback"); +
    +
    +// Setup the callback and adjust the angle of the labels +
    $graph->xaxis-> +SetLabelFormatCallback( +'TimeCallback'); +
    $graph->xaxis-> +SetLabelAngle( +90); +
    +
    +// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute +
    $graph->xaxis-> +scale->ticks->Set +(300,60); +
    +
    $line  += new LinePlot +($data,$xdata); +
    $line->SetColor( +'lightblue'); +
    $graph->Add( +$line); +
    +
    $graph->Stroke(); +
    ?> +

    +

    7.11 Adjusting labels on a text scale

    +

    In the following section we will work through an number of examples + on how to manipulate labels on a text scale. Primarily we will + investigate how to best handle the case where you have a large number + of values.

    +

    As a remainder; Text scale is meant to be used on the X-axis when + the X-axis doesn't have a numeric value, i.e you are only interested in + linear ordering of the data. If you don't specify the labels manually + they will be set automatically starting from 1 as the example below + shows.

    +

    +
    +
    Figure 83: A simple bar plot using an automatic text scale [src]  +

    +

    +

    +

    To specify the labels on the X-axis as suitable text strings you + call the method + Axis::SetTickLabels() with an array containing the text-labels. If + there are more data points than labels the non-specified labels will be + given their ordinal number. If we augment the previous example with the + name of the month we get the following new example

    +

    +
    +
    Figure 84: Manually specifying the text scale labels [src]  +

    +

    +

    +

    +
    Tip: To get hold of localized version of + the month names (or weekdays) you can use the + DateLocal class available in the global variable $gDateLocale If no + locale has been specified the default locale for the installation will + be used. +
    +

    What happen now if we have a larger number of bars? Let's try with + 25 bars and see what result we get.

    +

    +
    +
    Figure 85: A larger data set [src]  +

    +

    +

    +

    Not all to impressive. The labels are to close and they overlap. + Hence it is not a good idea to display every label. To adjust what + labels are to be displayed you use the + SetTextLabelInterval() method. The argument to this method is the + interval between text labels. So to display only every 3 month you + would add the line

    +

    + $graph->xaxis->SetTextLabelIntervall(3 +)

    +

    +

    Which would give the result shown below

    +
    +
    Figure 86: Displaying only every third label [src]  +

    +

    +

    +

    Much better, quite readable.

    +

    If we have an even larger data set it might not longer be meaningful + to display all the tick marks since they would simple become to close. + In JpGraph there is a possibility to specify that you only would like + every n:th tick mark to be visible ( + SetTextTickIntervall() ). For bar graphs using text scale however, + that might not be such a good idea since the tick marks are between the + bars and the labels centered under the bars. If we only were to + display, say, every 3 tick mark it wouldn't look to good. Not that we + can't do it, as the example below shows, but it just doesn't look very + good.

    +
    +
    Figure 87: Displaying just every third tick mark. [src]  +

    +

    +

    +

    A better way to handle large data set is simply to hide the tick + marks all together. Tick marks may be hidden by calling the method + Axis::HideTicks(); If we hide all the ticks on the X-axis we will + get the result shown below

    +
    +
    Figure 88: Hiding all tick mark. [src]  +

    +

    +

    +

    7.12 Adding arbitrary text strings to the graph

    +

    To add clarification or other information text strings to the graph + you can add arbitrary lines of text anywhere you like onto the graph. + The text might have multiple lines and you can choose the paragraph + alignment.

    +

    To add text you have to create one or more instances of the + Text() object and then add the text object to the graph with the + AddText() method.

    +

    The position of these text boxes are given as fraction of the width + and height of the graph. When you are positioning these text boxes you + might also choose what part of the text box should be considered the + anchor point for the position you specify.

    +

    By default the anchor point is the upper left corner of the bounding + box for the text.

    +

    To show some ways of positioning the text we use a very simple bar + graph not to distract from the text. We first just add a single text + line with most of the settings their default value by adding the + following lines to the graph

    +  $txt=new Text( +"This is a text"); +
    $txt->Pos( +0,0); +
    $txt->SetColor( +"red"); +
    $graph->AddText( +$txt);
    +

    +

    The result is shown below.

    +
    +
    Figure 89: Adding a single text string in the upper left + corner [src] +  +

    +

    +

    Not too exiting. Let's make it more interesting by having a + background color, using larger fonts and framing the text box and + adding a drop shadow to the text box by using the methods + SetBox() and SetBox()

    +
    +
    Figure 90: Making the text more interesting [src]  +

    +

    +

    That's better. Now we get some attention. If you want to add a text + with several lines you just need to separate the lines with a newline + ('\n' character). The default paragraph alignment is left edge but you + can also use right and center alignment.

    +

    As an illustration let's add a couple of more lines to the previous + text, center the text box in the middle of the graph and also use + centered paragraph alignment for the text. To adjust the paragraph + alignment of the text you have to use the + Text::ParagraphAlign()

    +
    +
    Figure 91: Text with multiple lines and centered paragraph + alignment +[src]  +

    +

    +

    Of course there is no limit to the number of text string you can add + to the graph.

    +

    From version 1.12 it is also possible to add text strings to a graph + using the scale coordinates instead. This is accomplished by using the Text::SetScalePos() Which + is completely analog to SetPos() with the only difference that the + positions given are interpretated as scale values instead of fractions + of the width and height.

    +

    7.13 Adding titles and footers to the Graph

    +

    Each graph can have up to three different titles accessed by the + three properties

    +
      +
    1. title
    2. +
    3. subtitle
    4. +
    5. subsubtitle
    6. +
    +

    All of these three properties is a standard text object which means + that you can have individual font, colors, margins and sizes of these + tree titles.

    +

    The only thing you need to think of is that you probably want to add + some extra margin to make room for the titles (using + Graph::SetMargin() )

    +

    The individual positioning of these titles are done automatically + and will adjust to the font size being used.

    +

    If you for, esthetic reasons, would like increase the distance from + the top where the title is positioned (or the intra distance between + title and sub title) you can use the + Text::SetMargin() method. For example the line

    +

    + $graph->title->SetMargin +(20);

    +

    will set the distance between the top of the title string and the top + of the graph to 20 pixels. If you instead call the SetMargin() method + for the subtitle it will adjust the distance between the top of the + subtitle and the bottom of the title.

    +

    The titles will be positioned at the top and be centered in the + graph. Each of these titles may have multiple lines each separated by a + "\n" (newline) character. By default the paragraph alignment for each + title is centered but may of course be changed (using the + ParagraphAlign()) method.

    +

    Each graph can also have a footer. This footer is actually three + footers. Left, center and right. The 'left' footer is aligned to the + left, the 'center' at the bottom center and the right to the right.

    +

    Each of these three positions is a standard Text object which means + you can change color, font and size as you please individually on each + of these footer positions.

    +

    You access the footer through the Graph::footer property as the + following example shows

    +

    + $graph-> +footer->left->Set +("(C) 2002 KXY" +); +
    $graph->footer-> +center->Set("CONFIDENTIAL" +); +
    $graph->footer-> +center-> +SetColor("red"); +
    $graph->footer-> +center-> +SetFont( +FF_FONT2, +FS_BOLD); +
    $graph->footer-> +right->Set("19 Aug 2002" +);

    +

    Note: If you enable the brand timing + argument you should leave the left footer empty.

    +

    7.14 Adding a tab title

    +

    A variant of the titles is the tab title. This is just + another option you have of putting a name on the graph. The appearance + of this type is a tab on top of the plot area with text inside.

    +

    You can access the tab using the 'tabtitle' property of the graph.

    +

    The following figure shows an example of how this can look.

    +
    +
    Figure 92: Using the tabbed title style [src]  +

    +

    +

    As usual you have full freedom to specify font and colors for this + type of title. Please see the class reference regarding +GraphTabTitle() for more information.

    +

    7.15 Using background images

    +

    Instead of having a single color background you can easily have an + arbitrary image as the background. The image may be in either PNG, JPG + or GIF format depending on what your installation supports.

    +

    +
    +

    A note on GD: If you are using GD 2.xx you must + make sure that the define USE_TRUECOLOR is set to true. This is also + the default. Failure to do so in combination with GD 2.xx will make the + background image just look like a solid black square.

    +
    +
    +

    To use a specific image as the background you just have to use the + method + Graph::SetBackgroundImage() The arguments specify file-name, how + the image should be positioned in the graph and finally the format of + the image (if it is in JPG, PNG or GIF) format. If the format is + specified as "auto" (the default) then the appropriate image format + will be determined from the extension of the image file.

    +

    The file name is of course obvious but the second argument might not + be. This arguments determine how the image should be copied onto the + graph image. You can specify three different variants here

    +
      +
    1. BGIMG_ COPY This will just copy the image unchanged onto the graph + from the top left corner.
    2. +
    3. BGIMG_CENTER This will just copy the image unchanged onto the graph + but it will center the image in the graph.
    4. +
    5. BGIMG_FILLFRAME This will scale the image to exactly fit the whole + graph image.
    6. +
    7. BGIMG_FILLPLOT This will scale the image to exactly fit just the + plot area of the graph.
    8. +
    +

    +

    +
    The following section only applies to palette based images. + True color images can NOT be manipulated this way. Applying the + following sections to true-color images will have no affect. +
    +

    You might often find yourself wanting to use a background image as a + "waterstamp". This usually means taking the original image, import it + to some image editing program and then "bleaching" the color + saturation, reducing the contrast and so on. Finally you save the + modified image which you then use as a background image.

    +

    This whole process can be automatically accomplished in JpGraph by + using the method + Graph::AdjBackgroundImage() which allow you to adjust color + saturation, brightness and contrast of the background image.

    +

    + $graph-> +AdjBackgroundImage(...) +

    +

    +

    to achieve the "watercolor" effect to avoid the image being too + intrusive in the graph.

    +
    +
    Figure 93: Example on using a watermark type background image + [src]  +

    +

    +

    Note: The background image depicts a 1998 + Triumph Tiger. This bike is a 900cc off-road bike.

    +

    7.16 Using a background gradient

    +

    In addition to the background image you can also add a background + color gradient. This gradient can be covering the entire graph, just + the plot area or just the margins. This flexibility allows you to + combine a background image with a background color gradient. You can + for example use a background image in the plot area and a color + gradient out in the margins.

    +

    You specify a color gradient background by calling the + Graph::SetBackgroundGradient() method. All details are available in + the class reference (follow the link above). We finally give a quick + example on what kind of effect you can achieve using this feature.

    +
    +
    Figure 94: Using a background color gradient with the + SetBackgroundGradient() method +[src]  +

    +

    +

    +

    Finally we like to mention that in the "/utils/misc/" directory you + will find a small utility script called "mkgrad.php". Running this + script presents you with a UI that makes it a breeze to create a + gradient image on it's own.

    +

    The UI for the utility is so obvious that we won't discuss it + further, we just show it below. The UI for the mkgrad.php utility The UI for the mkgrad.php utility

    +

    In the example below this utility is used to get a more interesting + plot area.

    +

    +
    +
    Figure 95: Example of the use of a gradient background [src]  +

    +

    +

    +

    7.17 Using callbacks for Plot marks

    +

    An interesting enhancement when using Plotmarks is the possibility + to add a callback function to control the size and color of the + plotmarks.

    +

    This callback function will get called with the current Y-value (for + the plotmark) as it's argument. As return value the callback function + must return an array containing three (possible null) values. The + values returned must be

    +
      +
    1. Plot mark Weight
    2. +
    3. Plot mark Color
    4. +
    5. Plot mark Fill color
    6. +
    +

    The exact meaning of the parameters will of course depend on the + type of plot marks being used.

    +

    The callback must be a global function and is installed with a call + to + PlotMark::SetCallback()

    +

    So for example to install a callback that changes the fill color for + all marks with a (Y) value higher than 90 you could add the lines

    +

    function  +MarkCallback( +$aVal) { +
        if( 
    $aVal  +> 90)  +
            
    $fcolor +="red" +
        
    else +
            
    $fcolor +=""; +
        return array(
    "" +,"",$fcolor); +
    } +
    ... +
    $plot->mark-> +SetCallback( +"MarkCallback"); +
    ...

    +

    +

    As you can see in the above example we have left some of the return + values blank. Doing this will just ignore any change of these value and + use the global settings for the plotmarks.

    +

    If you also let the (Y) value affect the size of the plot marks you + can get what is sometimes known as a "balloon plot". The example below + is basically a scatter plot that uses filled circles to mark the + points. A format callback is then used to change the color and size + depending on the Y-value for each plot.

    +

    +
    +
    Figure 96: Creating a balloon plot by using plot mark + callback function +[src]  +

    +

    +

    +

    7.18 Rotating graphs 90 degrees

    +

    In section 10.2 you can read about + arbitrary rotation of the graphs. For most practical purposes rotation + of 90 degrees is most useful. This could for example be used to plot + horizontal bar graphs.

    +

    The slight complication with general rotation is that the margins + also rotates, this means that if you rotate a graph 90 degrees the left + margin in the image was originally the bottom margin. In additional by + default the center of the rotation is the center of the plot area and + not the entire image (if all the margins are symmetrical then they will + of course coincide). This means that depending on your margin the + center of the rotation will move. You can read more about this and how + to manually set the center for rotation in the section about rotation, 10.2

    +

    This is just a slight inconvenience which you have to take into + account when you need to set an explicit margin with a call to +Graph::SetMargin()

    +

    However, in order to make a rotation of 90 degrees much easier you + can easily rotate a graph 90 degrees and set the correct margin with a + call to +Graph::Set90AndMargin() The parameter to this method lets you + specify the margins as you will see them in the image without having to + think of what becomes what after the rotation.

    +

    So, the only thing you need to do is call this method and then the + graph will have been rotated 90 degrees.

    +

    7.19 Formatting the axis

    +

    To get the exact type of axis you want in your graph there are a + number of adjustments available for you. You may change, color, size, + position and general appearance.

    +

    +

    7.19.1 Standard two axis graphs

    +

    Assuming we start with the traditional two axis graph, one X and one + Y axis. You may then change the position of each axis by calling + Axis::SetPos($aPosition) You have to remember that you need to + specify the position on the other axis. SO you need to specify the + world-coordinate for the position. By default the axis are each + positioned at the 0-point on the other axis, i.e. the axis will cross + at the 0,0 point in the graph.

    +

    In addition to the standard positioning you may also use the two + special position markers "min" and "max". This will position the axis + at the minimum (or maximum) position of the other axis.

    +

    For example, to make sure that the X-axis is always at the bottom of + the graph (at lowest possible Y-value) you would have to add the line

    +

    + $graph->xaxis->SetPos +("min");

    +

    +

    To change the color and width of the axis you have to make use of + the Axis::SetColor() and + Axis::SetWeight() + methods.

    +
    Invisible axis Even though JpGraph (1.7) + doesn't directly support "hidden" axis where the labels are still drawn + it is very easy to achieve this effect by setting the colors of the + axis to be the same as the background. See the example barintex2.php in + the Example directory. To completely hide an axis you can make use of + the Hide() +
    +

    You might also want to add titles to the axis. This is done through + the Axis::SetTitle() + method. This is actually just a shortcut for accessing the title + property direct. Axis::title::Set() which also allow you to set the + alignment in one call.

    +

    By default the position of the title is to the far right for the + X-axis and in the middle (and 90 degrees rotated) for the Y-axis.

    +

    You can adjust the position of the title with the help of the second + argument to the + Axis::SetTitle() method.

    +

    The possible positions are "high","middle" and "low" which refers to + the scale values on the axis.

    +

    One common modification you might want to do to the title is to + increase the margin between the axis and the actual title. This is + often necessary to do for the Y-axis if the values displayed are large. + You may adjust the distance (in pixels) between the axis and the title + by using the method + Axis::SetTitleMargin()

    +

    So for example to increase the margin on the Y-axis you might add + the line

    +

    + $graph->yaxis->SetTitleMargin(40 +);

    +

    +

    to your code.

    +

    Finally we mention something about the positioning of tick marks and + labels on the axis. You have the possibility to choose what side of the + axis the tick marks and the labels should be at. For the X-axis this + can be specified as either on the the top (inside the plot area) or at + bottom (outside of the plotarea). In the same way you can specify for + the Y-axis if the labels ( or ticks) should be on the left or right + side.

    +

    To adjust the label positioning you have to use the method + Axis::SetTitleSide() and to adjust the position of the tick mark + you have to use the method + SetTickSide()

    Note: There is also an alias + for this method, SetTickDirection() which is deprecated from version + 1.7 but kept for backwards compatibility.
    Valid arguments for + these methods are

    +
      +
    • SIDE_UP
    • +
    • SIDE_DOWN
    • +
    • SIDE_LEFT
    • +
    • SIDE_RIGHT
    • +
    +

    For example, the following lines added to a script would change side + of the labels and tickmarks for the X-axis.

    +

    + $graph->xaxis->SetLabelPos +(SIDE_UP); +
    $graph->xaxis-> +SetTickSide( +SIDE_DOWN); +

    +

    +

    This technique is for example used if you position the X-axis at the + top of the graph as the following example shows.

    +
    +
    Figure 97: Example of both how to adjust the position of the + X-axis as well as adjusting the side for the tick and axis title [src]  +

    +

    +

    +

    7.19.2 Scientific style axis

    +

    In scientific style plots it is often common to duplicate each axis + so that all sides of the graph have a labeled axis. This is of course + also fully supported by JpGraph.

    +

    Before we continue we show a small example to illustrate this + feature

    +

    +
    +
    Figure 98: Example of scientific axis [src]  +

    +

    +

    +

    The example above shows the basic configuration. There are now + several modifications you may do to these axis like

    +
      +
    • Choose if the labels should be inside or outside the plot area
    • +
    • Choose if the tickmarks should be inside or outside the plot area
    • +
    +

    The style of axis is determined by the method + Graph::SetAxisStyle() The available type of axis are

    +
      +
    • AXSTYLE_SIMPLE, The standard two axis graph
    • +
    • AXSTYLE_BOXIN, Four axis scientific style with labels and tickmarks + on the inside
    • +
    • AXSTYLE_BOXOUT, Four axis scientific style with labels and + tickmarks on the outside
    • +
    +

    +

    7.19.3 Adjusting the position of the scale labels +

    +

    How to adjust the actual labels are discussed elsewhere in this + manual (see ???,???). However we like to mention here that you can + adjust the label margin (distance between the axis and the labels) with + the method + Axis::SetLabelMargin()

    +

    to adjust the actual label format (like font, color, angle) you need + to access the Axis::SetFont() + and the Axis::SetColor() + methods. If you investigate the + Axis class you will discover more methods to adjust the many + aspects of the axis layout.

    +

    As a final note we also mention the methods + Axis::SetLabelAlign() and + Axis::SetLabelAngle() This first method is really only mentioned + here for completeness since it is mostly used for internal purposes. + However on some occasion you might want to adjust the alignment of the + labels. By default they are centered in respect to the tick mark. By + using the method you might override this positioning should you choose + to do so.

    +

    The second of these methods adjusts the angle of the label in + regards to the axis. This is very useful for X-axis that have long + labels.

    +

    7.19.4 Formatting the scale labels

    +

    In order to have full control over the way that the labels are + displayed it is possible to define a callback function that will be + applied to all labels. The callback function will be called with the + label as the only argument and should return the value that will be + displayed in the graph. This could for example be used to turn seconds + (used to position data points) into hour and minutes on the scale. For + further reference see the two methods: + Graph::SetLabelFormatCallback(); and + Graph::SetLabelFormat();

    +

    7.19.5 Inverting the Y-axis

    +

    One good way of illustrate the usefulness of label callbacks in a + slightly different context is to show how we can achieve the effect of + an inverted Y-scale.

    +

    An inverted Y-scale has the lowest number at the top and the scale + values increases downwards.

    +

    Even though JpGraph doesn't directly support this feature it is + quite easy to achieve with just a few extra lines of code in your image + script.

    +

    Before we continue we give an example of what we are referring to.

    +

    +
    +
    Figure 99: Inverted Y-axis [src]  +

    +

    +

    +

    Two achieve this effect there are two simple steps to take:

    +
      +
    1. Negate all you Y-value in the data
    2. +
    3. Create a callback that negates the scale labels so they appear to + be positive.
    4. +
    +

    And that's it! We refer you to the code in the example above for the + details.

    +

    7.20 Adjusting the auto-scaling limits - grace value +

    +

    By default the auto-scaling algorithm tries to make best possible + use of screen estate by making the scale as large as possible, i.e. the + extreme values (min/max) will be on the top and bottom of the scale if + they happen to fall on a scale-tick. So for example doing a simple line + plot could look like the plot shown in the below.

    +
    +
    Figure 100: A typical graph with autoscaling and grace=0 [src]  +

    +

    +

    However you might sometime want to add some extra to the minimum and + maximum values so that there is some "air" in the graph between the end + of the scale values and the extreme points in the graphs. This can be + done by adding a "grace" percentage to the scale. So for example adding + 10% to the y-scale in the image above is done by calling the + SetGrace() method on the yscale as in

    +

    + $graph->yaxis->scale +->SetGrace(10, +10); +

    +

    These lines add a minimum of 10% to the top and bottom values of the + scale. Note that we say "minimum" since depending on the specific tick + values choose this might be a little bit more to make the end of the + scale fall on an even tick mark.

    +

    Adding this line to the previous graph will result in the following + example

    +

    +
    +
    Figure 101: Adding 10% grace value to top and bottom of the + Y-scale [src] +  +

    +

    +

    Since we haven't adjusted the position of the X-axis it will remain + at Y=0 which might not necessary be what we would like so we therefor + also add the line

    +

    + $graph->xaxis->SetPos +("min");

    +

    +

    So that the X-axis always will remain at the lowest possible + Y-value. Doing this will then result in the example below

    +

    +
    +
    Figure 102: Using grace but also adjusting the position of + the X-axis +[src]  +

    +

    +

    +

    7.21 Adding bands of pattern and color to graphs

    +

    As an additional way of emphasizing certain areas of the graph it is + possible to add bands (either vertical or horizontal) to any one of the + standard X-Y coordinate system based graphs. A band is a rectangular + area that stretches one entire axis. This means that if you define a + band between X-coordinates 3 and 5 the band area will occupy an area + between the X-coordinates and the entire Y-range.

    +

    In order to access this functionality you must first make sure that + you include the additional library file jpgraph_plotband.php

    +

    At the time of this writing (current as of JpGraph 1.8) the table + below illustrates the 8 basic types of patterns available. We will + shortly show you how you can customize these patterns, To keep these + examples clear we have only used one pattern in each figure.

    +

    + + + + + +
    +
    +
    Figure 103: +[src]  +

    +
    +

    +
    +
    +
    Figure 104: +[src]  +

    +
    +

    +
    +
    +
    Figure 105: +[src]  +

    +
    +

    +
    +
    +
    Figure 106: +[src]  +

    +
    +

    +
    +
    +
    Figure 107: +[src]  +

    +
    +

    +
    +
    +
    Figure 108: [src]  +

    +
    +

    +
    +
    +
    Figure 109: +[src]  +

    +
    +

    +
    +
    +
    Figure 110: +[src]  +

    +
    +

    +
    +

    To add a one of these patterns to your graph you need to call the + method + PlotBand::PlotBand() The arguments is fairly easy to understand. + The pattern you would like to use is specified by using the correct + constant. You can see the name of the correct constants in the figures + above. You also need to specify if the band should stretch along the + vertical or horizontal axis as well as the min and max coordinates for + the band. As coordinates you may also use the special values "min" and + "max" which automatically sets the value to the minimum/maximum value + of the scale. The specified numeric value will be automatically + truncated to fit within the plot area.

    +

    We don't discuss the other arguments further here, instead we refer + you to the class reference.

    +

    7.21.1 Customizing the patterns

    +

    All patterns can be customized by

    +
      +
    • ... altering the colors of the band +
       
    • +
    • ... altering the density of the patterns using the method + PlotBand::SetDensity() The density is specified as an integer in + range 1 to 100 where a higher number means a higher density (smaller + distance between the lines). For example setting the density of the 3D + plane above to 60 gives the result
      +
      +
      Figure 111: Increasing the desnity in a pattern [src]  +

      +
      +

      +
       

      +
    • +
    • ... enabling or disabling a frame around the pattern by using the + method + PlotBand::ShowFrame() The band will be given the same color as the + band. +
       
    • +
    • ... finally you can change whether the band should be drawn on top + of the plots or beneath, (by default the bands are under the plots), + using the + PlotBand::SetOrder() as the following example show
      +
      +
      Figure 112: Stroking the pattern on top of the plots [src]  +

      +
      +

      +
    • +
    +

    Note: 3D planes actually carry another + possible modification. You can specify the vanish point to change the + perspective used. You can't access the method to change the horizon + directly but you can access it through
    +  $band +->prect->SetHorizon( +$aHorizon) +

    +

    +

    assuming that the band is a 3D plane.

    +

    To finish this section we give one final, more creative, example on + how to use the bands.

    +
    +
    Figure 113: Combining 3D plane, solid band and a sttaic line [src]  +

    +

    +

    +

    7.22 Adding static lines to the plot

    +

    In addition to the bands you can also add static lines to the graph. + An example of that is actually shown in figure 11 above. You create a + line as an instance of + class PlotLine . So for example the lines

    +  $sline  += new PlotLine +(HORIZONTAL,0, +"black",2); +
    $graph->Add( +$sline); +

    +

    will add a 2-pixel wide horizontal static line at Y-position zero.

    +

    8 Working with non X,Y-plots

    +

    Non X,Y plots includes

    +
      +
    • Pie plots (2D and 3D)
    • +
    • Radar plots
    • +
    • Polar plots
    • +
    • Gantt charts
    • +
    +

    The fundamental difference is that these classes makes use of an + extended version of the basic Graph class. Therefor you can not mix X,Y + plots with non-X,Y plots. For example it is not possible to mix a line + graph with a Polar graph.

    +
      +
    • To create 2d or 3d pie plots you must use the PieGraph class
    • +
    • To create radar plots you must use the RadarGraph() class
    • +
    • To create radar plots you must use the PolarGraph() class
    • +
    • To create gantt plots you must use the GanttGraph() class
    • +
    +

    +

    8.1 Radar plots

    +

    Spider plots are most often used to display how a number of results + compare to some set targets. They make good use of the human ability to + spot symmetry (or rather un-symmetry) . the figure below show an + example of a spider (sometimes called a web-plot). Spiderplots are not + suitable if you want very accurate readings from the graph since, by + it's nature, it can be difficult to read out very detailed values.

    +
    +
    Figure 114: A typical radar graph with two plots [src]  +

    +

    +

    +
      +
    • There is one axis for each data point
    • +
    • Each axis may have an arbitrary title which is automatically + positioned
    • +
    • A spider plot may be filled or open
    • +
    • You can control color, weight of lines as you are already used to
    • +
    • A spider plot can, as usual, have a title and a legend
    • +
    • The first axis is always oriented vertical and is the only axis with + labels
    • +
    • Grids may be used (dashed in the figure above)
    • +
    • You may have ticks (although suppressed in the figure above
    • +
    • You can control the size and position within the frame of the graph
    • +
    • You may have several plots within the same graph
    • +
    +

    In the following section we show how to draw both simple and complex + radar graph. As we will show all the settings will follow the same + pattern as for the more standard linear graphs.

    +

    8.1.1 Simple radar plots

    +

    Let's start by creating a very simple radar plot based on 5 data + points using mostly default values.

    +

    As the first thing you must remember to include the extension module + that contains the radar plot. "jpgraph_radar.php".

    +

    A very simple radar plot is created by the code

    +(File: radarex1.php) +
    <?php +
    include ( +"../jpgraph.php"); +
    include (
    "../jpgraph_radar.php"); +
         +
    // Some data to plot +
    $data  += array(55,80, +46,71,95 +); +
         +
    // Create the graph and the plot +
    $graph  += new RadarGraph +(250,200, +"auto"); +
    $plot  += new RadarPlot +($data); +
    +
    // Add the plot and display the graph +
    $graph->Add( +$plot); +
    $graph->Stroke(); +
    ?>

    +

    and would give the result

    +
    +
    Figure 115: A first very simple radar plot using default + settings [src] +  +

    +

    +

    To change the size and position of the radar graph is similar to the + pie plot and you do it by using the methods + SetSize() and + SetCenter()

    +

    If you want a filled radar plot you need to specify the fill color + with the method + SetFillColor() The following example shows these methods in action

    +
    +
    Figure 116: Changing size, position and adding fill color to + the radar plot. +[src]  +

    +

    +

    +

    8.1.2 Specifying titles for the axis and legends for + the plots

    +

    We normally would like something more meaningful as description of + each axis than it's number. Specifying the titles are accomplished + through the use of the method SetTitles() of the graph. Let's say that + each axis corresponds to a month. We could then use the code

    +  $titles  += $gDateLocale +->GetShortMonth +(); +
    $graph->SetTitles( +$titles); +

    +

    As you can see the way radar plot is constructed will assign the + titles (and plot points) in a counter-clockwise direction. If you want + them in clock-wise order you will have to inverse your input data array + as well as the title array.

    +

    To specify a legend you (as with the other plot) make use of the + SetLegend(); method on each radar plot.

    +

    8.1.3 Adding grid line to the radar plot

    +

    Each major tick mark can also be connected together to create a + grid. The grid is accessed through the 'grid' property of the graph. To + enable the grid and set the line style to "dotted" you would have to + add the lines

    + $graph->grid->Show +(); +
    $graph->grid-> +SetLineStyle( +"dotted"); +

    +

    and would result in the following graph

    +
    +
    Figure 117: Adding dotted gridlines to the graph [src]  +

    +

    +

    By design the plot is above the grid line but beneath the axis in + image depth, hence some part of the grid lines are hidden.

    +

    To have the grid lines more "visible" just change their color, say + to, dark red by invoking the SetColor() method on the grid lines which + would give the following result

    +

    Another simple change we could do would be to just change the + background color of the radar graph. This is (not surprisingly) done by + a call to the method SetColor() invoked on the graph object.

    +
    +
    Figure 118: Changing the background color [src]  +

    +

    +

    +

    8.1.4 Adding several plots to the same radar graph +

    +

    You can easily create several radar plot which are added to the same + radar graph. The thing to remember is that if you use filled radar + plots and they overlap each other that the order which they are added + will be the order they are drawn.

    +

    A simple example of this is shown below

    +
    +
    Figure 119: Several radar plots in one radar graph [src]  +

    +

    +

    +

    8.1.5 Adding plotmarks i radar graphs

    +

    In exactly the same way as for line graphs it is possible to add + plot marks in radar plots. The mark property is accessed through the + RadarPlot::mark The example below adds a red ball as a marker.

    +
    +
    Figure 120: Adding plotmarks to a radar plot [src]  +

    +

    +

    +

    8.2 Pie plots

    +

    So far we have just show plots based on an X-Y coordinate system. + This is not the only types of graphs you can create with JpGraph. + Another common type is Pie plots. JpGraph supports both 2D and 3D pie + plots. For 2D pie plots there are also 2 versions, but more on that + later.

    +

    The main difference as compared to the X-Y plots is that to all pie + plots are added to the + PieGraph() instead of the Graph() object we used for the X-Y graphs + we have drawn so far. For this you must first include the + "jpgraph_pie.php" in your script (or "jpgraph_pie3d.php" if you want to + use 3-dimensional pies).

    +

    Below you cane see the code needed to create the simplest possible + pie graph just using the default settings.

    +

    include ( +"../jpgraph.php"); +
    include (
    "../jpgraph_pie.php"); +
    +
    $data  += array(40,60, +21,33); +
    +
    $graph  += new PieGraph +(300,200); +
    $graph->SetShadow(); +
    +
    $graph->title-> +Set( +"A simple Pie plot"); +
    +
    $p1 = new PiePlot( +$data); +
    $graph->Add( +$p1); +
    $graph->Stroke(); +

    +

    The above code would give the following pie graph

    +
    +
    Figure 121: The simplest possible pie graph [src]  +

    +

    +

    There is a few things worth noting here

    +
      +
    • By default all pie slices have the percentage shown just outside + the slice.
    • +
    • The colors are automatically assigned to the slices.
    • +
    • The pie have the edges marked by default
    • +
    • The first slice start at 0 degrees (3 o'clock)
    • +
    +

    You can change almost all aspects of appearance of the pie graphs. + For example you could change :

    + +

    +

    The next simplest addition we can do is to add a legend to the pie + graph. We do this by using the + SetLegends(); method. By adding the legends to the previous example + we get the following image

    +
    +
    Figure 122: Adding a legend to the pie graph [src]  +

    +

    +

    +

    (In the figure above we also moved the center of the pie slightly to + the left to make more room for the legend box.)

    +

    The text for the legends can also contain printf() style format + strings to format a number. This number passed on into this string is + either the absolute value of the slice or the percentage value. How to + switch between the is describe further down in this chapter.

    +

    The next change you might want to change is the size and position of + the Pie plot. You can change the size with a call to + SetSize(); and the position of the center of the pie plot with a + call to SetCenter(); + The size can be specified as either an absolute size in pixels or as a + fraction of width/height (whatever is the smallest). The position of + the pie plot is specified as a fraction of the width and height.

    +

    To put the size and positioning API to use we will show how to put + several pie plots on the same pie graph. In the following example we + have also adjusted the legends of the slice values to use a smaller + font.

    +

    What we do in this example is quite simple, create 4 pie plots, make + them smaller and put them in the four corner of the graph. This will + give the result as shown in the following example.

    +
    +
    Figure 123: Multiple pie plots in the same pie graph [src]  +

    +

    +

    +

    8.2.1 Adding guide lines to Pie Plots

    +

    For very busy Pie plots it can become too little space for the + labels to be printed just beside the pie slice. For this purpose it is + possible to use guide lines for the labels. The library will then draw + a line from the center edge of the slices to the label which will be + positioned further out from the Pie Plot.

    +

    There is one method that is primarily used to handle this, + PiePlot::SetGuideLines() the simplest usage of this would be

    +  $pieplot +->SetGuideLines +();

    +

    An example of this could then be

    +
    +
    Figure 124: Using guide lines for PiePlots [src]  +

    +

    +

    The above example will give guide lines very similar as what is + produced by other programs, e.g. Excel. In addition to the above + variant it is also possible to instruct the library to line up the + labels vertically in a way that we think is easier to read. This is + achieved by specifying the second parameter to the SetGuideLines() to + 'false' as in

     $pieplot-> +SetGuideLines( +true,false);
    +

    +

    The first parameter is to enable/disable the guide-lines. With the + same example as above this would then produce the image

    +
    +
    Figure 125: Using guide lines for PiePlots with vertically + lined up labels. +[src]  +

    +

    +

    It is also possible to configure the vertical distance between the + labels. By default the distance between the labels is roughly 40% of + the labels font height. By using the method + PiePlot::SetGuideLinesAdjust() it is possible to specify a + fractional value which is interpretated as the distance between the + bottom of one label to the bottom of the next. This means that + specifying a value of '1.0' the labels will have no space between them + and the bottom of one label will touch the top of another label. By + default this value is 1.4.

    +

    By increasing or decreasing this value it is possible to make the + labels become positioned more or less compact. Below we have taken the + above example and reduced the distance to '1.1' and as can be seen this + yields much more compact labeling.

    +
    +
    Figure 126: Adjusting to a smaller vertical distance between + the labels +[src]  +

    +

    +

    +

    Note: Guide lines is only available in 2D Pie plots.

    +

    8.2.2 Creating 3D pie plots

    +

    So far we have only made use of 2D pie plots, creating 3D pie plots + is no more difficult. Instead of creating the plots with a call to + PiePlot() you create the plots with a call to + PiePlot3D() If we just take the first simple pie plot and replace + the call to PiePlot() with a call to PiePlot3D() we get the following + result.

    +
    +
    Figure 127: A first example of a 3D pie plot [src]  +

    +

    +

    3D Pie plots have the same possibilities as the normal pie plots + with the added twist of a 3:rd dimension. You can adjust the + perspective angle with the method + SetAngle() So for example to make the pie more "flat" you just set + it to a smaller angle. Setting the perspective angle to 20 degrees in + the previous example will give the following result.

    +
    +
    Figure 128: Adjusting the perspective angle [src]  +

    +

    +

    +

    8.2.3 Exploding pie slices

    +

    One way to attract attention to some specific piece of information + in a pie chart is to "explode" one or more slices. Both 2D and 3D pies + support exploding one or several slices.

    +

    Exploding slices is accomplished by the methods + Explode() and + ExplodeSlice() The first method is used if you want to explode more + than one slices and the second is a shorthand to make it easy to just + explode one slice.

    +

    For example to explode one slice the default "explode" radius you + would just have to say

    +  $pieplot->ExplodeSlice( +1) +

    +

    The above line would explode the second slice (slices are numbered + from 0 and upwards) the default amount. Doing this to the two previous + example would result in

    +
    +
    Figure 129: Exploding one slice [src]  +

    +

    +

    +

    +
    +
    Figure 130: Exploding one 3D slice [src]  +

    +

    +

    +

    To explode all slices at once you can use the + PiePlot::ExplodeAll() method. If you want to explode several slices + you can use the + PiePlot::Explode() method and supply a suitable array argument.

    +

    8.2.4 Specifying and adjusting labels on pie plots +

    +

    By default the values shown just outside the pie for each slice are + the percentage value for each slice. If you instead wanted the absolute + value you would just have to use the + SetLabelType() method. So to use the absolute value you would call

    +

    + $pieplot-> +SetLabelType( +"PIE_VALUE_ABS"); +

    +

    +

    Furthermore you could enhance the formatting of the value by either + using a printf() style format string (using + SetFormat() ) or by providing a formatting function callback (using + + SetFormatCallback() ) for doing more advanced formatting.

    +

    You can also adjust the position of the labels by means of the + PiePlot::SetLabelPos() method. The argument to this method is + either the fraction of the radius or the string 'auto'. In the latter + case JpGraph automatically determines the best position and the the + first case The following example illustrates this

    +
    +
    Figure 131: Example of adjusting the position of the labels + for the slices +[src]  +

    +

    +

    +

    If this formatting is not enough you can also "manually" specify the + labels for each slice individually. You do this by using the + PiePLot::SetLabels() method. This will let you specify individual + text strings for each label. In each specification you can also add a + printf() formatting specification for a number. The number passed on + will be either the absolute value for the slice or the percentage value + depending on what was specified in the call to + SetLabelType()

    +

    The SetLabels() method can also take a second parameter, the label + position parameter. This is just a shortcut to the SetLabelPos() as + described above. By default the position will be set to 'auto' if not + explicitely specified.

    Note: The alignment of + the labels will be different depending on whether they are inside or + outside the pie. When inside the center of the strings will be aligned + with the center of the slice at the specified fraction of the radius. + When positioned outside the alignment will depend on the angle to avoid + that the labels inadvertely writes over the pie.

    +

    8.2.5 Specifying slice colors and using themes

    +

    Another typical change would be to change the colors of the slices. + There are two fundamental ways of doing this. You either manually + specify the colors for the slices as an array using the method + SetSliceColors() If you specify fewer colors than the number of + slices they will just wrap around.

    +

    Another way is to use one of the pre-defined color "themes". This is + just a predefined set of colors that will be used for the slices. You + choose what "theme" you like to use with the method ( + SetTheme() ) At the time of this writing the available themes are

    +
      +
    • "earth"
    • +
    • "pastel"
    • +
    • "sand"
    • +
    • "water"
    • +
    +

    The following example shows the same pie using the different + "themes" in order.

    +
    +
    Figure 132: +[src]  +

    +

    +

    +
    +
    Figure 133: +[src]  +

    +

    +

    +
    +
    Figure 134: +[src]  +

    +

    +

    +
    +
    Figure 135: +[src]  +

    +

    +

    +

    A complete color chart of all available colors in the different + themes can be found here

    +

    Another simple change is to remove the border ( or change it's + colors ) that separates each slice. This can be done by a call to + ShowBorder()

    +

    8.2.6 Adding drop shadows to the slices

    +

    An additional visual enhancements can be made by adding a drop + shadow to the individual slices. This is accomplished by means of the PiePlot::SetShadow() + method. Adding a drop shadow is often more affective if the pie has one + or more slices exploded as the following example shows

    +
    +
    Figure 136: Adding a drop hadow to the slices [src]  +

    +

    +

    +

    8.2.7 Another variant of 2D Pie plots

    +

    As mentioned in the beginning there are two versions of the 2D pie + plots. The normal pie plot created as an instance of + class PiePlot and a variant created as an instance of + class PiePlotC

    +

    This variant is an extension of the standard PiePlot in the sense + that it also have a filled circle in the center. The following example + illustrates this

    +

    +
    +
    Figure 137: Example of the variant of pie plot with a filled + center circle +[src]  +

    +

    +

    +

    Since the PiePlotC is an extension to the basic pie plot all the + normal formatting you can do for pie plots you can also do for the + PiePlotC .

    +

    The additional formatting only concerns the filled middle circle. + You have the option of adjusting size, fill color and all font + properties. You perform these operations with the methods

    +

    + + + + + +
    +PiePlotC::SetMidColor()Set fill color of mid circle
    +PiePlotC::SetMidSize()Set size (fraction of radius)
    +PiePlotC::SetMidTitle()Set title string (may be + multi-lined)
    +PiePlotC::SetMid()Set all parameters in a single method + call
    +

    In addition to the normal CSIM for PiePlot:s the center area is also + a CSIM hotspot. You specify the target CSIM with a call to + PiePlotC::SetMidCSIM()

    +

    The next example shows an example with some more innovative + formatting. In this example we have :

    +
      +
    • hidden the frame around the pie graph
    • +
    • exploded all the slices
    • +
    • added drop shadow to the individual slices (and the center filled + circle)
    • +
    • specified individual multi line labels.
    • +
    • changed the font for the title to a TTF font.
    • +
    +

    +
    +
    Figure 138: PiePlotC with some more innovative formatting to + make it more interesting. +[src]  +

    +

    +

    +

    +

    8.3 Polar plots

    +

    +

    8.3.1 Overview

    +

    Each data point in a polar plot is represented by a tuple consisting + of a radius and an angle. The polar plot itself can be either outlined + or filled. In addition each point may have a standard marker (the same + as for line and scatter plots).

    +

    The scale for the radius can be either linear or logarithmic.

    +

    A polar graph is created by creating an instance of +PolarGraph::PolarGraph(). The polar graph type inherits all the + capabilities of ordinary X-Y graphs, i.e they can have background + images, background gradients, tabbed titles and so on.

    +

    Polar graphs comes in two basic types, they can either show a full + 360 degree graph or a half 180 degree graph. The two examples below + show these two basic types of graphs.

    +

    +
    +
    Figure 139: A simple 360 degree polar graph [src]  +

    +

    +

    +
    +
    Figure 140: The 180 degree variant polar plot. [src]  +

    +

    +

    +

    8.3.2 Adjusting the radius scale

    +

    The radius axis can be shown in either a linear or logarithmic + scale. This is controlled, as usual, by a call to +PolarGraph::SetScale() The two examples below show the same plot in + either linear or logarithmic scale

    +

    +
    +
    Figure 141: Using a logarithmic scale [src]  +

    +

    +

    +

    +
    +
    Figure 142: Using a linear scale [src]  +

    +

    +

    +

    Please note that the maximum values of the scales are different.

    +

    By default the scale will be auto scaled depending on the data. You + can also specify a manual scale by supplying an extra argument to the + SetScale() value. The only difference from the manual scaling with the + other X-Y-graphs is that for polar graph you only specify a manual + maximum. The minimum will always be 0 for the linear scale and a scaled + value of 10 (i.e 1, 0.1, 0.001 and so on) for the logarithmic scale.

    +

    The plot is clipped to the plot area so if you specify a smaller + scale then the maximum value that part of the plot that are outside the + plot area will be clipped.

    +

    8.3.3 Adjusting the grid lines

    +

    As usual you have full freedom to select what grid lines you like to + show (and what colors they should have). There are three different + types of grid lines you may adjust. The radius minor and major grid + lines and the angle grid lines.

    +

    You select what grid lines to show with a call to +PolarAxis::ShowGrid() The two example below shows a logarithmic plot + with either just major grid lines or both minor and major grid lines.

    +

    +
    +
    Figure 143: Using a logarithmic scale with just major + gridlines [src] +  +

    +

    +

    +

    +
    +
    Figure 144: Using a logarithmic scale with both minor and + major gridlines +[src]  +

    +

    +

    The colors of the grid lines are specified with a call to + PolarAxis::SetGridColor()

    +

    For the angle grid lines it is possible to specify the angle + division between each grid line with the method + PolarAxis::SetAngleStep() You specify the step distance in degrees. + By default the step size is 15 degrees.

    +

    8.3.4 Adjusting the label fonts

    +

    You can individually specify different fonts and colors for the + angle and the radius labels. The radius font is specified with + PolarAxis::SetFont() and the angle font is specified with a call to + PolarAxis::SetAngleFont()

    +

    You can adjust the color with the method +PolarAxis::SetColor() ?>

    +

    The following example specifies different color for the labels. it + also shows that you can add both a radial axis title as well as a + tabbed title. In this example we have also chosen not to show the frame + around the edge of the plot.

    +

    +
    +
    Figure 145: Different colors for labels, specifying both a + tabbed title as well as a axis title [src]  +

    +

    +

    +

    8.3.5 Adjusting the labels

    +

    As can be seen from the previous examples the angle labels have a + small superscripted "o" after each label. You can select if you like to + show this degree mark or not with a call to the + PolarAxis::SetANgleDegreeMark() method by which you can enable or + disable that mark after the angels.

    +

    For the radius labels all standard formatting that can be done to + the X-Y axis such as format string or format callbacks are supported.

    +

    A common modification for polar plots is probably to disable the + display the last label when using a 360 degree plot since the last + label will "collide" with the plot box around the plot area. It is + possible to disable the last label with a call to +Axis::HideLastTickLabel() As you can see this has been used in some + of the examples in this chapter.

    +

    8.3.6 Image maps

    +

    If you have specified markers for the polar plot (by setting the + mark property of the plot) each marker can be a hot spot in a client + side image map. The target URL are as usual specified with the + SetCSIMTargets() as the following short code excerpt shows

    +   +// Start by specifying the proper URL targets +
    $targets  += array("#1","#2", ....... ); +
    $polarplot  += new PoalrPlot +($data); +
    $polarplot +->mark->SetType( +MARK_SQUARE); +
    $polarplot +->SetCSIMTargets +(targets); +
    $graph->Add( +$polarplot); +
    $graph->StrokeCSIM(); +

    +

    +

    8.3.7 A final example

    +

    As a final example we show a full 360 degree polar plot with square + markers as well as background color gradient and a legend for the plot.

    +
    +
    Figure 146: A polar plot with both legend and background + gradient fill. +[src]  +

    +

    +

    +

    9 Gantt charts

    +

    +

    9.1 Why use Gantt charts?

    +

    The cynical view: To explain why your project is over-due and + over-budget.

    +

    The pragmatic view: To keep management of our back and know what we + have forgotten

    +

    The common view: As a tool to help identify project issues and + highlight problem areas.

    +

    Basically, Gantt charts are used to show the state of a number of + activities (possible grouped) against time.

    +

    9.2 Capabilities in JpGraph Gantt module

    +

    +
      +
    • Both automatic and manual scaling of date
    • +
    • Full support for independent CSIM for both labels and activity bars
    • +
    • Extremely flexible scales, possibility to use both months, weeks, + days, hours and minutes as scales. Furthermore (unlike MS Project) you + can have as may scales displayed at the same time as you like.
    • +
    • Support for visualization of grouped activities
    • +
    • Gantt charts can be automatically sized according to the number of + bars and scale used. This means you don't have to supply a specific + size when creating a graph.
    • +
    • Unlimited number of activities
    • +
    • Supports platform independent Week number calculation according to + ISO:8601
    • +
    • Rich possibility to display a variety of scales or combination of + scales supports both day, week, month, year. Each scale header is + totally configurable in terms of font, size, color, background etc
    • +
    • User configurable date format in the scale headlines
    • +
    • Visualization of constrains between activities, start-to-start, + start-to-end, end-to-start and end-to-end
    • +
    • Scales have "intelligent" grids
    • +
    • Supports title and subtitle with user specified font, size and + color
    • +
    • Activity bars can have multiple patterns and colors
    • +
    • Activity bar may have shadows
    • +
    • Activity bars can have internal progress bars displayed to show how + much of a given task has been accomplished
    • +
    • Activity titles can have individual fonts, colors and backgrounds
    • +
    • Activity bars can have captions
    • +
    • Activity bars can have specified left- and right end markers
    • +
    • Bar heights can be specified in absolute pixels or in percent of + the activity line width
    • +
    • Supports milestones with many different marks
    • +
    • Supports vertical marker lines with text
    • +
    • Can easily be localized
    • +
    • Full support for CSIM (or drill down graphs)
    • +
    • Alternate row colors
    • +
    • ... and more
    • +
    +

    +

    9.3 A simple Gantt chart

    +

    Time to show you an example of a Gantt chart and how easy it is to + make one. Lets make it the simplest possible Gantt chart. One activity, + named "Project", which lasts from "2001-11-01" to "2002-02-20".

    +

    All it takes to do this (using default values for everything) is the + following code.

    (File: ganttex00.php) +
    <?php +
    include ( +"../jpgraph.php"); +
    include (
    "../jpgraph_gantt.php"); +
    +
    // A new graph with automatic size +
    $graph  += new GanttGraph +(0,0, +"auto"); +
    +
    //  A new activity on row '0' +
    $activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
    $graph->Add( +$activity); +
    +
    // Display the Gantt chart +
    $graph->Stroke(); +
    ?> +

    +

    The resulting image is shown in Figure 147 below.

    +
    +
    +
    Figure 147: Your first simple Gantt chart. [src]  +

    +
    +

    +

    +

    Let's note a few things with the above image and code:

    +
      +
    • You always need to include both jpgraph.php and jpgraph_gantt.php
    • +
    • A bar is specified a minimum of four parameters, vertical position + (more about that in a second), a title, start and end date.
    • +
    • If you don't specify a size for the image it will be automatically + decided based on the min and max dates for the bars rounded to a full + week.
    • +
    • By default the week and day scale are displayed.
    • +
    • Weekend background are displayed default in a slightly gray color
    • +
    • Sundays are written in red.
    • +
    • Weeks are numbered according to ISO 8601
    • +
    • Activity bars are rendered as blue stripes on a white background by + default.
    • +
    +

    So, lets start making this graph a little bit more interesting. + First we are going to add a title, then we will add a month scale and + finally we will change the color of the bar.

    +

    All that is taken care of in the code below.

    +(File: ganttex01.php) +
    <?php +
    include ( +"../jpgraph.php"); +
    include (
    "../jpgraph_gantt.php"); +
    +
    $graph  += new GanttGraph +(0,0, +"auto"); +
    $graph->SetShadow(); +
    +
    // Add title and subtitle +
    $graph->title-> +Set( +"A nice main title"); +
    $graph->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
    $graph->subtitle-> +Set( +"(Draft version)"); +
    +
    // Show day, week and month scale +
    $graph->ShowHeaders( +GANTT_HDAY  +GANTT_HWEEK  +GANTT_HMONTH); +
    +
    +// Instead of week number show the date for the first day in the week +
    // on the week scale +
    $graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
    +
    +// Make the week scale font smaller than the default +
    $graph->scale-> +week->SetFont(FF_FONT0 +); +
    +
    +// Use the short name of the month together with a 2 digit year +
    // on the month scale +
    $graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR2); +
    +
    +// Format the bar for the first activity +
    // ($row,$title,$startdate,$enddate) +
    $activity  += new GanttBar +(0,"Project", +"2001-12-21", +"2002-01-20"); +
    +
    +// Yellow diagonal line pattern on a red background +
    $activity +->SetPattern(BAND_RDIAG, +"yellow"); +
    $activity +->SetFillColor +("red"); +
    +
    // Finally add the bar to the graph +
    $graph->Add( +$activity); +
    +
    // ... and display it +
    $graph->Stroke(); +
    ?> +
    The resulting image is shown in Figure + 148 below.
    +
    +
    Figure 148: Making the Gantt chart a little bit more + interesting with title and more colors. [src]  +

    +

    +

    From the above example you might note a few things

    +
      +
    • The margins adjust automatically to the added title and subtitle
    • +
    • The height of the scale headers adjust automatically when you + change the font.
    • +
    • You have great flexibility in choosing what format the scale labels + will have. If you for example wanted the full 4 digit year in the month + header all you have to change is use the constant + MONTHSTYLE_SHORTNAMEYEAR2 in the code above to + MONTHSTYLE_SHORTNAMEYEAR4
    • +
    • You have full freedom of manipulating headers in terms of font, + color, background and size.
    • +
    +

    To show that this is really simple let's show the full year in the + month, and set the header style to be white text on a dark blue + background by adding the lines

    +   +// Use the short name of the month together with a 4 digit year +
    // on the month scale +
    $graph->scale-> +month-> +SetStyle( +MONTHSTYLE_SHORTNAMEYEAR4); +
    $graph->scale-> +month-> +SetTextColor( +"white"); +
    $graph->scale-> +month-> +SetBackgroundColor( +"blue"); +

    +

    to the code above. The resulting image is shown in Figure 149

    +
    +
    Figure 149: Enhancing the scale headers. [src]  +

    +

    +

    +

    9.4 The structure of a Gantt chart

    +

    A Gantt chart is made up of four distinct areas.

    +
      +
    1. On the left side there is the activity title column.
    2. +
    3. On the top there is the scale headers (up to four headers may be + displayed)
    4. +
    5. The actual plot area where all the Gantt bars and markers go
    6. +
    7. The margin area, where for example the titles are shown
    8. +
    +

    Since a Gantt chart inherits all the usual properties of a JpGraph + Graph() you have the access to the same method to formatting the image + as before. For example to have a shadow around the image you call + Graph::SetShadow() and to set the margin color you can use + Graph::SetMarginColor(). Please refer to the reference documentation + for a full list of supported features.

    +

    To create a Gantt chart you add objects to it. As + of this writing you may add the following object by the use of the + GanttChart::Add() method

    +
      +
    • Gantt bars (indicates the length of an activity)
    • +
    • Milestones, a single mark at a specific date
    • +
    • Vertical line, might be use to mark phases in projects
    • +
    +

    All these objects may be extensively modified in terms of + formatting. You can specify color (both fill- and frame color), size, + titles, style and patterns and so on. All these objects comes with (in + my mind) sensible default so you don't have to specify a lot of + parameters. But if you need a fine grain control or if you disagree + with my taste you can.

    +

    9.5 Creating a GanttChart

    +

    You create a new Gantt Chart with a call to GanttChart(). The + signature for GanttGraph is the same as for ordinary JpGraph graphs, + i.e

    function  +GanttGraph( +$aWidth, +$aHeight, +$aCachedName, +$aTimeOut, +$aInline) +

    +

    The only real difference is that for GanttCharts you can specify one + or both of the dimension parameters (width and height) as -1 in which + case that dimension will be automatically sized determined by scale and + fonts chosen. The following examples shows some possible ways of + creating a new graph

    +
      +
    • $graph=new GanttGraph() +
      The size of the graph will be determined automatically, no caching + will be used and the graph will be generated in-line.
    • +
    • $graph=new GanttGraph(-1,-1,"auto") +
      The size of the graph will be determined automatically, caching + will be used (the name will be based on the script name), no timeout + will be used and the graph will be generated in-line
    • +
    • $graph=new GanttGraph(450,-1,"auto",5) +
      Same as the previous entry but the width is fixed to 450 points and + the cached image will have a timeout of 5 min.
    • +
    • $graph=new GanttGraph(-1,-1,"auto",5,false) +
      The image will not be generated in-line, only the cache will be + updated if it has timed out, otherwise nothing will happen.
    • +
    +

    Since GanttGraph() inherits all the methods (that make sense for + GanttGraph) from Graph you can specify shadow, color etc of the general + frame.

    +

    9.6 Positioning objects in the Gantt plot

    +

    Bars and Milestones need both a vertical position and a horizontal + position. The horizontal start position is specified as a date, e.g. + "2001-06-23", and the vertical positions are specified as a number + [0,1,2,3,...]. This vertical number indicates the position from the top + where the object should be placed. To understand this you might imagine + a number of "invisible" horizontal bands with a certain height. If you + specify 0 as the vertical position the bar will be placed in the first + band, specify 3 and the bar will be placed in the fourth band and so + on.

    +

    It is perfectly legal, and perhaps even desirable to leave "gaps" + when laying out bands to group related activities. So, for example you + could have three activities/bars at positions 1,2,3 and then another 2 + bars at position 6,7 leaving band 0,4,5 empty.

    +

    All these "invisible bands" have the same height (equ-spaced). The + height of each band is automatically determined and depends on both the + method of layout ( as specified by (GanttChart::SetLayout()) and the + individual heights of the individual bars and titles. The rules are + quite simple:

    +
      +
    • If you use layout=GANTT_FROMTOP (the default and most common) the + height will equal the height (+ a margin) of the highest gantt bar. The + height calculation of each bar takes into account both the actual bar, + the title, and any left- right-marks (more about that later) that may + be present. The name "fromtop" refers to that when you have explicitly + specified a height the bars will usually be added from band 0 and + onwards and hence being added from the top. (This might leave empty + space at the bottom of the plot area in the graph if the height of the + graph has been explicitly specified).
    • +
    • If you use layout=GANTT_EVEN the bars are evenly (hence the name) + spread out over the available height in the gantt chart and no + consideration is taken of the individual bars heights. Note that if you + use automatic sizing you cant use even layout. It just doesn't make + sense. Even layout is for those cases when you deliberately specify a + very large image and want the bars evenly distributed using the full + height.
    • +
    +

    +

    9.7 Gantt bars

    +

    The most common of all object in a Gantt chart is of course the + activity bar (GanttBar()). In terms of formatting this object has a + very large flexibility. The full signature for the GanttBar constructor + is

    function  +GanttBar( +$aVPos,$aTitle,$aStart +,$aEnd,$aCaption, +$aHeight) +

    +

    +

    + + + + + + + +
    + +  $aVPos  + The vertical position for the + bar, [0..n]
    + +  $aTitle  + Title for the activity
    + +  $aStart  + Start date for the activity given + as string, e.g "2001-09-22"
    + +  $aEnd  + End date for activity given as either + a date (a string) or as the duration (in days) of the activity, e.g + both "2001-10-15" and 20.5 are valid inputs
    + +  $aCaption  + Text string (caption) to appear + at the end (right side) of the bar
    + +  $aHeight  + Height of bar given as either + a value in range [0,1] in which case this is interpretated as what + fraction of the vertical position should the bar occupy. The height can + also be given in absolute pixels [1..200]
    +

    9.7.1 Specifying vertical position

    +

    As described above vertical positions are specified as a numeric + value [0..n] where 'n' is an arbitrary constant. (For practical + purposes n is most likely < 100)

    +

    Using our previous example we will illustrate this parameter by + changing the position of our 'Project' activity to position 7. Therefor + we change the call to GanttBar() to

    +  $activity = new GanttBar( +7,"Project","2001-12-21" +,"2002-02-20" +);

    +

    and we then get the chart as shown below in Figure 150.

    +

    +
    +
    Figure 150: Changing the vertical position to 7 [src]  +

    +

    +

    Note that the height of each position (vertical position) will + depend on the actual height of the bar.

    +

    9.7.2 Specifying start and end position for a bar +

    +

    Start of bars are given as a date string. The format depends on the + current locale. Examples of valid date strings are

    +
      +
    • "2001-10-22"
    • +
    • "22 October 2001"
    • +
    • "22 Oct 2001"
    • +
    +

    Even if several format are supported it is recommended to use all + numeric dates, i.e in the form "2001-10-22".

    +

    Specifying the end position may be done in two different ways, + either by the end date in the same way as for the start date. The other + way is to specify the length of the activity in number of days + (and fractions thereof). Examples of valid end dates are:

    +
      +
    • "2001-11-15"
    • +
    • "15 Nov 2001"
    • +
    • 22, (specifies duration of 22 days)
    • +
    • 22.7, (specifies duration of 22.7 days)
    • +
    +

    Please note that duration is specified as numerical values and + not strings.

    +

    9.7.3 Milestones

    +

    Milestones are similar to bars but have no end date since milestones + just apply to one single date. Milestones are created much the same way + as activities but using method MileStone() instead.

    +

    The full signature for milestones are

      +function MileStone +($aVPos,$aTitle, +$aDate, +$aCaption) +

    +

    +

    + + + + + +
    + +  $aVPos  + The vertical position for the + bar, [0..n]
    + +  $aTitle  + Title for the activity
    + +  $aDate  + Date for the milestone
    + +  $aCaption  + Text to the right of the + milestone
    +

    Valid milestones are for example

    +
      +
    • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +);
      +

      +
    • +
    • + $milestone = new  +MileStone(3,"Code complete","2001-12-01" +,"(2001-12-01)" +);
      +

      +
    • +
    +

    By default milestones are rendered as a filled "Diamond" shape. This + may be optionally modified. The actual shape is specified by the 'mark' + property of milestone which is an instance of the PlotMark() class + (same class responsible for the marks in line graphs).

    +

    To change the shape of a milestone to, say a triangle, you use the + SetType() method as in

    +  $milestone->mark-> +SetType( +MARK_DTRIANGLE) +

    +

    Let's put this into practice and add a milestone to our previous + example by adding the following two lines of code which result in + Figure 151 shown below.

    +
    +
    Figure 151: Illustration of how to add a milestone to a gantt + chart [src]  +

    +

    +

    +

    You may note that by default the title color is red for milestones. + If you like to change this to be instead, say bold black, you would + invoke the SetColor() and SetFont() methods on the title property of + milestones as in

     $milestone-> +title->SetFont(FF_FONT1 +,FF_BOLD); +
    $milestone +->title->SetColor( +"black"); +

    +

    and thew result would now (not surprisingly be)

    +
    +
    Figure 152: Modifying the milestone title color and font [src]  +

    +

    +

    To modify the caption you do exactly the same but act on property + 'caption' instead of 'title', i.e.

    +  $milestone->caption-> +SetFont( +FF_FONT1, +FF_BOLD); +
    $milestone +->caption->SetColor( +"black"); +

    +

    +

    It is worth noting that you modify the bar title and caption the + exact same way by acting on the 'title' and 'caption' property for the + bars.

    +

    9.7.4 Vertical line

    +

    The final object you may add to a Gantt chart is simple, but quite + useful, a straight vertical line extending over the whole plot height. + This could for example be used to illustrate different phases in a + project. You create a line object by a call to GanttVLine()

    +

    The full signature for GanttVLine() is

      +function GanttVLine +($aDate,$aTitle, +$aColor, +$aWeight, +$aStyle) +

    +

    +

    + + + + + + +
    + +  $aDate  + Date for the milestone
    + +  $aTitle  + Title for the line. The title is + displayed at the bottom of the line
    + +  $aColor  + Color for the line
    + +  $aWeight  + Line width
    + +  $aStyle  + Line style,"dashed", "dotted" and + so on
    +

    Valid creations of lines are for example

    +
      +
    • + $vline = new  +GanttVLine( +"2001-12-24"); +
      +

      +
    • +
    • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1"); +
      +

      +
    • +
    • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred"); +
      +

      +
    • +
    • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5);
      +

      +
    • +
    • + $vline = new  +GanttVLine( +"2001-12-24", +"Phase 1", +"darkred",5,"dotted" +);
      +

      +
    • +
    +

    To add the line to the graph you just have to call GanttGraph::Add() + as with milestones and bars. Let's illustrate the use of vertical lines + by adding a line to the previous example.

     $vline  += new GanttVLine +("2001-12-24","Phase 1"); +
    $graph->Add( +$vline); +

    +

    and the example (See 153) now becomes

    +
    +
    Figure 153: Adding a vertical line with a title to the Gantt + chart [src]  +

    +

    +

    From the above figure you can see that by default the line is drawn + at the beginning of the day of the specified date and in a 'dashed' + style. This can (of course!) be modified so that the line is + drawn/aligned anywhere in the specified day. You modify this by + invoking the method SetDayOffset() with an argument specifying the + fraction of the day where you want the line positioned.

    +

    If you, for example, want to display the line in the middle of the + day just add the line

    +  $vline->SetDayOffset( +0.5); +

    +

    to the previous code and the result will be

    +
    +
    Figure 154: Modifying the position of the line within the day + [src]  +

    +

    +

    +

    As usual you may modify the font, size and color by invoking the + appropriate method (SetFont(), SetColor()) on the 'title' property of + lines.

    +

    9.7.5 Adding markers to a gantt bar

    +

    You can easily add a variety of markers both to the start and end of + the gantt bar. They could for example be used as an alternate way to + illustrate important milestones or anticipated deliveries.

    +

    The left and right markers are accessed through the two properties + 'leftMark' and 'rightMark'. They are both instances of the general + 'PlotMark' class which is also used for the milestones (and in line + graphs). The 'PlotMark' class supports several different styles, for + example, diamond (the default for milestones), filled and unfilled + circles, squares, stares, and so on. Please refer to the reference + section for a complete listing.

    +

    Let's illustrate this by adding a right marker to the previous + example. We will use a style of a filled (red) circle with a white + title, say, "M5". In order to accomplish this we must augment the + previous example with the following lines:

     $activity +->rightMark->Show();     +
    $activity +->rightMark->title-> +Set("M5"); +
    $activity +->rightMark->SetType( +MARK_FILLEDCIRCLE); +
    $activity +->rightMark->SetWidth( +10); +
    $activity +->rightMark->SetColor( +"red"); +
    $activity +->rightMark->SetFillColor( +"red"); +
    $activity +->rightMark->title-> +SetFont( +FF_ARIAL, +FS_BOLD,12); +
    $activity +->rightMark->title-> +SetColor( +"white"); +

    +

    This might seem like a lot of lines but this is as complicated as it + possible can get. As an illustration in the example belwo more or less + everything that is changeable has been changed, the default font, + font-color, fill-color, frame-color and width of marker. The two lines + only really necessary are the first two, showing the mark and setting a + title. One could still get a good result by using default values for + the rest of the properties.

    +

    The resulting image can be seen in Figure 155 below.

    +
    +
    Figure 155: Adding a right marker to a bar. [src]  +

    +

    +

    We have deliberately introduced a "strangeness" here. If the + previous two examples are compared it can bee seen that the last + example is larger than the previous one. Why?

    +

    The explanation is trivial once we recall that the height of bars + are sized relative to the horizontal spacing. The horizontal spacing + are based on the highest single bar including title size and, here come + the explanation, marker size. The horizontal spacing has grown since + the minimum height is now based on 10 points(=the height of the mark). + The bar still occupy the same percentage of the height so it seems to + have grown.

    +

    If this behavior is unwanted it is always possible to specify an + absolute size for the bar heigh, say 8 pixels, with a call

    +  $activity->SetHeight +(8);

    +

    and achieve the result in Figure 156 below.

    +
    +
    Figure 156: Specifying an absolute size for the height of the + bar. [src]  +

    +

    +

    It is worth noting that the height reserved for each bar is still + the same since we haven't changed the height of the marker and the + reserved space is the maximum height used by any bar.

    +

    9.7.6 Adjusting the minimum distance between bars +

    +

    Let's see what happens if we set the height of each bar to be 100% + of the reserved height by adding another activity/bar below the first + one and set the height of each bar to 100% by adding the lines (We omit + the added lines to add another bar since they are just a copy of the + first bar)

    + $activity-> +SetHeight(1.0); +
    $activity2 +->SetHeight(1.0); +

    +

    to the previous example. (Note that a value in the range [0..1] is + interpretated as the fraction of the reserved height while a value > 1 + is interpretated as the absolute size in pixels.)

    +
    +
    Figure 157: Setting the height for each bar to 100% [src]  +

    +

    +

    Aha.. What we are trying to do doesn't really make sense. Since we + have specified that the bar will always occupy 100% of the available + reserved with there will be no distance between the bars. So what if we + specify the bar as 10 pixel absolute by changing the lines to

    +  $activity->SetHeight +(10); +
    $activity2 +->SetHeight(10); +

    +

    we instead get

    +
    +
    Figure 158: Setting both bars height to 10 pixels [src]  +

    +

    +

    So what can we actually do? Well if you remember the reserved height + for each bar is the maximum height of all bars including titles. This + guarantees that no two bars will ever overlap. To guarantee that titles + don't end up too close together there is a Vertical Label Margin + which basically specifies some extra "air" in between the titles. The + amount of air is specified in percent of the title height. To set the + margin you use

    + GanttGraph:: +SetLabelVMarginFactor( +$aMargin) +

    +

    As an example let's set that margin in the previous example to 0 and + see what happens.

    +
    +
    Figure 159: Setting the vertical label margin to 0% [src]  +

    +

    +

    As you would perhaps expect the two bars just barely touches now + since there are no extra margin added. If the two bars hadn't had the + extra right marker it would have looked very compressed.

    +

    By default the vertical margin is set to 40%.

    +

    9.8 Formatting the scale headers

    +

    The scale headers allow you to view up to four different scales at + the same time. The four basic scales are:

    +
      +
    • Day scale
    • +
    • Week scale
    • +
    • Month scale
    • +
    • Year scale
    • +
    +

    You can choose what scale to include and exclude by using the + SetScale() method. For example, for a detailed gantt you might choose + to display days and weeks by specifying

     $graph +->ShowHeaders +( GANTT_HWEEK  +| GANTT_DAY );

    +

    If you instead wanted "the big picture" it might be enough to show + year and months by specifying

    +  $graph->ShowHeaders +GANTT_YEAR  +GANTT_MONTH ); +

    +

    You can choose freely the combination of scales that you want, but a + chart must at least have one scale of course.

    +

    Once you have decided what level of details you need you can then + fine tune the exact layout/formatting of each of the enabled scales as + described below.

    +

    These scale header are all accessed through the graph instance + variables 'scale' as in

    +  $graph->scale-> +week

    +

    or

    + $graph->scale->day
    +

    +

    . All these headers share the following properties.

    +
      +
    • + Show() +
      +

      Determine if the scale should be shown or not

      +
    • +
    • + SetFont() +
      +

      Font for text in header

      +
    • +
    • + SetFontColor() +
      +

      Specify the color of the header text

      +
    • +
    • + SetStyle() +
      +

      Specify what date format should be used, for example in the week + scale it is possible to show either week number, the start date of the + week and so on.

      +
    • +
    • + SetBackgroundColor() +
      +

      As it says, the background color for the header

      +
    • +
    • + SetFrameWeight() +
      +

      The line weight of the box around the scale

      +
    • +
    • + SetFrameColor() +
      +

      The line color for the frame

      +
    • +
    • + SetTitleVertMargin() +
      +

      The margin, in percent, below and above the title text

      +
    • +
    +

    In addition to these methods each scale also has the property 'grid' + which determines the appearance of grid lines for that specific scale. + You may modify the appearance of grid lines by the "normal" line + methods, i.e. SetColor(),SetWeight() SetStyle() and Show(). So for + example to set the week grid line red you would use

    +  $graph +->scale->week-> +grid->SetColor("red" +);

    +

    Each of the scales also have some specific formatting possibilities + as described below.

    +

    9.8.1 Minute scale

    +

    Minute scale is the lowest resolution you can use. It is often + convenient to use Minute scale with "GanttScale::SetINtervall()" since + by default the increment will be 1 minute. The style of minute scale + can be further adjusted by the use style parameters which can be + one of

    +
      +
    1. "MINUTESTYLE_MM", This will display minutes as a two digit number + with a leading zero if necessary
    2. +
    3. "MINUTESTYLE_CUSTOM", This will let you specify you own custom + minute style by making a call to HeaderProperty:: SetFormatString() +
    4. +
    +

    Minute scale is enabled by adding the GANTT_HMIN in the + GanttGraph::ShowHeaders() call. For example as in

    +  $graph +->ShowHeaders(GANTT_HDAY  +GANTT_HHOUR  +GANTT_HMIN); +

    +

    The code snippet below shows how to set up a minute scale with 30 + min interval and some custom colors.

    +  $graph->scale-> +minute-> +SetIntervall( +30); +
    $graph->scale-> +minute-> +SetBackgroundColor( +'lightyellow:1.5'); +
    $graph->scale-> +minute-> +SetFont( +FF_FONT0); +
    $graph->scale-> +minute-> +SetStyle( +MINUTESTYLE_MM); +
    $graph->scale-> +minute->grid->SetColor +('lightgray');

    +

    +

    9.8.2 Hour scale

    +

    The hour scale has more builtin formatting possibilities. The + following formatting options are available

    +
      +
    1. "HOURSTYLE_HM24", Will display the only the hour in military time + 0-24 , for example 13:00
    2. +
    3. "HOURSTYLE_H24", Will display the hour with both hour and minute in + military time 0-24, for example 13
    4. +
    5. "HOURSTYLE_HMAMPM", Will display the hour and minutes with a + suitable am/pm postfix, for example 1:30pm
    6. +
    7. "HOURSTYLE_HAMPM", Will display only the hour with a suitable am/pm + postfix, for example 1pm
    8. +
    9. "HOURSTYLE_CUSTOM", Custom defined format as specified with a call + to HeaderProperty::SetFormatString()
    10. +
    +

    For hours it is possible to specify the interval in either of two + ways. With an integer, e.g. 6, or as time interval, e.g. "1:30" which + makes the interval one and a half hour. The only restriction is that + the interval must be even dividable for 24 hours since one day is the + smallest possible interval to show. This means that it is allowed to + use, for example 2,4,6,"1:30" or "0:45" as intervals but not 7, "2:45".

    +

    The code snippet below shows hot to set up a hour scale to with 45 + minutes interval and some custom colors

     $graph +->scale->hour-> +SetBackgroundColor( +'lightyellow:1.5'); +
    $graph->scale-> +hour->SetFont(FF_FONT1 +); +
    $graph->scale-> +hour->SetStyle(HOURSTYLE_HMAMPM); +
    $graph->scale-> +hour-> +SetIntervall( +"0:45"); +

    +

    The example below shows a gantt chart with the day and hour scale + enabled

    +
    +
    Figure 160: Using hour scale in the Gantt chart [src]  +

    +

    +

    +

    9.8.3 Day scale

    +

    By default the day scale show the first letter of the week day but + it is also posible to format the day scale in a number of different + ways. Days can have one of the following scale formats.

    +
      +
    • DAYSTYLE_ONELETTER, On letter week day. Example "M"
    • +
    • DAYSTYLE_LONG, Full week day. Example "Monday"
    • +
    • DAYSTYLE_LONGDAYDATE1, Day with date. Example "Monday 23 Jun"
    • +
    • DAYSTYLE_LONGDAYDATE2, Day with date+year. Example "Monday 23 Jun + 2003"
    • +
    • DAYSTYLE_SHORT, Short date. Example "Mon"
    • +
    • DAYSTYLE_SHORTDAYDATE1, Short date+date. Example "Mon 23/6"
    • +
    • DAYSTYLE_SHORTDAYDATE2, Short date+date. Example "Mon 23 Jun"
    • +
    • DAYSTYLE_SHORTDAYDATE3,Short date+date. Example "Mon 23"
    • +
    • DAYSTYLE_SHORTDATE1, Short date. Example "23/6"
    • +
    • DAYSTYLE_SHORTDATE2, Short date. Example "23 Jun"
    • +
    • DAYSTYLE_SHORTDATE3, Short date. Example "Mon 23"
    • +
    • DAYSTYLE_SHORTDATE4, Short date. Example "23"
    • +
    • DAYSTYLE_CUSTOM, Custom specified formatting string. Example "M"
    • +
    +

    The formatting is specified by using the SetStyle() method as in

    +  $graph +->scale->day-> +SetStyle( +DAYSTYLE_LONG); +

    +

    The graphical formatting possibilities for days allow the + possibility to specify a different color for the weekend background and + also for the Sunday.

    +
      +
    • + SetWeekendColor() +
      +

      Set the background color for weekends. (Defaults to light gray)

      +
    • +
    • + SetSundayFontColor() +
      +

      The Sunday font color. (Defaults to red)

      +
    • +
    +

    In addition to this there is also a possibility to choose whether or + not the weekend background should be extended vertically down over the + plot area. (the default). Since that is a property more of the whole + plot this behavior is modified with a call to the method

    +  UseWeekendBackground()
    +

    +

    of the scale, e.g. +
     

    + $graph->scale->UseWeekendBackground(false +);

    +

    +

    9.8.4 Week scale

    +

    Week scales, if enabled, by default shows the week number in range 1 + to 53 (as defined by ISO-8601, see the reference section).

    +

    It might be worth pointing out here that the week number calculation + is carried out within JpGraph and does not rely on the underlying OS + date libraries. This makes the behavior consistent over several OS:s + (at least M$ Windows does not comply to ISO-8601 or supply any + way of doing this through the normal libraries, e.g. strftime())

    +

    You may modify the week behavior in three ways. You can specify + (with SetStyle()) a different date format using the constants

    +
      +
    • + WEEKSTYLE_WNBR
      +

      Show week number To further modify the formatting of the actual week + number you can optionally supply a format string with a call to

      +  SetLabelFormatString()
      +

      +

      The format of the string should be a standard sprintf() syntax + expecting an integer (the week number). By default a 'W' is prefixed to + the number.

      +
    • +
    • + WEEKSTYLE_FIRSTDAY
      +

      Show date of first day in week.

      +
    • +
    • + WEEKSTYLE_FIRSTDAY2
      +

      Show date of first day in week and short month

      +
    • +
    • + WEEKSTYLE_FIRSTDAYWNBR
      +

      Show weeknumber of first day in week.

      +
    • +
    • + WEEKSTYLE_FIRSTDAY2WNBR
      +

      Show weeknumber of first day in week and month

      +
    • +
    +

    +

    9.8.5 Month scale

    +

    For month scale you can use the SetStyle() method to choose between + a variety of formats.

    +
      +
    • + MONTHSTYLE_SHORTNAME
      +

      Display the month name in its locale specific short form, i.e Jan, + Feb etc

      +
    • +
    • + MONTHSTYLE_SHORTNAMEYEAR2
      +

      Display the month name in its locale specific short form together + with a 2 digit year , i.e Jan '01, Feb '01 etc

      +
    • +
    • + MONTHSTYLE_SHORTNAMEYEAR4
      +

      Display the month name in its locale specific short form together + with a 4 digit year , i.e Jan 2001, Feb 2001 etc

      +
    • +
    • + MONTHSTYLE_LONGNAME
      +

      Display the month name in its locale specific long name, i.e. + January, February

      +
    • +
    • + MONTHSTYLE_LONGNAMEYEAR2
      +

      Display the month name in its locale specific long name together with + a 2 digit year , i.e January '01, February '01 etc

      +
    • +
    • + MONTHSTYLE_LONGNAMEYEAR4
      +

      Display the month name in its locale specific long name together with + a 4 digit year , i.e January 2001, February 2001 etc

      +
    • +
    • + MONTHSTYLE_FIRSTLETTER
      +

      The first letter of the month name

      +
    • +
    +

    +

    9.8.6 Year scale

    +

    Year scale has no extra formatting possibilities.

    +

    9.9 More formatting for bars

    +

    This section shows some further modification you might do to + activity bars.

    +

    9.9.1 Adding caption to bars

    +

    Caption for bars are placed at the far right side of the bars. They + can for example be used to indicate the resources assigned to a task, + the duration of the task or the progress of the activity.

    +

    Caption text for a bar is specified either when creating a bar or + later by accessing the 'caption' property of bars. So the two lines

    +  $activity = new GanttBar +(0,"Activity 1", +"2001-11-21", +"2001-12-20", +"[BS,ER]") +

    +

    and

    + $activity-> +caption->Set("[BS,ER]" +);

    +

    are both ways of specifying the caption "[BS,ER]" for the activity. + Since activity is a standard JpGraph text object you can easily modify + font, color and size with calls to SetFont() and SetColor(), (e.g.

    +  $activity->caption +->SetFont(FF_ARIAL, +FF_BOLD,9);
    +

    +

    +

    The figure below illustrates the use of caption

    +
    +
    Figure 161: Illustration of the use of captions [src]  +

    +

    +

    +

    9.9.2 Adding progress indicators to bars

    +

    To indicate the progress of a specific activity it is also possible + to add a progress indicator to each bar. This progress indicator + consists of a smaller bar within the bar. By default this progress bar + is black and 70% of the height of the bar. These parameter can (of + course) all be changed.

    +

    The properties for the progress indicator are accessed through the + 'progress' property and it's methods.

    +

    To set the progress for a specific activity you only specify the + percent as a fraction. As in

    +  $activity->progress-> +Set(0.4)
    +

    +

    In Figure 162 the previous example is modified to indicate the + progress of each activity by the default progress indicator. A solid + bar. To make it clearer we have also modified the caption to reflect + the displayed progress. (At the same time we also modified the scale + headers just to illustrate some more formatting options).

    +
    +
    Figure 162: Adding progress indicators. [src]  +

    +

    +

    To specify a different format for the progress you use the + SetPattern() method as in

    +  $activity->progress-> +SetPattern( +BAND_RDIAG, +"blue"); +

    +

    In the reference section you can see the exact parameters and all + available methods.

    +
    +
    Figure 163: Changing the style of the progress indicators. [src]  +

    +

    +

    +

    9.10 Grouping activities

    +

    It is common to group activities. We have used this feature in the + examples of constrains. There is no special type for activity bars that + are used to illustrate grouping. The common way of illustrating this + (as have been used above) is to add "half" a triangle marker at both + ends of the bar. The special provision that JpGraph does is that if you + add a left or right marker of type MARK_LEFTTRIANGLE or + MARK_RIGHTTRIANGLE those triangles will be drawn under the bars to give + the effect as show in the examples above. In the example above we also + have made the grouping bars have slightly less heigh since the end + triangles will visually "grow" the bar.

    +

    So to get the effect we want for a group bar we have to use the two + lines:

    + $groupbar-> +leftMark-> +SetType( +"MARK_LEFTTRIANGLE"); +
    $groupbar +->rightMark->SetType( +"MARK_RIGHTTRIANGLE") +

    +

    +

    As of the current version There is not yet any formatting support to + accomplish the effect of indentation for the titles so this is + accomplished by using a fixed width font and adding spaces in front of + the title.

    +

    9.11 Using multiple columns as titles

    +

    It is often of interest not only to show one title for a gantt bar + but often one wants to show, title, start date, end date, duration or + effort and so on. Up until now we have, to keep things simple only + shown a single title for each activity. We will now show you how you + can specify an arbitrary number of columns as titles for a Gantt chart + as well as adding icons in the graph columns.

    +

    First out is an example to help visualize what we will achieve

    +
    +
    Figure 164: A Gantt chart with multiple columns [src]  +

    +

    +

    To use multiple columns there is two steps. First you need to set + the titles (name, color, fonts etc). Thereafter you need to add the + title columns for each individual bar.

    +

    To set the columns you will have to work with the Activity + information property of the scale. The following code excerpt show + this

    + $graph->scale->actinfo +->SetColTitles +( +
        array(
    'Note' +,'Task','Duration', +'Start', +'Finish'),array( +30,100));
    +

    +

    You will notice two things. We fist specify the titles using an + array. We have also specified a second array with the numbers 30 and + 100. This is an optional array that specifies the minimum width of, in + this case, the first two columns. By default the columns will be wide + enough to hold the widest text string in the column. However for + esthetic reasons you might sometimes want to increase the minium width. + This is what we have done here for the first two columns.

    +

    Furthermore you can also adjust the background colors and the style + and colors of the vertical dividing grid lines. In the previous image + we used the lines

     $graph-> +scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +
    $graph->scale-> +actinfo-> +SetFont( +FF_ARIAL, +FS_NORMAL,10); +
    $graph->scale-> +actinfo->vgrid->SetStyle +('solid'); +
    $graph->scale-> +actinfo->vgrid->SetColor +('gray');

    +

    The style for the grid lines can also be "dashed", "dotted" or + "longdashed" as in other line formatting contexts within the library. + You can also adjust if you would like the small "3D" effect in the + titles. By default this is enabled. You can easily turn this of with a + call to

    + $graph->scale->actinfo +->SetStyle(ACTINFO_2D); +

    +

    To adjust the colors of the vertical dividing lines in the title the + method SetColor() is used as in + "$graph->scale->actinfo->SetColor('navy');".

    +

    The second thins is to actually populate the columns. This is done + (of course) as you add the activity bars to the graph. Previous we just + used a string as the title when we wasn't using columns. By simply + replacing this string with an array we specify the content of the + columns.

    +

    For example to specify two column titles we just create a + hypothetical Gantt bar as In the full example above we put all this in + arrays to make for better coding practice since we create several bars.

    +

    In addition to ordinary text you can also add an image or any of the + predefined icons available. In order to add that in a column you first + create an instance of IconImage() and then specify that instance + instead of the text. So in the previous code snippet if we wanted a + "open folder" image in the first column we would change the lines to

    + $iconopen = new  +IconImage( +GICON_FOLDEROPEN, +0.6); +
    $title2=""; +
    $bar  += new GanttBar +(0,array($iconopen, +$title2), +"2003-11-23", +"2003-12-05"); +

    +

    The available builtin icons are

    +
      +
    • GICON_WARNINGRED
    • +
    • GICON_TEXT
    • +
    • GICON_ENDCONS
    • +
    • GICON_MAIL
    • +
    • GICON_STARTCONS
    • +
    • GICON_CALC
    • +
    • GICON_MAGNIFIER
    • +
    • GICON_LOCK
    • +
    • GICON_STOP
    • +
    • GICON_WARNINGYELLOW
    • +
    • GICON_FOLDEROPEN
    • +
    • GICON_FOLDER
    • +
    • GICON_TEXTIMPORTANT
    • +
    +

    In addition you can also use any of you own images if you specify + the argument as a string, for example

    +  $myicon IconImage( +'myicon.png'); +

    +

    If you wonder, the second argument in the IconImage() call is + an optional scaling factor which you can use to adjust the size of the + image.

    +

    9.11.1 Adding a title for the columns

    +

    Precisely as before you can also have a title spanning all the + columns. This title is specified with the property tableTitle of + the scale. Specifying a table title will automatically adjust the + height of the column titles to fit the table title. The small code + snippet below shows how to add a title.

     $graph +->scale->tableTitle-> +Set('Phase 1'); +
    $graph->scale-> +tableTitle-> +SetFont( +FF_ARIAL, +FS_NORMAL,12); +
    $graph->scale-> +SetTableTitleBackground( +'darkgreen@0.6'); +
    $graph->scale-> +tableTitle-> +Show(true);
    +

    +

    A full example of this is shown below

    +
    +
    Figure 165: Adding a column titles stratching all title + columns. +[src]  +

    +

    +

    +

    9.11.2 Specifying CSIM entries for column titles +

    +

    In exactly the same way as for a single title it is possible to + specify individual CSIM targets for each of the title columns. This is + accomplished by specifying an array for both the target and the alt + text instead of a single string as arguments for SetCSIMTarget() + The following code snippet shows how to specify that.

    +  $bar +->title->SetCSIMTarget(array('sometarget1.html','sometarget1.html'), +
    array(
    'alttext1' +,'alttext2'));

    +

    +

    9.12 More general Gantt formatting

    +

    In this section we will show a few more way by which you may + customize the gantt chart itself. This includes

    +
      +
    • Adding a table title (not to be confused with the graph title)
    • +
    • Adjusting appearance of the various lines in the bar chart
    • +
    +

    +

    9.12.1 Adding a table title

    +

    The (default) white area in the top left of the gantt table may have + a title. This is accessed by the 'tableTitle' property of the gantt + scale. Using this is straightforward as the following lines show.

    +  $graph +->scale->tableTitle-> +Set( +"(Rev: 1.22)"); +
    $graph->scale-> +tableTitle-> +SetFont( +FF_FONT1, +FS_BOLD); +
    $graph->scale-> +SetTableTitleBackground( +"silver"); +
    $graph->scale-> +tableTitle-> +Show();
    +

    +

    The example lines above also changes the default white background to + silver. Adding these lines to the previous example gives the following + result:

    +
    +
    Figure 166: Adding a table title. [src]  +

    +

    +

    From the above example you might notice that the width of the left + column (which holds all the titles) have automatically adjusted itself + to make the table title fit.

    +

    9.12.2 Modifying the divider lines

    +

    The vertical and horizontal lines between the titles and the bars + can be modified by accessing the 'divider' and 'dividerh' properties of + the scale. Again, this is straightforward as the following example + shows:

    + $graph->scale->divider +->SetWeight(3); +
    $graph->scale-> +divider-> +SetColor( +"navy"); +
    $graph->scale-> +dividerh-> +SetWeight(3); +
    $graph->scale-> +dividerh-> +SetColor( +"navy"); +

    +

    The effect of this is shown in Figure 167 below

    +
    +
    Figure 167: Modifying the dividing line [src]  +

    +

    +

    +

    9.12.3 Modifying the box around the plot

    +

    In a similar manner to the other plots in JpGraph you modify the Box + round the plot with the standard graph method 'SetBox()' as in

    +  $graph +->SetBox(true, +"navy",3)
    +

    +

    which will result in a thicker plot box around the area as shown + below

    +
    +
    Figure 168: Modifying the box around the plotarea [src]  +

    +

    +

    Note: You might notice the slight + discrepancy in design that here you use a method and in the previous + cases accessed a property which you modified. This is the unfortunate + affect of the evolving design and development of this library once it + was realised that the original design could be improved upon.

    +

    9.12.4 Horizontal grids and alternating line colors +

    +

    In order to make large charts easier to read it is possible to + specify alternating an horizontal grid and optional alternating line + colors in the background for Gantt charts. The horizontal grid is + accessed through the Graph::hgrid property and the line (used in + the grid) is accessed through the Graph::hgrid::line + sub-property

    +

    In order to specify the alternating line colors the + SetRowFillColor() method is used. For example, to use alternating + blue background with blue grid line the following lines would have to + be added to the graph script

    +   +// Setup a horizontal grid +
    $graph->hgrid-> +Show(); +
    $graph->hgrid-> +line->SetColor('lightblue' +); +
    $graph->hgrid-> +SetRowFillColor( +'darkblue@0.9'); +

    +

    Below is an example of a Gantt graph using this formatting

    +
    +
    Figure 169: Adding a horizontal grid to the graph [src]  +

    +

    +

    +

    9.12.5 Adding icons to Gantt graphs

    + As is illustrated in the image above it is also possible (just like for + normal Graph) to add small images (or icons) to a Gantt graph by + creating an IconPlot() instance and then adding it to the graph. In the + image above the following lines were used to add the small image of + "tux" in the left lower corner
    +  $icon = new IconPlot( +'penguin.png', +0.01,0.95,1 +,15); +
    $icon->SetAnchor( +'left', +'bottom'); +
    $graph->Add( +$icon);
    +
    +

    +

    9.12.6 Adjusting the margins with auto-sizing

    + As of version 1.17 it is possible to use Graph::SetMargin() to specify + the margin for a Gantt graph even when the vertical height is + determined automatically. For example to generate a graph with no left, + right or bottom margin the following lines would be needed
    +  $graph  += new GanttGraph +(500); +
    $graph->SetMargin( +0,0,30 +,0);
    +

    +

    9.13 Simplifying the drawing of Gantt graphs

    +

    As we have shown in the previous examples constructing a Gantt chart + consists of a number of repetitive tasks; Create the individual + activity bars and add them to the graph.

    +

    Now when you have a basic understanding of how this works you are + ready to appreciate a small helper method. +GanttGraph::CreateSimple(). This method takes a few arrays of data + which specifies you Gantt chart and then constructs this chart. By + using this method you sacrifices a few adjustment possibilities for + simplicity. This method is nothing magical it just takes the data for + the activities,(start and end date, titles, progress, any constrains + and so on) and constructs the activities and adds them to the graph.

    +

    The activities are specified in data array which for each activity + have the following fields

    +
      +
    • What row the activity should be on
    • +
    • Activity type, controls the appearance. Can be one of +
        +
      1. ACTYPE_NORMAL, A standard activty bar
      2. +
      3. ACTYPE_GROUP, A Grouping bar
      4. +
      5. ACTYPE_MILESTONE, A milestone
      6. +
      7. +
      +

      +
    • +
    • Title text
    • +
    • Start date
    • +
    • End date (NOT FOR Milestones!)
    • +
    • Caption
    • +
    +

    +

    So for example to create a Gantt chart consisting of two activities + which are grouped and a milestone one would have to use something + similar to the following code

    +

    + $data = array( +
      array(
    0,ACTYPE_GROUP,    "Phase 1",        "2001-10-26", +"2001-11-23", +""), +
      array(
    1,ACTYPE_NORMAL,   "  Label 2",      "2001-10-26", +"2001-11-13", +"[KJ]"), +
      array(
    2,ACTYPE_NORMAL,   "  Label 3",      "2001-11-20", +"2001-11-22", +"[EP]"), +
      array(
    3,ACTYPE_MILESTONE,"  Phase 1 Done""2001-11-23", +"M2") ); +
    +
    // Create the basic graph +
    $graph  += new GanttGraph +(); +
    $graph->title-> +Set( +"Gantt Graph using CreateSimple()"); +
    +
    // Setup scale +
    $graph->ShowHeaders( +GANTT_HYEAR  +GANTT_HMONTH  +GANTT_HDAY  +GANTT_HWEEK); +
    $graph->scale-> +week->SetStyle(WEEKSTYLE_FIRSTDAY); +
    +
    // Add the specified activities +
    $graph->CreateSimple( +$data); +
    +
    // .. and stroke the graph +
    $graph->Stroke(); +

    +

    This will then show up as

    +
    +
    Figure 170: Using the simplified way via CreateSimple() + method +[src]  +

    +

    +

    You may (slightly) modify the appearance of the simple Gantt charts + by means of the methods GanttGraph::SetSimpleFont() and GanttGraph::SetSimpleStyle() But not anything else, remember + that the purpose with this way of constructing graphs is to be simple. + If you need full advanced control you have to construct all the + activities in the "normal" way.

    +

    You can also specify constrains and progress for each bar by + supplying additional data arrays to GanttGraph::CreateSimple().

    +

    9.14 Adding CSIM (Client side Image Maps) to Gantt + charts

    +

    Gantt charts can have independent (different targets) hot spots in + both the activities and in the associated labels for each activity.

    +

    You specify the target and the associated "Alt" text for an activity + bar by calling the + GanttBar::SetCSIMTarget() and + GanttBar::SetCSIMAlt()

    +

    In a similar way you set the target and Alt texts for the activity + title as the following code extract shows.

     $bar +->SetCSIMTarget +("http://localhost/abc/" +); +
    $bar->SetCSIMAlt( +"Alt Text for the bar"); +
    $bar->title-> +SetCSIMTarget( +"http://localhost/abc"); +
    $bar->title-> +SetCSIMAlt( +"Alt Text for the title"); +

    +

    The above code assumes that your activity is available in the + variable 'bar'. In the example directory there is a complete example of + how to use CSIM together with Gantt charts in the "ganttcsimex1.php" + file. (Please note that this example makes use of the simplified Gantt + chart specification using the CreateSimple() method.

    +

    9.15 Adding constrains between your activities

    +

    With Gantt charts there is often the need to illustrate constrains + between one or several activities. One of the most common constrain is + that on activity can't start before an other activity finish.

    +

    JpGraph support visualizing the following types of constrains

    +
      +
    • Start to End
    • +
    • Start to Start
    • +
    • End to Start
    • +
    • End to End
    • +
    +

    An example will clarify how to specify a constrain between two + activities.

    +

    Assume that we start with the Gantt schema as illustrated below

    +
    +
    Figure 171: The original Gantt schema we wich to add + constrains to +[src]  +

    +

    +

    We would now like to add the constrains that the activity "Label 3" + cant start before activity "Label 2" has finished and that the + milestone "Phase 1 done" is depending on when activity "Label 3" is + done.

    +

    The principle of adding constrains is that you for each activity you + want to have a constrain you have to tell to what other activity this + constrain should be to. That other activity is specified by telling on + what row that activity lies. Depending on what type of constrain, e.g. + Start-to-End, an arrow will now connect the two activities in correct + way.

    +

    The way to do this is to call the + SetConstrain() method on the activity. In this method you specify + the type of constrain as well as to what other activity this constrain + should be to. If you read the class reference you can also see that you + can specify the type and size of arrow used. For now we will just use + the default sizes and type.

    +

    So for example to add an End-To-Start constrain between "Label 2" + and "Label 3" you could write

    +  $bar2-> +SetConstrain(2,CONSTRAIN_ENDSTART)
    +

    +

    The first parameter in the call above "2" is the row of the target + activity (i.e. the row where "Label 3") activity is. In the example + below we have added the constrains we wanted.

    +
    +
    Figure 172: Adding constrains to a gantt chart [src]  +

    +

    +

    A note: The actual path followed by the arrow is controlled by some + heuristics to make it clear what the constrain is. It has been a design + decision that in order to keep the API simple the user has no further + detailed controlled on the actual path followed. However, in future + version the heuristics may be extended and provide some + user-controllable parameters.

    +

    9.16 Advanced formatting

    +

    +

    9.16.1 Showing only part of the graph

    +

    You can choose to only display a vertical slice of the overall Gantt + chart by explicitly specifying a date range with the method + GanttGraph::SetDateRange(). This will cap any bars to only be displayed + in between the start and end date given as parameters. For example + specifying

    + $graph-> +SetDateRange( +"2001-12-20", +"2002-01-20"); +

    +

    will show the part of the Gantt chart between the 20 Dec 2001 and 20 + of January 2002. Please note that the format depends on the locale + setting.

    +

    9.16.2 Specifying start day of week

    +

    You can set the week start day with a call to + GanttScale::SetWeekStart(). This method takes an integer [0,6] as input + which represents the start day of the week, 0 means Sunday, 1 Monday, 2 + Tuesday and so on. The default is to start the week on Monday.

    +

    9.17 Localizing

    +

    Depending on your installation of PHP you might have support for + several locales. By default the locale is set up to use the default + locale on the server.

    +

    To specifically set a locale you specify the wanted locale with a + locale string (ala standard PHP), for example American English is + specified with the string 'EN_US', British English with 'EN_UK' 'nl_NL' + for Dutch and so on. If your current installation does not support the + specified locale an error message will be given.

    +  $graph +->scale->SetDateLocale( +"se_SE"); +

    +

    The result is displayed below.

    +
    +
    Figure 173: Using swedish locale. (Can you spot the + difference from English?) +[src]  +

    +

    +

    +

    9.18 Anti-aliasing in JpGraph

    +

    From version 1.2 JpGraph supports drawing of anti-aliased lines. + There are a few caveats in order to use this which is discussed in this + section.

    +

    Note: Note that anti-aliasing will not be + used for either horizontal, vertical or 45 degree lines since they are + by their nature are sampled at adequate rate.

    +

    9.18.1 Enabling anti-aliased lines

    +

    Anti-aliased lines are enabled by calling the method + SetAntiAliasing() in the + Image class in the script where you want to use anti-aliasing.

    +

    The anti-aliasing for lines works by "smoothing" out the edges on + the line by using a progressive scale of colors interpolated between + the background color and the line color.

    +

    Note: The algorithm used for anti-aliasing + of lines is quite simple. It would be possible to achieve even better + result by doing some real 2D signal processing. However, doing real + time 2D signal processing on a HTTP server would be foolish so the + design is deliberately kept simple. To achieve best visual result + always use a dark line color on a light background.

    +

    An example will show that this, quite simple algorithm, gives a + reasonable good result. The figures below shows a radar plot with and + without anti-aliasing.

    +

    +
    +
    Figure 174: Spiderplot without anti-aliasing [src]  +

    +

    +

    +

    +
    +
    Figure 175: Spiderplot with anti-aliasing [src]  +

    +

    +

    +

    One thing you need to keep in mind when deciding to use + anti-aliasing is that it could have potentially a dramatic effect on + the time it takes to generate the image. Line drawing with + anti-aliasing turned on is roughly 8 times slower than the normal line + drawing so treat this feature wisely.

    +

    Furthermore there are a couple of "gotchas" you should be aware of + when using anti-aliasing.

    +
      +
    1. Anti-aliased lines uses up more of the available color-palette. The + exact number of colors used is dependent on the line-angle, a near + horizontal or near vertical line uses more colors (number of lines with + different angles uses more colors). Hence it might not be possible to + use anti-aliasing with color-gradient fill since the number of + available colors in the palette might not be enough. A normal palette + can keep around 256 colors. This means that you are advised to use a + true-color image when using anti-aliasing.
    2. +
    3. Anti-aliasing does not work very well together with background + images since it assumes a the same solid color on each side of the + line. Doing a more advanced anti-aliasing algorithm would simple take + to much processing power.
    4. +
    5. Anti-aliased lines will ignore the line width specified. They will + always have a width of roughly 1.
    6. +
    +

    +

    9.19 Rotating the graphs

    +

    JpGraph provide the possibility for you to rotate the generated + graph an arbitrary angle. This will only affect the actual graph (axis, + axis titles, labels and so on) and not fixed elements on the graph like + title or footer.

    +

    Rotation is probably most used to rotate a graph 90 degrees, for + example a bar graph to get the effect of horizontal bars.

    +

    +
    +

    Performance note: Adding a rotation transformation + will make the graph generation slightly slower since each point of the + graph as to go through a transformation step before being stroked on to + the image. JpGraph optimizes this by using a pre-calculated + transformation matric and also optimizes the special case 90 degrees.

    +
    +
    +

    By default the center of the rotation will be the center of the plot + area, which may or may not coincide with the center of the entire + image.

    +

    To control the rotation you use the two methods

    + +

    For example

    + $graph->image->SetAngle +(45);

    +

    +

    There is actually a third method that you could use, adding a + translation to the graph after the rotation. Since + this probably a very little used method we don't discuss it further but + refer the reader to the class reference instead + Graph:image::SetTranslation()

    +

    When you rotate an image you should be aware of that the individual + labels on the axis are not rotated. The design decision behind this is +
    a) Bit mapped font can't be rotated +
    b) Maintain readability

    +

    Please remember that you may still rotate the labels by calling the Axis::SetLabelAngle() + method.

    +

    Since the anchor point for labels is by default the optimum for + graph at 0 degree you might want to adjust the anchor point and + alignment for the labels on the axis to get a better visual appearance + on you rotated graph. This is accomplished by the method + Axis::SetLabelAlign() For a detailed discussion on how to do this + please see the section on horizontal bar graphs, ( +Working with bar plots )

    +

    The table below shows some examples on different kinds of rotation + to give you an idea of how changing the angle and rotation center may + be used to generate different effects. The top left graph is the + original image. The point of rotation has been marked with a red-cross + in each of the images.

    +

    +
    +
    Figure 176: Original image [src]  +

    +

    +

    +
    +
    Figure 177: Rotated 45 degrees around center of plot area [src]  +

    +

    +

    +
    +
    Figure 178: Rotated 90 degrees around center of plot area [src]  +

    +

    +

    +
    +
    Figure 179: Rotated 45 degrees around center of the image [src]  +

    +

    +

    +
    +
    Figure 180: Rotated 90 degrees around center of the image [src]  +

    +

    +

    +
    +
    Figure 181: Rotated -30 degrees around the lower left point + of the plot area +[src]  +

    +

    +

    +

    As you can see from the images above if you rotate about any other + point than the center of the plot area the plot can be placed outside + the image after rotation.

    +

    Since the rotation, by design, only affects the plot area it is + often most effective to use when the color of the margin is the same as + the background color.

    +

    9.20 Adjusting brightness and contrast for images and + backgrounds

    +

    The following section only applies to palette images. This + means it wont work on true-color images.

    +

    It is often desirable to have a background image look a little bit + "washed" out so it doesn't take the concentration away from the actual + graph. There are basically two ways of accomplish this

    +
      +
    1. Prepare the image with an external images editor to adjust the + level of brightness and contrasty to a desirable level
    2. +
    3. Use JpGraph:s built in adjustment for contrast, brightness and + color saturation.
    4. +
    +

    To adjust the background image call The levels for both brightness + and contrast are real numbers in the range [-1, 1] You can choose to + adjust for example just the background image or you might also choose + to adjust the whole image. To change the background image just use the + method + Graph::AdjBackgroundImage() to specify a suitable value. Let's show + some example on what we can do with this. The following example have + been generated by using the small utility "adjimg.php" which you can + find in the "utils/" directory.

    +

    +
    Brightness=0, contrast=0, saturation = -1 (Original image)

    +

    +
    Brightness=0, contrast=0, saturation = -1 (Black & White image)

    +

    +
    Brightness=0.3, contrast=-0.3, saturation=0

    +

    +
    Brightness=0.4, contrast=-0.7, saturation=0

    +

    +
    Brightness=0.4, contrast=-0.7, saturation=-1

    +

    +
    Brightness=0, contrast=0, saturation=1

    +

    9.21 Timing the generation of graphs

    +

    During development and optimization it can be very handy to have the + actual time it took to generate the image as a footnote. The following + example shows the usage of this feature

    +
    +
    Figure 182: Timing of a graph [src]  +

    +

    +

    To enable this feature you can proceed in two ways.

    +
      +
    1. You can either set the global define BRAND_TIMING (in jpgraph.php) + to true. This will add the timing string to all graphs generated.
    2. +
    3. .. or you can enable it for a specific graph by setting the global + variable $gJpgBrandTiming as in
      +  $gJpgBrandTiming=true; +
      +

      in the beginning of the script.

      +
    4. +
    +

    If you like you might also change the way the timing is formatted by + setting the string defined by BRAND_TIMING_FORMAT (in jpgraph.php). + This string represents a standard printf() format string.

    +Note: JpGraph contains a utility class called JpgTimer which you + can use yourself should you need ms timing of part of your own code. + The API is really simple. The class supports multiple running timers + and you start a timer simply by calling the Push() method. This will + start a new timer and put it on the top of the timer stack. To stop the + timer, pop it from the stack and return the timing value simply call + Pop().

    +

    9.22 Using country flags in various context

    +

    JpGraph has built-in support for over 200 country flags, i.e. they + are available to be used in graphs without any external image + definitions.

    +

    Country flags can be used in primarily two settings

    +
      +
    1. As image markers in line and scatter graphs
    2. +
    3. As background images for graphs
    4. +
    5. As a special type of icons (using the IconPlot()) which can be + added to the graph in any arbitrary position. See next section
    6. +
    +

    In order to make it easy to find the appropriate country flags they + can be specified with either full or partial name or as an numeric + index. The routines in JpGraph are "smart" enough to figure out which + way you are trying to specify a particular flag.

    +

    To specify a country flag as a marker you have to specify the + special mark type as one of MARK_FLAG1,MARK_FLAG2,MARK_FLAG3 or + MARK_FLAG4

    +

    Flags are internally stored in 4 different sizes which is indicated + by the number in the mark types. Flags may also be arbitrary scaled + when displayed. Since this is partially overlapping functionality you + might very well ask why the flags are stored in four different basic + sizes. The reason is of course performance. It you only want a very + small flag it takes processing time to scale down a large image to, + say, a small icon size. At the same time for large flags to be used as + background a small original flag might not have enough details to be + scaled up to a large size. Hence the reason for storing the flags in 4 + different sizes.

    +

    The example below shows how to use country flags as markers

    +
    +
    Figure 183: Using country flags as line plot markers [src]  +

    +

    +

    To use country flags as background one has to use the method + Graph::SetBackgroundCountryFlag(). With this method you can specify + both how much of the image should be filled as well as how much of the + flag should be mixed into the background.

    +

    To see a list of all supported country flags you can run the script + "listallcountryflags.php" in the Example directory. This will show you + a table with all flags.

    +

    9.23 Adding icons onto the graph

    +

    In addition to the standard background image you can also add an + arbitrary number of icons onto the background of the graph. These icons + are created with a call to the special Plot class IconPlot.

    +

    The image from icons are taken from a file or as one of the builtin + country flags.

    +

    You may control how much of the icon should be blended into the + background by specifying a percentage (1-100). The example below shows + how to mix in the picture of "Tux" into the background of a filled line + graph. Note: This example uses alpha blending and will therefore + require GD2.

    +
    +
    Figure 184: Adding an icon into the background [src]  +

    +

    +

    To specify any of the roughly 200 country flags as an icon you first + create an empty Icon and then call the IconPlot::SetCountryFlag() with + the appropriate parameters. (See the class reference). This is + illustrated below by adding the Icelandic flag into the background as + an icon

    +
    +
    Figure 185: Adding an icon flag into the background [src]  +

    +

    +

    Note: Some older versions of PHP pre-4.3.3 + using the builtin GD have problems rendering blended images. If you + have this problem then you need to upgrade to a more recent version of + PHP.

    +

    10 Working with canvas graphs

    +

    Canvas graphing is an advanced feature that comes in handy where you + need to draw some more arbitrary graphics. To give you a flavor of what + you can do the following example shows an architecture overview of + JpGraph which was drawn using a canvas.

    +
    +
    Figure 186: Example of what you can draw on a canvas [src]  +

    +

    +

    Working with canvas requires more understanding of JpGraph as well + as more programming and fine tuning.

    +

    10.1 Introduction

    +

    Canvas graph is really not a graph. It a blank sheet of paper which + you can use to draw arbitrary shapes and still have access to some of + the convenient features of JpGraph.

    +

    You can work with a canvas in different levels of complexity. You + can for example work directly with the Image class which provides a + large number of primitives for drawing but requires that you use + absolute pixel coordinates.

    +

    You can also make life a little bit easier by using a canvas scale. + This lets you define your own scale on the canvas which often makes it + easier by letting you work on a grid you have specified yourself. It + also makes it very easy to re-scale you image automatically by just + changing your scale. For example to half the size of you drawing you + just make the scale twice as large.

    +

    To give you some help in working with different canvas you should + include the "jpgraph_canvtools.php" file when working on canvases. This + is not strictly necessary but it will give you some nice abstraction to + help you create your masterpieces.

    +

    As another (concrete) example on the use of a canvas the figure + below is a listing of font styles available with JpGraph.

    +
    +
    Figure 187: Another example of using a canvas to draw a + number of text boxes +[src]  +

    +

    +

    +

    10.2 Creating a simple canvas

    +

    In order to create a canvas graph you need to include the file + "jpgraph_canvas.php" in addition to the standard "jpgraph.php" file. + You might also want to include the "jpgraph_canvtools.php" to get + access to some supporting classes that may (or not) come in handy.

    +

    Creating a canvas gives you the opportunity draw arbitrary shapes on + a "white" piece of paper. Let's first show a simple example were we + just draw a text box. We first show you the code which we will walk + through

    (File: canvasex01.php) +
    <?php +
    +// $Id: canvasex01.php,v 1.3 2002/10/23 08:17:23 aditus Exp $ +
    include  +"../jpgraph.php"; +
    include 
    "../jpgraph_canvas.php"; +
    +
    // Setup a basic canvas we can work  +
    $g = new CanvasGraph( +400,300,'auto' +); +
    $g->SetMargin( +5,11,6 +,11); +
    $g->SetShadow(); +
    $g->SetMarginColor( +"teal"); +
    +
    +// We need to stroke the plotarea and margin before we add the +
    // text since we otherwise would overwrite the text. +
    $g->InitFrame(); +
    +
    // Draw a text box in the middle +
    $txt="This\nis\na TEXT!!!"; +
    $t = new Text( +$txt,200,10 +); +
    $t->SetFont( +FF_ARIAL, +FS_BOLD,40); +
    +
    +// How should the text box interpret the coordinates? +
    $t->Align( +'center','top'); +
    +
    // How should the paragraph be aligned? +
    $t->ParagraphAlign( +'center'); +
    +
    +// Add a box around the text, white fill, black border and gray shadow +
    $t->SetBox( +"white", +"black","gray"); +
    +
    // Stroke the text +
    $t->Stroke( +$g->img); +
    +
    // Stroke the graph +
    $g->Stroke(); +
    +
    ?> +
    +

    +

    The example above starts by creating a (400x200) sized image. We set + the margins to get a nice frame around the image. For canvases the + margins has no effect in the way you enter coordinates. Top left is + (0,0) and bottom right (including any potential margin and shadow) is + the maximum. In this case the coordinates are X:0-399, and Y:0-199

    +

    We then call the + InitFrame() method which actually strokes the margin and plotarea + to the graph. Since everything is stroked in the order you issue the + commands you must make sure that the graphical objects you want on top + is stroked last. This is different from the way you normally work with + JpGraph since it queues up all you addition and then makes sure they + are stroked in the correct order.

    +

    We then create a Text object, + setup it's properties, including the absolute screen position where we + want the text, and then stroke it. Her it might be a need for a closer + explanation of the, perhaps misnamed, method +Text::Align() This method states how the text coordinates + should be interpreted , i.e when we specify (200,10) as the + coordinates for the text paragraph should that be interpreted as the + top left corner, bottom-left corner or something else (of the bounding + box)? In the code above we have chosen to interpret the X-coordinate as + being the center of the bounding box and the Y-coordinate as the top. + Hence the text will be aligned so that the (200,100) point in the graph + is aligned with the middle of the top line of the paragraphs bounding + box.

    +

    We also specify that the lines within the paragraph should be + centered with a call to + Text::ParagraphAlign() Since we also choose to have a box around + the text we have to make use of the method + Text::SetBox() which is used to specify the fill color, the border + color and the shadow color (if you leave out shadow color or set it to + '', no shadow will be used).

    +

    Now we are ready to stroke the text onto the canvas. In order to do + so we must specify the basic Image drawing class we want to use. + Without discussing this further we just state that a suitable image + class can always be found as the img property of the + Graph class.

    +

    Finally we are ready to stroke the entire graph, which in effect + sends the canvas back to the browser. Below you can see the effect of + all this code

    +

    +
    +
    Figure 188: A simple canvas drawing with a text box in the + middle [src] +  +

    +

    +

    +

    10.3 Adding lines and rectangles to a canvas

    +

    A canvas also makes a good background for using standard graphic + primitives, for example circles and lines. What you first have to + remember is that you are (so far) working with absolute screen + coordinates and secondly all drawing primitives are found in the + Image Class accessible as a property of the Graph class. So for + example to draw a line between coordinate (0,0) and (100,100) you would + have to add the line

    +  $graph->img-> +Line(0,0 +,100,100); +

    +

    +

    To your code. The following example shows some of the graphic + primitives you have access to in the Image class

    +(File: canvasex02.php) +
    <?php +
    +// $Id: canvasex02.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
    include  +"../jpgraph.php"; +
    include 
    "../jpgraph_canvas.php"; +
    +
    // Setup a basic canvas we can work  +
    $g = new CanvasGraph( +400,200,'auto' +); +
    $g->SetMargin( +5,11,6 +,11); +
    $g->SetShadow(); +
    $g->SetMarginColor( +"teal"); +
    +
    +// We need to stroke the plotarea and margin before we add the +
    // text since we otherwise would overwrite the text. +
    $g->InitFrame(); +
    +
    // Add a black line +
    $g->img-> +SetColor( +'black'); +
    $g->img-> +Line(0,0 +,100,100); +
    +
    // .. and a circle (x,y,diameter) +
    $g->img-> +Circle(100,100 +,50); +
    +
    +// .. and a filled circle (x,y,diameter) +
    $g->img-> +SetColor('red'); +
    $g->img-> +FilledCircle( +200,100,50 +); +
    +
    // .. add a rectangle +
    $g->img-> +SetColor( +'green'); +
    $g->img-> +FilledRectangle( +10,10,50 +,50); +
    +
    // .. add a filled rounded rectangle +
    $g->img-> +SetColor( +'green'); +
    $g->img-> +FilledRoundedRectangle( +300,30,350 +,80,10); +
    // .. with a darker border +
    $g->img-> +SetColor( +'darkgreen'); +
    $g->img-> +RoundedRectangle( +300,30,350 +,80,10); +
    +
    // Stroke the graph +
    $g->Stroke(); +
    +
    ?> +
    +

    +

    Pleas note the way to access these routines through the img property + of the Graph class. Please also keep in mind that the coordinates are + absolute.

    +

    +
    +
    Figure 189: Example of graphic primitives [src]  +

    +

    +

    +

    +
    +

    A note on GD For those of you using GD 1.xx you + might notice that the large "filled circle" isn't completely filled. + This is because in GD 1.xx there are no low level primitives to fill an + ellipse or circle so JpGraph tries to make the best out of a bad + situation and manually fake a filled circle. For interest of speed + JpGraph does not contain a complete (for example) Bresenham-circle fill + but cheats by using some existing GD routines. This is not a perfect + solution and for large filled circles like this you get some + moire-patterns in the circle. If you upgrade to GD 2.x JpGraph will be + able to make full use of those new existing methods and the fill will + be perfect.

    +
    +
    +

    We refer you to the class reference to find out what other graphic + primitives are available for use.

    +

    10.4 Using a canvas scale

    +

    The previous method using absolute coordinates works. But nothing + more. It doesn't give you any chance to easily scale the image (unless + you manually recalculate all used coordinates) , it gets tedious to + work with pixel level resolution. Especially if you just like to draw a + few basic shapes.

    +

    To help with this you can use a scale for the canvas. This lets you + define a "work-space" of your choice. You can for example set the + coordinates to be between X:0-10, Y:0-10. This makes it easier to + position objects on the canvas. This also has two additional + advantages:

    +
      +
    • If you increase the size of the canvas all objects will be + automatically scale to keep their proportions without any changes.
    • +
    • You can shrink/enlarge your drawing (not the image) by just using + another scale. For example if you originally draw the image using a + (0:10, 0:10) scale and then change the scale to (0:20, 0:20) then the + effect will be that you drawings will "shrink" to half their size.
    • +
    +

    +

    To use this type of scaling you must make sure you include the file + "jpgraph_canvtools.php" . In addition to the scaling class their are + also a couple of other utility classes that may come in handy, + especially the Shape class.

    +

    Using the scale is quite simple. You first instantiate a scale + object passing the graph as a parameter and then specify the scale you + want to use. This means you need to add the lines

    +  $scale  += new CanvasScale +($g); +
    $scale->Set( +0,$xmax,0 +,$ymax);

    +

    +

    to your code. You can then use one of the translation methods (for + example +CanvasScale::Translate()) in the canvas scale class to translate + between your world coordinates and the absolute screen coordinates. + This means you could take the code in the example above and just add + the lines, for example,

    +  list( +$x1,$y1) = $this +->scale->Translate( +$x1,$y1); +
    list(
    $x2,$y2) =  +$this->scale->Translate +($x2,$y2); +
    $g->img-> +Line($x1,$y1 +,$x2,$y2); +

    +

    Since this pattern has to be repeated for every object that has to + be drawn it makes good sense to encapsulate this in a separate class. + This is exactly why the canvas tools file also have a utility class + called Shape This class is + mainly a wrapper around the most commonly used methods in the basic + Image class (with one important exception) and does all these the + translation for you. Please see the class reference for a complete list + of the available methods To set up the Shape class you instantiate it + with the graphic context and the scale you want to use as argument as + in

    +

    + $shape = new  +Shape($g,$scale +);

    +

    +

    You are then ready to use all the methods in the shape class. Using + a scale and imitating the previous example we would get the source + shown below.

    (File: canvasex03.php) +
    <?php +
    +// $Id: canvasex03.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
    include  +"../jpgraph.php"; +
    include 
    "../jpgraph_canvas.php"; +
    include 
    "../jpgraph_canvtools.php"; +
    +
    // Define work space +
    $xmax=20; +
    $ymax=20; +
    +
    // Setup a basic canvas we can work  +
    $g = new CanvasGraph( +400,200,'auto' +); +
    $g->SetMargin( +5,11,6 +,11); +
    $g->SetShadow(); +
    $g->SetMarginColor( +"teal"); +
    +
    +// We need to stroke the plotarea and margin before we add the +
    // text since we otherwise would overwrite the text. +
    $g->InitFrame(); +
    +
    // Create a new scale +
    $scale  += new CanvasScale +($g); +
    $scale->Set( +0,$xmax,0 +,$ymax); +
    +
    +// The shape class is wrapper around the Imgae class which translates +
    // the coordinates for us +
    $shape  += new Shape($g, +$scale); +
    $shape->SetColor( +'black'); +
    +
    +
    // Add a black line +
    $shape->SetColor( +'black'); +
    $shape->Line( +0,0,20 +,20); +
    +
    // .. and a circle (x,y,diameter) +
    $shape->Circle( +5,14,2 +); +
    +
    +// .. and a filled circle (x,y,diameter) +
    $shape->SetColor( +'red'); +
    $shape->FilledCircle( +11,8,3 +); +
    +
    // .. add a rectangle +
    $shape->SetColor( +'green'); +
    $shape->FilledRectangle(15, +8,19,14 +); +
    +
    // .. add a filled rounded rectangle +
    $shape->SetColor( +'green'); +
    $shape->FilledRoundedRectangle(2, +3,8,6 +); +
    // .. with a darker border +
    $shape->SetColor( +'darkgreen'); +
    $shape->RoundedRectangle(2, +3,8,6 +); +
    +
    +
    // Stroke the graph +
    $g->Stroke(); +
    +
    ?> +
    +
    The source above gives the following result
    +
    +
    Figure 190: Drawing shapes on a canvas using a scale. [src]  +

    +

    +

    If we like to make a smaller image we could just change the image + size and everything will be rescaled without any further code changes. + SO for example making the image half the size would give the result

    +
    +
    Figure 191: Shrinking the image to half the size is easy + since the scaling will maintain the relative position of the objects [src]  +

    +

    +

    If we instead wanted to keep the image size but shrink the shapes we + could just make the scale twice as large which would result in

    +
    +
    Figure 192: Shrinking hte graphic object by making the scale + twice as large +[src]  +

    +

    +

    +

    We previously mentioned that the Shape class was a wrapper around + the image class with one exception. So what is the exception? Well, + glad you asked. The exception is that it contain an additional method + which draws an "indented rectangle". An indented rectangle is a + rectangle where one of it's four corners have been moved into the + rectangle. You create an indented rectangle by calling either + Shape::IndentedRectangle() or A few examples illustrates what this + shape looks like.

    +
    +
    Figure 193: Examples of filled indented rectangles [src]  +

    +

    +

    +

    As a final note we mention the class + CanvasRectangleText Which can be used to add a text with a rounded + rectangle (possibly filled) onto the canvas. The previous example where + all the available fonts were drawn were using this class. We don't + describe it further but refer the interested reader to the class + reference and the 'listfontsex1.php' example file.

    +

    10.5 Sample application: Drawing DB schema

    +

    As a final example we shortly discuss how the canvas type of graph + was used to generate the DB schema for the DDDA architecture.

    +

    The library php file "utils/misc/imgdbschema.php" included in the + distribution contains some utility classes to make the drawing of table + schemes easier. It contains two basic classes, Class ImgDBTable and + Class ImgDBSchema. The first class understand how to draw an image + illustrating a single table. The second class is responsible for + automatically extract all the relevant information from a DB to draw a + complete DB Schema.

    +

    Before going into this a little bit more we show what an example of + this might look like.

    +
    +
    Figure 194: Example of using the canvas graph style together + with the imgdbschema.php library to semi-automatically generate a DB + schema [src] +  +

    +

    +

    +

    Before going on it should be noted that the ImgDBSchema assumes that + the DB can be accessed through a DB abstraction layer modeled after the + abstraction layer available in the 'jpdb.php' file in the DDDA + architecture. This abstraction layer assumes a MySQL database in the + bottom. This specific dependency of this particular abstraction layer + is the reason why these classes is not included in the generic canvas + tools file.

    +

    The second thing to note is that this library does not contain a + complete automatic-layout engine but rather a very simple automatic + system which, if nothing else is specified, just puts the table in a + rectangular grid. A complete graph layout engine would simple be to + much to write in this context. This is also a very difficult + optimization problem and sofar not even any of the available research + programs that tries this can achieve a satisfactory layout without + manual intervention.

    +

    The critical lines in the code to generate the above graph is

    +  $tblposadj=array($tlo +,0,$tblwidth+ +$tlo+2,0 +,2*$tblwidth+ +$tlo+4,0 +,-1,16,- +1,16); +
    $dbschema  += new ImgDBSchema +("jpgraph_doc" +,"FormatTblName" +,"FormatFldName" +); +
    $dbschema +->SetMargin($leftm, +$topm); +
    $dbschema +->SetTableWidth +($tblwidth); +
    $dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj);

    +

    +

    The rest of the code in the file is just to setup the canvas, add an + indented rectangle to group some tables and generate a footer with the + date and time this image was generated.

    +

    The first line instantiates a new ImgDBSCheme layout engine asking + it to draw an image for the database 'jpgraph_doc'. The following two + arguments specify two callback functions for formatting the text for + header and each field in a table.

    +

    The next line specify the top left margin where the drawing of the + tables should be started.

    +

    The third line specify the width of a single table. The final lines + starts the engine and draws all tables in the database to the canvas. + The final argument requires some further explanation. This is an offset + (x,y) from the top left corner how each individual table should be + positioned. If the value is -1 indicates that the default value should + be used. If this array is not specified then the tables will simple + arranged line by line.

    +

    The full source code for drawing this DB schema example is shown + below.

    +

    (File: dbschemaex1.php) +
    <?php +
    +/*======================================================================= +
    // File:     DBSCHEMAEX1.PHP +
    // Description:    Draw a DB schema of the DDDA architecture +
    // Created:     2002-08-25 +
    // Author:    Johan Persson (johanp@aditus.nu) +
    +// Ver:        $Id: dbschemaex1.php,v 1.1 2002/08/27 20:08:57 aditus Exp $ +
    // +
    // License:     This code is released under QPL +
    //              Copyright (C) 2001,2002 Johan Persson +
    +// Note:        The actual drawing of the tables are semi-automatically +
    +//              but you can easily adjust the individual tables position +
    //              with the 'tblposadj' array.  +
    // +
    +//======================================================================== +
    */ +
    include  +"../jpgraph.php"; +
    include 
    "../jpgraph_canvas.php"; +
    include 
    "../jpgraph_canvtools.php"; +
    include 
    "../utils/misc/imgdbschema.inc"; +
    include 
    "../utils/jpdocgen/jpdb.php"; +
    +
    +
    +// Global callback to format the table header names +
    function  +FormatTblName( +$aName) { +
        
    +// We want to replace any specifi references to the +
        // 'JpGraph' project with the generic '<project>' +
        
    return  +str_replace( +'JpGraph', +'<project>' +$aName); +
    } +
    +
    +// Global callback to format each field name in the table +
    function  +FormatFldName( +$aName,$aTable) { +
        return 
    $aName +; +
    } +
    +
    +
    class 
    Driver  +{ +
    +
        var 
    $ig +, $img$iscale +$ishape; +
        var 
    $iymax +,$ixmax; +
        var 
    $iwidth +,$iheight; +
    +
        function 
    Driver +() { +
    +
        
    +// Define Image size and coordinate grid space to work within +
        
    $this +->iwidth 600; +
        
    $this +->iheight750; +
        
    $this +->iymax  50; +
        
    $this +->ixmax  55; +
    +
        
    // Setup a basic canvas +
        
    $this +->ig = new CanvasGraph( +$this->iwidth,$this +->iheight,'auto'); +
        
    $this +->img $this-> +ig->img; +
    +
        
    // Define the scale to be used +
        
    $this +->iscale  += new CanvasScale +($this->ig); +
        
    $this +->iscale->Set( +0,$this->ixmax +,0,$this-> +iymax); +
        
    $this +->ishape  += new Shape($this-> +ig,$this->iscale +); +
    +
        
    // A small frame around the canvas +
        
    $this +->ig->SetMargin( +2,3,2 +,3); +
        
    $this +->ig->SetMarginColor( +"teal"); +
        
    $this +->ig->InitFrame(); +
    +
        } +
    +
        function 
    Run +() { +
    +
        
    $leftm +=1.5;    // Left margin (for table schemes)  +
        
    $topm=5;     +// Top margin (for table schemes)  +
        
    $tblwidth +=15;    // Individual table width +
        
    $tlo=1;         +// Offset for top line +
    +
        // Add the background color for the project specific tables +
        
    $this +->ishape->IndentedRectangle($leftm, +$topm-1,3 +*$tblwidth+$tlo+ +6,45, +
                         
    $tlo ++2*$tblwidth+ +2,30,CORNER_BOTTOMLEFT, +
                         
    'lightblue'); +
    +
        
    +// Stroke the tables (series of x,y offsets, If =-1 then use the +
        // automtic positioning +
        
    $tblposadj +=array($tlo,0, +$tblwidth+$tlo+2 +,0,2* +$tblwidth+$tlo+4 +, +
                 
    0 +,-1,16,- +1,16); +
        
    $dbschema  += new ImgDBSchema +('jpgraph_doc' +,'FormatTblName' +,'FormatFldName' +); +
        
    $dbschema +->SetMargin($leftm, +$topm); +
        
    $dbschema +->SetTableWidth +($tblwidth); +
        
    $dbschema +->Stroke($this-> +img,$this->iscale +,$tblposadj); +
    +
        
    $tt  += new CanvasRectangleText +(); +
        
    $tt->SetFillColor( +''); +
        
    $tt->SetColor( +''); +
        
    $tt->SetFontColor( +'navy'); +
    +
        
    // Add explanation +
        
    $tt->SetFont( +FF_ARIAL, +FS_NORMAL,12); +
        
    $tt->Set( +'Project specific tables', +$tblwidth+ +$leftm+3,16 +,15); +
        
    $tt->Stroke( +$this->img,$this +->iscale); +
    +
        
    // Add title +
        
    $tt->SetColor( +''); +
        
    $tt->SetFont( +FF_VERDANA, +FS_BOLD,26); +
        
    $tt->Set( +'DDDA - DB Schema', +9,0.5,30 +); +
        
    $tt->Stroke( +$this->img,$this +->iscale); +
    +
        
    // Add a version and date +
        
    $tt->SetFillColor( +'yellow'); +
        
    $tt->SetFont( +FF_FONT1, +FS_NORMAL,10); +
        
    $tt->Set( +"Generated: ". +date("ymd H:i",time +()),1,$this-> +iymax*0.96,15 +);  +
        
    $tt->Stroke( +$this->img,$this +->iscale); +
    +
        
    $this +->ig->Stroke(); +
        } +
    } +
    +
    $driver  += new Driver +(); +
    $driver->Run(); +
    +
    ?> +
    +

    +

    11 Anti-Spam Challenges

    +

    JpGraph includes a module to easily generate Anti-Spam challenges. + With this we mean an image consisting of numbers and letters which are + very hard to read for an OCR program. This is often used to secure sign + up for bulletin boards, on-line mail system or mailing lists since this + very effectively prevent automatic sign up by robots (spam-bots).

    +

    The module in JpGraph responsible for this is + jpgraph_antispam.php and behaves as a simplified plot module.

    +

    The example below illustrates how such an image can look like

    +
    +
    Figure 195: Simple illustration of spam challenge image [src]  +

    +

    +

    Anti spam images have less functionality then the usual images + generated with JpGraph in order to keep this utility reasonable small. + The primary limitation is that there are now additional formatting + options for the images and the image generated will always use the + JPEG image format. Hence it is not possible to change this to use, + for example, PNG.

    +

    11.1 Generating Anti-Spam challenge

    +

    There are two basic alternatives on how to generate the content of + the anti-spam image

    +
      +
    1. Submit a string that should be used
    2. +
    3. Automatically generate a random string. If this alternative is + chosen then the user of the library should save the created string and + compare it to what the user enters.
    4. +
    +

    In order to write a script to generate a new challenge there are + four steps to be completed.

    +

    First include the library file jpgraph_antispam.php. + Note that there is no need to include the "jpgraph.php" library since + all functionality is included in this library file.

    +   +require_once "jpgraph_antispam.php";
    +

    +

    Secondly a new instance of the class AntiSpam must be + created

    + $spam = new  +AntiSpam(); +

    +

    Thirdly the string to be used in the challenge must be + specified. To automatically generate a suitable string use

    +   +// The argument determines the length of the generated string +
    $chars $spam-> +Rand(5);
    +

    +

    If instead the string to be used should be specified this string + should be specified in the initial creation of the AntiSpam() or by + calling the Set() method as in

    +  $spam-> +Set("aui8k");
    +

    +

    Please note that in order to minimize the risk for confusion the + letters 'O' and the number '0' (zero) is not allowed since they are too + alike and can be mistaken for each other.

    +

    The final and fourth step is to output the image with a call + the method Stroke() on the created instance of the AntiSpam + class.

    if( $spam->Stroke +() === false  +) { +
        die(
    "Illegal or no data to plot"); +
    }

    +

    Note that we have put a guard around the output since in the case of + an error this method will result a boolean false value. As with the + other graph types it is possible to write the generated image to a file + by submitting a file name as an argument to Stroke().

    +

    12 Code defines in JpGraph

    +

    Various settings in JpGraph are controlled by overall DEFINEs in the + configuration file "jpg-config.inc". Most of these defines have default + values that should be valid for most usage.

    +

    In the rest of this chapter all constants are described with default + value and usage.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Define, default valueComment
    "CACHE_DIR", "/tmp/jpgraph_cache/"The full + absolute name of directory to be used as a cache. This directory + must be readable and writable for PHP. Must end with '/'
    "TTF_DIR", "/usr/local/fonts/ttf/" +Directory for JpGraph TTF fonts. Must end with '/' The fonts must follow + the naming conventions as used by the supplied TTF fonts in JpGraph.
    "CSIMCACHE_DIR", "csimcache/"Directory for + cache directory for CSIM graphs. Must end with '/' Cache directory + specification for use with CSIM graphs that are using the cache. The + directory must be the filesystem name as seen by PHP and the 'http' + version must be the same directory but as seen by the HTTP server + relative to the 'htdocs' directory. If a relative path is specified it + is taken to be relative from where the image script is executed. Note: + The default setting is to create a subdirectory in the directory from + where the image script is executed and store all files there. As usual + this directory must be writable by the PHP process.
    "CSIMCACHE_HTTP_DIR", "csimcache"Directory + for JpGraph TTF fonts. Must end with '/' Cache directory specification + for use with CSIM graphs that are using the cache. The directory must + be the filesystem name as seen by PHP and the 'http' version must be + the same directory but as seen by the HTTP server relative to the + 'htdocs' directory. If a relative path is specified it is taken to be + relative from where the image script is executed. Note: The default + setting is to create a subdirectory in the directory from where the + image script is executed and store all files there. As usual this + directory must be writable by the PHP process.
    "CHINESE_TTF_FONT", "bkai00mp.ttf" Actual + name of the TTF file used together with FF_CHINESE aka FF_BIG5 This is + the TTF file being used when the font family is specified as either + FF_CHINESE or FF_BIG5
    "LANGUAGE_CYRILLIC", false Special unicode + Cyrillic language support.
    "CYRILLIC_FROM_WINDOWS", false If you are + setting this config to true the conversion will assume that the input + text is windows 1251, if false it will assume koi8-r
    'MINCHO_TTF_FONT', 'ipam.ttf' Japanese + TrueType font used with FF_MINCHO
    'PMINCHO_TTF_FONT', 'ipamp.ttf' Japanese + TrueType font used with FF_PMINCHO
    'GOTHIC_TTF_FONT', 'ipag.ttf' Japanese + TrueType font used with FF_GOTHIC
    'PGOTHIC_TTF_FONT', 'ipagp.ttf' Japanese + TrueType font used with FF_PGOTHIC
    "INSTALL_PHP_ERR_HANDLER", false Determine + if the library should also setup the default PHP error handler to + generate a graphic error message. This is useful during development to + be able to see the error message as an image instead as a "red-cross" + in a page where an image is expected.
    "CATCH_PHPERRMSG", true Should the library + examine the global php_errmsg string and convert any error in it to a + graphical representation. This is handy for the occasions when, for + example, header files cannot be found and this results in the graph not + being created and just a "red-cross" image would be seen. This should + be turned off for a production site.
    "USE_LIBRARY_GD2",falseSpecify if we + should use GD 2.x or GD 1.x If you have GD 2.x installed it is + recommended that you use it since it will give a slightly, slightly + better visual appearance for arcs. If you don't have GD2 installed this + must be set to false!
    'USE_TRUECOLOR',trueShould the image be a + truecolor image? Note 1: Can only be used with GD 2.0.2 and above. Note + 2: GD 2.0.1 + PHP 4.0.6 on Win32 crashes when trying to use truecolor. + Truecolor support is to be considered alpha since GD 2.x is still not + considered stable (especially on Win32). Note 3: MUST be enabled to get + background images working with GD2 Note 4: If enabled then truetype + fonts will look very ugly => You can't have both background images and + truetype fonts in the same image until these bugs has been fixed in GD + 2.01
    "USE_CACHE",falseShould the cache be used + at all? By setting this to false no files will be generated in the + cache directory. The difference from READ_CACHE being that setting + READ_CACHE to false will still create the image in the cache directory + just not use it. By setting USE_CACHE=false no files will even be + generated in the cache directory.
    "READ_CACHE",trueShould we try to find an + image in the cache before generating it? Set this define to false to + bypass the reading of the cache and always regenerate the image. Note + that even if reading the cache is disabled the cached will still be + updated with the newly generated image. Set also "USE_CACHE" below.
    "DEFAULT_GFORMAT","auto"Default graphic + format set to "auto" which will automatically choose the best available + format in the order png,gif,jpg (The supported format depends on what + your PHP installation supports)
    "USE_IMAGE_ERROR_HANDLER",true Determine + if the error handler should be image based or purely text based. Image + based makes it easier since the script will always return an image even + in case of errors.
    "USE_APPROX_COLORS",trueIf the color + palette is full should JpGraph try to allocate the closest match? If + you plan on using background image or gradient fills it might be a good + idea to enable this. If not you will otherwise get an error saying that + the color palette is exhausted. The drawback of using approximations is + that the colors might not be exactly what you specified. Note1: This + does only apply to a palette image, not true color images since they + don't have the limitations of maximum number of colors.
    "ERR_DEPRECATED",falseShould usage of + deprecated functions and parameters give a fatal error? (Useful to + check if code is future proof.)
    "BRAND_TIMING",falseShould the time taken + to generate each picture be branded to the lower left in corner in each + generated image? Useful for performance measurements generating graphs
    "BRAND_TIME_FORMAT","Generated in: %01.3fs" +What format should be used for the timing string?
    +

    The following defines should very rarely need to be changed

    +

    + + + + + + + +
    Define, default valueComment
    "CACHE_FILE_GROUP","wwwadmin"What group + should the cached file belong to (Set to "" will give the default group + for the "PHP-user") Please note that the Apache user must be a member + of the specified group since otherwise it is impossible for Apache to + set the specified group.
    "CACHE_FILE_MOD",0664What permissions + should the cached file have (Set to "" will give the default + permissions for the "PHP-user")
    "USE_BRESENHAM",falseDecide if we should + use the Bresenham circle algorithm or the built in Arc(). Bresenham + gives better visual appearance of circles but is more CPU intensive and + slower then the built in Arc() function in GD. Turned off by default + for speed
    "_CSIM_SPECIALFILE","_csim_special_" +Special file name to indicate that we only want to calc the image map in + the call to Graph::Stroke() used internally from the GetHTMLCSIM() + method.
    "_CSIM_DISPLAY","_jpg_csimd"HTTP GET + argument that is used with image map to indicate to the script to just + generate the image and not the full CSIM HTML page.
    +   +

     

    +

    &nbsp

    +
    + diff --git a/html/includes/jpgraph/docs/html/toc.html b/html/includes/jpgraph/docs/html/toc.html new file mode 100644 index 0000000000..3248c0b327 --- /dev/null +++ b/html/includes/jpgraph/docs/html/toc.html @@ -0,0 +1,502 @@ + + + + + + + + + +

    JpGraph Manual

    +
    +
    1 About this manual + +2 Introduction + +3 Installation + +4 Quick Start: + Dynamic Image Generation + +5 Localizing error messages + + +6 +Understanding the JpGraph caching system + +7 Using image maps with + JpGraph + +8 Working with + orthogonal X,Y-plots + +9 Working with non X,Y-plots + + +10 Gantt charts + +11 Working with canvas + graphs + +12 Anti-Spam Challenges + +13 Generating + LED-like digits with JpGraph + +14 Code defines in JpGraph +
    + + diff --git a/html/includes/jpgraph/docs/index.html b/html/includes/jpgraph/docs/index.html new file mode 100644 index 0000000000..9324cf4fa5 --- /dev/null +++ b/html/includes/jpgraph/docs/index.html @@ -0,0 +1,113 @@ + + +JpGraph Documentation + + + + + + +
    + + + + + + + + + + + + + + + + +© 2001-2007 Aditus Consulting + +
    + + + + + + diff --git a/html/includes/jpgraph/docs/manual.png b/html/includes/jpgraph/docs/manual.png new file mode 100644 index 0000000000000000000000000000000000000000..a440215862baca78901c136e9dcac809a670728e GIT binary patch literal 884 zcmV-)1B?8LP)=A{G3hZ zr))EiParwm%;`jnPXG!XscygqAP^vAU`H!6<1cBd{}fgAb#<2zeBiY3whuuNq^CCK zEv!~6uikgID=e4GQ`^`I&-0kL^K_lORGj$b)Q0s%eW#4f0RvR&8JPphohWhEHr2aW zfC>J(g3nK7D+3d0e2q7KZ1h)TfIqL{%VRbs%Vg2e)z67N2!bGe&j8YiJ5T3h&jDGL zfwL~l7SjZ6z{={Qxi$MZ(5|qFYkPa{zB%3Ak>^=| z1|rx1KAqbzp0QBW7z?f0AI7uFJHmL@%7E1vC@_vBo}|J2QzeNzF>p71LYoQZuept{ zD)Mf-jqX+k8hxS78anH1Z{w@>P4rVT@W=EKZG>S6acfuH>1nTgZ`q}Er>87pzE#%N z<+?8Ojr#)^+vpjX4`M(I$~q)#?=9@mPi3r+j&_WmfuKJFH(KPe$@ggyt5SZjkQ?1q z#(^Tr^|fVxQ+_zeKnupoz{rZZCO#ba|4}`KM(DtRYSdjUxVdyZ{2diBkPI_$P9%wC zy|p9S;)f$RFyQw963cJK)Hyb`HB?AoW*}v9@d|6bZ~i+5FmQ2s&P>_K{~WCW!$)jh zC-}dv31$>t8FWQ*e2zntMD;3dz6T&)ZvLD{}Kn)!nmm^+u10lS7NFKzQKvjkb57xlT{6$2PB z+lej$60mL3W`;^Guhk7<$f=9!0T^-$CCQGlRs=#SBQ57}#gN|DDTFMq8Vxf;%Azk5 zze)M$ngqjGXWoGSju^QA()~i3b)GpCqy9P#gBXzKY72#>3G!6P_3=_JpDne$y1?== z6}k^t)8BzMg_icu)I-K~)Axf_qa$?S2VV<9p{WDu^He0000< KMNUMnLSTX=im5CB literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/ref/AccBarPlot.html b/html/includes/jpgraph/docs/ref/AccBarPlot.html new file mode 100644 index 0000000000..3c43466eee --- /dev/null +++ b/html/includes/jpgraph/docs/ref/AccBarPlot.html @@ -0,0 +1,72 @@ +
    CLASS AccBarPlot EXTENDS BarPlot
    +(Defined in: jpgraph_bar.php : 642)
     AccBarPlot  BarPlot  
     AccBarPlot() 
    Max() 
    Min() 
    +
     
     

    Class usage and Overview
    Accumulated bar plot.
    +Used to create bars where the data series are stacked on top of each other. +

    +Features: +

      +
    1. Can be combined with Image maps for each series. +
    2. Values for each series can be displayed when the pointer is hovering over the corresponding part of the bar +
    3. Unlimited number of series +
    +

    +Examples: +

      +
    • [TBC] +

      +

    See also related classes:
    BarPlot, GroupBarPlot and AccLinePlot

     


    Class Methods

    +

     

     

    + +Construct a new accumulated bar graph

    + + + + +
    ArgumentDefaultDescription
    +$plots + + Array of bar plots
    + +

    Description
    Create a new accumulated bar plot based on the given array of ordinary bar plots. 
    +  
    See also
    BarPlot::BarPlot +

    Example

    +$b1 = new BarPlot($y1data);
    $b2 = new BarPlot($y2data);
    $accbar = new AccBarPlot(array($b1,$b2));

    +

    +

    +

     

     

    + +Return the maximum value of the bars

    +
    + +

    Description
    Return the maximum value of the bars 
    + +

    Example

    +list($xmin,$ymin) = $accbar->Max(); +
    +

    +

     

     

    + +Return minimum data values for the bars

    +
    + +

    Description
    Return minimum data values for the bars 
    + +

    Example

    +list($xmin,$ymin) = $accbar->Min(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/AccLinePlot.html b/html/includes/jpgraph/docs/ref/AccLinePlot.html new file mode 100644 index 0000000000..7674b1d575 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/AccLinePlot.html @@ -0,0 +1,90 @@ +


    CLASS AccLinePlot EXTENDS Plot
    +(Defined in: jpgraph_line.php : 421)
     AccLinePlot  Plot  
     AccLinePlot() 
    Max() 
    Min() 
    SetInterpolateMode() 
    +
     
     

    Class usage and Overview
    Accumulated bar plot.
    +Used to create a line plot where each individual data point is the sum of the individual series data points. +

    +Features: +

      +
    1. Unlimited number of series +
    +

      +

    See also related classes:
    AccBarPlot and LinePlot

     


    Class Methods

    +

     

     

    + +Constructor

    + + + + +
    ArgumentDefaultDescription
    +$plots + + Array of line plots to use
    + +

    Description
    Creates a new accumulated line plot from a number of line plots. 
    +  
    See also
    LinePlot::LinePlot +

    Example

    +$line1 = new LinePlot($datay1);
    $line2 = new LinePlot($datay2);
    $aline = array($line1,$line2);
    $acclineplot = new AccLinePlot($aline);
    +

    +

    +

     

     

    + +Return the max value of data points in plot.

    +
    + +

    Description
    Takes into account all series and returns the maximum Y and X values for all the data series. Used internally to determine the autoscaling. 
    +  
    See also
    Plot::Max +

    Example

    +list($xmax,$ymax) = $acclineplot->Max(); +
    +

    +

     

     

    + +Return the min value of all data points in plot.

    +
    + +

    Description
    Takes into account all series and returns the minimum Y and X value. Used internally to determine autoscaling. 
    +  
    See also
    BarPlot::Min and Plot::Min +

    Example

    +list($xmin,$ymin) = $acclineplot->Min()
    +

    +

    +

     

     

    + +Enable interpolate mode

    + + + + +
    ArgumentDefaultDescription
    +$aIntMode + + TRUE=Enable interpolation
    + +

    Description
    When plotting accumulated line plots which have NULL values as data (i.e. '-') they will distort the accumulated plot since they will in effect be interpretated as having value 0. This means that there will be a drop in the plot. The only way to avoid this is to calculate the intermediate value. + +This can be achieved by calculating a linear interpoaltion for the missing value(s). Calling this method will replace all '-' values with an interpolated value. + 
    + +

    Example

    +$accline->SetInterpolateMode() +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/AntiSpam.html b/html/includes/jpgraph/docs/ref/AntiSpam.html new file mode 100644 index 0000000000..ca48212ba3 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/AntiSpam.html @@ -0,0 +1,100 @@ +


    CLASS AntiSpam
    +(Defined in: jpgraph_antispam.php : 545)
     AntiSpam 
     AntiSpam() 
    Rand() 
    Set() 
    Stroke() 
    +
     

    Class usage and Overview
    This module is used to create AntiSpam challenges that can be used to prevent automatic signup by robots on WEB-pages.

      +


    Class Methods

    +

     

     

    + +Create a new ANtiSpam challenge image

    + + + + +
    ArgumentDefaultDescription
    +$aData + + +'' +Data to be displayed
    + +

    Description
    This method creates a new instance of the AntiSpam challenge. When the anti-spam imga eis created it is possible to directly use a supplied data string that should be displayed. + +The data can also be added afterwards with a call to Set() 
    +  
    See also
    AntiSpam::Set and AntiSpam::Rand +

    Example

    +$spam = new AntiSpam(); +
    +

    +

     

     

    + +Generate a random spam challenge string

    + + + + +
    ArgumentDefaultDescription
    +$aLen + + Sets the length of the generated string
    + +

    Description
    Instead of specifying the string manually that should be used as a challenge the string can be automatically generated. This is done witha call to the Rand() method.  
    + +

    Example

    +$antispam = new AntiSpam();
    $rval = $antispam->Rand();
    ...
    +

    +

    +

     

     

    + +Set the spam challenge string

    + + + + +
    ArgumentDefaultDescription
    +$aData + + Spam challenge
    + +

    Description
    This is an alternative way of specifying the AntiSpam string. This can also be specified in the initial creation of the ANtiSpam object ro be automatically generated with a call to the Rand() method 
    +  
    See also
    AntiSpam::Rand +

    Example

    +$antispam = new AntiSpam();
    ...
    $antispam->Set($mySpamVal);
    +

    +

    +

     

     

    + +Send the antispam image back to the browser

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +An optional file name
    + +

    Description
    This sends the antispam image back to the browser or to an optional file named as the first and only argument. 
    +  
    See also
    AntiSpam::AntiSpam and AntiSpam::Rand +

    Example

    +$antispam = new AntiSpam();
    $rval = $antispam->Rand();
    ...
    $antispam->Stroke()
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Axis.html b/html/includes/jpgraph/docs/ref/Axis.html new file mode 100644 index 0000000000..060d03d0e1 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Axis.html @@ -0,0 +1,881 @@ +


    CLASS Axis
    +(Defined in: jpgraph.php : 3483)
     Axis 
     Hide() 
    HideFirstLastLabel() 
    HideFirstTickLabel() 
    HideLabels() 
    HideLastTickLabel() 
    HideLine() 
    HideTicks() 
    HideZeroLabel() 
    SetColor() 
    SetFont() 
    SetLabelAlign() 
    SetLabelAngle() 
    SetLabelFormat() 
    SetLabelFormatCallback() 
    SetLabelFormatString() 
    SetLabelMargin() 
    SetLabelPos() 
    SetLabelSide() 
    SetMajTickPositions() 
    SetPos() 
    SetPosAbsDelta() 
    SetTextLabelInterval() 
    SetTextTickInterval() 
    SetTextTicks() 
    SetTickDirection() 
    SetTickLabelMargin() 
    SetTickLabels() 
    SetTickPositions() 
    SetTickSide() 
    SetTitle() 
    SetTitleMargin() 
    SetTitleSide() 
    SetWeight() 
    +
     

    Class usage and Overview
    The Axis class represents either the X or Y axis in a graph. This class is noramlly accessed through the instance variables graph->xaxis, $graph->yaxis, or $graph->y2axis + +Public properties: + + + + + + + +
    Name Type Description
    title Text Axis title text
    scale LinearScale/LogScale Scale used for axis

      +

    See also related classes:
    LinearScale, LogScale and Text

     


    Class Methods

    +

     

     

    + +Hide the axis

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +Flag.
    + +

    Description
    This method is used to hide the axis. 
    + +

    Example

    +$graph->xaxis->Hide(); // Hide xaxis
    $graph->yaxis->Hide(); // Hide y-axis
    +

    +

    +

     

     

    + +Hide the first and last label on the scale.

    +
    + +

    Description
    Hide the first and last label on the scale. Usefull whe you are using Axis Type of AXSTYLE_BOXIN or AXSTYLE_BOXOUT to avoid the labels to owerwrite a box around the plot. 
    +  
    See also
    Axis::HideFirstTickLabel and Axis::HideLastTickLabel +

    Example

    +//...
    $graph->SetAxisStyle(AXSTYLE_BOXOUT);
    $graph->SetBox();
    $graph->xaxis->HideFirstLastLabel();
    $graph->yaxis->HideFirstLastLabel();
    //...
    +

    +

    +

     

     

    + +Hide the first label

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +false +Flag.
    + +

    Description
    Calling this method will hide the first label on the axis. This is usefull when the y axis have negative values and a value on the x-axis would be partially obscured by the values on the y-axis. +This gets automatically called in this case. +

    +This is probably of less use for the end user of the library. 
    + +

    Example

    +$graph->xaxis->HideFirstTicklabel() +
    +

    +

     

     

    + +Hide all labels on the axis

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +true=Hide all labels
    + +

    Description
    Hide all labels on the axis but keep tick marks and axis line. 
    +  
    See also
    Axis::Hide, Axis::HideLine and Axis::HideTicks +

    Example

    +$graph->xaxis->HideLabels() +
    +

    +

     

     

    + +Hide the last tick label on the axis.

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +false +Flag
    + +

    Description
    The mirror of HideFirstTickLabel() 
    +  
    See also
    Axis::HideFirstTickLabel and Axis::HideFirstLastLabel +

    Example

    +$graph->xaxis->HideLastTickLabel(); +
    +

    +

     

     

    + +// Hide the actual axis-line, but still print the labels

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide axis line
    + +

    Description
    Hide the line of the axis. This only hides the axis-line but will keep the tick marks and labels. If you want to hide the tick marks you should call HideTicks(). To hide the axis completely, line, ticks and labels use Hide(). 
    +  
    See also
    Axis::HideTicks and Axis::Hide +

    Example

    +// Hide line and tick marks
    $graph->yaxis->HideLine();
    $graph->yaxis->HideTicks();
    +

    +

    +

     

     

    + +Hide minor or major tick marks.

    + + + + + + +
    ArgumentDefaultDescription
    +$aHideMinor + + +true +True = Hide minor tick marks
    +$aHideMajor + + +true +True = Hide major tick marks
    + +

    Description
    Hide major or minor tick makrs on the axis. 
    + +

    Example

    +// Only display major tick marks
    $graph->yaxis->HideTicks(true,false);
    +

    +

    +

     

     

    + +Hide zero label

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +Flag.
    + +

    Description
    Hide the zero label. Usefull if the axis cross at zero and the label would owerwrite the other axis scale. + 
    +  
    See also
    Axis::HideFirstTickLabel +

    Example

    +$graph->yaxis->HideZeroLabel();
    +

    +

    +

     

     

    + +Specify color of Axis and it's labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color for axis
    +$aLabelColor + + +false +Color for labels on axis
    + +

    Description
    Specifies the color of the axis line as well as the labels on the axis. If the label color is not specified it will be the same as the axis color. 
    + +

    Example

    +$graph->xaxis->SetColor('blue');
    $graph->yaxis->SetColor('blue','black');
    +

    +

    +

     

     

    + +Set the font for labels on the axis

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + Font family
    +$aStyle + + +FS_NORMAL +Font style
    +$aSize + + +10 +Font size
    + +

    Description
    Specify font for labels on axis. Please note that if you need labels to be rotated an angle other than 0 or 90 you must use TTF fonts and not the builtin fonts (i.e. FF_FONT1, FF_FONT2, FF_FONT3) + + 
    +  
    See also
    Axis::SetLabelPos and Axis::SetLabelAngle +

    Example

    +$graph->xaxis->SetFont(FF_ARIAL); +
    +

    +

     

     

    + +Specify horizontal and vertical alignment for labels

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal alignment
    +$aVAlign + + +"top" +Vertical alignment
    +$aParagraphAlign + + +'left' +paragraph align for multi-line texts
    + +

    Description
    Specifies the horizontal and vertical alignment for the labels on the axis. The alignment specifies how the labels is adjusted relative to the tickmark. +

    +Note that this is handled automatically but on some occasion there is a genuine need to override the automtic values. For example if the graph is rotated it might be necessary to adjust the alignment to get a visual acceptable label alignment. +

    +Possible horizontal alignment are: 'left', 'center', 'right'
    +Possible vertical alignment are: 'top', 'center', 'bottom'
    +

    +See horizbarex1.php, horizbarex2.php for real life examples. + 
    + +

    Example

    +$graph->xaxis->SetLabelAlign('right','center'); +
    +

    +

     

     

    + +Specify the angle for the tick labels

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + Angle in degrees
    + +

    Description
    Specify the rotation angle for the labels on the axis. +

    +Note:
    +If you want to use any angles other than 0 and 90 degrees you must make sure that the labels are using TTF fonts. Internal fonts only support vertical and horizontal angles. 
    +  

    See also
    Axis::SetFont +

    Example

    +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,11);
    $graph->xaxis->SetLabelAngle(45); // 45 degrees angle
    +

    +

    +

     

     

    + +Specify printf() format string for labels

    + + + + +
    ArgumentDefaultDescription
    +$aFormStr + + Format string
    + +

    Description
    Specify a printf() format string for the axis labels. if you need more advanced control of the formatting you can install a label format callbacl routine with Axis::SetLabelFormatCallback() 
    +  
    See also
    Axis::SetLabelFormatCallback +

    Example

    +$graph->xaxis->SetLabelFormat('%0.1f%%'); +
    +

    +

     

     

    + +Specify callback function for labels on axis

    + + + + +
    ArgumentDefaultDescription
    +$aFuncName + + Callback function
    + +

    Description
    This can be used when more advance formatting of the axis labels are required. For example this could be used to format numbers with space or commas betwen the '1000. +

    +The callback routine is called with one argument, the current number to be displayed and should return the number to be displayed. +

    +For simple formatting use SetlabelFormat() to specify a printf() style formatting string. +

    +The callback function specified should can either be a +global function or a class method, for example + +

    +$SomeClass = new SomeClass(...); 
    +... 
    +$g->SetXLabelFormatCallback(array($SomeClass,'xLabelCallback'));
    +
    +

    +There is, however, one caution. Any $this data used within LabelFormatCallbackInDerivedClass MUST BE SET BEFORE SetLabelFormatCallback is invoked! it appears that $this is bound/copied when SetLabelFormatCallback is invoked. Only $this data defined at that time is available within the callback function! Likewise, modifications to $this data AFTER SetLabelFormatCallback have no effect since the $this object used by the callback function has already been bound/copied. +

    +The same issues obtain when the callback function is in a seperate class! +

    +For a full example see barscalecallbackex1.php + 
    +  

    See also
    Axis::SetLabelFormat +

    Example

    +function yLabelFormat($aLabel) {
        // Format '1000 english style
        return number_format($aLabel)
        // Format '1000 french style
        // return number_format($aLabel, 2, ',', ' ');
    }

    $graph->yaxis->SetLabelFormatCallback('yLabelFormat');

    +

    +

    +

     

     

    + +Specify a printf()-style format string for labels.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormStr + + Format string
    +$aDate + + +false +No description available
    + +

    Description
    Synonym for SetLabelFormat(). +Will be deprecated in a future release. Use SetLabelFormat() instead. 
    +  
    See also
    Axis::SetLabelFormat +

    Example

    +$graph->xaxis->SetLabelFormatString('%0.1f%%'); +
    +

    +

     

     

    + +Specify margin between labels and tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify margin between labels and tick marks. 
    + +

    Example

    +$graph->xaxis->SetLabelMargin(15);
    +

    +

    +

     

     

    + +Specify what side of the axis labels should be on.

    + + + + +
    ArgumentDefaultDescription
    +$aSidePos + + Position
    + +

    Description
    Specify which side the labels should go on. For horizontal axis valid arguments are SIDE_UP, SIDE_DOWN and for vertical axis it is SIDE_LEFT, SIDE_RIGHT. +

    +See topaxisex1.php for an example when this is usefull. +

    +Note: Synonym to SetLabelSide() 
    +  

    See also
    Axis::SetTickSide and Axis::SetLabelSide +

    Example

    +$graph->xaxis->SetLabelPos(SIDE_TOP); +
    +

    +

     

     

    + +Specify what side of the axis labels should be on.

    + + + + +
    ArgumentDefaultDescription
    +$aSidePos + + Which side of the axis the labels should be on
    + +

    Description
    Specify which side the labels should go on. For horizontal axis valid arguments are SIDE_UP, SIDE_DOWN and for vertical axis it is SIDE_LEFT, SIDE_RIGHT. +

    +See topaxisex1.php for an example when this is usefull. +

    +Note: Synonym to SetLabelPos() + 
    +  

    See also
    Axis::SetLabelPos +

    Example

    +$graph->xaxis->SetLabelSide(SIDE_UP); +
    +

    +

     

     

    + +// Manually specify major tick positions and optional labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + No description available
    +$aLabels + + +NULL +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Position for axis line on the "other" scale

    + + + + +
    ArgumentDefaultDescription
    +$aPosOnOtherScale + + Position in world-coordinate
    + +

    Description
    Specifies the position of the axis on the other axis. This can be specified as either a numeric value (which gives the absolute position on the other scale). OIt can also be specified as a string value as either 'min' or 'max' which sould position the axis either at the beginning or the end of the opposite axis scale. +

    +See topaxisex1.php for a real life example. 
    + +

    Example

    +$graph->xaxis->SetPos('max'); // Locate x-axis at the top +
    +

    +

     

     

    + +Position the multiple Y-axis

    + + + + +
    ArgumentDefaultDescription
    +$aDelta + + Delta in pixels
    + +

    Description
    Set the position of the Y-axis to be X-pixels delta to the right of the max X-position (used to position the multiple Y-axis) 
    +

    +

     

     

    + +Specify interval for for test labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aStep + + Intervall
    +$aStart + + +0 +No description available
    + +

    Description
    Specify that every $step tick mark should have a label + 
    +  
    See also
    Axis::SetTickLabels +

    Example

    +// Only draw labels on every 2nd tick mark
    $graph->xaxis->SetTextLabelInterval(2);
    +

    +

    +

     

     

    + +Specify what ticks should be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$aStep + + Intervall between ticks
    +$aStart + + +0 +Start tick
    + +

    Description
    Specify that every $step of the ticks should be displayed starting at $start. + 
    +  
    See also
    Axis::SetTextLabelInterval and Axis::SetTextTicks +

    Example

    +$graph->SetTextTickInterval(1,2); +
    +

    +

     

     

    + +Specify intervall for ticks on a text scale

    + + + + + + +
    ArgumentDefaultDescription
    +$step + + Intervall
    +$start + + +0 +Start
    + +

    Description
    DEPRECATED FUNCTION: USE SetTextTickInterval() INSTEAD 
    +  
    See also
    Axis::SetTextTickInterval +

    Example

    +NA +
    +

    +

     

     

    + +Specify what side of the axis ticks should be at

    + + + + +
    ArgumentDefaultDescription
    +$aDir + + Direction
    + +

    Description
    Specify which side of the axis the tick marks should be on. Valid positions for a horizontal axis are SIDE_TOP, SIDE_BOTTOM and for verticla axis SIDE_LEFT and SIDE_RIGHT. +

    +This is a shortform for accessing the tick method directly via the scale in the axis. +

    +See topaxisex1.php for real life example. 
    +  

    See also
    Axis::SetLabelSide and Ticks::SetDirection +

    Example

    +$graph->xaxis->SetTickDirection(SIDE_TOP); +
    +

    +

     

     

    + +How far from the axis should the labels be drawn

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify the margin (in pixels) between the axis and the label 
    + +

    Example

    +$graph->xaxis->SetTicklabelmargin(50); +
    +

    +

     

     

    + +Specify text labels for the ticks. One label for each data point

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabelArray + + Array with labels
    +$aLabelColorArray + + +null +Individual colors for each label
    + +

    Description
    Specify the labels for a text axis. This is used to manually set labels for the x-axis when a text scale has been specified. +

    +If fewer labels than data points are specified then the missing labels will be set to the data points ordinal numbers. +

    +The color argment is an array that can be used to specify individual colors for each of the labels. If fewer colors than labels are specified then the colors will wrap around. + + 
    +  

    See also
    Axis::SetTextLabelInterval and Axis::SetTickLabelMargin +

    Example

    +// Set the x-axel to the month of the years using the
    // gloablly available $gDateLocale

    $a = $gDateLocale->GetShortMonth();
    $graph->xaxis->SetTickLabels($a);
    $graph->xaxis->SetFont(FF_FONT2);
    +

    +

    +

     

     

    + +// Manually specify the major and (optional) minor tick position and labels

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + No description available
    +$aMinPos + + +NULL +No description available
    +$aLabels + + +NULL +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify what side of the axis the ticks should be at

    + + + + +
    ArgumentDefaultDescription
    +$aDir + + Specify side
    + +

    Description
    Specify which side of the axis the tick marks should be on. Valid positions for a horizontal axis are SIDE_TOP, SIDE_BOTTOM and for verticla axis SIDE_LEFT and SIDE_RIGHT. +

    +This is a shortform for accessing the tick method directly via the scale in the axis. +

    +See topaxisex1.php for real life example. + 
    +  

    See also
    Axis::SetTickDirection +

    Example

    +$graph->xaxis->SetTickSide(SIDE_TOP); +
    +

    +

     

     

    + +Title for axis

    + + + + + + +
    ArgumentDefaultDescription
    +$aTitle + + Title string
    +$aAdjustAlign + + +"high" +Alignment of title along the axis
    + +

    Description
    Set the title for the axis. You can specify the alignment as being either "high", "middle" and "low". To adjust the titles font and color you have to access the label instance variable. For example, $graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD) 
    + +

    Example

    +$graph->xaxis->SetTitle('Values for 2002','middle');
    +

    +

    +

     

     

    + +Specify distance from the axis

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify the distance between the axis and the title. 
    +  
    See also
    Axis::SetTitle +

    Example

    +$graph->SetTitlemargin(50); +
    +

    +

     

     

    + +Specify what side of the axis the title should be at

    + + + + +
    ArgumentDefaultDescription
    +$aSideOfAxis + + Side
    + +

    Description
    For horizontal axis the side can be either SIDE_TOP or SIDE_BOTTOM and for vertical axis the position can be either SIDE_LEF or SIDE_RIGHT. +

    +By default x-axis have the title below the axis and y-axis have it on the left and y2 on the right. +

    +See topaxisex1.php for real life example 
    +  

    See also
    Axis::SetLabelSide and Axis::SetTickSide +

    Example

    +$graph->xaxis->SetTitleSide(SIDE_TOP);
    +

    +

    +

     

     

    + +Weight of axis

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Weight in pixels
    + +

    Description
    Specify the thickness of the axis in pixels 
    + +

    Example

    +$graph->SetWeight(3); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/BarPlot.html b/html/includes/jpgraph/docs/ref/BarPlot.html new file mode 100644 index 0000000000..281fcfb9e1 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/BarPlot.html @@ -0,0 +1,354 @@ +


    CLASS BarPlot EXTENDS Plot
    +(Defined in: jpgraph_bar.php : 30)
     BarPlot  Plot  
     BarPlot() 
    SetAbsWidth() 
    SetAlign() 
    SetFillColor() 
    SetFillGradient() 
    SetNoFill() 
    SetPattern() 
    SetShadow() 
    SetValuePos() 
    SetWidth() 
    SetYBase() 
    SetYMin() 
    +
     
     

    Class usage and Overview
    Concrete class which implements the standard vertical bar plot functionality.

    +To show horizontal plots you can rotate the graph 90 degrees by $graph->Angle(90); +

      +

    See also related classes:
    AccBarPlot and GroupBarPlot

     


    Class Methods

    +

     

     

    + +Create a new bar plot

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Data serie
    +$datax + + +false +X-positions
    + +

    Description
    Create a new bar plot 
    + +

    Example

    +$bar = new BarPlot($ydata);
    +

    +

    +

     

     

    + +Specify width in absolute pixels.

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + Width in pixels
    + +

    Description
    Specify width in absolute pixels. If specified this overrides any calls to SetWidth() 
    +  
    See also
    BarPlot::SetWidth +

    Example

    +$barplot->SetAbsWidth(20);
    +

    +

    +

     

     

    + +Set the alignment between the major tick marks doe the bars.

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + String to specify alignment
    + +

    Description
    Bars can be aligned when using a text scale. Valid arguments for align are 'left', 'center' and 'right'. +

    +Default is to center the bars. 
    + +

    Example

    +$graph->SetScale("textlin");

    // ...

    $barplot = new BarPlot($ydata,$xdata);
    $barplot->SetAlign("center");

    // ...
    +

    +

    +

     

     

    + +Specify fill color for bars.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Set fill color for the bars. The color for the frame around the bar is specified with BarPlot::SetColor() method. + +By specifying an array as argument you can assign individual colors to each of the bars. If there are more bars than colors the colros will wrap around. + 
    +  
    See also
    Plot::SetColor +

    Example

    +// All bars will have the same color
    $barplot->SetFillColor('#E234A9');

    // The bars will haev individual colors
    $barplot->SetFillColor(array('red','blue','green'));
    +

    +

    +

     

     

    + +Specify a gradient fill for the bars.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFromColor + + No description available
    +$aToColor + + +null +No description available
    +$aStyle + + +null +No description available
    + +

    Description
    Gradient fill provides a smooth transition from the 'start' color to the 'end' color. The type of gradient fill can be + +
      +
    • GRAD_VER, Vertical gradient +
    • GRAD_HOR, Horizontal gradient +
    • GRAD_MIDHOR, From the center and out, horizontal +
    • GRAD_MIDVER, From the center and out, vertical +
    • GRAD_WIDE_MIDVER, From the center and out, vertical. Wide mid section. +
    • GRAD_WIDE_MIDHOR, From the center and out, horizontal. Wide mid section. +
    • GRAD_CENTER, From the center and beaming out +
    • GRAD_LEFT_REFLECTION, Simulates a reflection on the left side +
    • GRAD_RIGHT_REFLECTION, Simulates a reflection on the right side +
    • GRAD_RAISED_PANEL, Raised panel with shadow +
    + +Since gradient fills make use of many colors and bitmapped images which doesn't use truecolor is limited to 256 colors you might find yourself out of colors if using to many different gadient fills in your graph. +

    +You should also be observant that gradient fills makes use of more CPU time than solid fills. + 
    +  

    See also
    Graph::StrokeBackgroundGrad +

    Example

    +$barplot->SetFillgradient('orange','darkred',GRAD_VER);
    +

    +

    +

     

     

    + +Dont's paint the interior of the bars with any color.

    +
    + +

    Description
    Bar plots are filled by default. Calling this method disable the fill of barplots. + +This is usefull when you have a background in the image that you want to be shown underneth the bars. 
    +  
    See also
    BarPlot::SetFillColor +

    Example

    +$barplot->SetNoFill();
    +

    +

    +

     

     

    + +Add one of the line patterns to the bar

    + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + Pattern
    +$aColor + + +'black' +Color of pattern
    + +

    Description
    Add one of the line patterns as fill effect to the bar. Available patterns are: +
      +
    1. 'PATTERN_DIAG1' +
    2. 'PATTERN_DIAG2' +
    3. 'PATTERN_DIAG3' +
    4. 'PATTERN_DIAG4' +
    5. 'PATTERN_CROSS1' +
    6. 'PATTERN_CROSS2' +
    7. 'PATTERN_CROSS3' +
    8. 'PATTERN_CROSS4' +
    9. 'PATTERN_STRIPE1' +
    10. 'PATTERN_STRIPE2' +

    + +

    Example

    +$barplot->SetPattern('PATTERN_CROSS2');
    +

    +

    +

     

     

    + +Set a drop shadow for the bar (or rather an "up-right" shadow)

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$color + + +"black" +Shadow color
    +$hsize + + +3 +Horizontal size in pixels
    +$vsize + + +3 +Vertical size in pixels
    +$show + + +true +TRUE=Display shadow
    + +

    Description
    Set a drop shadow for the bar (or rather an "up-right" shadow) 
    + +

    Example

    +$barplot->SetShadow();
    +

    +

    +

     

     

    + +Specify position for displayed values on bars

    + + + + +
    ArgumentDefaultDescription
    +$aPos + + Postision
    + +

    Description
    Specify position for the values on the bar. Teh position can either be +
      +
    • 'top', The default value +
    • 'center' +
    • 'bottom' +

    + +

    Example

    +// Put the values in the middle of the bars
    $barplot->SetValuePos('center');
    +

    +

    +

     

     

    + +Specify width as fractions of the major step size

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + No description available
    + +

    Description
    Specify width as fractions of the major step size when the scale used is a text scale (which is the normal scale to use for bars). + +If the X-axis scale is a linear scale (i.e. lin, int or date) then the width must be specified in absolute pixels. 
    +  
    See also
    BarPlot::SetAbsWidth +

    Example

    +// Specify fractions for a text scale
    $barplot->SetWidth(0.4);

    // Specify absolute width 25 pixels
    $barplot->SetWidth(25);
    +

    +

    +

     

     

    + +Specify the base value for the bars

    + + + + +
    ArgumentDefaultDescription
    +$aYStartValue + + Strta Y-value for bars.
    + +

    Description
    Specify the start plot for bars, (minimum Y-value). By default the base uses the value 0 as base. 
    + +

    Example

    +$barplot->SetYBase(100);
    +

    +

    +

     

     

    + +DEPRECATED use SetYBase instead

    + + + + +
    ArgumentDefaultDescription
    +$aYStartValue + + Y-Value for base of bars
    + +

    Description
    DEPRECATED use SetYBase() instead 
    + +

    Example

    +DEPRECATED use SetYBase() instead +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Bezier.html b/html/includes/jpgraph/docs/ref/Bezier.html new file mode 100644 index 0000000000..77c56e3434 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Bezier.html @@ -0,0 +1,91 @@ +


    CLASS Bezier
    +(Defined in: jpgraph_regstat.php : 112)
     Bezier 
     Bezier() 
    Get() 
    +
     

    Class usage and Overview
    Utility class to help construct an interpolated data points given an arbitrary number of data points. +

    +This class doesn't draw any graphs by itself it is only used to generate a new set of data points representing the smooth line from the input which are the control lines for a bezier interpolated curve. +

    +The principle of using this class is that you first create an instance of this class and giving it the X,Y values for your control points. +

    +You can then get back an interpolated smooth dataset by calling the Get() method. This method takeas as argument how many data points you want the interpolated graph to have. +

    +In order to use this method the file jpgraph_regstat.php must be included. +

    +Technical note: The control points for a bezier curve does not necessary lie on the curve. Using the alternative method of spline interpolation guarantees that the specified control point lie on the generated curve. +

    +Technical note 2: An alternmative Bezier curve is also availabe in the Canvas tools (jpgraph_canvtools.php). The difference is that that method will not return any data points it will directly draw an interpolate bezier curve on the canvas. +

      +

    See also related classes:
    Spline and Shape

     


    Class Methods

    +

     

     

    + +Create a new bezier object

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$datax + + X-coordinates for control points
    +$datay + + Y-coordinates for control points
    +$attraction_factor + + Attraction factor
    + + + No description available
    + + + +1 +No description available
    + +

    Description
    Creates a new Bezier interpoaltion object. The arguments specifies the X, and Y coordinate sof the control points to be used. + +The attraction factor is an integer >1 and determines how much "gracity" each control point should have. A higher value makes the resulting curve bend much more sharper against the control points. The default value is 1. 
    + +

    Example

    +// Control points
    $xdata = array(1,3,12,15);
    $ydata = array(5,15,2,19);

    // Get the interpolated values by creating
    // a new bezier object.
    $bez = new Bezier($xdata,$ydata);

    // For the new data set we want 50 points to
    // get a smooth curve.
    list($newx,$newy) = $bez->Get(50);
    +

    +

    +

     

     

    + +Return two arrays of X and Y coordinates that represents the curve

    + + + + +
    ArgumentDefaultDescription
    +$steps + + Number of data points
    + +

    Description
    Return a data set representing the interpolated smooth curve passing through all the specified control points. 
    +
    +
    Returns
    array($datax,$datay)
    + +

    Example

    +// Control points for bezier curve
    $xdata = array(1,3,12,15);
    $ydata = array(5,15,2,19);

    // Get the interpolated values by creating
    // a new Spline object.
    $bez = new Bezier($xdata,$ydata);

    // For the new data set we want 50 points to
    // get a smooth curve.
    list($newx,$newy) = $bez->Get(50);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/BoxPlot.html b/html/includes/jpgraph/docs/ref/BoxPlot.html new file mode 100644 index 0000000000..f1bf939f22 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/BoxPlot.html @@ -0,0 +1,68 @@ +


    CLASS BoxPlot EXTENDS StockPlot
    +(Defined in: jpgraph_stock.php : 158)
     BoxPlot  StockPlot  
     BoxPlot() 
    SetMedianColor() 
    +
     
     

    Class usage and Overview
    Create a box plot. This is the same as a stock plot but with the added feature of a median line. For each X-value 5 Y values must be specified: +(open,close,min,max,median) +

      +

    See also related classes:
    StockPlot

     


    Class Methods

    +

     

     

    + +Create a new Box plot

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + Y-tuples
    +$datax + + +false +If specified, X-positions
    + +

    Description
    Create a new Box plot. Each data point in a box plotconsists of 5 values; (open,close,min,max,median) + + 
    +  
    See also
    StockPlot::StockPlot +

    Example

    +$bplot = new BoxPlot($ydata); +
    +

    +

     

     

    + +Specify color for median line

    + + + + + + +
    ArgumentDefaultDescription
    +$aPos + + Positive color
    +$aNeg + + Negative color
    + +

    Description
    Specify color for median line.  
    + +

    Example

    +$bplot->SetMedianColor('black','white'); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/CanvasGraph.html b/html/includes/jpgraph/docs/ref/CanvasGraph.html new file mode 100644 index 0000000000..42b95dfac0 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/CanvasGraph.html @@ -0,0 +1,103 @@ +


    CLASS CanvasGraph EXTENDS Graph
    +(Defined in: jpgraph_canvas.php : 20)
     CanvasGraph  Graph  
     CanvasGraph() 
    InitFrame() 
    Stroke() 
    +
     
     

    Class usage and Overview
    If you for some reason just want plain canvas to draw on using the direct drawing method you can create a new canvas with this class. +

    +The canvas is meant to be manipulated through the Image class which can be found as an instance variable ($graph->img) in the canvas class. +

    +Please remeber taht using the drawing methods in the Image class assumes screen (pixels) coordinates. +

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

     

    + +Construct a new Cnavas graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + +300 +Width of graph
    +$aHeight + + +200 +Height of graph
    +$aCachedName + + +"" +Cache file name
    +$timeout + + +0 +Cache timeout
    +$inline + + +1 +Inline or not
    + +

    Description
    See Graph::Graph() for description, this method is identical. 
    +  
    See also
    Graph::Graph +

    Example

    +// Create a new canvas and draw a line from top left to
    // bottom right
    $canvas = new CanvasGraph(300,200);
    $canvas->img->SetColor('black*);
    $canvas->img->Line(0,0,300,200);
    $canvas->Stroke();
    +

    +

    +

     

     

    + +Strokes plot area and margin

    +
    + +

    Description
    Calling this method will fill the margin (with the margin color) and fill the plot area with the plot color. You should call this method before stroking anything else to the canvas as otherwise what you have stroken will be overwritten. 
    + +

    Example

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Draw a text box in the middle
    $txt="This\nis\na TEXT!!!";
    $t = new Text($txt,200,10);
    $t->SetFont(FF_ARIAL,FS_BOLD,40);

    // Stroke the text
    $t->Stroke($g->img);

    // Stroke the graph
    $g->Stroke();
    +

    +

    +

     

     

    + +Stroke graph to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +Filename to stroke to
    + +

    Description
    Stroke a file to browser or file. See Graph::Stroke() for more details. 
    +  
    See also
    Graph::Stroke +

    Example

    +$canvas->Stroke(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/CanvasRectangleText.html b/html/includes/jpgraph/docs/ref/CanvasRectangleText.html new file mode 100644 index 0000000000..87da93e116 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/CanvasRectangleText.html @@ -0,0 +1,432 @@ +


    CLASS CanvasRectangleText
    +(Defined in: jpgraph_canvtools.php : 375)
     CanvasRectangleText 
     CanvasRectangleText() 
    ParagraphAlign() 
    Pos() 
    Set() 
    SetAutoMargin() 
    SetColor() 
    SetCornerRadius() 
    SetFillColor() 
    SetFont() 
    SetFontColor() 
    SetPos() 
    SetShadow() 
    SetTxt() 
    Stroke() 
    +
     

    Class usage and Overview
    YOu can use this class to convieniently draw a text on canvas. The text may have multiple lines wher each line is separated by a "\n" (newline) character. +

    +The text may also be enclosed in a rounded (possibly filled) rectangle. +

      +

    See also related classes:
    CanvasGraph and CanvasScale

     


    Class Methods

    +

     

     

    + +Draws a text paragraph inside a rounded, possibly filled, rectangle

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + +'' +Text
    +$xl + + +0 +Top left X
    +$yt + + +0 +Top left Y
    +$w + + +0 +Width
    +$h + + +0 +Height
    + +

    Description
    Draws a text paragraph inside a rounded, possible filled, rectangle. 
    + +

    Example

    +
    $t = new CanvasRectangleText();
    $t->SetFillColor('lightgreen');
    $t->SetFontColor('navy');
    $t->SetFont(FF_ARIAL,FS_NORMAL,16);
    $t->Set("\n\n\n\n\n\n\n\n\n\n\nTTF Fonts",0.5,19,26,32);
    $t->Stroke($g->img,$scale);
    +

    +

    +

     

     

    + +Specify paragraph alignment for the text

    + + + + +
    ArgumentDefaultDescription
    +$aParaAlign + + Alignment
    + +

    Description
    Specify paragraph alignment for the text. Alignments can be: + +
      +
    • "left" +
    • "center" +
    • "right" +
     
    + +

    Example

    +
    $g = new CanvasGraph(550,450);
    $scale = new CanvasScale($g);
    $scale->Set(0,27,0,53);
    //
    $t = new CanvasRectangleText();
    $t->SetFillColor('lightgreen');
    $t->SetFontColor('navy');
    $t->SetFont(FF_ARIAL,FS_NORMAL,16);
    $t->ParagraphAlign('center');
    $t->Set("First line\nSecond line",0.5,19,26,32);
    $t->Stroke($g->img,$scale);
    +

    +

    +

     

     

    + +Specify position for text

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xl + + +0 +Top left X
    +$yt + + +0 +Top left Y
    +$w + + +0 +Width
    +$h + + +0 +Height
    + +

    Description
    Set position for text. All coordinates will be translaed according to the current scale used. + 
    +

    +

     

     

    + +Specify the text and position

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + Text
    +$xl + + Top left X
    +$yt + + Top left Y
    +$w + + +0 +Width
    +$h + + +0 +Height
    + +

    Description
    Specify the text and position. All coordinates will be translated using the specified scale when stroked. 
    + +

    Example

    +$t->SetShadow('');
    $t->SetFont(FF_ARIAL,FS_BOLD,18);
    $t->Set('Family',1,1,8);
    $t->Stroke($g->img,$scale);
    +

    +

    +

     

     

    + +Specify auto margin when no specific size is specified

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify auto margin when no specific size is specified. This margin is used to add extra space around the text and the border around the text. 
    +

    +

     

     

    + +Set border color for rectangle

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Border color
    + +

    Description
    Set border color for rectangle 
    +  
    See also
    CanvasRectangleText::SetFontColor and CanvasRectangleText::SetFillColor +

    Example

    +$t->SetColor('navy'); +
    +

    +

     

     

    + +Set radius for corners

    + + + + +
    ArgumentDefaultDescription
    +$aRad + + +5 +Radius in pixels
    + +

    Description
    Specify the radius for the rounded corners. Specifying the value as 0 will give normal square corners. + + 
    + +

    Example

    +$t->SetCornerRadius(15); +
    +

    +

     

     

    + +Specify fill color for rectangle

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + Color
    + +

    Description
    Specify fill color for rectangle 
    + +

    Example

    +$t->SetFillColor('#12A73C');

    +

    +

    +

     

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$FontFam + + Font family
    +$aFontStyle + + Font style
    +$aFontSize + + +12 +Font size
    + +

    Description
    Specify font 
    + +

    Example

    +$t->SetFont(FF_ARIAL,FS_BOLD,24); +
    +

    +

     

     

    + +Specify text (font) color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Set color for text. Use SetColor() to specify border colro and SetFillColor() to set fill color. 
    +  
    See also
    CanvasRectangleText::SetColor and CanvasRectangleText::SetFillColor +

    Example

    +$t->SetFontCOlor('black') +
    +

    +

     

     

    + +Specify position

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xl + + +0 +Top left X
    +$yt + + +0 +Top left Y
    +$w + + +0 +Width
    +$h + + +0 +Height
    + +

    Description
    Specify position. All coordinates will be transalted with the specified scale when stroked. 
    +

    +

     

     

    + +Add a drop shadow

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + +'gray' +Color of shadow
    +$aWidth + + +3 +Width of shadow
    + +

    Description
    Add a drop shadow to the rounded reactangle surranding the text 
    + +

    Example

    +$t->SetShadow();  // Use default values
    +

    +

    +

     

     

    + +Specify text string

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + Textt
    + +

    Description
    Set text string to be displayed. The text string may have multiple lines separated by a newline character "\n" 
    + +

    Example

    +$t->Set("This is a text!");
    +

    +

    +

     

     

    + +Stroke text to canvas

    + + + + + + +
    ArgumentDefaultDescription
    +$aImg + + Image context
    +$scale + + Scale
    + +

    Description
    Stroke text to canvas 
    +  
    See also
    CanvasScale::CanvasScale +

    Example

    +$t->Stroke($graph->img,$scale);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/CanvasScale.html b/html/includes/jpgraph/docs/ref/CanvasScale.html new file mode 100644 index 0000000000..0c6493db81 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/CanvasScale.html @@ -0,0 +1,161 @@ +


    CLASS CanvasScale
    +(Defined in: jpgraph_canvtools.php : 24)
     CanvasScale 
     CanvasScale() 
    Set() 
    Translate() 
    TranslateX() 
    TranslateY() 
    +
     

    Class usage and Overview
    This class defines a scale which is meant to be used with canvas graphs to make it possibles to pecify a more convinient scale compared to absoilute pixels coordinates. +
    +This will also let you scale the canvas without any coordinate changes.

      +


    Class Methods

    +

     

     

    + +Define a scale for canvas graphs

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +&$graph + + Canvas graph
    +$xmin + + +0 +Min X-value for scale
    +$xmax + + +10 +Max X-value for scale
    +$ymin + + +0 +Min Y-value for scale
    +$ymax + + +10 +Max Y-value for scale
    + +

    Description
    Define a scale for canvas graphs. Note the scale values is optionally in this call. The may be later set witha call to the Set() method. 
    +  
    See also
    CanvasScale::Set

    +

     

     

    + +Specify scale to use

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xmin + + +0 +Min X value
    +$xmax + + +10 +Max X-value
    +$ymin + + +0 +Min Y-value
    +$ymax + + +10 +Max Y-value
    + +

    Description
    SPecify min/max values for scale. 
    + +

    Example

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Create a new scale
    $scale = new CanvasScale($g);
    $scale->Set(0,$xmax,0,$ymax);
    +

    +

    +

     

     

    + +Translate a point to absolute screen coordinates

    + + + + + + +
    ArgumentDefaultDescription
    +$x + + X-value
    +$y + + Y-value
    + +

    Description
    Translate a point to absolute screen coordinates 
    +  
    See also
    CanvasScale::TranslateX and CanvasScale::TranslateY +

    Example

    +list($xt,$yt) = $scale->Translate($x,$y);
    $graph->img->Point($xt,$yt);
    +

    +

    +

     

     

    + +Translate X-coordinate

    + + + + +
    ArgumentDefaultDescription
    +$x + + X-value
    + +

    Description
    Translate X-value into absolute screen coordinates 
    +  
    See also
    CanvasScale::Translate

    +

     

     

    + +Translate Y-value to absolute screen coordinates

    + + + + +
    ArgumentDefaultDescription
    +$y + + Y-value
    + +

    Description
    Translate Y-value to absolute screen coordinates 
    +  
    See also
    CanvasScale::Translate


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/DateLocale.html b/html/includes/jpgraph/docs/ref/DateLocale.html new file mode 100644 index 0000000000..af81422002 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/DateLocale.html @@ -0,0 +1,543 @@ +


    CLASS DateLocale
    +(Defined in: jpgraph.php : 317)
     DateLocale 
     DateLocale() 
    GetDayAbb() 
    GetLongMonthName() 
    GetMonth() 
    GetShortDay() 
    GetShortMonth() 
    GetShortMonthName() 
    Set() 
    +
     

    Class usage and Overview
    This class is mainly used (so far) by the Gantt graphs to get localized names of weekdays and months. There is nothing that prevents you from using this to get hold of localized names in your script. +

    +To help with this JpGraph instantiates the global variable $gDateLocale which can be used to access the methods. +

    +A quick example could be to for example get hold of the shortform of the names of the month to use as labels. By default this is set to the dafult locale for the installation. +

    +// Get localized array of short form of month names +$months = $gDateLocale->GetShortMonth();

      +


    Class Methods

    +

     

     

    + +Constructor

    +
    + +

    Description
    Construct a new DateLocale. 
    + +

    Example

    +$dateLocale = new DateLocale();
    // Use Swedish locale
    $dateLocale->Set('sv_SE');
    +

    +

    +

     

     

    + +Return array with day abbreviation in the current locale.

    +
    + +

    Description
    Returns an array with the abbrevation for weekdays using the current locale. 
    +  
    See also
    DateLocale::GetShortDay +

    Example

    +$weekdays = $gDateLocale->GetDayAbb(); +
    +

    +

     

     

    + +Get long month name for the specified month

    + + + + +
    ArgumentDefaultDescription
    +$aNbr + + Number of month [0-11]
    + +

    Description
    Get the full month name as specified by integer 0-11 
    +  
    See also
    DateLocale::GetShortMonthName and DateLocale::GetShortMonth +

    Example

    +$jan = $gDateLocale->GetLongMonthName(0);
    +

    +

    +

     

     

    + +Get array of all month names

    +
    + +

    Description
    Return an array with all months of the year in their long form. 
    +  
    See also
    DateLocale::GetShortMonth +

    Example

    +$allmonths = $gDateLocale->GetMonth();
    $graph->xaxis->SetTickLabels($allmonths);
    +

    +

    +

     

     

    + +Return an array with all weekdays in the short form.

    +
    + +

    Description
    Return an array with all weekdays in the short form according to the specified locale. + +For english locale this would return +array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'); 
    + +

    Example

    +$alldays = $gDateLocale->GetShortDay(); +
    +

    +

     

     

    + +Short month description

    +
    + +

    Description
    Return an array of the short names for all months 
    + +

    Example

    +$allmonths = $gDateLocale->GetShortMonth(); +
    +

    +

     

     

    + +Return the short month name for the specified month.

    + + + + +
    ArgumentDefaultDescription
    +$aNbr + + Number of month [0-11]
    + +

    Description
    Return the short month name for the specified month. 
    +  
    See also
    DateLocale::GetLongMonthName +

    Example

    +$april = $gDateLocale->GetShortMonthName(3); +
    +

    +

     

     

    + +Set locale

    + + + + +
    ArgumentDefaultDescription
    +$aLocale + + Locale
    + +

    Description
    See PHP manual for more details. The argument should be a valid locale setting. For example 'EN_US' or 'EN_UK' + +The following table lists some commonly used locales. The exact locales available depends on the system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    af_ZAar_AEar_AE.utf8
    ar_BHar_BHar_BH.utf8ar_DZar_DZ.utf8
    ar_EGar_EGar_EG.utf8ar_INar_IQ
    ar_IQ.utf8ar_IQ.utf8ar_JOar_JO.utf8ar_KW
    ar_KW.utf8ar_KW.utf8ar_LBar_LB.utf8ar_LY
    ar_LY.utf8ar_LY.utf8ar_MAar_MA.utf8ar_OM
    ar_OM.utf8ar_OM.utf8ar_QAar_QA.utf8ar_SA
    ar_SA.utf8ar_SA.utf8ar_SDar_SD.utf8ar_SY
    ar_SY.utf8ar_SY.utf8ar_TNar_TN.utf8ar_YE
    ar_YE.utf8ar_YE.utf8be_BYbe_BY.utf8bg_BG
    bg_BG.utf8bg_BG.utf8bokmalbokm?lbr_FR
    bs_BAbs_BAca_ESca_ES.utf8ca_ES@euro
    catalancatalancroatiancs_CZcs_CZ.utf8
    cy_GBcy_GBczechda_DKda_DK.utf8
    danishdanishdanskde_ATde_AT.utf8
    de_AT@eurode_AT@eurode_BEde_BE@eurode_CH
    de_CH.utf8de_CH.utf8de_DEde_DE.utf8de_DE@euro
    de_LUde_LUde_LU.utf8de_LU@eurodeutsch
    dutchdutcheestiel_GRel_GR.utf8
    en_AUen_AUen_AU.utf8en_BEen_BE.utf8
    en_BE@euroen_BE@euroen_BWen_CAen_CA.utf8
    en_DKen_DKen_GBen_GB.utf8en_HK
    en_IEen_IEen_IE.utf8en_IE@euroen_IN
    en_NZen_NZen_NZ.utf8en_PHen_SG
    en_USen_USen_US.utf8en_ZAen_ZA.utf8
    en_ZWen_ZWes_ARes_AR.utf8es_BO
    es_BO.utf8es_BO.utf8es_CLes_CL.utf8es_CO
    es_CO.utf8es_CO.utf8es_CRes_CR.utf8es_DO
    es_DO.utf8es_DO.utf8es_ECes_EC.utf8es_ES
    es_ES.utf8es_ES.utf8es_ES@euroes_GTes_GT.utf8
    es_HNes_HNes_HN.utf8es_MXes_MX.utf8
    es_NIes_NIes_NI.utf8es_PAes_PA.utf8
    es_PEes_PEes_PE.utf8es_PRes_PR.utf8
    es_PYes_PYes_PY.utf8es_SVes_SV.utf8
    es_USes_USes_UYes_UY.utf8es_VE
    es_VE.utf8es_VE.utf8estonianet_EEet_EE.utf8
    eu_ESeu_ESeu_ES@eurofa_IR.utf8fi_FI
    fi_FI.utf8fi_FI.utf8fi_FI@eurofinnishfo_FO
    fo_FO.utf8fo_FO.utf8fr_BEfr_BE.utf8fr_BE@euro
    fr_CAfr_CAfr_CA.utf8fr_CHfr_CH.utf8
    fr_FRfr_FRfr_FR.utf8fr_FR@eurofr_LU
    fr_LU.utf8fr_LU.utf8fr_LU@eurofran?aisfrench
    ga_IEga_IEga_IE.utf8ga_IE@eurogalego
    galiciangaliciangermangl_ESgl_ES.utf8
    gl_ES@eurogl_ES@eurogreekgv_GBhe_IL
    he_IL.utf8he_IL.utf8hebrewhi_IN.utf8hr_HR
    hr_HR.utf8hr_HR.utf8hrvatskihu_HUhu_HU.utf8
    hungarianhungarianicelandicid_IDid_ID.utf8
    is_ISis_ISis_IS.utf8it_CHit_CH.utf8
    it_ITit_ITit_IT.utf8it_IT@euroitalian
    iw_ILiw_ILja_JPja_JP.eucjpja_JP.sjis
    ja_JP.ujisja_JP.ujisja_JP.utf8japanesejapanese.euc
    japanese.sjisjapanese.sjiska_GEkl_GLkl_GL.utf8
    ko_KRko_KRko_KR.euckrko_KR.utf8korean
    korean.euckorean.euckw_GBlithuanianlt_LT
    lt_LT.utf8lt_LT.utf8lv_LVlv_LV.utf8mi_NZ
    mk_MKmk_MKmk_MK.utf8mr_IN.utf8ms_MY
    mt_MTmt_MTnb_NOnb_NO.ISO-8859-1nl_BE
    nl_BE.utf8nl_BE.utf8nl_BE@euronl_NLnl_NL.utf8
    nl_NL@euronl_NL@euronn_NOno_NOno_NO.utf8
    norwegiannorwegiannynorskoc_FRpl_PL
    pl_PL.utf8pl_PL.utf8polishportuguesept_BR
    pt_BR.utf8pt_BR.utf8pt_PTpt_PT.utf8pt_PT@euro
    ro_ROro_ROro_RO.utf8romanianru_RU
    ru_RU.koi8rru_RU.koi8rru_RU.utf8ru_UArussian
    sh_YUsh_YUsh_YU.utf8sk_SKsk_SK.utf8
    sl_SIsl_SIsl_SI.utf8slovakslovene
    slovenianslovenianspanishsq_ALsq_AL.utf8
    sr_YUsr_YUsr_YU.utf8sr_YU@cyrillicsv_FI
    sv_FI.utf8sv_FI.utf8sv_FI@eurosv_SEsv_SE.utf8
    swedishswedishta_INte_INtg_TJ
    th_THth_THth_TH.utf8thaitl_PH
    tr_TRtr_TRtr_TR.utf8turkishuk_UA
    uk_UA.utf8uk_UA.utf8ur_PKuz_UZvi_VN
    vi_VN.utf8vi_VN.utf8yi_USzh_CNzh_CN.gb18030
    zh_CN.gbkzh_CN.gbkzh_CN.utf8zh_HKzh_HK.utf8
    zh_TWzh_TWzh_TW.euctwzh_TW.utf8
     
    + +

    Example

    +$gDateLocale->Set('sv_SE'); // Set Swedish locale +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/DateScale.html b/html/includes/jpgraph/docs/ref/DateScale.html new file mode 100644 index 0000000000..4fefe8bef6 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/DateScale.html @@ -0,0 +1,154 @@ +


    CLASS DateScale EXTENDS LinearScale
    +(Defined in: jpgraph_date.php : 49)
     DateScale  LinearScale  
     AdjustForDST() 
    SetDateAlign() 
    SetDateFormat() 
    SetTimeAlign() 
    +
     
     

    Class usage and Overview
    Module used to create a date/time X-axis scale

      +


    Class Methods

    +

     

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify start and end date alignment for the scale

    + + + + + + +
    ArgumentDefaultDescription
    +$aStartAlign + + Start alignment
    +$aEndAlign + + +false +End alignment
    + +

    Description
    Specify start and end date alignment for the scale +Possible values are +
      +
    1. Alignment on a day basis +
        +
      • DAYADJ_1, Align on the start of a day +
      • DAYADJ_7, Align on the start of a week +
      • DAYADJ_WEEK, Synonym to DAYADJ_7 +
      + +
    2. Alignment on a monthly basis +
        +
      • MONTHADJ_1, Align on a month start +
      • MONTHADJ_6, Align on the start of halfyear +
      + +
    3. Alignment on a yearly basis +
        +
      • YEARADJ_1, Align on a year +
      • YEARADJ_2, Align on a bi-yearly basis +
      • YEARADJ_5, Align on a 5 year basis +
      +

    +  
    See also
    DateScale::SetTimeAlign +

    Example

    +$graph->xaxis->scale->SetDateAlign(DAYADJ_1); +
    +

    +

     

     

    + +// Overrides the automatic determined date format. Must be a valid date() format string

    + + + + +
    ArgumentDefaultDescription
    +$aFormat + + No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify start and end date alignment for the scale

    + + + + + + +
    ArgumentDefaultDescription
    +$aStartAlign + + Start time alignment
    +$aEndAlign + + +false +End time alignment
    + +

    Description
    Specify the start and end alignment with the time granularity. For date granularity see SetDateAlign(). Note that only one of SetDateAlign() and SetTimeAlign() can be used. + +For start and end alignment the following values are valid + +
      +
    1. Alignment on seconds +
        +
      • MINADJ_1, Align on a single second (This is the lowest resolution) +
      • MINADJ_5, Align on the nearest 5 seconds +
      • MINADJ_10, Align on the nearest 10 seconds +
      • MINADJ_15, Align on the nearest 15 seconds +
      • MINADJ_30, Align on the nearest 30 seconds +
      +
    2. Alignment on minutes +
        +
      • MINADJ_1, Align to the nearest minute +
      • MINADJ_5, Align on the nearest 5 minutes +
      • MINADJ_10, Align on the nearest 10 minutes +
      • MINADJ_15, Align on the nearest 15 minutes +
      • MINADJ_30, Align on the nearest 30 minutes +
      +
    3. Alignment on hours +
        +
      • HOURADJ_1, Align to the nearest hour +
      • HOURADJ_2, Align to the nearest two hour +
      • HOURADJ_3, Align to the nearest three hour +
      • HOURADJ_4, Align to the nearest four hour +
      • HOURADJ_6, Align to the nearest six hour +
      • HOURADJ_12, Align to the nearest tolw hour +
      +

    +  
    See also
    DateScale::SetDateAlign +

    Example

    +$graph->xaxis->scale->SetTimeAlign(MINADJ_15); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/DigitalLED74.html b/html/includes/jpgraph/docs/ref/DigitalLED74.html new file mode 100644 index 0000000000..0fc4dca2e5 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/DigitalLED74.html @@ -0,0 +1,88 @@ +


    CLASS DigitalLED74
    +(Defined in: jpgraph_led.php : 24)
     DigitalLED74 
     DigitalLED74() 
    SetSupersampling() 
    StrokeNumber() 
    +
     

    Class usage and Overview

      +


    Class Methods

    +

     

     

    + +Constructor for 4x7 module LED digits

    + + + + + + +
    ArgumentDefaultDescription
    +$aRadius + + Radius in pixel for each "led"
    +$aMargin + + Margin around the "led"
    + +

    Description
    Instantiate a LED digit class that is used to genereta text which looks like LED digits 
    +
    +
    Returns
    An instance of the LED class
    +  
    See also
    DigitalLED74::SetSupersampling and DigitalLED74::StrokeNumber +

    Example

    +$led = new DigitalLED74();
    $led->StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GREEN);
    +

    +

    +

     

     

    + +Set level of supersampling used in the creation led digits

    + + + + +
    ArgumentDefaultDescription
    +$aSuperSampling + + Level of supersampling
    + +

    Description
    Specifies the amount of oversampling that sould be used to create a smoother looking image. A higher value will generate a smoother image. + +The value used for supersampling should be an integer in the range 2-4. A higher value could be used but the increase in CPU time will not generate any perceivable improvements in image quality. + +For each integer step increased supersampling the processor time needed is multipled by 2 
    +
    +
    Returns
    void
    + +

    Example

    +$led = new DigitalLED74(5);
    $led->SetSupersampling(4);
    $led->StrokeNumber('ABC123.',LEDC_RED); 
    +

    +

    +

     

     

    + +// Margin in between "Led" dots

    + + + + + + +
    ArgumentDefaultDescription
    +$aValStr + + No description available
    +$aColor + + +0 +No description available
    + +

    Description
    No description available.


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/DisplayValue.html b/html/includes/jpgraph/docs/ref/DisplayValue.html new file mode 100644 index 0000000000..d5131b5413 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/DisplayValue.html @@ -0,0 +1,251 @@ +


    CLASS DisplayValue
    +(Defined in: jpgraph.php : 5517)
     DisplayValue 
     HideZero() 
    SetAlign() 
    SetAngle() 
    SetColor() 
    SetFont() 
    SetFormat() 
    SetFormatCallback() 
    SetMargin() 
    Show() 
    +
     

    Class usage and Overview
    Property class which is used to represent the display value for graphs. For line and bar graphs they represent the propertied of the value that can be displayed at each data point. For bars it represents the value of each bar that can be displayed at top of the bars. +

    +This class should never be used directly instead this is an internal class which is accessed through it's instance variable, for example, +

    + +$lineplot = new LinePlot($datay); +// Access the instance of DisplayValue +$lineplot->value->Show();

      +

    See also related classes:
    LinePlot and BarPlot

     


    Class Methods

    +

     

     

    + +Hide zero values

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Hide zero values
    + +

    Description
    Hide labels that have zero value 
    +  
    See also
    DisplayValue::SetFormat and DisplayValue::SetFormatCallback +

    Example

    +$pieplot->value->HideZero(); +
    +

    +

     

     

    + +Specify horizontal and vertical alignment

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal alignment
    +$aVAlign + + +'' +Vertical alignment
    + +

    Description
    Specify the alignment of the display value in relation to the data point. Possible values are 'left', 'right', 'center' 
    + +

    Example

    +$lineplot->value->SetAlign('center');
    $lineplot->value->Show();
    +

    +

    +

     

     

    + +Rotate the value a specified angle

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + Angle in degrees
    + +

    Description
    Roates the text label a number of degrees. 0 degrees is horizontal. +

    +Please rememberthat you must use TTF fonts if you need any angle other than 0 or 90 degrees (horizontal or vertical) 
    +  

    See also
    DisplayValue::SetFont +

    Example

    +$bplot = new barPlot($datay);

    // Setup the values that are displayed on top of each bar
    $bplot->value->Show();

    // Must use TTF fonts if we want text at an arbitrary angle
    $bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    $bplot->value->SetAngle(45);

    // Black color for positive values and darkred for negative values
    $bplot->value->SetColor("black","darkred");
    +

    +

    +

     

     

    + +Specify color for values

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color for positive values
    +$aNegcolor + + +"" +Color for negative values
    + +

    Description
    Specify the value for the labels. You can have one color for positive and one color for negative values. If no negative color value is specified it will be the same as the positive color. 
    + +

    Example

    +// Black color for positive values and darkred for negative values
    $bplot->value->SetColor("black","darkred");
    +

    +

    +

     

     

    + +Specify font for values

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFamily + + Font family
    +$aFontStyle + + +FS_NORMAL +Font style
    +$aFontSize + + +10 +Font size
    + +

    Description
    Specify font for display value 
    +  
    See also
    DisplayValue::SetAngle +

    Example

    +// Must use TTF fonts if we want text at an arbitrary angle
    $bplot->value->SetFont(FF_ARIAL,FS_BOLD);
    +

    +

    +

     

     

    + +Specify printf() format string.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + Format for positive values
    +$aNegFormat + + +"" +Format for negative values
    + +

    Description
    Specify the format string for positive and negative values. The format string follows the same riules as the standard printf() format. +

    +Please remember that if you want to format a number with a '%' sign you must use double '%%' as escape format, e.g. '%01.2.f%%' will format a number with two decimal places and a following '%' sign. + + 
    + +

    Example

    +// Format label as floating point with 2 decimal points and
    // a dollar sign in front, e.g. '$237.56'
    $bplot->SetFormt('$%01.2f');
    +

    +

    +

     

     

    + +Specify format callback function

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + Name of callback function
    + +

    Description
    Specify a function that get's called to format any value. 
    +  
    See also
    DisplayValue::SetFormat +

    Example

    +function barValueFormat($aLabel) {
        // Format '1000 english style
        return number_format($aLabel)
        // Format '1000 french style
        // return number_format($aLabel, 2, ',', ' ');
    }

    $barplot->value->SetFormatCallback('barValueFormat');
    +

    +

    +

     

     

    + +Set nargin between value and anchor point in plot

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify the margin between the data point and the label. 
    + +

    Example

    +$bplot->value->SetMargin(50); +
    +

    +

     

     

    + +Show value

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=show value
    + +

    Description
    Enable display of the label. If you want to display a value you must enable it since it is turned off by default. 
    + +

    Example

    +// Enable display of each slice value
    $pieplot->value->Show();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/ErrMsgText.html b/html/includes/jpgraph/docs/ref/ErrMsgText.html new file mode 100644 index 0000000000..363877251d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/ErrMsgText.html @@ -0,0 +1,10 @@ +


    CLASS ErrMsgText
    +(Defined in: jpgraph.php : 225)
     ErrMsgText 
     

    Class usage and Overview
    Internal helper class to work extract localized error messages.

      +


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/ErrorLinePlot.html b/html/includes/jpgraph/docs/ref/ErrorLinePlot.html new file mode 100644 index 0000000000..8e7ec9b574 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/ErrorLinePlot.html @@ -0,0 +1,41 @@ +


    CLASS ErrorLinePlot EXTENDS ErrorPlot
    +(Defined in: jpgraph_error.php : 86)
     ErrorLinePlot  ErrorPlot  
     ErrorLinePlot() 
    +
     
     

    Class usage and Overview
    The error line plot is much the same as the error plot with the addition of a line between the average value of each error plot pair. The properties of the line may be accessed through the ?line? property of the ErrLinePlot, so for example to draw a red line you issue the statement + +$errlineplot->line->SetColor(?red?);

      +

    See also related classes:
    LinePlot and ErrorPlot

     


    Class Methods

    +

     

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Y-data values
    +$datax + + +false +X-data value
    + +

    Description
    In the same way as for Error plots each data value is represnted by two y-values, a minimum and maximum value for each point. 
    +  
    See also
    ErrorPlot::ErrorPlot +

    Example

    +$errlineplot = new ErrorLinePlot($ydata); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/ErrorPlot.html b/html/includes/jpgraph/docs/ref/ErrorPlot.html new file mode 100644 index 0000000000..b3b19ccb2e --- /dev/null +++ b/html/includes/jpgraph/docs/ref/ErrorPlot.html @@ -0,0 +1,41 @@ +


    CLASS ErrorPlot EXTENDS Plot
    +(Defined in: jpgraph_error.php : 17)
     ErrorPlot  Plot  
     ErrorPlot() 
    +
     
     

    Class usage and Overview
    Concrete class which implements error plots. Error plots takes two y-values for each X-value, min and max. It then marks each pair of min/max values with a vertical bar.

      +


    Class Methods

    +

     

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Y-data. 2 points for each value
    +$datax + + +false +X-data
    + +

    Description
    Create a new error plot. Each data value is specified by two y-values, a minimum and maximum value. +

    +The X-vector is optional. 
    + +

    Example

    +$errplot = new ErrorPlot($ydata);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/FieldArrow.html b/html/includes/jpgraph/docs/ref/FieldArrow.html new file mode 100644 index 0000000000..c611e5b95d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/FieldArrow.html @@ -0,0 +1,61 @@ +


    CLASS FieldArrow
    +(Defined in: jpgraph_scatter.php : 17)
     FieldArrow 
     SetColor() 
    SetSize() 
    +
     

    Class usage and Overview
    Internal helper class which represents the arrow head of the arrow in the field plot. +

    +Only accessed as FieldPlot::arrow

      +

    See also related classes:
    FieldPlot

     


    Class Methods

    +

     

     

    + +Specify color for arrow head

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Set color for arrow head 
    + +

    Example

    +$fieldplot->arrow->SetColor('red'); +
    +

    +

     

     

    + +Specify arrow and arrow head size

    + + + + + + +
    ArgumentDefaultDescription
    +$aSize + + Arrow size in pixels
    +$aArrowSize + + +2 +Arrow head size (and shape) as integer in range (0-9)
    + +

    Description
    Arrow size is specified in pixels (length of arrow including arrow head). The size of the arrow head is specified as an integer in the range (0,9) inclusive. 
    + +

    Example

    +// First size argument is length (in pixels of arrow) 
    // Second size argument is roughly size of arrow. Arrow size is specified as
    // an integer in the range [0,9]
    $fp->arrow->SetSize(20,2);
    $fp->arrow->SetColor('navy');
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/FieldPlot.html b/html/includes/jpgraph/docs/ref/FieldPlot.html new file mode 100644 index 0000000000..d084482074 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/FieldPlot.html @@ -0,0 +1,74 @@ +


    CLASS FieldPlot EXTENDS Plot
    +(Defined in: jpgraph_scatter.php : 63)
     FieldPlot  Plot  
     FieldPlot() 
    SetCallback() 
    +
     
     

    Class usage and Overview
    A variant of scatter plot is the so called Field Plots this is +basically a scatter plot where each scatter point is an arrow with a +direction between 0 to 359 degrees. This effectively allows the +visualization of 3 parameters at each point (x,y,angle). As an +additional bonus there is also possible to define a callback for each +scatter plot to also define the color for each point.

      +

    See also related classes:
    FieldArrow

     


    Class Methods

    +

     

     

    + +Create an instance of FieldPlot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$datay + + Y-coordinate
    +$datax + + X-coordinate
    +$angles + + Angle
    + +

    Description
    Create a new instance of a field plot 
    + +

    Example

    +$fp = new FieldPlot($datay,$datax,$angle); +
    +

    +

     

     

    + +Specify callback for each arrow in the field plot

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + Function name
    + +

    Description
    Specify a callback that gets clled for each arrow in the field plot +The callback should return an array with the elements +
      +
    1. Color +
    2. Size of arrow (in pixels) +
    3. Arrow head size (as integer between0 and 9) +

    + +

    Example

    +// Gradient. Make the arrows red at the pole and colder (blue)
    // teh further we get from the pole
    function FldCallback($x,$y,$a) {
        $polex=4;
        $poley=40;
        $maxr = 3000;

        // Size and arrow size is constant
        $size="";
        $arrowsize="";

        // Since we have different scales we need the data points
        // to be of the same magnitude to give it a distance
        // interpretation.
        $x *= 10; 

        // Colors gets colder the further out we go from the center
        $r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley);
        $f = $r/$maxr;
        if( $f > 1 ) $f=1;
        $red = floor((1-$f)*255);
        $blue = floor($f*255);
        $color = array($red,0,$blue);
        return array($color,$size,$arrowsize);
    }

    // Setup the field plot
    $fp = new FieldPlot($datay,$datax,$angle);

    // Setup formatting callback
    $fp->SetCallback('FldCallback');
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Footer.html b/html/includes/jpgraph/docs/ref/Footer.html new file mode 100644 index 0000000000..82ea6c2e58 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Footer.html @@ -0,0 +1,15 @@ +


    CLASS Footer
    +(Defined in: jpgraph.php : 421)
     Footer 
     

    Class usage and Overview
    Represents the footer in all graphs. The footer consists of three fields accessed by properties "left", "center" and "right" representing. This lets you have footer text to the left, center and to the right. +

    +For example +

    +$graph->footer->left->Set("(C) 2002"); +

      +


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/FuncGenerator.html b/html/includes/jpgraph/docs/ref/FuncGenerator.html new file mode 100644 index 0000000000..5525c3bbc9 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/FuncGenerator.html @@ -0,0 +1,85 @@ +


    CLASS FuncGenerator
    +(Defined in: jpgraph.php : 676)
     FuncGenerator 
     E() 
    FuncGenerator() 
    +
     

    Class usage and Overview
    A utility class to help with function plots. This class supprots both ordinary one-variable plots with one dependent variable as well as polar plots. + +Basically you create an instance of this class with the function you want to plot as a string argument. The function should be created using 'x' as the independent variable. You then invoke its evaluation method 'E()' with the range for the independent variable and possibly a step size. The method then returns an array of X, and Y values that represents the plot. + +Please remember that the string should be specified with single quotes since otherwise PHP will try to interpret the variable in the string. + +For example, to specify a simple cos() plot you specify: + +$f = new FuncGenerator('cos($x)'; +

      +


    Class Methods

    +

     

     

    + +Evaluate a X-Y function

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aXMin + + Min x-value
    +$aXMax + + Max x-value
    +$aSteps + + +50 +Number of steps
    + +

    Description
    Evaluate the previous specified function between the specified values. The return two arrays representing the X and Y coordinates for the function. 
    + +

    Example

    +// Create a simple linear plot
    $f = new FuncGenerator('cos($x) * sin($x)');
    list($xdata,$ydata) = $f->E(-2*M_PI, 2*M_PI);

    $lp1 = new LinePlot($ydata,$xdata);

    // Create a simple polar plot (a circle)
    $p = new FuncGenerator('cos($i)', 'sin($i)');
    list($x2data,$y2data) = $f->E(-2*M_PI, 2*M_PI);

    $lp2 = new LinePlot($y2data,$x2data);

    //...
    +

    +

    +

     

     

    + +Create a new function generator.

    + + + + + + +
    ArgumentDefaultDescription
    +$aFunc + + Function
    +$aXFunc + + +'' +X-Function
    + +

    Description
    Creates a new funciton generator. You can create both a linear plot as well as polar plot. + +For linear, one-variable plots, you must use '$x' as the independent variable. + +For polar plots you should use the index '$i' for the generating functions. + 
    + +

    Example

    +// Create a simple linear plot
    $f = new FuncGenerator('cos($x) * sin($x)');
    list($xdata,$ydata) = $f->E(-2*M_PI, 2*M_PI);

    $lp1 = new LinePlot($ydata,$xdata);

    // Create a simple polar plot (a circle)
    $p = new FuncGenerator('cos($i)', 'sin($i)');
    list($x2data,$y2data) = $f->E(-2*M_PI, 2*M_PI);

    $lp2 = new LinePlot($y2data,$x2data);

    //...
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GTextTable.html b/html/includes/jpgraph/docs/ref/GTextTable.html new file mode 100644 index 0000000000..66ccd9344d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GTextTable.html @@ -0,0 +1,1944 @@ +


    CLASS GTextTable
    +(Defined in: jpgraph_table.php : 438)
     GTextTable 
     GTextTable() 
    Init() 
    MergeCells() 
    MergeCol() 
    MergeRow() 
    Set() 
    SetAlign() 
    SetAnchorPos() 
    SetBorder() 
    SetCellAlign() 
    SetCellColor() 
    SetCellCountryFlag() 
    SetCellCSIMTarget() 
    SetCellFillColor() 
    SetCellFont() 
    SetCellImage() 
    SetCellImageConstrain() 
    SetCellNumberFormat() 
    SetCellPadding() 
    SetColAlign() 
    SetColColor() 
    SetColFillColor() 
    SetColFont() 
    SetColGrid() 
    SetColImage() 
    SetColNumberFormat() 
    SetColor() 
    SetColPadding() 
    SetCSIMTarget() 
    SetFillColor() 
    SetFont() 
    SetGrid() 
    SetImage() 
    SetMinColWidth() 
    SetMinRowHeight() 
    SetNumberFormat() 
    SetPadding() 
    SetPos() 
    SetRowAlign() 
    SetRowColor() 
    SetRowFillColor() 
    SetRowFont() 
    SetRowGrid() 
    SetRowImage() 
    SetRowNumberFormat() 
    SetRowPadding() 
    SetScalePos() 
    toString() 
    +
     

    Class usage and Overview
    When visualizing data it is often useful to have both a quick graphical view which can show high level trends and a detailed view with the exact figures. The pro-version of JpGraph now supports the creation of graphic tables in all available graph types. + +The specification of the tables data, position, fonts, alignment, colors, borders etc. is all fully flexible with an intuitive set of APIs to control the table. In this HowTo we will start by showing how to build basic tables which we will augment with more advanced formatting by introducing the formatting capabilities one by one. + +In addition to adding data tables to graphs it is also possible to create graphic tables on the fly all by its own. This has the advantage compared with HTML tables to allow users to make copies of the table while maintaining the exact formatting of the table. Figure 2. shows an example with just a graphical table

      +


    Class Methods

    +

     

     

    + +Create a new Graphic text table

    +
    + +

    Description
    Create a new Graphic text table. The next call should either be to specify a value for the table (using GTextTable::Set() ) or a call to GTextTable::Init() to specify the size of table. 
    +  
    See also
    GTextTable::Init and GTextTable::Set +

    Example

    +$table = new GTextTable();
    $table->Set($tableData);
    +

    +

    +

     

     

    + +Initialize the size for a newly created table

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRows + + +0 +Number of rows in table
    +$aCols + + +0 +Number of columns in table
    +$aFillText + + +'' +Deafult fill value for each cell
    + +

    Description
    After the table has been created the size of the table has to be established. This can either be done by a call to this method or by supplying a matrix in the call to Set(). +

    +If You plan on specifying the cells by individual calls to Set($row,$col,$value) then this method must have been called after the creation of the table. +

    +When You set the entire table content with a call to Set() with a full 2D-matrix as argument the size of the matrix will be used to determine the size of the table. 
    + +

    Example

    +$table = new GTextTable();
    $table->Init(5,7);

    +

    +

    +

     

     

    + +Merge cells in the specified range

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aR1 + + Top left row
    +$aC1 + + Top left column
    +$aR2 + + Bottom right row
    +$aC2 + + Bottom right column
    +$aHAlign + + +'center' +Horizontal alignment
    +$aVAlign + + +'center' +Vertical alignment
    + +

    Description
    Merge cells in the specified range. The alignment of the merged cells cab be set by the laet two optional arguments. + +Note: To merge all cells in a specific row or column use the alternative methods MergeCol() and MergeRow() 
    +  
    See also
    GTextTable::MergeRow and GTextTable::MergeCol +

    Example

    +// Merge the top 2x2 cells
    $table->MergeCells(0,0,1,1,"right");
    +

    +

    +

     

     

    + +Merge all cells in one column

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aHAlign + + +'center' +Horizontal alignment
    +$aVAlign + + +'center' +Vertical alignment
    + +

    Description
    Merge all cells in one column. + +Note: By default if no alignment is given the content in the merged cells will be centered both horixontally and vertically. 
    +  
    See also
    GTextTable::MergeCells and GTextTable::MergeRow +

    Example

    +$table->MergeCol(3); +
    +

    +

     

     

    + +Merge all cells in one row.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aHAlign + + +'center' +Horizontal alignment
    +$aVAlign + + +'center' +Vertical alignment
    + +

    Description
    Merge all cells in one row. + +Note: By default if no alignment is given the content in the merged cells will be centered both horixontally and vertically. 
    +  
    See also
    GTextTable::MergeCells and GTextTable::MergeCol +

    Example

    +$table->MergeRow(2,"right","top"); +
    +

    +

     

     

    + +Set the value in cell or cells

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aArg1 + + 2D-Array or Row index
    +$aArg2 + + +NULL +[Oprional] Columns index
    +$aArg3 + + +NULL +(Optional) Value for cell
    + +

    Description
    This method is used to put values in a cell or initialize the table using a 2D-matrix. The method is polymorphic and can be called in two ways +
      +
    1. Set($aTableMatrix), Specify the entire table by supplying a 2D-Matrix +
    2. Set($aRow,$aCol,$aValue), Set the value in a specific cell. Note that if You use this method then the size of the table muts have been previously specified with a call to Init() +
    + +Note: If the table is initialized with an 2D-matrix then there is no need to call the Init() method since the ovberall size of the table will be set to the same as the supplied matrix. + +Note: After the entire table have beedn specified with an initial 2D-array it is of course still possible to modify/set individual values with a call to the second version of the table. + 
    +  
    See also
    GTextTable::Init +

    Example

    +// Create a new table from a 2D-array
    $data = array(
       array("Jun",34,18,13), 
       array("Jul",15,9,12));
    $table = new GTextTable();
    $table->Set($data);
    $table->SetAlign("right");
    ...


    // Create a table by setting individual cells
    $table = new GTextTable();
    $table->Init(5,7); // 5 rows by 7 column sized table

    for($i=0; $i < 5; ++$i) {
      for($j=0; $j < 7; ++$j) {
        $table->Set(0,0,$data[$i][$j]);
      }
    }
    ...

    $table->Set(0,0,$data1);


    +

    +

    +

     

     

    + +Set cell alignment for entire table or range of cells

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aR1HAlign + + +null +Top left row OR horizontal alignment
    +$aC1VAlign + + +null +Top left column OR vertical alignment
    +$aR2 + + +null +Bottom right row
    +$aC2 + + +null +Bottom right column
    +$aHArg + + +null +Horizontal alignment
    +$aVArg + + +'center' +Vertical alignment
    + +

    Description
    Set cell alignment for entire table or range of cells. The alignment fcan be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + 
    +  
    See also
    GTextTable::SetCellAlign, GTextTable::SetRowAlign and GTextTable::SetColAlign +

    Example

    +// Set the default alignment for the entire table
    $table->SetAlign("right");

    // The set the first column to use left alignment
    $table->SetColAlign(0,"left");
    +

    +

    +

     

     

    + +Specify where the anchor position of the table should be

    + + + + + + +
    ArgumentDefaultDescription
    +$aXAnchor + + Horizontal anchor
    +$aYAnchor + + +'top' +Vertical anchor
    + +

    Description
    Specify where the anchor of the table should be. By default the anchor is top left corner so that the positoin you specify for the table is taken as the top left corner. + +This can be adjusted horixontally as +"left", "center" or "right" + +Vertically it can be adjusted as +"top","center","bottom" + 
    +  
    See also
    GTextTable::SetPos and GTextTable::SetScalePos +

    Example

    +// Make the position refer to the center of the table
    $table->SetAnchorPos('center','center');
    +

    +

    +

     

     

    + +Set the color and weight on the border around the table-

    + + + + + + +
    ArgumentDefaultDescription
    +$aWeight + + +1 +Weight of border
    +$aColor + + +'black' +Color of border
    + +

    Description
    Set the color and weight on the border around the table. By default the border is a 1 pixel black solid line. + +Note: Specify a weight of 0 to disable the border entirely. 
    +  
    See also
    GTextTable::SetGrid +

    Example

    +...
    $table->SetBorder(2,"navy");
    ...
    +

    +

    +

     

     

    + +Set cell alignment for a specified cell.

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aHorAlign + + Horizontal alignment
    +$aVertAlign + + +'bottom' +Vertical alignment
    + +

    Description
    Set cell alignment for a specified cell. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + 
    +  
    See also
    GTextTable::SetAlign, GTextTable::SetColAlign and GTextTable::SetRowAlign +

    Example

    +$table->SetCellAlign(2,5,'left'); +
    +

    +

     

     

    + +Set font color for a specific cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aColor + + Font color
    + +

    Description
    Set font color for a specific cell. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also
    GTextTable::SetColor, GTextTable::SetRowColor and GTextTable::SetColColor +

    Example

    +$table->SetCellColor(3,1,'darkred'); +
    +

    +

     

     

    + +Set a country flag in the background of the specified cell

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aFlag + + Flag specification partial name or index
    +$aScale + + +1.0 +Scaling factor to be used
    +$aMix + + +100 +Blending factor (0-100)
    +$aStdSize + + +3 +Which original size of flag image to use
    + +

    Description
    Set a country flag in the background of the specified cell. + +Before this method can be used make sure that the file "jpgraph_flags.php" is included in the script. + +All supported countries can be specified by setting the '$aFlag" parameter to either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The parameter "$aMix" is a value between 0-100 and specifies the blend factor for the flag. +

    +The paraneter $aStdSize specifes one of three orignal izes of flag where size can be one of +

      +
    1. FLAGSIZE1, corresponds to an original flag size of 35x35 pixels +
    2. FLAGSIZE2, corresponds to an original flag size of 60x60', +
    3. FLAGSIZE3, corresponds to an original flag size of 100x100', +
    4. FLAGSIZE4, corresponds to an original flag size of roughly 400x400 +
    + +For best result always use an original flag that is at least as big as the size that is wanted, i.e. even though the scaling factor can be used to arbitrary change the size of any of these original flags the result when up scaling is not optimal since there is a need to interpolate. By starting with a larger original image which is the downsampled the result is much better. +

    +Note 1: In order to lock either the height or the width of the flag to a specific value use the SetImageConstrain() +method. + + + 
    +  

    See also
    GTextTable::SetImage +

    Example

    +// Set one row with a number of country flags and constrain
    // the height to be 20 pixels
    $countries = array('united states','united kingdom','french republic','denmark','iceland','canada');
    $n = count($countries);
    for($i=0; $i < $n; ++$i ) {
        $table->SetCellCountryFlag(1,$i+1,$countries[$i]);
        $table->SetCellImageConstrain(1,$i+1,TIMG_HEIGHT,20);
    }
    +

    +

    +

     

     

    + +Specify URL for CSIM target

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aTarget + + Target URL
    +$aAlt + + +null +ALT text
    + +

    Description
    Specify URL and optional ALT text for CSIM target for the specified cell. + 
    +  
    See also
    GTextTable::SetCSIMTarget +

    Example

    +$table->SetCellCSIMTarget(3,0,'detail.php','View detailes'); +
    +

    +

     

     

    + +Specify background color in a cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aColor + + background color
    + +

    Description
    Specify background color in a cell. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +  
    See also
    GTextTable::SetFillColor, GTextTable::SetRowFillColor and GTextTable::SetColFillColor +

    Example

    +// Highlight cell (7,0)
    $table->SetCellFillColor(7,0,'yellow');
    +

    +

    +

     

     

    + +Specify font family and style for a specific cell

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aFF + + Font family
    +$aFS + + Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify font family and style for a specific cell. + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also
    GTextTable::SetFont, GTextTable::SetRowFont and GTextTable::SetColFont +

    Example

    +// Highlight cell (4,1) with red on yellow background
    $table->SetCellFillColor(4,1,'yellow');
    $table->SetCellColor(4,1,'darkred');
    $table->SetCellFont(4,1,FF_ARIAL,FS_BOLD,12);
    +

    +

    +

     

     

    + +Set a background image in the specified cell

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aFile + + Image file name
    +$aScale + + +1.0 +Image scale factor
    +$aMix + + +100 +Blending factor (0-100)
    + +

    Description
    Set a background image in the specified cell. The image is stored in the file with the name given as the third parameter. + +The image name must end with a valid image prefix, i.e. one of ".png", ".jpg" or possibly ".gif" + +Note: To set a default background image for all cells in the table use the SetImage() method. 
    +  
    See also
    GTextTable::SetImage, GTextTable::SetRowImage and GTextTable::SetColImage +

    Example

    +// Put the image 'warning.jpg' in cell (3,6) and
    // scale the image to half size
    $table->SetCellImage(3,6,'warning.jpg',0.5);
    +

    +

    +

     

     

    + +Lock either the image height or width in a particular cell

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aType + + Specify width or height constrain
    +$aVal + + Value of constrain
    + +

    Description
    Use this method to locj either the width or height of the image ina a cell. The non-specified image width or height will be automatically determied so that the orignal propertion of the image is maintained. + +The $aType parameter is used to indicate if the value given should be interpretated as width or height constarin and is specifed as either +
      +
    1. TIMG_WIDTH, Interpret as width +
    2. TIMG_HEIGHT,Interpret as height +
     
    +
    +
    Returns
    VOID
    +  
    See also
    GTextTable::SetCellImage +

    Example

    +// Make sure image in cell (3,1) is exactlyb 20 pixels 
    // in height
    $table->SetCellImageConstrain(3,1,TIMG_HEIGHT,20);
    +

    +

    +

     

     

    + +Set number format in cell

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aF + + Format string
    + +

    Description
    Set number format in cell. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    + +

    Example

    +// Use two decimals with leading 0 on numbers
    $this->SetCellNumberFormat(3,1,'%0.2f');
    +

    +

    +

     

     

    + +Set internal cell margin

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aCol + + Column index
    +$aPad + + Internal cell margin (in pixels)
    + +

    Description
    Set internal cell margins in pixels. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    + +

    Example

    +// Set 8 pixel cell padding for cell (1,3)
    $table->SerCellPadding(3,1,8);
    +

    +

    +

     

     

    + +Set cell alignment for an entire column of cells.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aHorAlign + + Horizontal alignment
    +$aVertAlign + + +'bottom' +Vertical alignment
    + +

    Description
    Set cell alignment for an entire column of cells. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + +Note2: In order to set the default alignment for all cells in the table use the SetAlign() method. 
    +  
    See also
    GTextTable::SetAlign, GTextTable::SetCellAlign and GTextTable::SetRowAlign +

    Example

    +$table->SetColAlign(3,'center'); +
    +

    +

     

     

    + +Set font color for a entire column.

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aColor + + Font color
    + +

    Description
    Set font color for a entire column. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also
    GTextTable::SetColor, GTextTable::SetCellColor and GTextTable::SetRowColor +

    Example

    +$table->SetColColor(2,'blue'); +
    +

    +

     

     

    + +Specify background color in an entire column of cells

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aColor + + Background color
    + +

    Description
    Specify background color in an entire column of cells. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +
    +
    Returns
    VOID
    +  
    See also
    GTextTable::SetCellFillColor, GTextTable::SetFillColor and GTextTable::SetRowFillColor +

    Example

    +// Highlight column 3 with white text on gray bakground
    $table->SetColFillColor(3,'darkgray');
    $table->SetColColor(3,'white');
    +

    +

    +

     

     

    + +Specify font family and style for an entire column of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aFF + + Font family
    +$aFS + + Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify font family and style for an entire column of cells + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also
    GTextTable::SetFont, GTextTable::SetRowFont and GTextTable::SetCellFont +

    Example

    +$table->SetColFont(0,FF_ARIAL,FS_NORMAL,12); +
    +

    +

     

     

    + +Set style, color and width of a specified vertical grid line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Grind line to specify
    +$aWeight + + +1 +Width of line
    +$aColor + + +'black' +Color of line
    +$aStyle + + +TGRID_SINGLE +Grid line style (see below)
    + +

    Description
    Set style, color and width of a specified vertical grid line in the table. The grid lines are numbered from 1 to columns-1 and from left to right. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove all grid lines in the table set the width to 0. + 
    + +

    Example

    +$table->SetColGrid(1,1,'black',TGRID_DOUBLE2);
    +

    +

    +

     

     

    + +Set background image for an entire column of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aFile + + Filename of image
    +$aScale + + +1.0 +Scale of image
    +$aMix + + +100 +Blend factor for image (0-100)
    + +

    Description
    Set background image for an entire column of cells. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. + 
    +  

    See also
    GTextTable::SetImage, GTextTable::SetCellImage and GTextTable::SetRowImage +

    Example

    +$table->SetColImage(2,$imageFileNmae,0.7); +
    +

    +

     

     

    + +Set number format in an entire column of cells

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aF + + Format string
    + +

    Description
    Set number format in an entire column of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +  
    See also
    GTextTable::SetCellNumberFormat, GTextTable::SetNumberFormat and GTextTable::SetRowNumberFormat +

    Example

    +// Use two decimals with leading zero
    $table->SetColNumberFormat(4,'%0.2f');
    +

    +

    +

     

     

    + +Set font color for the whole table or a range of cells.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + Top left row OR font color
    +$aC1 + + +null +Top left column
    +$aR2 + + +null +Bottom right row
    +$aC2 + + +null +Bottom right column
    +$aArg + + +null +Font color
    + +

    Description
    Set font color for the whol table or a range of cells. +Thie method is polymorphic an can be called in two ways +
      +
    • SetColor($aColor), Set the font color for the entire table +
    • SetColor($aR1,$aC1,$aR2,$aC2,$aColor), Set the font color for a range of cells specified by the top left and bottom right cell. +

    +  
    See also
    GTextTable::SetCellColor, GTextTable::SetRowColor and GTextTable::SetColColor +

    Example

    +// Set the font color for the entire table
    $table->SetColor('darkgray');

    // Set the font color for the top left 2x2 cells
    $table->SetColor(0,0,1,1,'blue');
    +

    +

    +

     

     

    + +Set internal cell margins in pixels for all cells in the specified column.

    + + + + + + +
    ArgumentDefaultDescription
    +$aCol + + Column index
    +$aPad + + Internal cell margin
    + +

    Description
    Set internal cell margins in pixels for all cells in the specified column. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    +  
    See also
    GTextTable::SetCellPadding, GTextTable::SetPadding and GTextTable::SetRowPadding +

    Example

    +$table->SetColPadding(3,12): +
    +

    +

     

     

    + +Set URL CSIM target for all cells in the table

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + Target URL
    +$aAlt + + +null +ALT etxt
    +$aAutoTarget + + +false +TRUE=Append auto row and column argument
    + +

    Description
    Set URL CSIM target for all cells in the table. If the $aAutoTarget is set to TRUE then an additional GET method argument will be appended to the base URL. This makes it possible to spcify a base URL which will then be called with the two additional arguments "row" and "col". This can be used to determien from which cell the click was made. +

    +An example will clarify this. +

    +Assume that the base URL is "target.php". If we then setup the table with + +$table->SetCSIMTarget('target.php','Click for details',true); + +then if the user clicks the cell (1,1) the url called will be "target.php?row=1&col=1", for cell (2,3) the call would be "target.php?row=2&col=3" and so on. + 
    + +

    Example

    +// Assume that the base URL is "target.php". 
    $table->SetCSIMTarget('taregt.php','Click for details',true);
    +

    +

    +

     

     

    + +Set background image for an entire range of cells or entire table

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + Top left row OR color
    +$aC1 + + +null +Top left column
    +$aR2 + + +null +Bottom right row
    +$aC2 + + +null +Bottom right column
    +$aArg + + +null +Color for range
    + +

    Description
    Set background image for an entire range of cells or entire table. + +This method is polymorphic and can be called in two ways +
      +
    1. SetFillColor($aFillColor), Set fill color for all cells in the table +
    2. SetFillColor($aR1,$aC1,$aR2,$aC2,$aFillColor), Set fill color for a range of cells +

    +  
    See also
    GTextTable::SetCellFillColor, GTextTable::SetColFillColor and GTextTable::SetRowFillColor +

    Example

    +// Set default fill color for entire table
    $table->SetFillColor('lightgray');

    // Highlight top left 2x2 cells
    $table->SetFillColor(0,0,1,1,'yellow');
    +

    +

    +

     

     

    + +Set font for entire table or range of cells.

    +
    + +

    Description
    Set font for entire table or range of cells. This si a polymorphic method and can be called in two ways- +
      +
    1. SetFont($aFF,$aFS,$aFSize), Set default font for entire table +
    2. SetFont($aR1,$aC1,$aR2,$aC2,$aFF,$aFS,$aFSize), Set default font for range of cells table +

    +
    +
    Returns
    VOID
    +  
    See also
    GTextTable::SetCellFont, GTextTable::SetRowFont and GTextTable::SetColFont +

    Example

    +// Set default font for entire table
    $table->SetFont(FF_TIMES,FS_NORMAL,11);

    // Set font for the two top rows
    $table->SetFont(0,0,1,5,FF_ARIAL,FS_BOLD,12);
    +

    +

    +

     

     

    + +Set style, color and width of all table grid lines

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aWeight + + +1 +Width of grid lines
    +$aColor + + +'black' +Color of grid lines
    +$aStyle + + +TGRID_SINGLE +Style of grid lines
    + +

    Description
    Set style, color and width of all table grid lines. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove all grid lines in the table set the width to 0. + 
    +  
    See also
    GTextTable::SetColGrid and GTextTable::SetRowGrid +

    Example

    +// Set the default grid lines for whole table
    $table->SetGrid(1,'gray',TGRID_SOLID);
    +

    +

    +

     

     

    + +Set background image for an entire range of cells or entire table

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFileR1 + + Top left row OR file name
    +$aScaleC1 + + +null +Top left column OR scale
    +$aMixR2 + + +null +Bottom right row OR blend factor
    +$aC2 + + +null +Bottom right column
    +$aFile + + +null +Image filename
    +$aScale + + +1.0 +Image scale
    +$aMix + + +100 +Blend factor (0-100)
    + +

    Description
    Set background image for an entire rnage of cells or entire table. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. 
    +  

    See also
    GTextTable::SetCellImage, GTextTable::SetRowImage and GTextTable::SetColImage +

    Example

    +// Set the same background image for all cells in the table
    $table->SetImage($fileName,0.8);

    // Set the background image for the top 2x2 cells
    $table->SetImage(0,0,1,1,$fileName,0.8);
    +

    +

    +

     

     

    + +Specify minimum column width

    + + + + + + +
    ArgumentDefaultDescription
    +$aColWidth + + Width or column index
    +$aWidth + + +null +Width
    + +

    Description
    Specify minimum column width of all columns or a specific column. The method is polymorphic and can be called in two different ways. +
      +
    1. SetMinColWidth($aWidth), Set the minimum width for all columns in the table +
    2. SetMinColWidth($aColIndex,$aWidth), Set the minimum width for the specified column +
    + +Note that the column width will always be wide enough to hold the widest text or image. This means that the table will never to adny clipping of data. 
    +  
    See also
    GTextTable::SetMinRowHeight +

    Example

    +// Make all columns at least 50 pixels wide
    $table->SetMinColWidth(50);
    +

    +

    +

     

     

    + +Specify minimum row height of all rows or a specific row.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRowHeight + + Row index or height
    +$aHeight + + +null +Height
    + +

    Description
    Specify minimum row height of all rows or a specific row. The method is polymorphic and can be called in two different ways. +
      +
    1. SetMinRowHeight($aWidth), Set the minimum height for all rows in the table +
    2. SetMinRowHeight($aRowIndex,$aWidth), Set the minimum height for the specified table row +
    + +Note that the row height will always be tall enough to hold the highest text or image. This means that the table will never to adny clipping of the data. 
    +  
    See also
    GTextTable::SetMinColWidth +

    Example

    +// Make the top row at least 40 pixels in height
    $table->SetMinRowHeight(0,40);
    +

    +

    +

     

     

    + +Set number format for entire table or a range of cells.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + Top left row OR format string
    +$aC1 + + +null +Top left column
    +$aR2 + + +null +Bottom right row
    +$aC2 + + +null +Bottom right column
    +$aArg + + +null +Format string
    + +

    Description
    Set number format for entire table or a range of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +The method is polymorphic and can be called in two ways +
      +
    1. SetNumberFormat($aFormat), Set the number format for the entire table +
    2. SetNumberFormat($aFormat), Set the number format for a range of cells +
    + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +  
    See also
    GTextTable::SetCellNumberFormat, GTextTable::SetRowNumberFormat and GTextTable::SetColNumberFormat +

    Example

    +$table->SetNumberFormat('%0.2f'); +
    +

    +

     

     

    + +Set internal cell margins for all cells in the specified range or entire table

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aArgR1 + + Top left row OR cell padding
    +$aC1 + + +null +Top left column
    +$aR2 + + +null +Bottom right row
    +$aC2 + + +null +Bottom right column
    +$aPad + + +null +Cell padding
    + +

    Description
    Set internal cell margins for all cells in the specified range or entire table + +By default the internal cell padding is 5 pixels. + +This method is polymorphic and can be called in two ways +
      +
    1. SetPadding($aPadding), Set padding for all cells in the table +
    2. SetPadding($aR1,$aC1,$aR2,$aC2,$aPadding), Set padding for the specified range of cells +
    + + 
    +  
    See also
    GTextTable::SetCellPadding, GTextTable::SetColPadding and GTextTable::SetRowPadding +

    Example

    +// First set the default padding for all cells
    $table->SetPadding(8);

    // Set the padding much larger in the top left 2x2 cells
    $table->SetPadding(0,0,1,1,20);
    +

    +

    +

     

     

    + +Set absolute pixel position the table

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X Coordinate of top left corner
    +$aY + + Y Coordinate of top left corner
    + +

    Description
    Set absolute pixel position for top left corner of the table. This is the simplest way of positioning a table in the graph area. +

    +Note: The anchor position of the table can also be adjusted by the method SetAnchorPos(). By deagule the top left corner of the table is aligned with the specified coordinates. 
    +  

    See also
    GTextTable::SetScalePos +

    Example

    +$table->SetPos(10,10); +
    +

    +

     

     

    + +Set cell alignment for an entire row of cells.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aHorAlign + + Horizontal alignment
    +$aVertAlign + + +'bottom' +Vertical alignment
    + +

    Description
    Set cell alignment for an entire row of cells. The alignment can be specifed both horizontally and vertically. + +The possible settings for horizontal alignment are +"left", "center", "right" + +Vertical alignment can be set as +"top","center","bottom" + +Note that the alignment options are specified as strings. + +Note2: In order to set the default alignment for all cells in the table use the SetAlign() method. 
    +  
    See also
    GTextTable::SetAlign, GTextTable::SetCellAlign and GTextTable::SetColAlign +

    Example

    +$table->SetRowAlign(6,'right'); +
    +

    +

     

     

    + +Set font color for an entire row.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aColor + + Font color
    + +

    Description
    Set font color for an entire row. + +Note: To set the default color for all cells use the SetColor() method. 
    +  
    See also
    GTextTable::SetColor, GTextTable::SetCellColor and GTextTable::SetColColor +

    Example

    +$table->SetRowColor(5,'red'); +
    +

    +

     

     

    + +Specify background color in an entire row of cells.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aColor + + Background color
    + +

    Description
    Specify background color in an entire row of cells. + +Note: To set the default background fill color for all cells usde the SetFillColor() method. 
    +  
    See also
    GTextTable::SetFillColor, GTextTable::SetCellFillColor and GTextTable::SetColFillColor +

    Example

    +// Highlight row 0 with white text on gray bakground
    $table->SetRowFillColor(0,'darkgray');
    $table->SetRowColor(0,'white');
    +

    +

    +

     

     

    + +Specify font family and style for an entire row of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aFF + + Font family
    +$aFS + + Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify font family and style for an entire row of cells + +Note:To set the default font for all cells use the SetFont() method. 
    +  
    See also
    GTextTable::SetFont, GTextTable::SetCellFont and GTextTable::SetColFont +

    Example

    +$table->SetRowFont(0,FF_ARIAL,FS_NORMAL,12); +
    +

    +

     

     

    + +Set style, color and width of a specified horizontal grid line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Grind line to specify
    +$aWeight + + +1 +Width of line
    +$aColor + + +'black' +Color of line
    +$aStyle + + +TGRID_SINGLE +Grid line style (see below)
    + +

    Description
    Set style, color and width of a specified horizontal grid line in the table. The grid lines are numbered from 1 to columns-1 and from top to bottom. The grid lines are defined as the internal lines in the table. The outer border of the table is controlled separately with the SetBorder() method. +

    +The style for the grid lines can be one of the following three +

      +
    1. TGRID_SINGLE, Single solid line of the given color and weight +
    2. TGRID_DOUBLE, Two solid lines of the given color and weight. The distance between the lines is the same as the weight. +
    3. TGRID_DOUBLE2, Two solid lines of the given color. The first line has twice the weight as the second. This type of line is often used to mark a summation line in a table. +
    + +Note: In order to remove a grid line in the table set the width to 0. + 
    +  
    See also
    GTextTable::SetGrid and GTextTable::SetColGrid +

    Example

    +// Add a double line of width=2 to mark the summation row
    // in a atable
    $table->SetRowGrid(4,2,'black',TGRID_DOUBLE2);
    +

    +

    +

     

     

    + +Set background image for an entire row of cells

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aFile + + Filename of image
    +$aScale + + +1.0 +Scale of image
    +$aMix + + +100 +Blend factor for image (0-100)
    + +

    Description
    Set background image for an entire row of cells. The should be stored in a file whos filename is given as the second parameter. The scdaling factor can be specifed as an arbitary floating point value between 0-1. +

    +The Blend factor is specified as an integer between 0 and 100 where 100 is 100% blend factor. + 
    +  

    See also
    GTextTable::SetImage, GTextTable::SetCellImage and GTextTable::SetColImage +

    Example

    +$table->SetRowImage(1,$fileName,0.5,60); +
    +

    +

     

     

    + +Set number format in an entire row of cells.

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aF + + Format string
    + +

    Description
    Set number format in an entire row of cells. The number format should be given in the style of printf() family format strings. A cell that contains non numeric data will not be affected in any way by this method. + +Note: It is the resposnibility of the client to make any necessary rounding of the numbers. 
    +
    +
    Returns
    VOID
    +  
    See also
    GTextTable::SetNumberFormat, GTextTable::SetCellNumberFormat and GTextTable::SetCellNumberFormat +

    Example

    +// Use 2 decimals with leading zero
    $table->SetRowNumberFormat('%0.2f');
    +

    +

    +

     

     

    + +Set internal cell margins in pixels for all cells in the specified row

    + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Row index
    +$aPad + + Internal cell margin
    + +

    Description
    Set internal cell margins in pixels for all cells in the specified row. + +By default the internal cell padding is 5 pixels. + +Note: To change the default cell padding for all cells in the table use the Setpadding() method. 
    +  
    See also
    GTextTable::SetCellPadding, GTextTable::SetPadding and GTextTable::SetColPadding +

    Example

    +$table->SetRowPadding(4,12); +
    +

    +

     

     

    + +Set position of the entire table on the graphn using the current X,Y sclae

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X-position according to current scle
    +$aY + + Y position according to curent scale
    + +

    Description
    This method makes it possible to place the table at specific scale coordinates within the plot area of the graph. This could for example be used to place a small table at each of the data points in a line graph (or some other type of plot) to show fyrther details. +

    +Note: The anchor position of the table can also be adjusted by the method SetAnchorPos(). By deagule the top left corner of the table is aligned with the specified coordinates. 
    +
    +

    Returns
    VOID
    +  
    See also
    GTextTable::SetPos and GTextTable::SetAnchorPos +

    Example

    +// Create the tables and position them at each data point
    // In the line plot
    // The data for each table is held in $tabledata[] array
    // and the plot data is available in $datay[] array.

    $n = count($datay);
    $table=array();
    for($i=0; $i < $n; ++$i ) {
        $table[$i] = new GTextTable();
        $table[$i]->Set($tabledata[$i]);
        $table[$i]->SetScalePos($i,$datay[$i]);
        $table[$i]->SetFillColor('lightyellow@0.5');
        // We center all tables on the data point
        $table[$i]->SetAnchorPos('center','middle');
        $graph->Add($table[$i]);
    }
    ...
    // Create the line
    $l1 = new LinePlot($datay);
    $l1->SetWeight(2);
    $graph->Add($l1);
    ...
    +

    +

    +

     

     

    + +Return basic HTML version of the table

    +
    + +

    Description
    Return basic HTML version of the table. Note that this is just a very basic representation of the table without any of the formatting applied the table. 
    + +

    Example

    +$str = $table->toString(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttActivityInfo.html b/html/includes/jpgraph/docs/ref/GanttActivityInfo.html new file mode 100644 index 0000000000..402f758fec --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttActivityInfo.html @@ -0,0 +1,267 @@ +


    CLASS GanttActivityInfo
    +(Defined in: jpgraph_gantt.php : 142)
     GanttActivityInfo 
     Hide() 
    SetBackgroundColor() 
    SetColor() 
    SetColTitles() 
    SetColumnMargin() 
    SetFont() 
    SetFontColor() 
    SetHeaderAlign() 
    SetStyle() 
    Show() 
    +
     

    Class usage and Overview
    This class is responsible for handling the titles of the columns in the left section of the Gantt graph, i.e. the information columns for each activity. +

    +It is instantiated in the scale and is accessed through the Gantt scale for example as in +

    + +$graph->scale->actinfo->SetColTitles( + array('Note','Name','Duration','Start','Finish'),array(30,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +

    +It is optional to use titles for the columns, so if you don't want to use titles you never have to add the above lines to a Gantt graph (but it sure looks nicer if you do ... ) +

      +


    Class Methods

    +

     

     

    + +Hide titles

    + + + + +
    ArgumentDefaultDescription
    +$aF + + +true +TRUE=Hide titles
    + +

    Description
    Hide titles 
    + +

    Example

    +// Hide the titles
    $graph->scale->actinfo->Hide();
    +

    +

    +

     

     

    + +Specify backgound color for titles

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Specify backgound color for titles 
    + +

    Example

    +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +
    +

    +

     

     

    + +Specify color of vertical dividers between each title column

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Specify color of vertical dividers between each title column 
    + +

    Example

    +$graph->scale->actinfo->SetColor('navy'); +
    +

    +

     

     

    + +Specify texts to be used as titles

    + + + + + + +
    ArgumentDefaultDescription
    +$aTitles + + Array of titles
    +$aWidth + + +null +Optional width for each column
    + +

    Description
    Specify texts to be used as titles. The columns automatically becoms wide enough to hold the widest text in any columns. However you can also specify a specific width of each column by supplying an array of widths. However, the width can never be made smaller than the width of the texts, just larger. +

    +It is perfectly legal to just specify the explicit width of the first few columns and have the rest of them become automatically sized. See eamplebelow. + 
    + +

    Example

    +// Specify some titles and explicitely set the size of the
    // first two columns.
    $graph->scale->actinfo->SetColTitles(
        array('Note','Name','Duration','Start','Finish'),array(30,100));
    +

    +

    +

     

     

    + +Specify extra margin to the left and right of the text in each column

    + + + + + + +
    ArgumentDefaultDescription
    +$aLeft + + Left margin (in pixels)
    +$aRight + + Right margin (in pixels)
    + +

    Description
    Specify extra margin to the left and right of the text in each column 
    + +

    Example

    +$graph->scale->actinfo->SetColumnMargin(30,30);
    +

    +

    +

     

     

    + +Specify title font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + Font family
    +$aFStyle + + +FS_NORMAL +Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify title font 
    + +

    Example

    +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +
    +

    +

     

     

    + +Specify title font color

    + + + + +
    ArgumentDefaultDescription
    +$aFontColor + + Color specification
    + +

    Description
    Specify title font color 
    + +

    Example

    +$graph->scale->actinfo->SetFontColor('navy'); +
    +

    +

     

     

    + +Adjust headers left, right or centered

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + Header alignment
    + +

    Description
    Adjust headers left, right or centered. By default headers are centered. 
    + +

    Example

    +$graph->scale->actinfo->SetHeaderAlign('left'); +
    +

    +

     

     

    + +Enable 3D header style

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + 1=3D style
    + +

    Description
    Enable 3D header style. This is enabled by default. 
    + +

    Example

    +// No 3D style for titles
    $graph->scale->actinfo->SetStyle(0);
    +

    +

    +

     

     

    + +Show titles

    + + + + +
    ArgumentDefaultDescription
    +$aF + + +true +TRUE=Show headers
    + +

    Description
    Show titles. If you specify titles they are by default displayed. 
    +  
    See also
    GanttActivityInfo::Hide +

    Example

    +// Hide the titles
    $graph->scale->actinfo->Show(false);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttBar.html b/html/includes/jpgraph/docs/ref/GanttBar.html new file mode 100644 index 0000000000..b1ec4f2b24 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttBar.html @@ -0,0 +1,214 @@ +


    CLASS GanttBar EXTENDS GanttPlotObject
    +(Defined in: jpgraph_gantt.php : 3140)
     GanttBar  GanttPlotObject  
     GanttBar() 
    SetColor() 
    SetFillColor() 
    SetHeight() 
    SetPattern() 
    SetShadow() 
    +
     
     

    Class usage and Overview
    This class represents each activity bar. The activity bars can then be added to a GanttChart vi the GanttGraph::Add()

      +


    Class Methods

    +

     

     

    + +Create a new activity bar.

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aPos + + Vertical position (row)
    +$aLabel + + Text label
    +$aStart + + Start date
    +$aEnd + + End date
    +$aCaption + + +"" +Caption string for bar
    +$aHeightFactor + + +0.6 +Height factor
    + +

    Description
    Create a new activity bar. An activity bar is created by specifyin : +
      +
    1. The row in gentt chart to draw the activity bar in +
    2. Specify a label(titel) for the activity. +
    3. A start date +
    4. An end date +
    5. A caption which is a string that gets stroked to the right of the activity bar. +
    6. Height as either an asbolute value or as a fraction of the available row height. +

    + +

    Example

    +$bar = new GanttBar(4,"Group 2", "2001-11-30","2001-12-22","[5%]",10); +
    +

    +

     

     

    + +Specify frame color for the activity bar

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color for gantt bar
    + +

    Description
    Specify frame color for the activity bar. 
    + +

    Example

    +$bar->SetColor('orange');
    +

    +

    +

     

     

    + +Specify fill color for activity bar.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Fill color
    + +

    Description
    Specify fill color for activity bar. +

    +Note: It is perfectly possible to use both a background color as weel as a pattern. + 
    + +

    Example

    +$bar->SetPattern(BAND_RDIAG,"yellow");
    $bar->SetFillColor("red");
    +

    +

    +

     

     

    + +Set height for the bar.

    + + + + +
    ArgumentDefaultDescription
    +$aHeight + + Height specification for bars
    + +

    Description
    Specify height of the activity bar. The height can be specified as either as fraction (0.0 to 1.0) or as an absolute value (1 to 200). In the first case the height is interpreted as the fraction of the row height and in the second case as an absolute height in pixels. 
    + +

    Example

    +$bar->SetHeight(0.6);
    +

    +

    +

     

     

    + +Specify what pattern to use for the activity bars.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + Pattern specification
    +$aColor + + +"blue" +Pattern color
    +$aDensity + + +95 +Density
    + +

    Description
    The following patterns are currently implemented: +
      +
    1. GANTT_RDIAG, Right diagonal lines +
    2. GANTT_LDIAG, Left diagonal lines +
    3. GANTT_SOLID, Solid one color +
    4. GANTT_LVERT, Vertical lines +
    5. GANTT_LHOR, Horizontal lines +
    6. GANTT_VLINE, Vertical lines +
    7. GANTT_HLINE, Horizontal lines +
    8. GANTT_3DPLANE, A 3D plane +
    9. GANTT_HVCROSS, Crosses +
    10. GANTT_DIAGCROSS, Diagonal crosses +

    +  
    See also
    Progress::SetPattern +

    Example

    +$bar->SetPattern(BAND_RDIAG,"yellow");
    $bar->SetFillColor("red");
    +

    +

    +

     

     

    + +Add a drop shadow to the bar.

    + + + + + + +
    ArgumentDefaultDescription
    +$aShadow + + +true +True=Add drop shadow to bars
    +$aColor + + +"gray" +Colro fo shadow
    + +

    Description
    Add a drop shadow to the bar. + 
    + +

    Example

    +$bar->SetShadow(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttGraph.html b/html/includes/jpgraph/docs/ref/GanttGraph.html new file mode 100644 index 0000000000..9535d4aa26 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttGraph.html @@ -0,0 +1,357 @@ +


    CLASS GanttGraph EXTENDS Graph
    +(Defined in: jpgraph_gantt.php : 331)
     GanttGraph  Graph  
     Add() 
    CreateSimple() 
    GanttGraph() 
    SetDateRange() 
    SetLabelVMarginFactor() 
    SetSimpleFont() 
    SetSimpleStyle() 
    SetVMarginFactor() 
    ShowHeaders() 
    Stroke() 
    +
     
     

    Class usage and Overview
    Create a Gantt graph. The Gantt graph can then be built up by adding activity bars and milestones.

      +

    See also related classes:
    GanttBar, GanttVLine and MileStone

     


    Class Methods

    +

     

     

    + +Add a new Gantt object

    + + + + +
    ArgumentDefaultDescription
    +$aObject + + Gantt plot object
    + +

    Description
    Add a gantt object to the graph. A gantt object is an instance of either: +
      +
    • GanttBar +
    • MileStone +
    • GanttVLine +
     
    + +

    Example

    +$vline = new GanttVLine("2002-02-28");
    $vline->title->Set("2002-02-28");
    $vline->title->SetFont(FF_FONT1,FS_BOLD,10);
    $graph->Add($vline);
    +

    +

    +

     

     

    + +A utility function to help create the Gantt charts

    + + + + + + + + +
    ArgumentDefaultDescription
    +$data + + Gantt bar specification (See below)
    +$constrains + + +array() +Constrain specification (see below)
    +$progress + + +array() +Progress specification (see below)
    + +

    Description
    For a simple Gantt graphs this will simplify it's creation. The idea is that this method accepts a number of data arrays which specifies the activities in the Gantt graph. +

    +Description of arguments
    +

      +
    • $data. Specifies the basic type of activity. Eac entry is an array with the following content: +
        +
      1. Row where activity whould be +
      2. Type of activity, can be one of ACTYPE_NORMAL, ACTYPE_GROUP, ACTYUPE_MILESTONE +
      3. Activity title +
      4. Start date +
      5. End date +
      6. Caption text +
      +
    • $constrains. Specifies potential constrain links between activities each entry is an array with the following content +
        +
      1. From activity (specified by row) +
      2. To activity (specified by row) +
      3. Constrain type, (e.g CONSTRAIN_ENDSTART) +
      +
    • $progress. Specify a potential progress bar for each activity. Each entry is an array with the following content +
        +
      1. Activity specification (by row) +
      2. Progress as a fraction in the range [0,1] +
      +
    + + 
    +  
    See also
    GanttPlotObject::SetConstrain, Progress::Set, GanttGraph::SetSimpleFont and GanttGraph::SetSimpleStyle +

    Example

    +$data = array(
      array(0,ACTYPE_GROUP,    "Phase 1",  "2001-10-26","2001-11-23",''),
      array(1,ACTYPE_NORMAL,   "  Label 2",  "2001-10-26","2001-11-16",''),
      array(2,ACTYPE_NORMAL,   "  Label 3", "2001-11-20","2001-11-22",''),
      array(3,ACTYPE_MILESTONE,"  Phase 1 Done", "2001-11-23",'M2') );

    // The constrains between the activities
    $constrains = array(array(1,2,CONSTRAIN_ENDSTART),
                array(2,3,CONSTRAIN_STARTSTART));

    $progress = array(array(1,0.4));

    // Create the basic graph
    $graph = new GanttGraph();
    $graph->title->Set("Example with grouping and constrains");

    // Setup scale
    $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
    $graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR);

    // Add the specified activities
    $graph->CreateSimple($data,$constrains,$progress);

    // .. and stroke the graph
    $graph->Stroke();
    +

    +

    +

     

     

    + +Create a new GanttGraph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + +0 +Width of graph
    +$aHeight + + +0 +Height of graph
    +$aCachedName + + +"" +Filename to use if cache is enables
    +$aTimeOut + + +0 +Timeout in minutes
    +$aInline + + +true +True=Stream back to browser
    + +

    Description
    Construct a new GanttGraph. This differs slightly from the standard Graph or PlotGraph in that you are not required to specify width and height of the graph. Instead these can be left out and will be automatically be determined. +

    +As a further refinement you can just specify width and have the height be automtically determined. + 
    +  

    See also
    Graph::Graph +

    Example

    +// Setup Gantt graph
    $graph = new GanttGraph();
    $graph->SetShadow();
    $graph->SetBox();

    // Only show part of the Gantt
    $graph->SetDateRange('2001-11-22','2002-1-24');
    +

    +

    +

     

     

    + +Specify date range for Gantt chart.

    + + + + + + +
    ArgumentDefaultDescription
    +$aStart + + Start date
    +$aEnd + + End date
    + +

    Description
    Specify the date range for Gantt graphs. If this is not set it will be automtically determined from the input data. +

    +All gantt chart objects, like bar activities, will be clipped to the spcified date range should they happen to be wider then the specified range. +

    +The date is specified as a normal date string according to the chosen locale. + 
    + +

    Example

    +$graph->SetDateRange('2001-11-22','2002-1-24');
    +

    +

    +

     

     

    + +Set margin vertical factor.

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + Margin factor
    + +

    Description
    Specify the fraction of the font height that should be added as vertical margin between the labels. 
    + +

    Example

    +$ganttgraph->SetLabelVMarginFactor(0.7); +
    +

    +

     

     

    + +Specify font for simplified Gantt graph

    + + + + + + +
    ArgumentDefaultDescription
    +$aFont + + Font family
    +$aSize + + Font size
    + +

    Description
    Specify font for simplified Gantt graph constructed with CreateSimple 
    +  
    See also
    GanttGraph::CreateSimple +

    Example

    +$ganttgraph->SetSimpleFont(FF_FONT2); +
    +

    +

     

     

    + +Specify style parameters for graphs constructed with CreateSimple

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aBand + + Patern style
    +$aColor + + Pattern color
    +$aBkgColor + + Pattern background color
    + +

    Description
    Specify looks for bars in Gantt graph when the gantt chart is created with CreateSimple. +

    +The pattern style can be one of + +

      +
    1. GANTT_RDIAG, Right diagonal lines +
    2. GANTT_LDIAG, Left diagonal lines +
    3. GANTT_SOLID, Solid one color +
    4. GANTT_LVERT, Vertical lines +
    5. GANTT_LHOR, Horizontal lines +
    6. GANTT_VLINE, Vertical lines +
    7. GANTT_HLINE, Horizontal lines +
    8. GANTT_3DPLANE, A 3D plane +
    9. GANTT_HVCROSS, Crosses +
    10. GANTT_DIAGCROSS, Diagonal crosses +

    +  
    See also
    GanttGraph::CreateSimple and GanttBar::SetPattern +

    Example

    +$ganttgraph->SetSimpleStyle(GANTT_SOLID,'orange','orange'); +
    +

    +

     

     

    + +Specify the margin factor for lines in the gantt graph

    + + + + +
    ArgumentDefaultDescription
    +$aVal + + Vertical margin factor
    + +

    Description
    Specify the margin factor for lines in the Gantt graph. A factor of 1 makes each line take just as much space as it needs. A factor of 1.5 makes it 1.5 linmes apart and a factor of 2 makes it double-line spacing and so on. +

    +Hint: When using icon in titles it is usually a good idea to use a margin factor > 1 + 
    +  

    See also
    GanttGraph::SetLabelVMarginFactor +

    Example

    +$graph->SetVMarginFactor(2); +
    +

    +

     

     

    + +Determine what headers/scales to display.

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + Logic OR of flags to specify what headers should be displayed.
    + +

    Description
    Specify what headers should be displayed on the Gantt charts. Possible headers are: +
      +
    • GANTT_HYEAR +
    • GANTT_HMONTH +
    • GANTT_HWEEK +
    • GANTT_HDAY +
    • GANTT_HHOUR +
    • GANTT_HMIN +
    +To specify multiple header you just bitwise OR the wanted number of headers together. + 
    + +

    Example

    +// Show all headers
    $graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
    +

    +

    +

     

     

    + +Internal. Stroke the gantt chart.

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +Filename to stroke image to
    + +

    Description
    Internal. Stroke the gantt chart. If a filename is specified then the graph will be stroked to that file and will not be sent back to the browser. +

    +This should as usual be the last method called in your script. + 
    +  

    See also
    Graph::Stroke +

    Example

    +$ganttgraph->Stroke();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttPlotObject.html b/html/includes/jpgraph/docs/ref/GanttPlotObject.html new file mode 100644 index 0000000000..ecf64ca3bc --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttPlotObject.html @@ -0,0 +1,176 @@ +


    CLASS GanttPlotObject
    +(Defined in: jpgraph_gantt.php : 2931)
     GanttPlotObject 
     SetCaptionMargin() 
    SetConstrain() 
    SetCSIMAlt() 
    SetCSIMTarget() 
    SetLabelLeftMargin() 
    +
     

    Class usage and Overview
    Abstract base class to hold common properties for all objects that are drawn on the Gantt plot like activity bars, milestones, vertical markers. +

    +Internal method that can't be instantiated directly. Used to capture the common properties of all objects that can be added to the Ganttgraph, i.e. GanttBar, MileStones GanttVLine. + +

      +

    See also related classes:
    GanttGraph, GanttBar, GanttVLine and MileStone

     


    Class Methods

    +

     

     

    + +Specify margin (in pixels) between object and caption string

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + Margin in pixels
    + +

    Description
    Specify margin (in pixels) between object and caption string 
    + +

    Example

    +$ms->SetCaptionMargin(20);
    +

    +

    +

     

     

    + +Specify a constrain link between this object and another

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aRow + + Gantt row where tarhet for constrain is
    +$aType + + Type of constrain
    +$aColor + + +'black' +Color of constrain
    +$aArrowSize + + +ARROW_S2 +Size of ending arrow
    +$aArrowType + + +ARROWT_SOLID +Type of arrow
    + +

    Description
    Specify a constrain link between this object and another. The possible constrain types are +
      +
    • CONSTRAIN_STARTSTART +
    • CONSTRAIN_STARTEND +
    • CONSTRAIN_ENDSTART +
    • CONSTRAIN_ENDEND +
    +

    +The possible arrow sizes are +

      +
    • ARROW_S1, smallest +
    • ARROW_S2, (default) +
    • ARROW_S3 +
    • ARROW_S4 +
    • ARROW_S5, largest +
    + +

    +Type of arrow can be either of +

      +
    • ARROWT_SOLID +
    • ARROWT_OPEN +
     
    + +

    Example

    +// Add a constrain from the end of this activity to 
    // the start of the activity on row 2
    $bar->SetConstrain(2,CONSTRAIN_ENDSTART);
    +

    +

    +

     

     

    + +Specify ALT-tag text for hotspot

    + + + + +
    ArgumentDefaultDescription
    +$aAlt + + Alt text
    + +

    Description
    The ALT text used in conjunction with image map is handled slightly diffrent between different browsers. Most browser show this text if you let the mouse pointer hoover over a hotspot in the image for 1 or 2 seconds. +

    +Note: You must have specified a CSIM atrget for this to have any effect. 
    +  

    See also
    GanttPlotObject::SetCSIMTarget +

    Example

    +$bar->SetCSIMAlt('Main activity'); +
    +

    +

     

     

    + +Specify URL when object is used in a CSIM

    + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + Target URL
    +$aAlt + + +'' +Alt texts
    + +

    Description
    Used to specify the target URL for for a hotspot 
    +  
    See also
    GanttPlotObject::SetCSIMAlt +

    Example

    +$bar->SetCSIMTarget('http://localhost/show_details.php'); +
    +

    +

     

     

    + +Specify offset (in pixels) for the title of this object.

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + Offset in pixels
    + +

    Description
    Specify offset (in pixels) for the title of this object 
    + +

    Example

    +$ms->SetLabelLeftMargin(20);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttScale.html b/html/includes/jpgraph/docs/ref/GanttScale.html new file mode 100644 index 0000000000..fb4b8459a2 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttScale.html @@ -0,0 +1,167 @@ +


    CLASS GanttScale
    +(Defined in: jpgraph_gantt.php : 1834)
     GanttScale 
     SetDateLocale() 
    SetRange() 
    SetTableTitleBackground() 
    SetVertLayout() 
    SetWeekStart() 
    UseWeekendBackground() 
    +
     

    Class usage and Overview
    Internal class to represent the scale used for Gantt graphs. + +The scale is accessible as GanttGraph::scale + +The following public available subobjects are available + +
      +
    • tableTitle (Instance of class TextProperty) +
    • divider (Instance of class LineProperty) +
    • actinfo (Instance of class GanttActivityInfo) +
    • year (Instance of HeaderProperty) +
    • month (Instance of HeaderProperty) +
    • week (Instance of HeaderProperty) +
    • day (Instance of HeaderProperty) +
    • hour (Instance of HeaderProperty) +
    • minute (Instance of HeaderProperty) +

      +

    See also related classes:
    GanttGraph, HeaderProperty, GanttActivityInfo and TextProperty

     


    Class Methods

    +

     

     

    + +Specify locale to use for scale.

    + + + + +
    ArgumentDefaultDescription
    +$aLocale + + String to specify locale
    + +

    Description
    Specify locale to use for scale. If no locale is specified then the default locale for the installed system will be used. 
    +  
    See also
    DateLocale::DateLocale +

    Example

    +$ganttgraph->scale->SetDateLocale('US_en'); +
    +

    +

     

     

    + +Specify date range for scale.

    + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + Min date
    +$aMax + + Max date
    + +

    Description
    Specify scale min and max date either as timestamp or as date strings. Always round to the nearest week boundary 
    + +

    Example

    +$ganttgraph->scale->SetRange("2002-11-23", "2003-03-31");
    +

    +

    +

     

     

    + +Specify background for the table title area.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify background for the table title area (upper left corner of the table). 
    + +

    Example

    +$ganttgraph->scale->SetTableTitleBackground('lightblue'); +
    +

    +

     

     

    + +Specify the vertical layout fro rows.

    + + + + +
    ArgumentDefaultDescription
    +$aLayout + + Vertical layout parameter
    + +

    Description
    Should the layout be from top or even. Valid parameters are +
      +
    • GANTT_EVEN, Spread out the rows even over the whole height of the plot. +
    • GANTT_FROMTOP, Use the minimum height required for the rows starting from top. +
    + +Note that if you use auto-sizing of the Gantt chart these parameters have little effect since the total height of the image will always be so that all rows fit exactly. + 
    + +

    Example

    +$granntgraph->scale->SetVertLayout(GANTT_FROMTOP); +
    +

    +

     

     

    + +Specify which weekday should start the week

    + + + + +
    ArgumentDefaultDescription
    +$aStartDay + + Weekday, (0-6)
    + +

    Description
    Which day should the week start? +0==Sun, 1==Monday, 2==Tuesday etc + +By default weeks start on Mondays. 
    +  
    See also
    GanttScale::SetRange +

    Example

    +$granttgraph->SetWeekStart(1); +
    +

    +

     

     

    + +Determine if the background color for weekends in the scale should extend down in the plot area.

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + True=Use the weekend background color in the ganttgraph
    + +

    Description
    Determine if the background color for weekends in the scale should extend down in the plot area. 
    + +

    Example

    +$ganttgraph->scale->USeWeekendBackground();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GanttVLine.html b/html/includes/jpgraph/docs/ref/GanttVLine.html new file mode 100644 index 0000000000..df8c470b0b --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GanttVLine.html @@ -0,0 +1,111 @@ +


    CLASS GanttVLine EXTENDS GanttPlotObject
    +(Defined in: jpgraph_gantt.php : 3474)
     GanttVLine  GanttPlotObject  
     GanttVLine() 
    SetDayOffset() 
    SetTitleMargin() 
    +
     
     

    Class usage and Overview
    This class represents a vertical line on the gantt scale. It can for example be used to illustrate the boundaries between different phases in a project plan. + +To access the title property just use the 'title' property of the line, for example + +$line = new GantVLine(.....); +$line->title->SetFont(FF_FONT1, FS_BOLD); + +$ganttgraph->Add($line); +

      +

    See also related classes:
    GanttGraph, GanttBar and MileStone

     


    Class Methods

    +

     

     

    + +Create a new vertical line in the Gantt graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDate + + Date where the line should be
    +$aTitle + + +"" +Title of line
    +$aColor + + +"black" +Color for line
    +$aWeight + + +3 +Line weight
    +$aStyle + + +"dashed" +Line style (dotted, slashed etc)
    + +

    Description
    Create a new verticla line according to specification that later on can be added to the gantt graph vis its Add() method. 
    +  
    See also
    Image::SetLineStyle +

    Example

    +$line = new GanttVLine('2002-11-02','System test starts','darkblue',2,'solid');

    $granttgraph->Add($line);

    +

    +

    +

     

     

    + +Specify where in the single day the line sould be drawn.

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + +0.5 +Fraction of day (0,1)
    + +

    Description
    Specify where in the single day the line sould be drawn.  
    + +

    Example

    +// Draw line in the middle of the day
    $line->SetDayOffset(0.5);
    +

    +

    +

     

     

    + +Set distance between end of line and title.

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + Margin in pixels
    + +

    Description
    Set distance between end of line and title. 
    + +

    Example

    +$line->SetTitleMargin(20); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Graph.html b/html/includes/jpgraph/docs/ref/Graph.html new file mode 100644 index 0000000000..0750ecf6ca --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Graph.html @@ -0,0 +1,1748 @@ +


    CLASS Graph
    +(Defined in: jpgraph.php : 457)
     Graph 
     Add() 
    AddBand() 
    AddLine() 
    AddText() 
    AddY() 
    AddY2() 
    CheckCSIMCache() 
    GetHTMLImageMap() 
    Graph() 
    Set3DPerspective() 
    Set90AndMargin() 
    SetAlphaBlending() 
    SetAngle() 
    SetAxisLabelBackground() 
    SetAxisStyle() 
    SetBackgroundCFlag() 
    SetBackgroundCountryFlag() 
    SetBackgroundGradient() 
    SetBackgroundImage() 
    SetBackgroundImageMix() 
    SetBox() 
    SetClipping() 
    SetColor() 
    SetCSIMImgAlt() 
    SetFrame() 
    SetFrameBevel() 
    SetGridDepth() 
    SetIconDepth() 
    SetImgFormat() 
    SetMargin() 
    SetMarginColor() 
    SetScale() 
    SetShadow() 
    SetTextScaleAbsCenterOff() 
    SetTickDensity() 
    SetTitleBackground() 
    SetTitleBackgroundFillStyle() 
    SetY2OrderBack() 
    SetY2Scale() 
    SetYDeltaDist() 
    SetYScale() 
    Stroke() 
    StrokeCSIM() 
    StrokeFrameBackground() 
    +
     

    Class usage and Overview
    The Graph class is the main container class for all x,y-axis based plots which controls the creation of the entire graph. You must always instantiate one instance to create a graph. Through this class one controls many overall settings of the image displayed. +

    +Please note that to create Pie, Gantt, Canvas and Spider charts you have to use their respective creation classes. +

    +Public properties: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescription
    xaxisAxisX-axis
    yaxisAxisY-axis
    xgridGridGrid lines for X-axis
    ygridGridGrid lines for Y-axis
    legendLegendProperties for legend box
    titleTextGraph main title
    subtitleTextSub title
    subsubtitleTextSub title
    tabtitleGraphTabTitleOption Tab title for graph
    imgRotImageThe image canvas
    +

      +

    See also related classes:
    Axis, Grid, Text and Image

     


    Class Methods

    +

     

     

    + +Add any plot object to the graph

    + + + + +
    ArgumentDefaultDescription
    +&$aPlot + + Plot object
    + +

    Description
    Each plot that should be displayed within the graph has to be added to the graph. This is the main method to add object. You can use this method to add +
      +
    • Plots +
    • Texts +
    • Plot lines +
    • Plot bands +
    + +This method will add a plopt for use with the ?Left? Y-scale, (the normal Y scale). To add a plot to the second Y scale you should use AddY2(). +

    +Note that since the plot is added as a reference any changes you make to the original plot will also happen to the plot you have added to the graph. +

    +Add() will always add plots to the first Y-scale. If you are using two Y-axis then you must use AddY2() to add plots to the second Y-scale. + 
    +  

    See also
    Graph::AddY2 and Graph::SetScale +

    Example

    +$graph = new Graph(300,200,"auto");    
    $graph->img->SetMargin(40,30,20,40);
    $graph->SetScale("textlin");
    $graph->SetShadow();

    // Create a bar pot
    $bplot = new BarPlot($datay);
    $bplot->SetFillColor("orange");
    $graph->Add($bplot);

    // Display the graph
    $graph->Stroke();
    +

    +

    +

     

     

    + +Add vertical or horizontal band

    + + + + + + +
    ArgumentDefaultDescription
    +&$aBand + + Band object
    +$aToY2 + + +false +Add object to Y2 axis
    + +

    Description
    A plot may have one or several filled horizontal or vertical "bands" to emphasise certain scale areas. +

    +Each band is an instance of the PlotBand class. For types of plot band see the documentation of class PlotBand +

    +Note: You can alos use the standard method Add() to add bands. 
    +  

    See also
    PlotBand::PlotBand and Graph::Add +

    Example

    +$graph->AddBand(new PlotBand(HORIZONTAL,BAND_RDIAG,0, "max", "red", 2)); +
    +

    +

     

     

    + +Add a line object (class PlotLine) to the graph

    + + + + + + +
    ArgumentDefaultDescription
    +&$aLine + + Line object to add
    +$aToY2 + + +false +Add line to Y2 axis
    + +

    Description
    Add a vertical or horizontal line to the graph. The line will extend over the entire length of the plot. The plot object is an instance of the PlotLine class +

    +Note: You can alos use the standard method Add() to add lines. 
    +  

    See also
    PlotLine::PlotLine and Graph::Add +

    Example

    +// Add mark graph with static lines
    $graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2));
    $graph->AddLine(new PlotLine(VERTICAL,3,"black",2));
    +

    +

    +

     

     

    + +Add text object to the graph

    + + + + + + +
    ArgumentDefaultDescription
    +&$aTxt + + Text object to add
    +$aToY2 + + +false +Add text to Y2 axis
    + +

    Description
    Adds an instance of the Text class to the graph, allowing arbitrary text to be placed anywhere in the graph. +

    +Note: You can alos use the standard method Add() to add bands. + 
    +  

    See also
    Text::Text and Graph::Add +

    Example

    +// You can specify the position as fraction of the
    // image width and height
    $caption=new Text(?Figure 1. Temperature over time?,0.1,0.8);
    $caption->SetFont(FONT1_BOLD);
    $graph->AddText($caption);
    +

    +

    +

     

     

    + +Add plot to second Y-axis n

    + + + + + + +
    ArgumentDefaultDescription
    +$aN + + Number of axis to add data to
    +&$aPlot + + The plot to be added
    + +

    Description
    This method is used to add a plot in the case the graph has multiple Y-axis. The first argument should be the index of the Y-axis. 
    + +

    Example

    +php
    include ("../jpgraph.php");
    include (
    "../jpgraph_line.php");

    $datay = array(5,3,7,2);
    $datay2 = array(88,10,55,42);
    $datay3 = array(255,35,745,244);
    $datay4 = array(130,97,68,119);

    // Setup the graph
    $graph = new Graph(600,250);
    $graph->SetMargin(30,200,20,20);
    $graph->SetMarginColor('white');
    $graph->SetColor('lightgray');

    $graph->SetScale("intlin");

    $graph->SetYScale(0,"lin");
    $graph->SetYScale(1,"lin");
    $graph->SetYScale(2,"lin");

    $p1 = new LinePlot($datay);
    $p1->SetColor('blue');
    $graph->Add($p1);

    $p2 = new LinePlot($datay2);
    $p2->SetColor('darkred');
    $graph->AddY(0,$p2);
    $graph->ynaxis[0]->SetColor('darkred');

    $p3 = new LinePlot($datay3);
    $p3->SetColor('red');
    $graph->AddY(1,$p3);
    $graph->ynaxis[1]->SetColor('red');

    $p4 = new LinePlot($datay4);
    $p4->SetColor('blue');
    $graph->AddY(2,$p4);
    $graph->ynaxis[2]->SetColor('blue');

    // Output line
    $graph->Stroke();


    +

    +

    +

     

     

    + +Add plot to second Y-axis

    + + + + +
    ArgumentDefaultDescription
    +&$aPlot + + Plot to add to the Y2 axis
    + +

    Description
    Works the same way as Add() but the plot is added for use with the Y2 scale (the right Y scale) instead. 
    +  
    See also
    Graph::Add and Graph::SetY2Scale +

    Example

    +$graph = new Graph(300,200);
    $graph->SetScale('linlin');
    $graph->SetY2Scale('linlog');
    $lineplot = new LinePlot($datay);
    $graph->AddY2($lineplot);
    +

    +

    +

     

     

    + +Check if cached CSIM graph exists

    + + + + + + +
    ArgumentDefaultDescription
    +$aCacheName + + Cache file name
    +$aTimeOut + + +60 +Timeout (in minutes)
    + +

    Description
    This method is used to enable caching for graphs that use image maps (CSIM). It should be called as the first method after the creation of the Graph(). If the cached image and image map exists this will be directly sent back to the browser and script execution will stop. +

    +This specifically means that no lines of code after this method will be executed in case the image/map is found in the cache. + 
    +  

    See also
    Graph::StrokeCSIM +

    Example

    +$graph = Graph(300,200);
    $graph->CheckCSIMCache('myimage01',10);

    // .. Lopt of code to create the image

    $graph->StrokeCSIM();
    +

    +

    +

     

     

    + +Get a complete .. tag for the final image map

    + + + + +
    ArgumentDefaultDescription
    +$aMapName + + Image map name
    + +

    Description
    When you are using image maps for a plot then this routine is called in your script to get the resulting image map as a string for the graph. The image map is given the name specified as the first argument to the method. +

    +Please note that due to the way client side image maps work you need to have both the image map and the image available in the script that is sent back to the browser. Since you can't do this at the same time you will have to create an image to disk and read the image map. The you have to stream the HTML page with an tag to load the previously generated image as well as the image map. + 
    + +

    Example

    +// The image must be stroked to find out the image maps
    $graph->Stroke($myfile);

    // Then read the image map
    $imagemap = $graph->GetHTMLImageMap('MainMap');

    echo $imagemap;
    echo "<img src=$myfile>";
    +

    +

    +

     

     

    + +Creates a new graph.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + +300 +Width
    +$aHeight + + +200 +Height
    +$aCachedName + + +"" +Cache file name
    +$aTimeOut + + +0 +Timeout value for cache
    +$aInline + + +true +True=Stream the image back to the browser
    + +

    Description
    Creates a new graph. This is often the first call made to set-up a new graph. +
    +If the cache name is specified (via the $aCachedname) argument then this method will first try to locate the named file in the cache directory (as specified by the DEFINE in jpgraph.php) rather then generating the graph on the fly. If the file is not there or if it is older then the specified timeout value ($aTimeOut) the graph will be generated and saved as the specified file. +

    +If the cache name is specifed as 'auto' then the cache name will be based on the basename of the script with an extension indicating the image format used, i.e. JPG, GIF or PNG. +

    +If the specified file is found in the cache directory then it will be streamed back to the browser directly. +

    +If no cache name is specified then the graph will always be generated and the cache bypassed. The same is true if the DEFINE 'USE_CACHE' or 'READ_CACHE' is set to false. +

    +Before any other operation is performed on the graph a call to SetScale() should be made to finish the initialisation of the graph. + 
    +  

    See also
    Graph::Stroke +

    Example

    +// Example 1. use cache and automtic create the cache name
    $graph = new Graph(400,200,"auto");    
    $graph->img->SetMargin(60,20,30,50);
    $graph->SetScale("textlin");
    $graph->SetMarginColor("silver");
    $graph->SetShadow();

    // Example 2 . Don't use the cache
    $graph = new Graph(400,200);    
    $graph->SetScale("textint");
    +

    +

    +

     

     

    + +Enable image perspective transformation

    + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + +1 +Direction for 3D perspective
    +$aHorizon + + +100 +Distance (in pixels) from the bottom of the image to the horizon
    +$aSkewDist + + +120 +Skew distance (in pixels) on the horizon
    +$aQuality + + +false +Boolean. High quality =
    +$aFillColor + + +'#FFFFFF' +What fill color to use
    +$aBorder + + +false +Boolean. Border around?
    +$aMinSize + + +true +Boolean. Make the transformed image canvas as small as possible
    +$aHorizonPos + + +0.5 +Distance from left on the horizon for the point of focus
    + +

    Description
    Enable final image perspective transformation before sending the image back to the browser. This makes a "skewing" tansformation of the image to emulate a 3D depth. + +

    +Allowed argument for $aDir are +

      +
    1. 'SKEW3D_UP' +
    2. 'SKEW3D_DOWN' +
    3. 'SKEW3D_LEFT' +
    4. 'SKEW3D_RIGHT' +
    + +$aHorizon Determines how far away the horizon are from the bottom of the picture (in pixels) +

    +aSkewDist How far to the right on the horizon is the +"skewing point", a large value gives a very strong for-shortening. +

    +aQuality Use high quality (takes longer time) TRUE or FALSE +

    +aFIllColor Fill background color in the image on places where the original image no longer cover the entire canvas. +

    +aBorder Border around or not +

    +aMinSize Just make the image as large as it has to be. TRUE or FALSE. If this argument is set to false then the original image size will be preserved. +

    +aHorizonPosHow far, in fraction, should the point of focus be from the left edge of the image. 
    + +

    Example

    +$graph->Set3DPerspective(SKEW3D_UP,100,120,true); +
    +

    +

     

     

    + +Rotate the graph 90 degrees and set the margins

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + +0 +Left margin
    +$rm + + +0 +Right Margin
    +$tm + + +0 +Top margin
    +$bm + + +0 +Bottom margin
    + +

    Description
    Rotates the graph 90 degrees and sets the margin as specified. +

    +Remember that when rotating the graph it might be a good idea to adjust the axis so that the alignment of the labels for x and Y axis. For example by setting them as: + +

    +$graph->xaxis->SetLabelAlign('right','center','right'); +
    +$graph->yaxis->SetLabelAlign('center','bottom'); +

    +Note: This is slightly different from using SetAngle() and SetMargin() in that this method automatically adjusts the margin so that width becomes height and vice versa due to the rotation. + + + 
    +  

    See also
    Graph::SetAngle and Graph::SetMargin +

    Example

    +$graph = new Graph(300,200,"auto");
    $graph->SetScale('linlin');

    $graph->Set90AndMargin(40,40,40,40);        
    $graph->SetShadow();

    $graph->title->Set("A 90 degrees rotated scatter plot");
    $graph->title->SetFont(FF_FONT1,FS_BOLD);

    // Adjust the label align for X-axis so they look good rotated
    $graph->xaxis->SetLabelAlign('right','center','right');

    // Adjust the label align for Y-axis so they look good rotated
    $graph->yaxis->SetLabelAlign('center','bottom');

    $sp1 = new ScatterPlot($datay,$datax);
    $sp1->mark->SetType(MARK_FILLEDCIRCLE);
    $sp1->mark->SetFillColor("red");
    $sp1->mark->SetWidth(5);

    $graph->Add($sp1);
    $graph->Stroke();
    +

    +

    +

     

     

    + +Eanble/disable alpha blending

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +TRUE=Enable alpha blending
    + +

    Description
    Enable disable alpha blending. The transparency factor is specified in the color as transparency fraction. For example, to specify a red color which is 50% transparent you specify this as: +

    +"red@0.5" (or "#FF0000@0.5") +

    +can then use this color specification in all places where the color may be specified. If the alpha blending is not active then the alpha parameter will have no effect. +

    +Note that the use of alpha blending requires GD 2.01 or higher. By default alpha blending is enabled. + 
    + +

    Example

    +$graph->SetAlphaBlending(); +
    +

    +

     

     

    + +Specify graph angle 0-360 degrees.

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + Rotation angle for graph
    + +

    Description
    The graph can be rotated an arbitrary number of degrees. This will allow you to easily create, for example, horizontal bar graphs by rotating a normal bar graph 90 degrees. +

    +See horizbarex1.php for a real life example. +

    +Note: If you want a 90 degrees rotated graph consider using Graph::Set90AndMargin() which greatly simplifies this with just one call + 
    +  

    See also
    Graph::Set90AndMargin +

    Example

    +$graph = new Graph(300,200);
    $graph->SetScale('textlin');
    $graph->SetAngle(90);
    +

    +

    +

     

     

    + +// Finally stream the generated picture

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aType + + No description available
    +$aXFColor + + +'lightgray' +No description available
    +$aXColor + + +'black' +No description available
    +$aYFColor + + +'lightgray' +No description available
    +$aYColor + + +'black' +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify axis style (boxed or single)

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Style of axis
    + +

    Description
    The most common type of axis is two axis which crosses at a specified point. However for scientific plot it is often common to want to mirror the axis (and the scale) around the plot area. +This method controls which type to use + +
      +
    • AXSTYLE_SIMPLE, a simple two axis plots (default) +
    • AXSTYLE_BOXIN, axis around the plot area with the tick marks directed inside the plot area. +
    • AXSTYLE_BOXOUT, axis around the plot area with the tick marks directed outside of the plot area +
    + +See funcex1.php, funcex2.php and funcex3.php for real life examples. 
    + +

    Example

    +$graph->SetAxisStyle(AXSTYLE_BOXIN);
    +

    +

    +

     

     

    + +Set a country flag in the background

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aName + + Index or (partial) name of Country
    +$aBgType + + +BGIMG_FILLPLOT +Background fill type
    +$aMix + + +100 +Mix percentage
    + +

    Description
    [Synonym for SetBackgroundCountryFlag() ) +Set a country flag in the background. All supported countries can be specified by either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag. 
    +

    +

     

     

    + +Set a country flag in the graph background

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aName + + Full or partial country name
    +$aBgType + + +BGIMG_FILLPLOT +Normal background fill type
    +$aMix + + +100 +Mix fraction
    + +

    Description
    Set a country flag in the background. All supported countries can be specified by either +
      +
    1. Numeric index, (0-238) +
    2. Full or partial name, e.g. "norway" +
    3. The unique string index for the country +
    + +For a list of all available flags please run the file "listallflags.php" in the Example directory. +

    +The final arcgument "aMix" is a value between 0-100 and specifies the blend factor for the flag. + 
    +

    +

     

     

    + +Set a color gradient as the background

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFrom + + +'navy' +Color 1
    +$aTo + + +'silver' +Color 2
    +$aGradType + + +2 +Gradient type
    +$aStyle + + +BGRAD_FRAME +Gardient layout style
    + +

    Description
    This method allows you to specify a color gradient as the background of the graph. The color gradient can either fill the entire graph, just the plopt area or just the margin. This is specified by the $aStyle argument by specifyin one of the following values: +
      +
    • BGRAD_FRAME, Fill the entire graph with the gradient +
    • BGRAD_PLOT, Just fill the plot area +
    • BGRAD_MARGIN, Just the margin +
    + +The gradient type can be one of +
      +
    • GRAD_VER, Vertical gradient +
    • GRAD_HOR, Horizontal gradient +
    • GRAD_MIDHOR, From the center and out, horizontal +
    • GRAD_MIDVER, From the center and out, vertical +
    • GRAD_WIDE_MIDVER, From the center and out, vertical. Wide mid section. +
    • GRAD_WIDE_MIDHOR, From the center and out, horizontal. Wide mid section. +
    • GRAD_CENTER, From the center and beaming out +
    • GRAD_LEFT_REFLECTION, Simulates a reflection on the left side +
    • GRAD_RIGHT_REFLECTION, Simulates a reflection on the right side +
    + +Note: In order for the gradient to be visible the Frame must be enabled, i.e. graph->ShowFrame(false) will hide the gradient. If you like to hide the frame around the entire graph set the color to the margin color or set the weight of the frame line to 0. + 
    +  
    See also
    Graph::SetBackgroundImage and Graph::SetFrame +

    Example

    +$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_MARGIN); +
    +

    +

     

     

    + +Specify a background image fro the plot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFileName + + Filename for background image
    +$aBgType + + +BGIMG_FILLPLOT +Style of background image
    +$aImgFormat + + +"auto" +Image format ("jpeg", "gif", "png")
    + +

    Description
    A graph may have a background image. The image is loaded from a specified file and may be of type GIF, JPG or PNG. The image type may also be specified as "auto", in this case the image format is determined by the file ending. +

    +The positioning and sizing of the background image can be controlled by the $aBgType parameter. Possible values are +

      +
    • BGIMG_FILLPLOT, Adjust the size of the image to just fit the plotarea +
    • BGIMG_FILLFRAME, ADjust the size of the image to just fit the entire graph area +
    • BGIMG_COPY, Just copy the image as is to upper left corner +
    • BGIMG_CENTER, Just copy the image but center it. +
    + +If you want ot use a background image on a canvas graph you must be carefull. Since canvas graph use no buffering, i.e everythng is written directly in the order you specify the commands. For canvas graph the background image get's stroked when you call the Initframe() method. +SO, this call should eb among the very first. Every graph object after that will be stroked on top of the specified background image. + + 
    +  
    See also
    Graph::SetBackgroundGradient +

    Example

    +// 
    $graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME);

    // If you use a canvas graph, and only canvas graphs,
    // you must manually call the InitFrame() method.
    $graph->InitFrame();
    +

    +

    +

     

     

    + +Specifes what how much the background image should be blendid in with the background

    + + + + +
    ArgumentDefaultDescription
    +$aMix + + Mix value (0-100)
    + +

    Description
    Specifes what how much the background image should be blendid in with the background. 
    +

    +

     

     

    + +Set a frame around the plot area

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aDrawPlotFrame + + +true +True=Draw the frame
    +$aPlotFrameColor + + +array(0,0,0) +Frame color
    +$aPlotFrameWeight + + +1 +Width fo frame line
    + +

    Description
    This is used to specify whether the plot-area should have a rectangle around it and the specifics of that rectangle. 
    +  
    See also
    Graph::SetFrame +

    Example

    +$graph = new Graph(300,200);
    $graph->SetScale('linlin');
    $graph->Box();
    +

    +

    +

     

     

    + +Enable clipping of graph outside the plotarea

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +Enable/disbale clipping
    + +

    Description
    Enable or disable clipping outside the plot area. If clipping is enabled then only the part of the graph exactly inside the plot area will be visible. +

    +Clipping may come in handy when you for example set a manual scale and have data points outside the specified range. +

    +By default clipping is disabled. +

    +Note 1: Clipping is only supported for graphs at 0 or 90 degrees rotation and will generate an error message if enabled together with any other angle. +

    +Note 2: The clipping is implemented with a O(1) algorithm in terns of data size. + 
    + +

    Example

    +$graph->SetClipping(); +
    +

    +

     

     

    + +Specify color for the plotarea (not the margins)

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify color for the plotarea (not the margins) 
    +  
    See also
    Graph::SetFrame and Graph::SetMarginColor +

    Example

    +$graph->SetColor(?wheat?); +
    +

    +

     

     

    + +Set the Alt text used for the IMG tag generated for CSIM

    + + + + +
    ArgumentDefaultDescription
    +$aAlt + + Alt text
    + +

    Description
    Set the ALt text used for the IMG tag generated for CSIM. Whne calling StrokeCSIM() a HTML page will be returned witha recusrive call to teh same script in an IMG tag. This method allows you to specify the Alt text to be used in the returned HTML page. 
    +
    +
    Returns
    void
    +  
    See also
    Graph::StrokeCSIM +

    Example

    +$graph->SetCSIMImgAlt('Yearly values');
    $graph->StrokeCSIM();
    +

    +

    +

     

     

    + +Set a frame around the entire image

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aDrawImgFrame + + +true +True=Draw a frame around the entire image
    +$aImgFrameColor + + +array(0,0,0) +Frame color
    +$aImgFrameWeight + + +1 +Width of frame
    + +

    Description
    Sets a frame (rectangle) of the chosen color around the edges of the image. + +Note: For implementation reasons the frame must be enabled in order to for a specified gradient background to show up. + 
    +  
    See also
    Graph::SetMarginColor +

    Example

    +$graph->SetFrame(true,'darkblue',2); +
    +

    +

     

     

    + +Specify a abevel frame around the entire graph

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDepth + + +3 +Depth (Height) in pixels for bevel
    +$aBorder + + +false +True=Add 1 pixel border around
    +$aBorderColor + + +'black' +Border color
    +$aColor1 + + +'white@0.4' +Right and bottom shadow
    +$aColor2 + + +'darkgray@0.4' +Left and top shadow
    +$aFlg + + +true +True=Show bevel frame
    + +

    Description
    Specify a a bevel frame around the entire graph. A Bevel frame will give the entire graph a "3D" uprised feel. 
    + +

    Example

    +$graph->SetFrameBevel(2,true,'black'); +
    +

    +

     

     

    + +Should the grid be in front or back of the plot?

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + Grid depth
    + +

    Description
    Specify if the grid in the plot should be drawn under or on top of the actual plots. +

    +Valid values for grid depth are +

      +
    • DEPTH_BACK, Under plots +
    • DEPTH_FRONT, On top of plots +
    +

    +The default is to draw the grid lines under the plots. 
    + +

    Example

    +$graph->SetGridDepth(DEPTH_FRONT);
    +

    +

    +

     

     

    + +Determine if Icons should be under or over the plot

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + Depth of icons (see description)
    + +

    Description
    Determine if Icons should be under or over the plot. The argument is one of +
      +
    • DEPTH_BACK +
    • DEPTH_FRONT +
    + +By default the icons are drawn under the plots 
    + +

    Example

    +// Put the icons in front of the plot
    $graph->SetIconDepth(DEPTH_FRONT);
    +

    +

    +

     

     

    + +Set Image format and optional quality

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + Format (see description)
    +$aQuality + + +75 +Quality parameter for JPEG
    + +

    Description
    Specify what image format the generated image should use. By default the library will try to create PNG images and if the PNG libraries are not available then it will try to use foirst JPEG and finally GIF encoding. +

    +The image format is specified as a string that can be one of +

      +
    • "PNG", Looseless format with good quality/compression ratio for line graphs +
    • "JPEG", JPEG format +
    • "GIF", GIF Format +
    + +The PNG format gives in general best compression for ordinary data plots and is also a looseless format. +

    +If the graph has complicated background images or 100s of colors then there is a good chance that JPEG will give better compression on the expense of image quality. +

    +The quality parameter is a value between (0,100) inclusively. = gives best compression but worst quality and 100 give the best quality. Suitable ranges is 60-90. + 
    + +

    Example

    +// Set JPEG format with 60% quality
    $graph->SetImgFormat('jpeg',60);
    +

    +

    +

     

     

    + +Specify side margins for graph

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + Left margin (in pixels)
    +$rm + + Right margin (in pixels)
    +$tm + + Top margin (in pixels)
    +$bm + + Bottom margin (in pixels)
    + +

    Description
    Specify the margin around the actual plot area. This is actually just a shortcut for the Image::SetMargin() +

    +Note: If you want to set the margin for a 90 degrees rotated graph please consider using Graph::Set90AndMargin() instead since this will automatically adjust for the rotated image and the swapped meaning of width and height. + 
    +  

    See also
    Image::SetMargin +

    Example

    +$graph->SetMargin(40,20,60,20); +
    +

    +

     

     

    + +Specify color for the margins (all areas outside the plotarea)

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specifies the color of the area between the plot area and the edge of the image. 
    +  
    See also
    Graph::SetColor and Graph::SetFrame +

    Example

    +$graph->SetMarginColor('silver'); +
    +

    +

     

     

    + +Specify scale to use for X and Y axis

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aAxisType + + Type of axis
    +$aYMin + + +1 +Y-min
    +$aYMax + + +1 +Y-max
    +$aXMin + + +1 +X-min
    +$aXMax + + +1 +X-max
    + +

    Description
    Specifies what kind of scales should be used in the graph. The following combinations are allowed + +
      +
    • Linear scale. Both X and Y axis +
    • Logarithmic scale. Both X and Y axis +
    • Text scale. Only on X axis +
    • Integer scale. X and Y axis +
    + +Any combination of these may be used. Linear and logarithmic scales are pretty straightforward. The text scale might deserve some explanation. The easiest way to think of the text scale is as a linear scale consisting of only natural numbers, i.e. 0,1,2,3,4,? . This scale is used when you just have a number of Y-values you want to plot in a consecutive order and don?t care about the X-values. It is also used when you need to have text labesl you specify (via $graph->xaxis->SetTickLabels($labels) ). +

    +To specify which combination of X and Y scales you want to use the $axtype parameter is specified. In this parameter you specify, by a text string, the type of scale you want to use for both X and Y scale. +

    +Possible values for each axis are:
    +X: 'lin', 'text', 'log', 'int'
    +Y: 'lin', 'log', 'int'
    +

    +Example of possible combination:
    +

      +
    • SetScale('textint'); +
    • SetScale('loglog'); +
    • SetScale('linlog'); +
    +It is normally recommended to use the auto-scaling feature since for most practical purposes it is good enough. However on rare occasions you might want to specify the limits yourself. This is then done by the rest of the parameters to the method. +

    +Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included. +

    +Note1: +Note that if you manually specify the scale you can also specify the tick distance with a call to Ticks::Set(). For example $graph->yaxis->scale->ticks->Set(10,5) If yiou don't ste it manually a suitable tick distance will be automatically choosen. + +Note2: +If you want to keep the autoscaling for Y-axis but specify the X-axis then just call the method with both min and max set to 0 (e.g. SetScale('linlin',0,0,0,50); ) + + 
    +  

    See also
    Ticks::Set +

    Example

    +//----------------------
    // EXAMPLE1: Using autoscaling
    $graph->SetScale('textlin');

    //----------------------
    // EXAMPLE2: Using manual scale for Y-scale and only major ticks
    $graph->SetScale('linlin',5,75);
    $graph->yaxis->scale->ticks->Set(10); // Set major and minor tick to 10

    //----------------------
    // EXAMPLE3: Using manual scale for Y-scale 
    $graph->SetScale('linlin',5,200);
    // Set major tick dist to 40 and minor to 20 
    $graph->yaxis->scale->ticks->Set(40,20); 

    //----------------------
    // EXAMPLE4: Using manual scale for both X and Y-scale 
    $graph->SetScale('linlin',5,200,0,100);
    // Set major tick dist to 40 and minor to 20 
    $graph->yaxis->scale->ticks->Set(40,20);
    // Set major and minor tick dist to 20 
    $graph->xaxis->scale->ticks->Set(20); 

    // Keeping the Autoscaling for Y-axis but fixing the X
    // scale to an integer scale between [0,50]
    $graph->SetScale('intlin',0,0,0,50);
    +

    +

    +

     

     

    + +Add a drop shadow to the image

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aShowShadow + + +true +True=add a drop shadow
    +$aShadowWidth + + +5 +Width (in pixels of shadow)
    +$aShadowColor + + +array(102,102,102) +Shadow color
    + +

    Description
    Sets a frame with a drop down shadow around the entire image 
    +  
    See also
    Graph::SetFrame +

    Example

    +$graph->SetShadow(); +
    +

    +

     

     

    + +// Text width of bar to be centered in absolute pixels

    + + + + +
    ArgumentDefaultDescription
    +$aOff + + No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify how dense the ticks should be drawn

    + + + + + + +
    ArgumentDefaultDescription
    +$aYDensity + + +TICKD_NORMAL +Y-density
    +$aXDensity + + +TICKD_NORMAL +X-density
    + +

    Description
    This method is used to hint how many ticks the auto-scaling should try to fit on each of the axis. +

    +The following DEFINES may be used to hint to the auto-scaling how many ticks should be allocated + +

      +
    • TICKD_DENSE, Small distance between ticks +
    • TICKD_NORMAL, Default value +
    • TICKD_SPARSE, Longer distance between ticks +
    • TICKD_VERYSPARSE, Very few ticks +
     
    + +

    Example

    +$graph->SetTickDensity(TICKD_DENSE); // Many Y-ticks +
    +

    +

     

     

    + +Specify background style for graph titles

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aBackColor + + +'gray' +Background color
    +$aStyle + + +TITLEBKG_STYLE1 +Background size style, see description
    +$aFrameStyle + + +TITLEBKG_FRAME_NONE +Frame style, see description
    +$aFrameColor + + +'black' +Frame color
    +$aFrameWeight + + +1 +Frame thickness (weight)
    +$aBevelHeight + + +3 +Bevel height used for frame style bevel
    +$aEnable + + +true +Enable/disable background
    + +

    Description
    Specify background style for graph titles, i.e. the background style for Graph::title, Graph::subtitle, Graph::subsubtitle. The actual background style is specified with the two arguments $aStyle and $aFrameStyle. +

    +The first argument $aStyle determines the size the background should cover. The two possibilities are +

      +
    • TITLEBKG_STYLE1, FIll the background inside the graph frame +
    • TITLEBKG_STYLE2, Also covers the graph frame +
    • TITLEBKG_STYLE3, Used together with the Bevel frame. WIll put the title beackground under the graph bevel. +
    + +The second style parameter specifies what type of frame should be drawn. The weight of the frame is adjustable by specifying the $aFrameweight argument. The possible options for frame styles are: +
      +
    • TITLEBKG_FRAME_NONE, No frame +
    • TITLEBKG_FRAME_FULL, Full frame around the background +
    • TITLEBKG_FRAME_BOTTOM, Just a line at the bottom +
    • TITLEBKG_FRAME_BEVEL, Draw a Bevel 3D effect (looks like a raised square button). The height of the bevel can be adjusted with the $aBevelHeight argument. +
    + +You can further adjust the style of the background fill by the SetTitleBackgroundFillStyle() method. + 
    +  
    See also
    Image::Bevel and Graph::SetTitleBackgroundFillStyle +

    Example

    +$graph->SetTitleBackground('wheat2',TITLEBKG_STYLE1,TITLEBKG_FRAME_BOTTOM); +
    +

    +

     

     

    + +Adjust the title background fill style

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Fill style (see description)
    +$aColor1 + + +'black' +Color 1
    +$aColor2 + + +'white' +Color 2
    + +

    Description
    The background for the graph titles as set by SetTitleBackground() can be further adjusted with this method. The style can be sepcified as one of +
      +
    • TITLEBKG_FILLSTYLE_HSTRIPED, Alternating horizontal lines of color 1 and color 2 +
    • TITLEBKG_FILLSTYLE_VSTRIPED, Alternating vertical lines of color 1 and color 2 +
    • TITLEBKG_FILLSTYLE_SOLID, A solid fill color (default) +

    + +

    Example

    +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'darkgreen','black'); +
    +

    +

     

     

    + +Specify that plots on the Y2 axis should be under Y axis plots

    + + + + +
    ArgumentDefaultDescription
    +$aBack + + +true +TRUE=under Y axis, FALSE=above
    + +

    Description
    Set the depth for Y2 plots as compare to plots added to the Y axis 
    + +

    Example

    +$graph->SetY2OrderBack(); +
    +

    +

     

     

    + +Specify secondary Y scale

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aAxisType + + +"lin" +Type of scale
    +$aY2Min + + +1 +Y2Min value
    +$aY2Max + + +1 +Y2Max value
    + +

    Description
    The graph allows two different Y-scales to be used and you can choose which one you want to use for a specific plot by the way you are adding the plot to the graph, either by Add() or by AddY2() method. +

    +This method works in the exact same way for the Y2 axis as the SetScale() method previously described. +

    +Allowed values for the $axtype are +

      +
    • ?lin?, Linear scale +
    • ?log?, Logarithmic scale +
    • ?int?, Integer scale +
    + +Note: If you want to use a logarithmic scale you must make sure that the ?jpgraph_log.php? is included. + 
    +  
    See also
    Graph::SetScale and Graph::AddY2 +

    Example

    +// Left Y scale linear and right Y-scale logarithmic
    $graph = new Graph(300,200);
    $graph->SetScale(?textlin?);
    $graph->SetY2Scale(?log?);
    +

    +

    +

     

     

    + +Set the delta position (in pixels) between the multiple Y-axis

    + + + + +
    ArgumentDefaultDescription
    +$aDist + + Distance in pixels
    + +

    Description
    Set the delta position (in pixels) between the multiple Y-axis 
    +

    +

     

     

    + +Specify scale for additional Y-axis

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aN + + Index of axis
    +$aAxisType + + +"lin" +Scale type of axis
    +$aYMin + + +1 +Optional min scale value
    +$aYMax + + +1 +Optional max scale value
    + +

    Description
    Specify scale for additional Y-axis 
    + +

    Example

    +php
    include ("../jpgraph.php");
    include (
    "../jpgraph_line.php");

    $datay = array(5,3,7,2);
    $datay2 = array(88,10,55,42);
    $datay3 = array(255,35,745,244);
    $datay4 = array(130,97,68,119);

    // Setup the graph
    $graph = new Graph(600,250);
    $graph->SetMargin(30,200,20,20);
    $graph->SetMarginColor('white');
    $graph->SetColor('lightgray');

    $graph->SetScale("intlin");

    $graph->SetYScale(0,"lin");
    $graph->SetYScale(1,"lin");
    $graph->SetYScale(2,"lin");

    $p1 = new LinePlot($datay);
    $p1->SetColor('blue');
    $graph->Add($p1);

    $p2 = new LinePlot($datay2);
    $p2->SetColor('darkred');
    $graph->AddY(0,$p2);
    $graph->ynaxis[0]->SetColor('darkred');

    $p3 = new LinePlot($datay3);
    $p3->SetColor('red');
    $graph->AddY(1,$p3);
    $graph->ynaxis[1]->SetColor('red');

    $p4 = new LinePlot($datay4);
    $p4->SetColor('blue');
    $graph->AddY(2,$p4);
    $graph->ynaxis[2]->SetColor('blue');

    // Output line
    $graph->Stroke();


    +

    +

    +

     

     

    + +Stroke graph to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +File name* (or special handle, see below)
    + +

    Description
    Should be the final method called in the script that generates a graph. This will generate the image and send it back to the browser. +

    +If $aStrokeFileName != "" the image will be written to this file and NOT streamed back to the browser +

    +If the file name is specified with the define __IMG_HANDLER (Note: Thre are 2 '_' in the beginning) then no image will be streamed to file or browser. Instead the Stroke() method will simply return the image handle used by the GD library. This can come in handy of you like to post manipulate the image or use the raw GD image in other context. Such as in creating dynamic PDF documents. +

    +Note: If you want to use the image in a PDF file you can't take the handle directly since this is a GD handle. To use it in PDF you must first create an PDF image by calling pdf_open_memory_image() to get a proper PDF image handle. See example below. + +

    +You may also specify the file name as "auto" in which case the filename will be created from the script name but with the extension changed to reflect the choosen image format. + 
    + +

    Example

    +// Example 1 : (Normal case) Stream back to browser
    $graph->Stroke();

    // Example 2 : Stream to the file with absolute file path
    $graph->Stroke($fileName);

    // Example 3
    // Get the image handle. NOTE: No image will be 
    // streamed to the browser in this case.
    $ih = $graph->Stroke(__IMG_HANDLER);

    // PDF example
    //....
    $im = $graph->Stroke(_IMG_HANDLER);
    $pdf = pdf_new();
    pdf_open_file($pdf, "");

    $pimg = pdf_open_memory_image($pdf, $im);
    pdf_begin_page($pdf, 595, 842);
    pdf_add_outline($pdf, "Page 1");
    pdf_place_image($pdf, $pimg, 0, 500, 1); 
    pdf_close_image($pdf, $pimg); 
    pdf_end_page($pdf);
    pdf_close($pdf);
    $buf = pdf_get_buffer($pdf);
    $len = strlen($buf);
    header("Content-type: application/pdf");
    header("Content-Length: $len");
    header("Content-Disposition: inline; filename=jpimage.pdf");
    echo $buf;
    pdf_delete($pdf);




    +

    +

    +

     

     

    + +Stroke an image with a CSIM

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aScriptName + + +'auto' +Name of the image generating script
    +$aCSIMName + + +'' +Image map name
    +$aBorder + + +0 +Should the image be bordered?
    + +

    Description
    To generate an CSIM you must use this method at the end of your script instead of the normal Graph::Stroke() method. This method does not send back an image to the browser but rather a HTML page which contains an image map and a "recursive call" back to the image script. See the full JpGraph manual for a detailed explanation on how this works. +

    +Please note that it is abolutely imperative that you specify the image generating scripts name as the first argument. +

    +Why that? Because it is impossible for JpGraph to find out the name of the script it is executed from in the case where it is included as oart of a "standard" HTML/PHP page. Using the PHP_SELF will only return the master document and not the actual script name. +

    +If you use several image map images on the same HTML page you must also specify unique names of each of the image maps as the second argument for this function. +

    +To specify targets for the image maps you must call the individual plots Pot::SetCSIMTargets() +

    +Tip: You can easily specify the script name by using the construction +basename(__FILE__) as the first argument 
    +  

    See also
    Plot::SetCSIMTargets +

    Example

    +...
    $graph->StrokeCSIM(basename(__FILE__));
    +

    +

    +

     

     

    + +Stroke the frames background and border

    +
    + +

    Description
    Semi Internal routine. Exclusively used together with canvas graphs where object are added directly to the canvas and we therefore must make sure that the background is stroked first. + 
    + +

    Example

    +e +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GraphTabTitle.html b/html/includes/jpgraph/docs/ref/GraphTabTitle.html new file mode 100644 index 0000000000..191eb3a036 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GraphTabTitle.html @@ -0,0 +1,202 @@ +


    CLASS GraphTabTitle EXTENDS Text
    +(Defined in: jpgraph.php : 3027)
     GraphTabTitle  Text 
     Set() 
    SetColor() 
    SetCorner() 
    SetFillColor() 
    SetPos() 
    SetTabAlign() 
    SetWidth() 
    +
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Pos() 
    +Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    +SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    +SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    Text() 
    +
     

    Class usage and Overview
    Represents the tab that can be placed on top of the graph

      +


    Class Methods

    +

     

     

    + +Specify text string for tabbed title

    + + + + +
    ArgumentDefaultDescription
    +$t + + Text
    + +

    Description
    Specify text string for tabbed title 
    + +

    Example

    +$graph->tabtitle->Set('First Quarter'); +
    +

    +

     

     

    + +Specify color for tab

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxtColor + + Text color
    +$aFillColor + + +'lightyellow' +Background fill color
    +$aBorderColor + + +'black' +Border color
    + +

    Description
    Specify all the possible colors for the tab 
    + +

    Example

    +$graph->tabtitle->SetColor('navy','lightyellow','navy'); +
    +

    +

     

     

    + +Specify size (in pixels) of the cut in the upper left and right corner

    + + + + +
    ArgumentDefaultDescription
    +$aD + + Cut in pixels
    + +

    Description
    Specify size (in pixels) of the cut in the upper left and right corner 
    + +

    Example

    +$graph->tabtitle->SetCorner(8); +
    +

    +

     

     

    + +Specify background color for tab title

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + Fill color
    + +

    Description
    Specify background color for tab title 
    + +

    Example

    +$graph->tabtitle->SetFillColor('darkgreen'); +
    +

    +

     

     

    + +Specify position for tab title

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + 'left', 'center' or 'right' alignment
    + +

    Description
    Specify position for tab title, left, rigth or center. 
    + +

    Example

    +$graph->tabtitle->SetPos('center'); +
    +

    +

     

     

    + +Specify position of the tab

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + Left right or center position
    + +

    Description
    Teh tab can be positioned at the left edge on top of the plot area, center or at the right. 
    + +

    Example

    +$graph->tabtitle->SetTabAlign('right'); +
    +

    +

     

     

    + +Specify width for tab title

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + Width of tab (see below)
    + +

    Description
    The width of the tab title can be specified in either absolute pixels or as the two special values 'TABTITLE_WIDTHFIT' and 'TABTITLE_WIDTHFULL'. +

    +The TABTITLE_WIDTHFIT will make the tab just wide enough to hold the text in the tab and the TABTITLE_WIDTHFULL will extend the tab across the entire plot area. +

    +By default the tab will be formatted as it had been specified as TABTITLE_WIDTHFIT + + + 
    + +

    Example

    +// Specify the tab title width in absolute pixels
    $graph->tabtitle->SetWidth(120);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Grid.html b/html/includes/jpgraph/docs/ref/Grid.html new file mode 100644 index 0000000000..ab62312dcd --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Grid.html @@ -0,0 +1,153 @@ +


    CLASS Grid
    +(Defined in: jpgraph.php : 3331)
     Grid 
     SetColor() 
    SetFill() 
    SetLineStyle() 
    SetWeight() 
    Show() 
    +
     

    Class usage and Overview
    This class is used to hold all properties of the gridline for a specific axis. The grid setting is accessed through the xgrid and ygrid properties of graph. + +By default JpGraph has grid lines for Y-lines turned on and gridlines for X-axis turned off. + +

      +


    Class Methods

    +

     

     

    + +Set color of grid lines

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajColor + + Major color
    +$aMinColor + + +false +Minor color
    + +

    Description
    Set color of grid lines 
    + +

    Example

    +$graph->xgrid->SetColor('lightblue'); +
    +

    +

     

     

    + +Specify fill style for grid

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +Flag, True=enable fill
    +$aColor1 + + +'lightgray' +Fill color 1
    +$aColor2 + + +'lightblue' +Fill color 2
    + +

    Description
    The area between the gridline can be filled with two alternating colors. This method specifies this style. See 'filledgridex1.php' for an example of this. By using this feature with alpha-blending you can achieve very nice layouts. + 
    + +

    Example

    +// Use 50% blending
    $graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
    $graph->ygrid->Show();
    $graph->xgrid->Show();
    +

    +

    +

     

     

    + +Specify if grid line should be dashed, dotted or solid

    + + + + +
    ArgumentDefaultDescription
    +$aType + + String to specify line type
    + +

    Description
    Specify if grid should be dashed, dotted or solid. The type is specified with a string which can be either "solid", "dashed" or "dotted". + 
    +  
    See also
    Image::SetLineStyle +

    Example

    +$graph->ygrid->SetLineStyle('dashed'); +
    +

    +

     

     

    + +Set line weight for grid line

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line width in pixels
    + +

    Description
    Set line weight for grid line 
    + +

    Example

    +$graph->xgrid->SetWeight(2); +
    +

    +

     

     

    + +Specify if both major and minor grid should be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$aShowMajor + + +true +True=Show major grid lines
    +$aShowMinor + + +false +True=Show minor grid lines
    + +

    Description
    Specify if both major and minor grid should be displayed 
    + +

    Example

    +$graph->ygrid->Show();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/GroupBarPlot.html b/html/includes/jpgraph/docs/ref/GroupBarPlot.html new file mode 100644 index 0000000000..d61d4d3cf9 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/GroupBarPlot.html @@ -0,0 +1,45 @@ +


    CLASS GroupBarPlot EXTENDS BarPlot
    +(Defined in: jpgraph_bar.php : 552)
     GroupBarPlot  BarPlot  
     GroupBarPlot() 
    +
     
     

    Class usage and Overview
    A group bar plot has several bars side by side for each X-label. The group bar is constructed from any number of ordinary bar graphs. + +For example: + +$b1 = new BarPlot(...); +$b2 = new BarPlot(...); + +$gb = new GroupBarPlot(array($b1,$b2)); +... +$graph->Add($gb); +... + + +Each individual bar can be either a BarPlor or an AccBarPlot. +

      +


    Class Methods

    +

     

     

    + +Create a new Group bar plot

    + + + + +
    ArgumentDefaultDescription
    +$plots + + Array of individual plots
    + +

    Description
    Create a new Group bar plot from a number of BarPlot or AccBarPlot plots. 
    +  
    See also
    AccBarPlot::AccBarPlot and BarPlot::BarPlot +

    Example

    +$b1 = new BarPlot(...);
    $b2 = new BarPlot(...);

    $gb = new GroupBarPlot(array($b1,$b2));
    ...
    $graph->Add($gb);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/HeaderProperty.html b/html/includes/jpgraph/docs/ref/HeaderProperty.html new file mode 100644 index 0000000000..4baa34ff70 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/HeaderProperty.html @@ -0,0 +1,343 @@ +


    CLASS HeaderProperty
    +(Defined in: jpgraph_gantt.php : 1730)
     HeaderProperty 
     SetBackgroundColor() 
    SetFont() 
    SetFontColor() 
    SetFormatString() 
    SetFrameColor() 
    SetFrameWeight() 
    SetIntervall() 
    SetLabelFormatString() 
    SetStyle() 
    SetSundayFontColor() 
    SetTitleVertMargin() 
    SetWeekendColor() 
    +
     

    Class usage and Overview
    Data encapsulating class to hold properties for each type of the scale headers of the Gantt chart. + +It is instantiated in (and accessible through) + + +$ganttgraph->scale->min +$ganttgraph->scale->hour +$ganttgraph->scale->day +$ganttgraph->scale->week +$ganttgraph->scale->month +$ganttgraph->scale->year + + +You use the methods on these object to specify how you want the scale to be displayed. For example specifying if the week view will show start date or week number.

      +


    Class Methods

    +

     

     

    + +Specify background color in scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify background color in scale 
    + +

    Example

    +$ganttgraph->scale->week->SetBackgroundColor('lightblue'); +
    +

    +

     

     

    + +Specify font for scale

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + Font family
    +$aFStyle + + +FS_NORMAL +Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify font for scale 
    + +

    Example

    +$ganttgraph->scale->week->SetFont(FF_FONT0); +
    +

    +

     

     

    + +Specify font (text) color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify font (text) color 
    + +

    Example

    +$ganttgraph->scale->week->SetFontColor('darkred'); +
    +

    +

     

     

    + +Specify format string for scales

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + Format string
    + +

    Description
    Specify printf() style format string for scales 
    +

    +

     

     

    + +Set color of frame around scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Set color of frame around scale 
    + +

    Example

    +$ganttgraph->scale->year->SetFrameCOlor('darkblue');
    +

    +

    +

     

     

    + +Specify width of frame around scale

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Width in pixels
    + +

    Description
    Specify width of frame around scale 
    + +

    Example

    +$ganttgraph->scale->year->SetFrameWeight(2); +
    +

    +

     

     

    + +Set scale interval

    + + + + +
    ArgumentDefaultDescription
    +$aInt + + Integer intervall
    + +

    Description
    Set scale interval. The exact behaviour depends on if this is evoked on a day, hour or minute scale. +

    +For example if the scale is an hour scale then SetIntervall() will give number of hours between each scale interball. 
    + +

    Example

    +// Setup minute format
    $graph->scale->minute->SetIntervall(30);
    $graph->scale->minute->SetBackgroundColor('lightyellow:1.5');
    $graph->scale->minute->SetFont(FF_FONT0);
    $graph->scale->minute->SetStyle(MINUTESTYLE_MM);
    $graph->scale->minute->grid->SetColor('lightgray');
    +

    +

    +

     

     

    + +Specify format string for use in scale

    + + + + +
    ArgumentDefaultDescription
    +$aStr + + printf() style format string
    + +

    Description
    Specify format string for use in scale. 
    + +

    Example

    +$ganttgraph->scale->week->SetLabelFormatString('week %d'); +
    +

    +

     

     

    + +Specify style of scale.

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Scale style
    + +

    Description
    Specifies how the week, month, day, hour and minute scale should appear. For year scale this method has no meaning. + +For week scale: +
      +
    • WEEKSTYLE_WNBR, Show the numeric week number +
    • WEEKSTYLE_FIRSTDAY, Show the date for the first day in the week. e.g. 24/05 (Meaning 24:th of May) +
    • WEEKSTYLE_FIRSTDAY2, Show the date for the first day in the week but with month as text, e.g. 24 May +
    • WEEKSTYLE_FIRSTDAYWNBR, Same as Firstday above but also adds the week number, e.g. 24/05, w34 +
    • WEEKSTYLE_FIRSTDAY2WNBR, Same as Firstday2 above but also adds the week number, e.g. 24 May, w34 + +
    + +For month scale: +
      +
    • MONTHSTYLE_SHORTNAME, Use short form of month name +
    • MONTHSTYLE_LONGNAME, Use long form of month name +
    • MONTHSTYLE_LONGNAMEYEAR2, Show long month nmame with a 2 digit year +
    • MONTHSTYLE_SHORTNAMEYEAR2, Show short month nmame with a 2 digit year +
    • MONTHSTYLE_LONGNAMEYEAR4, Show long month nmame with a 4 digit year +
    • MONTHSTYLE_SHORTNAMEYEAR4, Show short month nmame with a 4 digit year +
    + +For Day style +
      +
    • "DAYSTYLE_ONELETTER" +
    • "DAYSTYLE_LONG" +
    • "DAYSTYLE_LONGDAYDATE1" +
    • "DAYSTYLE_LONGDAYDATE2" +
    • "DAYSTYLE_SHORT" +
    • "DAYSTYLE_SHORTDAYDATE1" +
    • "DAYSTYLE_SHORTDAYDATE2" +
    • "DAYSTYLE_SHORTDAYDATE3" +
    • "DAYSTYLE_SHORTDATE1" +
    • "DAYSTYLE_SHORTDATE2" +
    • "DAYSTYLE_SHORTDATE3" +
    • "DAYSTYLE_CUSTOM" +
    + +For hour style +
      +
    • "HOURSTYLE_HM24" +
    • "HOURSTYLE_HMAMPM" +
    • "HOURSTYLE_H24" +
    • "HOURSTYLE_HAMPM" +
    • "HOURSTYLE_CUSTOM" +
    + +Minute style +
      +
    • "MINUTESTYLE_MM" +
    • "MINUTESTYLE_CUSTOM" +
    + + 
    + +

    Example

    +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +
    +

    +

     

     

    + +Only used by day scale. Specify font color for sunday.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Only used by day scale. Specify font color for sunday. The default is toi display Sundays in red color as per convention. 
    +  
    See also
    GanttScale::UseWeekendBackground +

    Example

    +$ganttgraph->SetSundayFontColor('red'); +
    +

    +

     

     

    + +Specify margin above and below text in scale

    + + + + +
    ArgumentDefaultDescription
    +$aMargin + + Margin in pixels
    + +

    Description
    Specify margin above and below text in scale 
    + +

    Example

    +$ganttgraph->scale->year->SetTitleVertMargin(7);
    +

    +

    +

     

     

    + +Only valid if if used by day scale

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Background color for the weekend
    + +

    Description
    Specify the background color for weekends. +

    +Tip: If you want the weekend background color to continue down the gantt chart theh use the GanttScale::UseWeekendBackground() method. +  
    +  

    See also
    HeaderProperty::SetSundayFontColor and GanttScale::UseWeekendBackground +

    Example

    +$ganttgraph->scale->day->SetWeekendColor('lightgray');
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/HorizontalGridLine.html b/html/includes/jpgraph/docs/ref/HorizontalGridLine.html new file mode 100644 index 0000000000..75155160c5 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/HorizontalGridLine.html @@ -0,0 +1,80 @@ +


    CLASS HorizontalGridLine
    +(Defined in: jpgraph_gantt.php : 3061)
     HorizontalGridLine 
     SetRowFillColor() 
    SetStart() 
    Show() 
    +
     

    Class usage and Overview
    Handles the alternating row colors in the Gantt chart

      +


    Class Methods

    +

     

     

    + +Specify alternating row fill color

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor1 + + Color 1
    +$aColor2 + + +'' +Color 2
    + +

    Description
    Specify alternating row fill color for the Gantt chart. + +See gantthgridex1.php for a full example. 
    + +

    Example

    +...
    $graph->hgrid->Show();
    $graph->hgrid->SetRowFillColor('darkblue@0.9');
    +

    +

    +

     

     

    + +Specify start row for alternating colors

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + Start row
    + +

    Description
    Specify start row for alternating colors. By default it will start from row 0 (first row) 
    +

    +

     

     

    + +Enable alternating row colors

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +true +TRUE/FALSE
    + +

    Description
    Enable alternating row colors 
    + +

    Example

    +$graph->hgrid->Show(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/IconImage.html b/html/includes/jpgraph/docs/ref/IconImage.html new file mode 100644 index 0000000000..d0f4b3c4d1 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/IconImage.html @@ -0,0 +1,117 @@ +


    CLASS IconImage
    +(Defined in: jpgraph_gantt.php : 1434)
     IconImage 
     IconImage() 
    SetAlign() 
    +
     

    Class usage and Overview
    Icon object to be used in a title for a Gantt plot object, e.g. bar or milestones. +

    +The icons are then used exactly as you would use text strings when specifying a title for the gantt object. For example: + +$icon = new IconImage(GICON_WARNING,0.7); +$titles = array($icon,'65 days','3 Aug','5 sep'); +$bar = new GanttBar(0,$titles,$startdat,$enddate); +... + +

    +Hint: When using icons togehter with titles the height of each bar is not affected (by design!) of the icons height. If you are using icons in several rows it might therefore be usefull to increase the vertical margin factor between each row. This is done by a call to the method GanttGarph::SetVMarginFactor()

      +


    Class Methods

    +

     

     

    + +Create a new icon for use in Gantt title columns

    + + + + + + +
    ArgumentDefaultDescription
    +$aIcon + + Icon specification. Either an image file or one of the builtin icons
    +$aScale + + +1 +Scale of icon
    + +

    Description
    Create a new icon object to be used in a title for a Gantt plot object, e.g. bar or milestones. +

    +An icon can either be created from an arbitrary image file (type is determined by the file extension) or it can also be one of the builtin icons. The builtin icons are: +

      +
    • GICON_WARNINGRED +
    • GICON_TEXT +
    • GICON_ENDCONS +
    • GICON_MAIL +
    • GICON_STARTCONS +
    • GICON_CALC +
    • GICON_MAGNIFIER +
    • GICON_LOCK +
    • GICON_STOP +
    • GICON_WARNINGYELLOW +
    • GICON_FOLDEROPEN +
    • GICON_FOLDER +
    • GICON_TEXTIMPORTANT +
    +

    +A graphic illustration of the differenmt icons can be found in the manual. +

    +The second argument specifies an optional scaling factor for the image/builtin icon. +

    +The icons are then used exactly as you would use text strings when specifying a title for the gantt object. For example: + +$icon = new IconImage(GICON_WARNING,0.7); +$titles = array($icon,'65 days','3 Aug','5 sep'); +$bar = new GanttBar(0,$titles,$startdat,$enddate); +... + +

    +Hint: When using icons togehter with titles the height of each bar is not affected (by design!) of the icons height. If you are using icons in several rows it might therefore be usefull to increase the vertical margin factor between each row. This is done by a call to the method GanttGarph::SetVMarginFactor() 
    +  

    See also
    GanttGraph::SetVMarginFactor +

    Example

    +// Creating an icon from an image file and scaling it to 70%
    // of original size
    $icon = new IconImage("smiley.png",0.7);

    // Using on of the bultin icons
    $icon = new IconImage(GICON_TEXT,0.8);
    +

    +

    +

     

     

    + +Specify anchor point for icon

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + +'left' +Horizontal anchor point
    +$aY + + +'center' +Vertical anchor point
    + +

    Description
    Specify where the anchor point for the icon should be. valid anchor points (for both hor and ver - directions) are: +
      +
    • "left" +
    • "center" +
    • "right" +
    +The anchor points determines what position on the icon shoudl be aligned with the specifed x,y position for the icon. + + 
    + +

    Example

    +$icon = new IconImage("../smiley.png",0.7);
    $icon->SetAlign('center','center');
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/IconPlot.html b/html/includes/jpgraph/docs/ref/IconPlot.html new file mode 100644 index 0000000000..0e597aea84 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/IconPlot.html @@ -0,0 +1,227 @@ +


    CLASS IconPlot
    +(Defined in: jpgraph.php : 7792)
     IconPlot 
     IconPlot() 
    SetAnchor() 
    SetCountryFlag() 
    SetMix() 
    SetPos() 
    SetScale() 
    +
     

    Class usage and Overview
    Make it possible to add one or several images on top of the background in the graph. This is constructed in the same way as normal plots are created and the images are added as normal with the GRaph::Add() method. + +It is possoble to specify arbitrary positions as well as mix (blend) and scaling. + +Example: + +$icon = new IconPlot('myicon.png',0.5,0.5); +.. +$graph->Add($icon);

      +


    Class Methods

    +

     

     

    + +Create a new icon image to be added to the graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFile + + +"" +File name of image
    +$aX + + +0 +X-position
    +$aY + + +0 +Y-position
    +$aScale + + +1.0 +Scale
    +$aMix + + +100 +Mixin value
    + +

    Description
    Create a new icon image to be added to the graph. The position can be specified as either absolute coordinates or as fractions of the width and height repsectively. + +Scale can be an arbitrary floating point number indicating the scaling of the image. + +The mix values specifies (in percent 1-100) how much of the image should be mixed in on top of the background. + 
    + +

    Example

    +$icon = new IconPlot('myfile.png',0.5,0.5,1,50);
    +

    +

    +

     

     

    + +Specify anchor point for image

    + + + + + + +
    ArgumentDefaultDescription
    +$aXAnchor + + +'left' +Horizontal anchor
    +$aYAnchor + + +'center' +Verticla anchor
    + +

    Description
    Specify anchor point for image. + +Horizontal anchor can be "left','center','right' and vertical anchor can be 'top','center','bottom' + +By default the anchor is the top left corner ('left','top') 
    + +

    Example

    +$icon->SetAnchor('center','center'); +
    +

    +

     

     

    + +Use one of the country flags as icons

    + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlag + + Partial or full country name
    +$aX + + X-position
    +$aY + + Y-position
    +$aScale + + Scaleing of image
    +$aMix + + Blend factor (0-100)
    +$aStdSize + + Which of the flag standard sizes should be used as the original image (1-4)
    + +

    Description
    Use one of the country flags as icons + 
    + +

    Example

    +$icon = new IconPlot();
    $icon->SetCountryFlag('norway',0.1,0.1);
    +

    +

    +

     

     

    + +Specify mix value in percent (0-100) for image-

    + + + + +
    ArgumentDefaultDescription
    +$aMix + + Mix value (0-100)
    + +

    Description
    Specify mix value in percent (0-100) for image. The mix value can also be specified directly in the constructor IconPlot(). + 
    + +

    Example

    +$icon->SetMix(50); +
    +

    +

     

     

    + +Specify position for image

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X-position
    +$aY + + Y-position
    + +

    Description
    Specify position for image. Position can be specified as either absolute coordinates or as fractions of the width and height. + +The anchor point in the image can be adjusted with a call to SetAnchor(). By default the anchor point is the top left corner. + 
    +  
    See also
    IconPlot::SetAnchor +

    Example

    +$icon->SetPos(0.5,0.5); +
    +

    +

     

     

    + +Set scaling for image

    + + + + +
    ArgumentDefaultDescription
    +$aScale + + Scale value.
    + +

    Description
    Set scaling for image. This allows you to adjust the size of the image. 
    + +

    Example

    +$icon->SetScale(0.8); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Image.html b/html/includes/jpgraph/docs/ref/Image.html new file mode 100644 index 0000000000..2f90acb41d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Image.html @@ -0,0 +1,278 @@ +


    CLASS Image
    +(Defined in: jpgraph.php : 5929)
     Image 
     RoundedRectangle() 
    SetAlphaBlending() 
    SetAntiAliasing() 
    SetCanvasColor() 
    SetExpired() 
    SetImgFormat() 
    SetMargin() 
    SetQuality() 
    SetTransparent() 
    +
     

    Class usage and Overview
    The Image class encapsulates the very lowest layer in the jpgraph library. It encapsulates the GD library function and presents a coherent interface hiding som of the details in the setup and management of GD. +

    +By replacing Image (and RotImage) it is possible to change the output driver for the whole library withou any further changes. +

    +A very close related class is RotImage which builds directly on Image but in additoin provides a 2D rotation featire, i.e the image may be rotated around a given point and possible also translated. +

    +The image gets instantiated through in the Graph::Img property, or more accurate the RotImage class gets instantiated. The only method in this class that any end user is likely to need (and use) is the SetMargin() method used to give the margins around between the end of the image and the actual plotarea. +

    +Note that all coordinates in methods belonging to Image is given in direct screen coordinates. + + + +

      +

    See also related classes:
    RotImage, RGB and TTF

     


    Class Methods

    +

     

     

    + +Draw a rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xt + + Top left X
    +$yt + + Top left Y
    +$xr + + Bottom right X
    +$yl + + Bottom right Y
    +$r + + +5 +Corner radius
    + +

    Description
    Draw a rectangle with rounded corners. 
    + +

    Example

    +$img->RoundedRectangle(0,0,100,100,10); +
    +

    +

     

     

    + +Enable alpha blending of colors

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +True/false = Enable/Disable alpha blending
    + +

    Description
    Alpha blending for colors can only be used with GD 2.x and above. You specify the alpha channel by adding a '@[alpha-value]' to your normal color specification. The alpha value is specified as a fraction in the range [0, 1] and indicated how much of the background color should be visible. +

    +Alphablending is enabled by default (when GD2 is used) but can be turned off by a call to this function with the argument false. 
    + +

    Example

    +$graph->img->SetAlphaBlending();
    ...
    $lineplot->SetFillColor('orange@0.5');
    +

    +

    +

     

     

    + +Specify if anti-aliasing should be used

    +
    + +

    Description
    Specify if anti-aliasing should be used. + +Enabling anti-aliasing will greatly improve the visual apperance of certain graphs. For example spider graphs greatly benefit from this. + +Note: Using anti-aliasing makes line drawing roughly 8 time slower than normal lines !! So you image will take longer to construct. + 
    +  
    See also
    Image::Line +

    Example

    +$graph->img->SetAntiAliasing();
    +

    +

    +

     

     

    + +Set canvas color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Set canvas color. The canvas color is the fill color for the frame when it is first created. This is white by defult. If you specify a frame or plot area color this background color will never be visible. +

    +The one time it matters is when you use a drop shadow on the graph. In the small area (top right and bottom left) where there is an empty are which is covered by neither the shadow nor the graph margin this area will have the canvas color. + 
    +  

    See also
    Graph::SetMarginColor and Graph::SetColor +

    Example

    +$graph->SetCanvasColor('lightblue'); +
    +

    +

     

     

    + +Turn on/off expired header

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +True=Return expired header.
    + +

    Description
    Specify that the header returned should not only contain the image format but also the meta tags to force the browser not to cache and reload the image every time the script is called. +

    +By default this is turned on. +

    +Note: There is no reason as far as we can tell to turn this off. + 
    + +

    Example

    +$graph->img->SetExpired(false); +
    +

    +

     

     

    + +Specify what image format to use

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormat + + Image format
    +$aQuality + + +75 +No description available
    + +

    Description
    Specify image format. Note depending on your installation of PHP not all formats may be supported. + +Supported formats are: +
      +
    • "gif", GIF format. Please note that GD 1.8 and above no longer supports the GIF format. +
    • "png", PNG format +
    • "jpeg", JPEG format. The quality of the JPEG format can be specified with the SetQuality() method. +

    +  
    See also
    Image::SetQuality +

    Example

    +$graph->img->SetImgFormat('jpeg'); +
    +

    +

     

     

    + +Specify margin for the plot area

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + Left margin
    +$rm + + Right margin
    +$tm + + Top margin
    +$bm + + Bottom margin
    + +

    Description
    Specify margin for the plot area. + 
    + +

    Example

    +$graph->img->SetMargin(20,20,40,20);
    +

    +

    +

     

     

    + +Specify JPEG image quality

    + + + + +
    ArgumentDefaultDescription
    +$q + + Image quality paramer (0-100)
    + +

    Description
    Specify JPEG image quality. For this to have any effect the image format, as specified with SetImgFormat(), must have been set to "jpeg". + +The quality is specified as an integer in the range 0 (worst quality) to 100 (best quality) . By default the quality is set o 75. 
    +  
    See also
    Image::SetImgFormat +

    Example

    +$graph->image->SetQuality(40); +
    +

    +

     

     

    + +Specify transparent color

    + + + + +
    ArgumentDefaultDescription
    +$color + + Color
    + +

    Description
    Specify transparent color for image. 
    + +

    Example

    +$graph->img->SetTransparent("white");
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Legend.html b/html/includes/jpgraph/docs/ref/Legend.html new file mode 100644 index 0000000000..4f8b8a5c13 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Legend.html @@ -0,0 +1,519 @@ +


    CLASS Legend
    +(Defined in: jpgraph.php : 5147)
     Legend 
     Hide() 
    Pos() 
    SetAbsPos() 
    SetColor() 
    SetColumns() 
    SetFillColor() 
    SetFont() 
    SetFrameWeight() 
    SetHColMargin() 
    SetLayout() 
    SetLeftMargin() 
    SetLineSpacing() 
    SetLineWeight() 
    SetMarkAbsHSize() 
    SetMarkAbsSize() 
    SetMarkAbsVSize() 
    SetPos() 
    SetReverse() 
    SetShadow() 
    SetVColMargin() 
    +
     

    Class usage and Overview
    This class is responsible for drawing a legend at the specified position in the graph. Individual data series are added by calling it's Add() method. +

    +This is all handled by the framework. Legend is instantiated in the graph as instance variable legend. When stroking individual plots this instance variable is used by the individual Legend() methods in the plot classes to add whatever the individual plots need to add. +

      +


    Class Methods

    +

     

     

    + +Hide legend box

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True = hide
    + +

    Description
    Hides the legend. 
    + +

    Example

    +$graph->legend->Hide(); +
    +

    +

     

     

    + +Specify the position for the legend box

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X coordinate
    +$aY + + Y coordinate
    +$aHAlign + + +"right" +Horizontal alignment
    +$aVAlign + + +"top" +Vertical alignment
    + +

    Description
    Set the position of the legend box on the Graph. The alignment arguments determine how the position of the legend box should be interpretated, i.e from what position on the Graph should the fraction be counted. ('right' uses the right side and positoins the legend with its left side according to the specified fraction and so on). Possible alignemts are: +

    +Horizontal: 'left','right','center'
    +Vertical: 'bottom','top','center' +

    +Please note that the X and Y positions should be give as fractions , i.e Pos(0.1,0.1) +

    +If the alignment is not given the the default is 'right','top' 
    + +

    Example

    +$graph->legend->Pos(0.05,0.1); +
    +

    +

     

     

    + +Specify X and Y coordinate for the legend box

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + x Coordinate
    +$aY + + y Coordinate
    +$aHAlign + + +"right" +Horizontal anchor point
    +$aVAlign + + +"top" +Vertical Anchor point
    + +

    Description
    Specify X and Y coordinate for the legend box 
    + +

    Example

    +// 10x10 pixels from the upper right corner
    $graph->legend->SetAbsPos(10,10,'right','top')
    +

    +

    +

     

     

    + +Set color on frame around box

    + + + + + + +
    ArgumentDefaultDescription
    +$aFontColor + + Font coor
    +$aColor + + +'black' +Frame color
    + +

    Description
    Specify the color for both the frame around the legend box as well as the font color used for the legend texts. Please note that this does not affect the fill color of the legend box. 
    +  
    See also
    Legend::SetFillColor +

    Example

    +$graph->legend->SetColor('blue'); +
    +

    +

     

     

    + +Specify the number of text columns to use

    + + + + +
    ArgumentDefaultDescription
    +$aCols + + Number of columns
    + +

    Description
    Specify the number of text columns to use in the legend text box. For graphs which have a large number of plots it might be necessary to specify 2 or more columns to avois that the legend box become to large. +

    +By default i column us used. 
    + +

    Example

    +$graph->legend->SetColumns(2); +
    +

    +

     

     

    + +Specify fill color for legend box

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Fill color
    + +

    Description
    Specify the background color for the legend box. The properties for the legend is noramlly accessed through the graph instance variable '$legend' 
    +  
    See also
    Legend::SetColor +

    Example

    +$graph->legend->SetFillColor('lightblue'); +
    +

    +

     

     

    + +Set font for texts in legend box.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + Font family
    +$aStyle + + +FS_NORMAL +Font style
    +$aSize + + +10 +Font size
    + +

    Description
    Set font for texts in legend box. 
    + +

    Example

    +$graph->legend->SetFont(FF_FONT2,FS_NORMAL); +
    +

    +

     

     

    + +Specify the width of the frame around the Legend box

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Width in pixels
    + +

    Description
    Specify the width of the frame around the Legend box 
    + +

    Example

    +$graph->legend->SetFrameWeight(2); +
    +

    +

     

     

    + +Specify margin between columns in te legend

    + + + + +
    ArgumentDefaultDescription
    +$aXMarg + + No description available
    + +

    Description
    Specify margin between columns in te legend 
    +

    +

     

     

    + +Specify vertical or horizontal legend layout

    + + + + +
    ArgumentDefaultDescription
    +$aDirection + + +LEGEND_VERT +Layout for legend box
    + +

    Description
    The legend box can either have the legend stacke vertically or horizontally. The default is vertically stacked legends. +

    +Allowed arguments: LEGEND_VERT,LEGEND_HOR +

    +Please note that horizontal layout is only suitable for a few legends since it makes use of quite a lot of horizontal space. 
    + +

    Example

    +// Put a horizontal legend box at the bottom of the graph
    $graph->legend->Pos(0.5,0.0.5,'left','bottom');
    $graph->legend->SetLayout(LEGEND_HOR);
    +

    +

    +

     

     

    + +Specify marging between the left edge and the first column

    + + + + +
    ArgumentDefaultDescription
    +$aXMarg + + No description available
    + +

    Description
    Specify marging between the left edge and the first column 
    +

    +

     

     

    + +Extra vertical spacing (in pixels) between rows

    + + + + +
    ArgumentDefaultDescription
    +$aSpacing + + Extra margin (in pixels)
    + +

    Description
    Extra vertical spacing (in pixels) between rows 
    + +

    Example

    +// Add 5 pixels extra margin between each legend row
    $graph->legend->SetLineSpacing(5);
    +

    +

    +

     

     

    + +Set the line width for the indicators.

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line weight in pixels
    + +

    Description
    Specify the line width for the color boxes that are used as indicators. 
    + +

    Example

    +$graph->legend->SetLineWeight(2); +
    +

    +

     

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + No description available
    + +

    Description
    No description available.

    +

     

     

    + +Specify the size of the marker in pixels

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + Size in pixels
    + +

    Description
    Specify the size of the marker in pixels to be used in the legend. This is used for the plot marks, for example squares or circles, when you want to control what the size used in the legend should be. +

    +It is often desirable to use a smaller size for the marks in the legend than in the graph itself. 
    + +

    Example

    +$graph->legend->SetMarkAbsSize(6); +
    +

    +

     

     

    + +

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + No description available
    + +

    Description
    No description available.

    +

     

     

    + +Alias for Pos. Specify Position for Legend

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X position
    +$aY + + Y position
    +$aHAlign + + +"right" +Horizontal anchor point
    +$aVAlign + + +"top" +Vertical anchor point
    + +

    Description
    See Legend::Pos() 
    +  
    See also
    Legend::Pos +

    Example

    +$graph->legend->SetPos(0.05,0.5,'right','center'); +
    +

    +

     

     

    + +Print the legend in reverse order

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +TRUE=In reverse order
    + +

    Description
    Print the legend in reverse order 
    + +

    Example

    +$graph->legend->SetReverse(); +
    +

    +

     

     

    + +Add a drop shadow to the legend box

    + + + + + + +
    ArgumentDefaultDescription
    +$aShow + + +'gray' +True = show drop shadow
    +$aWidth + + +2 +Width of drop shadow in pixels
    + +

    Description
    Add a drop down shadow for the legend box. 
    + +

    Example

    +// Use a shadow width default width
    $graph->legend->SetShadow();
    +

    +

    +

     

     

    + +Specify the margin between rows in the legend

    + + + + +
    ArgumentDefaultDescription
    +$aSpacing + + No description available
    + +

    Description
    Specify the margin between rows in the legend 
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LineErrorPlot.html b/html/includes/jpgraph/docs/ref/LineErrorPlot.html new file mode 100644 index 0000000000..77121ac26b --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LineErrorPlot.html @@ -0,0 +1,40 @@ +


    CLASS LineErrorPlot EXTENDS ErrorPlot
    +(Defined in: jpgraph_error.php : 119)
     LineErrorPlot  ErrorPlot  
     LineErrorPlot() 
    +
     
     

    Class usage and Overview
    A line error plot is in principle a line plot but with the added feature that each point also have a two error values. Low and high error. + +This means that data array must be an even number of three values.

      +

    See also related classes:
    LinePlot

     


    Class Methods

    +

     

     

    + +Constructor for a line plot with error bars

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Y-Data
    +$datax + + +false +X-Data [optional]
    + +

    Description
    Same as a line plot but each data point has three values, the value, and error min, and error max. The error bars are then drawn as vertical lines at each data point. 
    + +

    Example

    +$leplot = new LineErrorPlot($ydata); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LinePlot.html b/html/includes/jpgraph/docs/ref/LinePlot.html new file mode 100644 index 0000000000..a539740372 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LinePlot.html @@ -0,0 +1,326 @@ +


    CLASS LinePlot EXTENDS Plot
    +(Defined in: jpgraph_line.php : 24)
     LinePlot  Plot 
     AddArea() 
    LinePlot() 
    SetBarCenter() 
    SetColor() 
    SetFastStroke() 
    SetFillColor() 
    SetFillFromYMin() 
    SetFillGradient() 
    SetStepStyle() 
    SetStyle() 
    +
     HideLegend() 
    SetCenter() 
    +SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    This class is used to creat line graph plots. Line graph plots are used to draw standard lineplots where datapoints are connected by lines. Each data point can also be marked by a plotmark. +

    +A line plot can only be added to a Graph() image. + +Public properties: + + + + PlotMark + + DisplayValue + + +
    Name Type Description
    mark Mark at each data point
    value Determine if and hhow each data value should be displayed in the plot

      +

    See also related classes:
    AccLinePlot

     


    Class Methods

    +

     

     

    + +Create a colored area under part of the lien graph.

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aMin + + +0 +Start X-value
    +$aMax + + +0 +End X-value
    +$aFilled + + +LP_AREA_NOT_FILLED +Fill area or not (true/false)
    +$aColor + + +"gray9" +Color of fill
    +$aBorder + + +LP_AREA_BORDER +Use a border (true/false)
    + +

    Description
    Create a vertical colored area under the line between two X-values and to the top of the line. +

    +Predefined values for $aFilled are:
    +LP_AREA_FILLED
    +LP_AREA_NOT_FILLED

    + +

    Example

    +$lineplot->AddArea(2,5,LP_AREA_FILLED,"indianred1"); +
    +

    +

     

     

    + +Public Constructor for LinePlot +

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Y-data
    +$datax + + +false +X-data
    + +

    Description
    Create a new LinePlot which later can be added to the graph with the Graph::Add() or Graph::AddY2() method. +

    +A plot can be specified with either only Y-values or both Y-and X-values. If both X and Y values are specified they should have the same number of elements. 
    +  

    See also
    Graph::Add and Graph::AddY2 +

    Example

    +
    $lineplot = new LinePlot($ydata);
    +

    +

    +

     

     

    + +Adjust the positioning of line plots when combined with a bar plot

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +TRUE = Align line points to center of bars
    + +

    Description
    By default the lineplots gets aligned to the left side of the bars when using a text X-scale. By calling this method the line points instead gets aligned to the center of the bars. +

    +This method is only to be used in the case where line and bar plots are combined. Any other use is undefined. 
    + +

    Example

    +$ydata = array(12,15,22,19,5);
    $graph = new Graph(400,200);
    $graph->SetScale("textlin");
    $line = new LinePlot($ydata);
    $line->SetBarCenter();
    $bar = new BarPlot($ydata);
    $graph->Add($bar);
    $graph->Add($line);
    +

    +

    +

     

     

    + +Set color for the line plot.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify color for line. 
    + +

    Example

    +$lp = new LinePlot($ydata);

    // Set full blue
    $lp->SetColor('#0000FF');
    +

    +

    +

     

     

    + +Use Fast version of Stroke()

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +TRUE=Use fast stroke
    + +

    Description
    Use Fast version of Stroke(). This is useful for line plots which have many thousand points. This method is a lot faster than the usual Stroke() but also have a lot less functionality and puts restriction on the complexity of the line. The lines can have no plotmarks, must be solid and have a line width of 1 
    + +

    Example

    +$lineplot->SetFastStroke() +
    +

    +

     

     

    + +Specify fill color

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    +$aFilled + + +true +Flag. Filled or not
    + +

    Description
    Specify that a lineplot should be filled as well as the fill color. 
    +  
    See also
    LinePlot::SetColor +

    Example

    +$lp->SetFillColor('green');
    +

    +

    +

     

     

    + +Fill line not from 0 but from the minimum Y value

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +TRUE=fill from minimum
    + +

    Description
    Fill line not from 0 (as default) but from the minimum Y value. This is mostly usefull when a plot have the negative value and the X-axis is placed at the minimum Y-alue (at the bottom) 
    + +

    Example

    +$lineplot->SetFillFromYMin();
    +

    +

    +

     

     

    + +Specify a gradient fill for the line plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFromColor + + Start color
    +$aToColor + + End color
    +$aNumColors + + +100 +Number of colors to use in transition
    +$aFilled + + +true +TRUE=Enable gradient fill
    + +

    Description
    Specify a gradient fill for the line plot. Currently only vertical gradient fill is supported, i.e. the transiiton from color 1 to color 2 is vertical. + 
    + +

    Example

    +$p1 = new LinePlot($datay);
    $p1->SetFillGradient('white','darkgreen');
    +

    +

    +

     

     

    + +Use step style for line graph.

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +Flag. true to use step style.
    + +

    Description
    If the step style is enabled then each point will be connected not with a straight line between the points but with one horizontal and one vertical line. This makes the graph look like a stair where the next data point indicates if the stair is going up or down. + 
    + +

    Example

    +$lp->SetStepStyle();
    +

    +

    +

     

     

    + +Specify line style.

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Text string to specify line
    + +

    Description
    Linestyle for lines. Valid linestyles are:
    +'solid', 'dotted', 'dashed' +

    +The default line style is 'solid' + 
    +  

    See also
    Image::SetLineStyle +

    Example

    +$lp->SetStyle('dotted');
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LineProperty.html b/html/includes/jpgraph/docs/ref/LineProperty.html new file mode 100644 index 0000000000..a145e128cf --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LineProperty.html @@ -0,0 +1,99 @@ +


    CLASS LineProperty
    +(Defined in: jpgraph.php : 2735)
     LineProperty 
     SetColor() 
    SetStyle() 
    SetWeight() 
    Show() 
    +
     

    Class usage and Overview
    Property class to define properties for a line. Currently used only by Gantt chart to specify the grid line properties.

      +


    Class Methods

    +

     

     

    + +Set line color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Set line color 
    + +

    Example

    +$gantgraph->grid->SetColor('darkgrey'); +
    +

    +

     

     

    + +Set line style

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Line style
    + +

    Description
    Linestyle for lines. Valid linestyles are:
    +'solid', 'dotted', 'dashed' +

    +The default line style is 'solid' 
    +  

    See also
    Image::SetLineStyle +

    Example

    +$gantgraph->grid->SetColor('darkgrey'); +
    +

    +

     

     

    + +Specify weight of the line

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line width in pixels
    + +

    Description
    Set line width 
    + +

    Example

    +$gantgraph->grid->SetWeight(2); +
    +

    +

     

     

    + +Determine if the line should be hidden or not

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +true +True=Display line
    + +

    Description
    Show line, default is to hide the line. 
    + +

    Example

    +$gantgraph->grid->Show(false); // Hide the grid +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LinearScale.html b/html/includes/jpgraph/docs/ref/LinearScale.html new file mode 100644 index 0000000000..c3d7a8e661 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LinearScale.html @@ -0,0 +1,126 @@ +


    CLASS LinearScale
    +(Defined in: jpgraph.php : 4429)
     LinearScale 
     SetAutoMax() 
    SetAutoMin() 
    SetAutoTicks() 
    SetGrace() 
    +
     

    Class usage and Overview
    This class is the main scale class and implements the linear and integer scale for the axis.

      +

    See also related classes:
    Axis and LogScale

     


    Class Methods

    +

     

     

    + +Fix the maximum value for a scale

    + + + + +
    ArgumentDefaultDescription
    +$aMax + + Maximum value
    + +

    Description
    Fix a maximum value for a scale eventhough autoscaling is used for the min value. 
    + +

    Example

    +// For a negative scale we might want to make sure it
    // always start at the top from 0
    $graph->y2scale->SetAutoMax(0);
    +

    +

    +

     

     

    + +Set the minimum data value when the autoscaling is used.

    + + + + +
    ArgumentDefaultDescription
    +$aMin + + Min value
    + +

    Description
    Set the minimum data value when the autoscaling is used. Usefull if you want a fix minimum (like 0) but automtic maximum value. 
    + +

    Example

    +// Just let the maximum be autoscaled
    $graph->yaxis->scale->SetAutoMin(0);
    +

    +

    +

     

     

    + +Determine ticks automtically with manual scale

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +TRUE = determine ticks automatically
    + +

    Description
    This is used in conjunction when a manual scale is specified. In normall cases one has also to specify major and minor tick steps. +

    +For example:
    + +$graph->SetScale("textlin",0,70);
    +$graph->yscale->ticks->Set(10,2); +

    +However by instead using +

    +$graph->SetScale("textlin",0,70);
    +$graph->yscale->SetAutoTicks(); +

    +The major and minor ticks are determined automatically. +

    +The thing you have to be aware of is that the specified min and max values might be slightly modified so that the end/beginning of the scale will fall on a major tick step. +

    +By default the auto ticks are off. + + + 
    +  

    See also
    Graph::SetScale +

    Example

    +// Manually set Y-scale min=30, max=90
    $graph->SetScale('textlin',30,90);

    // Let JpGraph figure out suitable tick marks
    $graph->yscale->SetAutoTicks();

    +

    +

    +

     

     

    + +// Specify scale "grace" value (top and bottom)

    + + + + + + +
    ArgumentDefaultDescription
    +$aGraceTop + + Top grace value
    +$aGraceBottom + + +0 +Bottom grace value
    + +

    Description
    By default the autoscaling determines the minimum and maximum as close to the plots min and max values as possible. Sometimes this might not be suitable and you need some more "air". For example if you plot a bar plot with values on top of the bar. If the bar reaces the max value (which is also the scale end point) the value on top of the bar might be out in the margin.) +

    +By specifyin the grace you get added space. The value specified is interpretated as extra percentage of the total scale range. +

    +For example if the scale range (without grace) is (0,100) and you add 10% top grace (with SetGrace(10)) the modified scale will be (0,110) and if you use a 100% top grace the scale will be (0,200) and so on. 
    + +

    Example

    +$graph->xaxis->scale->SetGrace(50); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LinearTicks.html b/html/includes/jpgraph/docs/ref/LinearTicks.html new file mode 100644 index 0000000000..ad40322f83 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LinearTicks.html @@ -0,0 +1,168 @@ +


    CLASS LinearTicks EXTENDS Ticks
    +(Defined in: jpgraph.php : 4075)
     LinearTicks  Ticks  
     AdjustForDST() 
    GetMajor() 
    GetMinor() 
    Set() 
    SetMajTickPositions() 
    SetTextLabelStart() 
    SetTickPositions() 
    +
     
     

    Class usage and Overview
    Internal class that handles the drawing and formatting of the tick marks on each axis. This class is accessed through it'sinstance variable in the scale, e.g. +

    +$graph->xaxis->scale->ticks->Set(20,10); +

    +Note: When you manually specify a scale you must also specify the major/minor tick intervall.

      +

    See also related classes:
    LinearScale and LogScale

     


    Class Methods

    +

     

     

    + +// For a normal linear type of scale the major ticks will always be multiples// of the minor ticks. In order to avoid any rounding issues the major ticks are// defined as every "step" minor ticks and not calculated separately

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Return major step size in world coordinates

    +
    + +

    Description
    Return major step size in world coordinates 
    + +

    Example

    +$majintervall = $graph->xaxis->scale->ticks->Getmajor(); +
    +

    +

     

     

    + +// Return minor step size in world coordinates

    +
    + +

    Description
    Return minor step size in world coordinates. 
    + +

    Example

    +$majintervall = $graph->xaxis->scale->ticks->Getmajor(); +
    +

    +

     

     

    + +// Set Minor and Major ticks (in world coordinates)

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajStep + + Distance between major tick marks
    +$aMinStep + + +false +Distance between minor tick marks
    + +

    Description
    Set Minor and Major tick intervall (in world coordinates) 
    + +

    Example

    +$graph->yaxis->scale->ticks->Set(40,20); +
    +

    +

     

     

    + +//(" Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem."

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + No description available
    +$aLabels + + +NULL +No description available
    + +

    Description
    No description available.

    +

     

     

    + +Which tick label should we start with?

    + + + + +
    ArgumentDefaultDescription
    +$aTextLabelOff + + The number thaht the automatic textscale should start with.
    + +

    Description
    Normally text labels start at 0. However, automtic text labels can be started with an arbitrary number as specified with the argument to this method. + 
    + +

    Example

    +$graph->xaxis->scale->ticks->SetTextLabelStart(10);
    +

    +

    +

     

     

    + +Manually specify tick positions for the axis

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajPos + + Array of major positions
    +$aMinPos + + +NULL +Array of minor positions
    +$aLabels + + +NULL +Array of major label strings
    + +

    Description
    Manually specify major and minor tick positions for the axis together with the optional label strings. If no label array is specified then the numerical values at the positions of the major tick marks will be used as label strings. 
    + +

    Example

    +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LogScale.html b/html/includes/jpgraph/docs/ref/LogScale.html new file mode 100644 index 0000000000..49c623c964 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LogScale.html @@ -0,0 +1,38 @@ +


    CLASS LogScale EXTENDS LinearScale
    +(Defined in: jpgraph_log.php : 20)
     LogScale  LinearScale  
     GetMaxVal() 
    GetMinVal() 
    +
     
     

    Class usage and Overview
    Implements a logarithmic scale. Normally accessed through the axis 'scale' property, for example $graph->xaxis->sclal

      +

    See also related classes:
    LinearScale and Axis

     


    Class Methods

    +

     

     

    + +Get max value for scale.

    +
    + +

    Description
    Get max scale value for scale. 
    +  
    See also
    LogScale::GetMinVal +

    Example

    +$max = $graph->yaxis->scale->GetMaxVal(); +
    +

    +

     

     

    + +Get minimum scale value.

    +
    + +

    Description
    Get minimum scale value. 
    +  
    See also
    LogScale::GetMaxVal +

    Example

    +$max = $graph->yaxis->scale->GetMinVal(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/LogTicks.html b/html/includes/jpgraph/docs/ref/LogTicks.html new file mode 100644 index 0000000000..fae5bf676f --- /dev/null +++ b/html/includes/jpgraph/docs/ref/LogTicks.html @@ -0,0 +1,52 @@ +


    CLASS LogTicks EXTENDS Ticks
    +(Defined in: jpgraph_log.php : 121)
     LogTicks  Ticks 
     SetLabelLogType() 
    +
     Set() 
    SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    This class represents ticks on a logarithmic scale axis. It is responsible for drawing and positioning ticks.

      +

    See also related classes:
    LogScale and Axis

     


    Class Methods

    +

     

     

    + +Should the log labels be dispalyed with magnitudes ot plain numbers

    + + + + +
    ArgumentDefaultDescription
    +$aType + + Magnitude (10^x) or plain
    + +

    Description
    Specify how labels for log scales should be formatted as magnitude (scientific) or plain. +

    +$aType can be either +

      +
    • LOGLABELS_PLAIN, will show labels as for example 10000 +
    • LOGLABELS_MAGNITUDE, will show labels as 10^4 +
    + +By default log scale uses magnitude type of labels. + 
    + +

    Example

    +$graph->yaxis->scale->ticks->SetLabelLogType(LOGLABELS_PLAIN); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/MileStone.html b/html/includes/jpgraph/docs/ref/MileStone.html new file mode 100644 index 0000000000..a5427057b2 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/MileStone.html @@ -0,0 +1,49 @@ +


    CLASS MileStone EXTENDS GanttPlotObject
    +(Defined in: jpgraph_gantt.php : 3376)
     MileStone  GanttPlotObject  
     MileStone() 
    +
     
     

    Class usage and Overview
    Represents a milestone in the GanttChart. A milstone is created by specifyin a date.

      +

    See also related classes:
    GanttGraph

     


    Class Methods

    +

     

     

    + +Create a new milestone in a GanttGraph

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aVPos + + Row for milestone
    +$aLabel + + Label
    +$aDate + + Position on the date scale
    +$aCaption + + +"" +Caption string
    + +

    Description
    A milestone is by default displayed as a "Diamond" mark at a specified row at a specified date. It can also have a caption to the right of the milestone mark. + 
    +  
    See also
    GanttPlotObject::GanttPlotObject +

    Example

    +$graph = new GanttGraph();

    // Setup the gantt graph...
    ...

    $ms = new MileStone(7,"M5","2002-01-28","28/1");
    $graph->Add($ms);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PieGraph.html b/html/includes/jpgraph/docs/ref/PieGraph.html new file mode 100644 index 0000000000..8cf546bf3a --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PieGraph.html @@ -0,0 +1,159 @@ +


    CLASS PieGraph EXTENDS Graph
    +(Defined in: jpgraph_pie.php : 1117)
     PieGraph  Graph  
     Add() 
    PieGraph() 
    SetAntiAliasing() 
    SetColor() 
    Stroke() 
    +
     
     

    Class usage and Overview
    The canvas for use with PiePlots. You add pie plots by calling the Add() method. +

    +You can add several PiePlots by adjusting their size and positioning each PiePlot so it doesn't overlap eachother. +

      +

    See also related classes:
    PiePlot and PiePlot3D

     


    Class Methods

    +

     

     

    + +Add object to the pie graph

    + + + + +
    ArgumentDefaultDescription
    +$aObj + + Object to add
    + +

    Description
    Add a pieplots or text object to the pie graph. You can specify either a single object or an array. If you specify an array all object in the array must be of the same type.  
    + +

    Example

    +$piegraph = new PieGraph(300,400);
    $pieplot = new PiePlot($ydata);
    $piegraph->Add($pieplot);
    +

    +

    +

     

     

    + +//---------------// CONSTRUCTOR +

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + +300 +Width of graph
    +$height + + +200 +Height of graph
    +$cachedName + + +"" +Cache file name
    +$timeout + + +0 +Cache timeout in s
    +$inline + + +1 +Should the image be inline.
    + +

    Description
    See Graph::Graph() 
    +  
    See also
    Graph::Graph +

    Example

    +$piegraph = new PieGraph(300,400);
    +

    +

    +

     

     

    + +Enable/disable anti-alias for Pie Graphs

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +true=enable anti-aliasing
    + +

    Description
    Enable/disable anti-alias for Pie Graphs. This makes for much nicer looking PieGraphs. Please note that enabling anti-alias imposes some restrictions: +
      +
    • Enabling anti-alias will severely impact performance. As a rule of thumb you can expect drawing to take 5-8 times longer ! +
    • You can't use background images or gradient backgrounds together with anti-alias +

    + +

    Example

    +$piegraph->SetAntiAlias(); +
    +

    +

     

     

    + +Set the background color. Synonym to SetMarginColor()

    + + + + +
    ArgumentDefaultDescription
    +$c + + Color
    + +

    Description
    Set the background color. Synonym to SetMarginColor() 
    +  
    See also
    Graph::Graph +

    Example

    +$piegraph->SetColor('gray');
    +

    +

    +

     

     

    + +// Method description

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +Filename
    + +

    Description
    Stroke the piegraph to the browser or to a specified file if specified. Works exactly the same as Graph::Stroke() + 
    + +

    Example

    +...
    $piegraph->Stroke()
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PiePlot.html b/html/includes/jpgraph/docs/ref/PiePlot.html new file mode 100644 index 0000000000..b2e81eecfb --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PiePlot.html @@ -0,0 +1,618 @@ +


    CLASS PiePlot
    +(Defined in: jpgraph_pie.php : 24)
     PiePlot 
     Explode() 
    ExplodeAll() 
    ExplodeSlice() 
    PiePlot() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetFont() 
    SetFontColor() 
    SetGuideLines() 
    SetGuideLinesAdjust() 
    SetLabelPos() 
    SetLabels() 
    SetLabelType() 
    SetLegends() 
    SetShadow() 
    SetSize() 
    SetSliceColors() 
    SetStartAngle() 
    SetTheme() 
    SetValueType() 
    ShowBorder() 
    +
     

    Class usage and Overview
    Creates a new Pie plot from the supplied data.

    +By default the value (if enabled through the $pie->label->show() ) close to each slice will have a label corresponding to the percentage of that slice. +

    +Each plot may have an arbitrary title which can be accessed through the ?title? property in the PiePlot class. The title will be automatically centred on top of the PiePlot clear of any possible labels. To set the title use the Set() method , i.e. $plot->title->Set(?MyTitle?). +

    +To format the slice labels use the SetFormat() method of the value class.

      +

    See also related classes:
    PieGraph and PiePlot3D

     


    Class Methods

    +

     

     

    + +Explode one or more slices as specified radius.

    + + + + +
    ArgumentDefaultDescription
    +$aExplodeArr + + Explode specification
    + +

    Description
    To emphasise a specific slice it can be exploded, i.e moved out fro the center of the pie plot. This method will allow you to specify what slices and to waht radius you want them exploded. +

    +If you only want to explode a single slice you could also use the ExplodeSlice() method. + 
    +  

    See also
    PiePlot::ExplodeSlice +

    Example

    +//To explode slice 0,2 to radius 100 you would call
    $pieplot->Explode(array(100,0,100));
    +

    +

    +

     

     

    + +Explode all slices a specified amount

    + + + + +
    ArgumentDefaultDescription
    +$radius + + +20 +Explode radius
    + +

    Description
    Explode all slices a specified amount. If no radius is specified it will default to 20 pixels. 
    +  
    See also
    PiePlot::ExplodeSlice and PiePlot::Explode +

    Example

    +$p1->ExplodeAll();
    +

    +

    +

     

     

    + +Explode a single slice a specified radius

    + + + + + + +
    ArgumentDefaultDescription
    +$e + + Which slice to explode
    +$radius + + +20 +Radius to explode to
    + +

    Description
    Explode a single slice to a specific radius. 
    +  
    See also
    PiePlot::Explode and PiePlot::ExplodeAll +

    Example

    +// Explode slice number 2 (the third slice) using the default
    // explode radius.
    $pieplot->ExplodeSlice(2);
    +

    +

    +

     

     

    + +Constructor for PiePlots

    + + + + +
    ArgumentDefaultDescription
    +$data + + Data array for Pie
    + +

    Description
    Construct a new pie plot which later can be added to Piegraph 
    +  
    See also
    PieGraph::Add +

    Example

    +$pieplot = new PiePlot($slicedata);
    $piegraph->Add($pieplot);
    +

    +

    +

     

     

    + +//---------------// PUBLIC METHODS +

    + + + + + + +
    ArgumentDefaultDescription
    +$x + + X-position as fraction of width
    +$y + + +0.5 +Y-position as fraction of height
    + +

    Description
    Set the center point for the PiePlot 
    +  
    See also
    PiePlot::SetSize +

    Example

    +$pieplot->SetCenter(0.4,0.5);
    +

    +

    +

     

     

    + +Specify frame color for pie.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color.
    + +

    Description
    Set the color of the border around each slice. 
    +  
    See also
    PiePlot::SetSliceColors +

    Example

    +$pieplot->SetColor('red'); +
    +

    +

     

     

    + +Specify URL targets for image maps

    + + + + + + +
    ArgumentDefaultDescription
    +$targets + + Array of URL targets
    +$alts + + +null +Alt strings
    + +

    Description
    Specify list of targets for the image map for each slice. The target should be a fully qualified URL. +

    +Each slice will aslo have it's own 'alt' tag. Depending on the browser this tag is usually showed when the mouse is hold over a poarticular area on the image map. When formatting the alt strings can be specified as a printf() format string. The value supplied to the string will be the value for each slice. 
    +  

    See also
    PiePlot::GetCSIMareas +

    Example

    +$targets = array('godetail1.html', 'gotodetail2.html' 'gotodetail3.html');
    $alts = array('Year %d', 'Year %d', 'Year %d');

    $pieplot->SetCSIMTargets($targets,$alts);
    +

    +

    +

     

     

    + +Deprecated. Use $pieplot->value->SetFont() instead.

    + + + + + + + + +
    ArgumentDefaultDescription
    +$family + + Font family
    +$style + + +FS_NORMAL +Font style
    +$size + + +10 +Font size
    + +

    Description
    Deprecated. Use $pieplot->value->SetFont() instead. 
    + +

    Example

    +//Deprecated. Use $pieplot->value->SetFont() instead. +
    +

    +

     

     

    + +Deprecated. Use $pieplot->value->SetFontColor() instead.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Deprecated. Use $pieplot->value->SetFontColor() instead. 
    + +

    Example

    +//Deprecated. Use $pieplot->value->SetFontColor() instead. +
    +

    +

     

     

    + +Enable guideline and set drawing policy

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +TRUE=Enable guide lines
    +$aCurved + + +true +Curve the labels around the pie
    +$aAlways + + +false +Always use a guide line to the label
    + +

    Description
    Enable guideline and set drawing policy for guide lines and labels 
    + +

    Example

    +$pieplot->SetGuideLines(); +
    +

    +

     

     

    + +Adjuste the distance between labels and labels and pie

    + + + + + + +
    ArgumentDefaultDescription
    +$aVFactor + + Vertical fraction
    +$aRFactor + + +0.8 +Radius factor
    + +

    Description
    Adjuste the distance between labels and labels and pie 
    + +

    Example

    +$graph->xaxis->scale->SetGuideLinesAdjust(1.7); +
    +

    +

     

     

    + +Adjust the positoin of slice labels

    + + + + +
    ArgumentDefaultDescription
    +$aLblPosAdj + + Position as fraction of radius
    + +

    Description
    Specify the position of the labels for each slice as a fraction of the radius. +

    +Note: The adjustment affect both manually speicfied labels with SetLabels() as well as automtic labels. + 
    +  

    See also
    PiePlot::SetLabels +

    Example

    +$p1 = new PiePlot($data);
    $p1->SetLabelPos(0.6);
    $graph->Add($p1);
    +

    +

    +

     

     

    + +Specify individual text labels for all slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabels + + Arrays of strings
    +$aLblPosAdj + + +"auto" +Position as fraction of the radius
    + +

    Description
    Normally pie slice gets assigned a label which displays either the percentage or the absolute value of a slice. These automtically asigned labels are positioned in a ring around the pie. +
    +However, you can also manually assign a label to each slice individually with this method. +
    +Each label can contain format specification so for example the label +

    +"May %.1f%%" +

    +would display the in the pie "May 28.3%" assuming you had choosen to use percentage values (SetLabelType()) +

    +The second parameter specifies where to position these labels. The position is specified as a fraction of the radius of the pie plot or as the special strine 'auto'. If you specify this string value JpGraph will automtically determine the best position for the labels inside the pie. This is the default if you don't explicitely specify the position. +

    +If you specify a value > 1.0 then the labels will +just be move further out. For example if you specify the position as 1.5 then the labels will move out a further 50% of the current pie radius. +

    +Note: The actual alignment of the labels are dependent on the position. If the labels are just outside the pie they will be individually positioned according to the angle. If the labels are positioned inside the pie then the point of gravity within the text will be aligned with the specified position in the pie. + + 
    +  

    See also
    PiePlot::SetLabelType +

    Example

    +$p1->SetLabelType(PIE_VALUE_PER);
    $lbl = array("adam\n%.1f%%","bertil\n%.1f%%","kalle\n%.1f%%","peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%");
    $p1->SetLabels($lbl);
    +

    +

    +

     

     

    + +Should we display actual value or percentage?

    + + + + +
    ArgumentDefaultDescription
    +$t + + Set absolute or percentage value constant
    + +

    Description
    Specify if the value displayed by each slice (if the $pieplot->value->Show()) have been called shold be absolute or in percent. +

    +The following values are allowed arguments: +

      +
    • PIE_VALUE_ABS +
    • PIE_VALUE_PER +
    • PIE_VALUE_ADJPER. This is a special case of the percentage. Specifying this value will adjust integer percetage values so that the total sum will always be 100%. This is done with the the Hare/Niemeyer method. This makes most sense when used together with a format string for labels of "%d" so it will only display a whole integer value without any deciamals. +
    • +
    +The defauklt is to show percent. 
    + +

    Example

    +// Show absolute values
    $pieplot->SetLabelType(PIE_VALUE_ABS);

    // Display each label with postfix 'kr', e.g. each label will
    // look like (for example) 23.5 kr
    $pieplot->value->SetFormat('%d kr');
    $pieplot->value->Show();
    +

    +

    +

     

     

    + +// Set label arrays

    + + + + +
    ArgumentDefaultDescription
    +$aLegend + + Array of strings
    + +

    Description
    Specify an array of text strings that should be used as legends for the slices. +

    +Each text string can be formatted as a printf() format string since when printed they will be passed the value for that slice. +

    +Tip: If you have many evry small slices then the labels close to the pie may be overwriting each other. In this case it is probably better to hide the labels by the slices and instead just show the values ion the legends. 
    + +

    Example

    +$legends = array('April (%d)','May (%d)','June (%d)');

    $pieplot->SetLegends($legends);

    +

    +

    +

     

     

    + +Add a drop shadow to the pie slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + +'darkgray' +Shadow color
    +$aDropWidth + + +4 +Drop distance for shadow
    + +

    Description
    Add a drop shadow to the pie slices. +

    +This is often more affective if one or more slices are exploded. 
    + +

    Example

    +// Explode all slices
    $p1->ExplodeAll(10);

    // Add drop shadow
    $p1->SetShadow();
    +

    +

    +

     

     

    + +// Size in percentage

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + Size of radius
    + +

    Description
    If the value specified is between 0 and 1 then it is interpreted as a a fraction of either height or width, whatever is smallest, of the graph. +

    +If the value is >1 then it is interpretated as an absolute size in pixels. + 
    +  

    See also
    PiePlot::SetCenter +

    Example

    +$pieplot->SetSize(0.3); +
    +

    +

     

     

    + +Override theme coplros for slices

    + + + + +
    ArgumentDefaultDescription
    +$aColors + + Array of colors
    + +

    Description
    Normally the colors of the slices are set according to what color-theme you are using. You can however, override this by supplying an array of colors to be used for the slices. +

    +If you supply fewer colors than pie-slices than the colors will be re-used from the beginning of the array. + 
    +  

    See also
    PiePlot::SetTheme +

    Example

    +$p1->SetSliceColors(array('red','green','blue')); +
    +

    +

     

     

    + +Speciy start angel for first slice

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + Start angle in degrees
    + +

    Description
    Normally the first slice is drawn at 0 degrees, i.e. 3'a clock. With this method you can adjust that to an arbitrary angle. Positive angle will rotate the slice clockwise and a negative angle will move the slice counter-clockwise. +

    +The angle should be specified in degrees. + 
    + +

    Example

    +$pieplot->SetStartAngle(45); +
    +

    +

     

     

    + +//Add the last point on the arc

    + + + + +
    ArgumentDefaultDescription
    +$aTheme + + Theme name
    + +

    Description
    Specify what color theme should be used for this pie. As of version 1.6.4 the following themes are available: +
      +
    • "earth" +
    • "pastel" +
    • "sand" +
    • "water" +
     
    + +

    Example

    +$pieplot->SetTheme('water');
    +

    +

    +

     

     

    + +DEPRECATED: See SetLabelType()

    + + + + +
    ArgumentDefaultDescription
    +$aType + + Value type
    + +

    Description
    See SetLabelType() 
    +  
    See also
    PiePlot::SetLabelType +

    Example

    +NA +
    +

    +

     

     

    + +// Should the circle around a pie plot be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$exterior + + +true +Display circle on the outer edge of pieplot
    +$interior + + +true +Display the lines between each slice
    + +

    Description
    Show the lines between each slice and the border around the pie. 
    + +

    Example

    +// show both
    $pieplot->ShowBorder();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PiePlot3D.html b/html/includes/jpgraph/docs/ref/PiePlot3D.html new file mode 100644 index 0000000000..4c55d68818 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PiePlot3D.html @@ -0,0 +1,279 @@ +


    CLASS PiePlot3D EXTENDS PiePlot
    +(Defined in: jpgraph_pie3d.php : 17)
     PiePlot3D  PiePlot  
     PiePlot3d() 
    SetAngle() 
    SetCSIMTargets() 
    SetEdge() 
    SetHeight() 
    SetLabelMargin() 
    SetLabels() 
    SetLegends() 
    SetSliceColors() 
    SetStartAngle() 
    ShowBorder() 
    +
     
     

    Class usage and Overview
    A 3D pie plot is much like a normal pie plot but in a 3D setting. You can control the apperance by specifying the angle of attack for the pie. A small angle show a very "flat" pie while a large angle shows almost a 2D pie. + +Please note that a 3D pie is much more CPU intensive to draw then the normal pie. To reduce the time you might want to keep the height of the pie as small as you think looks good. The height has a direct linear impact on how long it takes to draw a 3D pie. (See SetHeight()). + +To view a 3D pieplot you start by constructing a PieGraph() and then adding a numerb of constructed PiePlot3D to this graph. +

      +

    See also related classes:
    PieGraph and PiePlot

     


    Class Methods

    +

     

     

    + +Construct a new 3D pie plot

    + + + + +
    ArgumentDefaultDescription
    +&$data + + Data array for slices
    + +

    Description
    This creates a new pie plot using the data supplied. This plot can then be added to the pie graph. 
    + +

    Example

    +$pieplot3d = new PiePlot3d($ydata);

    $piegraph->Add($pieplot3d);
    +

    +

    +

     

     

    + +Specify projection angle for 3D in degrees.

    + + + + +
    ArgumentDefaultDescription
    +$a + + Projection angle in degrees
    + +

    Description
    Specify projection angle for 3D in degrees. Must be between 10 and 80 degrees. A small angle will make the pie very flat and a large angle will make it present much more of pie circle. 
    + +

    Example

    +$pieplot->SetAngle(45);
    +

    +

    +

     

     

    + +Specify URL for each slice for the image map

    + + + + + + +
    ArgumentDefaultDescription
    +$targets + + Array of URL targets
    +$alts + + +null +Array of Alt texts
    + +

    Description
    Specify URL for each slice for the image map 
    + +

    Example

    +$targets = array('nextimage.php?1', 'nextimage.php?2', 'nextimage.php?3');
    // Show the actual value in the alt text when user hovers the
    // cursor over the slice
    $alts = array('More details..(%.1f)', 'More details..(%.1f)', 'More details..(%.1f)' );
    $pie->SetCSIMTargets($targets,$alts);
    +

    +

    +

     

     

    + +Add a line around pie slices

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + +'black' +Color for line
    +$aWeight + + +1 +Width of line
    + +

    Description
    Specify if the slices should be separated by a line? If color is specified as "" no line will be used to separate pie slices. + +Default is to not show any lines. 
    + +

    Example

    +$pieplot3d->SetEdge('blue',1); +
    +

    +

     

     

    + +Specify thickness of the 3D pie plot

    + + + + +
    ArgumentDefaultDescription
    +$aHeight + + Height in pixels
    + +

    Description
    Specify thickness of 3D pie plot. To minimize CPU usuage you should try to keep the thickness to the visual accepatble minimum. 
    + +

    Example

    +$pieplot->SetHeight(20); +
    +

    +

     

     

    + +Specify the distance from the pie to the labels

    + + + + +
    ArgumentDefaultDescription
    +$m + + Margin in pixels
    + +

    Description
    Specify the distance from the pie to the labels 
    + +

    Example

    +$pieplot3d->SetLabelMargin(20); +
    +

    +

     

     

    + +Specify slice labels for 3D pies

    + + + + + + +
    ArgumentDefaultDescription
    +$aLabels + + Label arrays
    +$aLblPosAdj + + +"auto" +Label position [0.2- 1]
    + +

    Description
    Specify slice labels for 3D pies. Positoin specify the fraction of the radius wher the labels should be positoined. A values of 1 will position the labels outside the pie. +

    +The labels may include an optional sprintf() formatting string. Before stroking the label to the graph it will be formatted with the actual value (absolute or percentage) depending on what has been specified with the SetLabelType() method. + 
    +  

    See also
    PiePlot::SetLabelType +

    Example

    +// Specify explicit labels and position them outside the pie
    $p1->SetLabels(array("Jan\n%.1f%%","Feb\n%.1f%%","Mar\n%.1f%%","Apr\n%.1f%%"),1);
    +

    +

    +

     

     

    + +Set legends for slices

    + + + + +
    ArgumentDefaultDescription
    +$aLegend + + Array of legends
    + +

    Description
    Set legends for slices 
    + +

    Example

    +$plot->SetLegends(array('Jan','Feb','Mar','Apr'); +
    +

    +

     

     

    + +Specify color of the individual slices

    + + + + +
    ArgumentDefaultDescription
    +$aColors + + Array of colors
    + +

    Description
    Specify color of the individual slices. If there are more slices than colors then the colors will wrap around. 
    + +

    Example

    +$pieplot->SetSliceColors(array('red','blue','green','navy','orange')); +
    +

    +

     

     

    + +Specify start angle for first slice in the Pie

    + + + + +
    ArgumentDefaultDescription
    +$aStart + + Start angle (in degrees)
    + +

    Description
    Specify the start angle in degrees for the first slice in the Pie. Angles are counted counter-clockwise starting at "3'clock". 
    + +

    Example

    +$pieplot->SetStartAngle(45); +
    +

    +

     

     

    + +Select which borders on the pie should be displayed

    + + + + + + +
    ArgumentDefaultDescription
    +$exterior + + +true +Display interior borders
    +$interior + + +true +Display exterior borders
    + +

    Description
    Select which borders should be displayed. Note that when anti-aliasing is enabled no borders can be shown. 
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PiePlotC.html b/html/includes/jpgraph/docs/ref/PiePlotC.html new file mode 100644 index 0000000000..87f1f04611 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PiePlotC.html @@ -0,0 +1,163 @@ +


    CLASS PiePlotC EXTENDS PiePlot
    +(Defined in: jpgraph_pie.php : 928)
     PiePlotC  PiePlot  
     PiePlotC() 
    SetMid() 
    SetMidColor() 
    SetMidCSIM() 
    SetMidSize() 
    SetMidTitle() 
    +
     
     

    Class usage and Overview
    The PiePlotC is an extesnion of the normal pie plot where there is a filled circle in the center of the pie. This filled circle can have it's own labels and CSIM.

      +

    See also related classes:
    PiePlot

     


    Class Methods

    +

     

     

    + +Create a Pie plot with a filled circle in the middle

    + + + + + + +
    ArgumentDefaultDescription
    +$data + + Data array
    +$aCenterTitle + + +'' +Title for center circle
    + +

    Description
    Create a variant of the Pie plot with a filled circle in the middle. The title, color and size of the center circle ca be modified. 
    +  
    See also
    PiePlotC::SetMidCSIM, PiePlotC::SetMid, PiePlotC::SetMidColor and PiePlotC::SetMidSize +

    Example

    +$piec = new PiePlotC($data); +
    +

    +

     

     

    + +Specify all parameters for the center circle

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTitle + + Title text for center circle
    +$aColor + + +'white' +Fill color for center circle
    +$aSize + + +0.5 +Size of center. Specified as fraction of radius
    + +

    Description
    Specify all parameters for the center circle 
    + +

    Example

    +$piec->SetMid('Halteberg','red:0.6',0.3); +
    +

    +

     

     

    + +Specify fill color for center circle

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify fill color for center circle.  
    +  
    See also
    PiePlotC::SetMid +

    Example

    +$piec->SetMidColor('yellow:0.6');
    +

    +

    +

     

     

    + +Specify URL target for filled middle circle

    + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + Target URL string
    +$aAlt + + Alt text
    + +

    Description
    Specify URL target for filled middle circle. Use SetCSIMtargets() to specify the individual targets for the slices in the pie. + 
    +  
    See also
    PiePlot::SetCSIMTargets +

    Example

    +$pie->SetMidCSIM('depth.php?t=32','Details');
    +

    +

    +

     

     

    + +Specify size for center circle

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + Size in fraction of the radius
    + +

    Description
    Specify size for center circle as fraction of the radius. 
    + +

    Example

    +$piec->SetMidSize(0.5); +
    +

    +

     

     

    + +Specify title for the center circle.

    + + + + +
    ArgumentDefaultDescription
    +$aTitle + + Title
    + +

    Description
    Specify title for the center circle. The title can also be set in the inital creation of the Pie as well as with the SetMidTitle() 
    +  
    See also
    PiePlotC::SetMid and PiePlotC::PiePlotC +

    Example

    +$piec->SetMidTitle("Center title\nSecond line title"); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Plot.html b/html/includes/jpgraph/docs/ref/Plot.html new file mode 100644 index 0000000000..5d5f2d5a4d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Plot.html @@ -0,0 +1,173 @@ +


    CLASS Plot
    +(Defined in: jpgraph.php : 5626)
     Plot 
     HideLegend() 
    SetCenter() 
    SetColor() 
    SetCSIMTargets() 
    SetLegend() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Abstract base class for all plots. This abstract base class defines the signature that all plots must adhere to. It also provides the default trivial implementation for these framework methods. + +Public properties: + + + + + +
    Name Type Description
    value DisplayValue Control the data value displayed at each data point
    +

      +

    See also related classes:
    DisplayValue, LinePlot, ErrorPlot and ScatterPlot

     


    Class Methods

    +

     

     

    + +Hide legend for this plot

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +TRUE=Hide legend
    + +

    Description
    Hide legend for this plot even if it was specified (with SetLegend() )  
    + +

    Example

    +$bar = new GanttBar(...);
    $bar->HideLegend();
    +

    +

    +

     

     

    + +Center the data pointr between tick labels

    + + + + +
    ArgumentDefaultDescription
    +$aCenter + + +true +True=Center each data point
    + +

    Description
    Used for text scales. Centers the data values between the ticvk marks instead if falling exactly on them. + 
    + +

    Example

    +$barplot->SetCenter(); +
    +

    +

     

     

    + +Specify color for plot.

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify color for plot. Each plot type is free to interpret it to its own choosing. 
    + +

    Example

    +$lineplot->SetColor('red');
    +

    +

    +

     

     

    + +Set URL targets for CSIM

    + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + Array of URL targets
    +$aAlts + + +null +Alt texts for each CSIM point
    + +

    Description
    Set the URL links for the CSIM if the plot type support this. 
    + +

    Example

    +$url1 = "http://someotherurl.html"
    $url2 = ..
    ...

    $targetarray = array($url1, $url2, $url3, $url4);
    $barplot->SetCSIMTargets($targetarray);
    +

    +

    +

     

     

    + +Set legend string for this plot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + Legend string
    +$aCSIM + + +"" +URL for image map
    +$aCSIMAlt + + +"" +Alt text for image map
    + +

    Description
    Set legend string for this plot. If the CSIM string is epscified then the legend will become an image map. To use image maps you need to use the StrokeCSIM() instead of the normal Stroke() 
    +  
    See also
    Graph::StrokeCSIM +

    Example

    +$lineplot->SetLegend('Year 2002'); +
    +

    +

     

     

    + +Specify line weight for plot

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + +1 +Line weight in pixels
    + +

    Description
    Specify line weight for plot 
    + +

    Example

    +$lineplot->SetWeight(2); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PlotBand.html b/html/includes/jpgraph/docs/ref/PlotBand.html new file mode 100644 index 0000000000..5e50885eec --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PlotBand.html @@ -0,0 +1,164 @@ +


    CLASS PlotBand
    +(Defined in: jpgraph_plotband.php : 541)
     PlotBand 
     PlotBand() 
    SetDensity() 
    SetOrder() 
    ShowFrame() 
    +
     

    Class usage and Overview
    A "Plotband" repesent a rectangualr area in the graph that can be given a specific pattern ranging from 3D grid to simple horizntal grid lines. +

    +A Plot band is then added to the graph via the Graph::AddBand() method. +

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

     

    + +Create a new Plot band of the specified type

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + Direction of plot band
    +$aPattern + + Type of pattern
    +$aMin + + Min value for plot area
    +$aMax + + Max value for plot area
    +$aColor + + +"black" +Color of pattern
    +$aWeight + + +1 +Line weight
    +$aDepth + + +DEPTH_BACK +Depth. Over or under the plot.
    + +

    Description
    Create a new Plot band that later on can be added to the graph. The following pattern types are supported + +
      +
    • BAND_RDIAG, Right diagonal lines +
    • BAND_LDIAG, Left diagonal lines +
    • BAND_SOLID, Solid one color +
    • BAND_LVERT, Vertical lines +
    • BAND_LHOR, Horizontal lines +
    • BAND_VLINE, Vertical lines +
    • BAND_HLINE, Horizontal lines +
    • BAND_3DPLANE, "3D" Plane +
    • BAND_HVCROSS, Vertical/Hor crosses +
    • BAND_DIAGCROSS, Diagonal crosses +
    + +A plotband extends completely along one of the axis in the graph. This axis is determined by the first argument, the direction. + +Valid directions are +
      +
    1. HORIZONTAL +
    2. VERTICAL +

    + +

    Example

    +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $uband->ShowFrame(false);
    $uband->SetDensity(50); // 50% line density
    $lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red");
    $lband->ShowFrame(false);
    $lband->SetDensity(20); // 20% line density

    $graph->AddBand($uband);
    $graph->AddBand($lband);
    +

    +

    +

     

     

    + +Specify density for pattern

    + + + + +
    ArgumentDefaultDescription
    +$aDens + + Density [1,100]
    + +

    Description
    Specify density for pattern as an integer value between 1 and 100, 100 being very dense and 1 being very sparse. + 
    + +

    Example

    +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $uband->ShowFrame(false);
    $uband->SetDensity(50); // 50% line density
    $lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red");
    $lband->ShowFrame(false);
    $lband->SetDensity(20); // 20% line density

    $graph->AddBand($uband);
    $graph->AddBand($lband);
    +

    +

    +

     

     

    + +Specify z-order parameter for plot

    + + + + +
    ArgumentDefaultDescription
    +$aDepth + + Pattern Z-order parameter
    + +

    Description
    Specify if the pattern should be in front of plot or behind the plot. Valid parameters are + +
      +
    • DEPTH_BACK, Behind the plot +
    • DEPTH_FRONT, In front of the plot +

    + +

    Example

    +$band=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $band->ShowFrame(false);
    $band->SetOrder(DEPTH_BACK);
    $graph->AddBand($band);
    +

    +

    +

     

     

    + +Display frame around pattern

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Display border
    + +

    Description
    Display frame around pattern 
    + +

    Example

    +$band=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green");
    $band->ShowFrame(false);
    $band->SetOrder(DEPTH_BACK);
    $graph->AddBand($band);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PlotLine.html b/html/includes/jpgraph/docs/ref/PlotLine.html new file mode 100644 index 0000000000..4a448751e8 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PlotLine.html @@ -0,0 +1,199 @@ +


    CLASS PlotLine
    +(Defined in: jpgraph.php : 5818)
     PlotLine 
     HideLegend() 
    PlotLine() 
    SetColor() 
    SetDirection() 
    SetLegend() 
    SetPosition() 
    SetWeight() 
    +
     

    Class usage and Overview
    A plot line represents a horizontal or vertical line in the plot at an arbitrary position. A plot line can be added to all X-Y types of plots/graphs.

      +

    See also related classes:
    Graph

     


    Class Methods

    +

     

     

    + +Hide legend

    + + + + +
    ArgumentDefaultDescription
    +$f + + True/False
    + +

    Description
    Hide legend 
    +

    +

     

     

    + +Construct a new plot line

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aDir + + +HORIZONTAL +Direction, HORIZONTAL or VERTICAL
    +$aPos + + +0 +Position
    +$aColor + + +"black" +Color
    +$aWeight + + +1 +Line weight
    + +

    Description
    Create a new horizontal or vertical line in the graph at a specific position. + +The graph can the be added to the graph with a call to the AddLine 
    + +

    Example

    +// Add mark graph with static lines
    $line = new PlotLine(HORIZONTAL,0,"black",2);
    $graph->AddLine($line);
    +

    +

    +

     

     

    + +Specify color of line

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Set color for line. + +Note. Colors can also be set in the creation of a PlotLine + 
    +  
    See also
    PlotLine::PlotLine +

    Example

    +$plotline->SetColor('red');
    +

    +

    +

     

     

    + +Specify direction of line

    + + + + +
    ArgumentDefaultDescription
    +$aDir + + Direction, horizontal or vertical line
    + +

    Description
    Specify direction of line. Valid arguments are: +
      +
    • VERTICAL +
    • HORIZONTAL +
    + +Note: Direction can also be specified in the creation of a plot line. + 
    +  
    See also
    PlotLine::PlotLine +

    Example

    +$plotline->SetDirection(VERTICAL);
    $plotline->SetColor('red');
    $graph->AddLine($plotline);
    +

    +

    +

     

     

    + +Set legend text

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + Legend text
    +$aCSIM + + CSIM target
    +$aCSIMAlt + + CSIM Alt text
    + +

    Description
    Set legend text 
    +

    +

     

     

    + +Specify position for plot line

    + + + + +
    ArgumentDefaultDescription
    +$aScalePosition + + Scale position
    + +

    Description
    Specify position for plot line. If the line is vertical the position is interpretated as the x-coordinate and if it is horizontal then the positoin is interpretatedas the Y-coordinate. + +Note: Position can also be specified in the creation of the line. 
    + +

    Example

    +$plotline->SetDirection(HORIZONTAL);
    $plotline->SetPosition(25);
    $graph->AddLine($plotline);
    +

    +

    +

     

     

    + +Specify line weight

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line weight in pixels
    + +

    Description
    Specify line weight. + +Note. Line weight can also be specified in the creation of the line. + 
    +  
    See also
    PlotLine::PlotLine +

    Example

    +$plotline->SetColor('red');
    $plotline->SetDirection(VERTICAL);
    $plotline->SetPosition(35);
    $plotline->SetWeight(2);

    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PlotMark.html b/html/includes/jpgraph/docs/ref/PlotMark.html new file mode 100644 index 0000000000..607dd4b115 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PlotMark.html @@ -0,0 +1,506 @@ +


    CLASS PlotMark
    +(Defined in: jpgraph_plotmark.inc : 73)
     PlotMark 
     Hide() 
    SetCallback() 
    SetCallbackYX() 
    SetColor() 
    SetDefaultWidth() 
    SetFillColor() 
    SetSize() 
    SetType() 
    SetWeight() 
    SetWidth() 
    Show() 
    +
     

    Class usage and Overview
    In scatter plots and (possible) line plots each data point have a marker. This class implements these markers and the mtethod to modify it's apperance. +

    +There are a number of possible marker, circle, filled circle, square, filled square, star, triangle and so on. +See PlotMark::PlotMark() below for details on how to specify what mark. +

    +Marks are accessed thtough the 'mark' property in line and scatter plot, i.e LinePlot::mark and ScatterPlot::mark. Marks in line plot are by default turned off. To enable marks use the construction $lineplot->mark->Show(). +

    +You can modify the type of plotmarks by calling the SetType() method. Possible plot marks are: + +

      +
    1. MARK_SQUARE, A filled square +
    2. MARK_UTRIANGLE, A triangle pointed upwards +
    3. MARK_DTRIANGLE, A triangle pointed downwards +
    4. MARK_DIAMOND, A diamond +
    5. MARK_CIRCLE, A circle +
    6. MARK_FILLEDCIRCLE, A filled circle +
    7. MARK_CROSS, A cross +
    8. MARK_STAR, A star +
    9. MARK_X, An 'X' +
    10. MARK_LEFTTRIANGLE, A half triangle, vertical line to left (used as group markers for Gantt charts) +
    11. MARK_RIGHTTRIANGLE, A half triangle, vertical line to right (used as group markers for Gantt charts) +
    12. MARK_FLASH, A Zig-Zag vertical flash +
    +

      +

    See also related classes:
    LinePlot and ScatterPlot

     


    Class Methods

    +

     

     

    + +Hide plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide plot mark
    + +

    Description
    Hide plot mark + 
    +  
    See also
    PlotMark::Show +

    Example

    +$linerplot->mark->Hide(); +
    +

    +

     

     

    + +Specify callback function for plotmark

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + Function name
    + +

    Description
    Callback for plotmarks is only really used in one circumstance. Scatter plot. The callback can be used to individually adjust, sixe and color of the plot marks. +

    +The specified callback function gets called with the Y-value for the current plotmark. The callback function should return an array consisting of three elements +

      +
    1. Plot size +
    2. Color +
    3. Fill color +

    + +

    Example

    +function FCallback($aVal) {
    // This callback will adjust the fill color and size of
    // the datapoint according to the data value according to
        if( $aVal < 30 ) $c = "blue";
        elseif( $aVal < 70 ) $c = "green";
        else $c="red";
        return array(floor($aVal/3),"",$c);
    }

    ...

    // Specify the callback
    $scatterplot->mark->SetCallback("FCallback");


    +

    +

    +

     

     

    + +Specify callback function

    + + + + +
    ArgumentDefaultDescription
    +$aFunc + + Callback function
    + +

    Description
    Callback for plotmarks is only really used in one circumstance. Scatter plot. The callback can be used to individually adjust, sixe and color of the plot marks. +

    +The specified callback function gets called with the Y-value for the current plotmark. The callback function should return an array consisting of three elements +

      +
    1. Plot size +
    2. Color +
    3. Fill color +
    +The difference from the ordinary SetCallback() is that the callback function specified in SetCallbackYX() gets passed both the Y and X coordinate (note the order!) as arguments. + 
    + +

    Example

    +function FCallback($aYVal,$aXVal) {
        // Some code to the size and color
        return array( ... );
    }

    ...

    // Specify the callback
    $scatterplot->mark->SetCallbackYX("FCallback");


    +

    +

    +

     

     

    + +Specify color for plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify the line color for plot mark + 
    +  
    See also
    PlotMark::SetFillColor +

    Example

    +$lineplot->mark->SetColor('navy');
    +

    +

    +

     

     

    + +Restore default size of mark

    +
    + +

    Description
    Restore default size of mark 
    + +

    Example

    +$lineplot->mark->SetDefaultWidth() +
    +

    +

     

     

    + +Set fill color for mark

    + + + + +
    ArgumentDefaultDescription
    +$aFillColor + + Color
    + +

    Description
    Set fill color for mark 
    +  
    See also
    PlotMark::SetColor +

    Example

    +$lineplot->mark->SetFillColor('blue');
    +

    +

    +

     

     

    + +Set size of mark

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + WIdth of mark in pixels
    + +

    Description
    Synonym for SetWidth() 
    +  
    See also
    PlotMark::SetWidth +

    Example

    +$lineplot->mark->SetSize(10); +
    +

    +

     

     

    + +Specify type of plot mark

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aType + + Type of plotmark, shape or built-in image
    +$aFileName + + +'' +Filename or country name depending on type of plotmark. See below.
    +$aScale + + +1.0 +Scaling of image
    + +

    Description
    This method is used to specify what type of plotmarks should be be displayed. There are two classes of plotmarks. The first class is a number of different shapes and the second class is a number of built-in renderd images. +

    +The following shape (the first class) plot marks are available + +

      +
    1. MARK_SQUARE, A filled square +
    2. MARK_UTRIANGLE, A triangle pointed upwards +
    3. MARK_DTRIANGLE, A triangle pointed downwards +
    4. MARK_DIAMOND, A diamond +
    5. MARK_CIRCLE, A circle +
    6. MARK_FILLEDCIRCLE, A filled circle +
    7. MARK_CROSS, A cross +
    8. MARK_STAR, A star +
    9. MARK_X, An 'X' +
    10. MARK_IMAGE, Use the image specified with the filename and scale as the second and third argument as the mark. +
    11. MARK_FLAG, Use one of MARK_FLAG1, MARK_FLAG2, MARK_FLAG3, MARK_FLAG4 to indicate that you want to display a country flag. The numbers indicate which original size of the flag you want to use. 1 is the smallest size and 4 is the largest flag size. You can of course also scale a flag by specifying the scale as the third argument. Which country flag you want is specified in the second argument as either the full country name, partial country name or by ordinal number as specified in the table below. Please note that if you specify a partial name then the first country in alphabetic order that matches the partial name will be used. +
    + +

    +For the second class (built-in images) the following table list the different images as well as what color they are available in. For the built-in images you specify the color with the second argument. +

    +Note that some of the images are available in different sizes. The reason is that even though you can scale them by the third argument there is a visual degradation to scale an image larger than it's original size since some pixels needs to be interpolated. Reducing the size with a scale < 1.0 gives much better visual apperance. +

    +The scaling works with both GD 1 and GD 2 but with GD 2 the quality of the scaling is much better. +

    +Built-in images and available colors: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDescriptionColors
    MARK_IMG_PUSHPIN, MARK_IMG_SPUSHPIN Push-pin image'red','blue','green','pink','orange'
    MARK_IMG_LPUSHPIN A larger Push-pin image'red','blue','green','pink','orange'
    MARK_IMG_BALL, MARK_IMAGE_SBALLA round 3D rendered ball'bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'
    MARK_IMAGE_MBALLA medium sized round 3D rendered ball +'blue','bluegreen','brown','cyan', +'darkgray','greengray','gray','green', +'greenblue','lightblue','lightred', +'purple','red','white','yellow' +
    MARK_IMAGE_LBALLA large sized round 3D rendered ball +'blue','lightblue','brown','darkgreen', +'green','purple','red','gray','yellow','silver','gray' +
    MARK_IMAGE_SQUAREA 3D rendered square'bluegreen','blue','green', +'lightblue','orange','purple','red','yellow'
    MARK_IMG_STARA 3D rendered star image'bluegreen','lightblue','purple','blue','green','pink','red','yellow'
    MARK_IMG_DIAMONDA 3D rendered diamond'lightblue','darkblue','gray', +'blue','pink','purple','red','yellow'
    MARK_IMG_BEVELA 3D rendered bevel style round ring'green','purple','orange','red','yellow'
    +

    +In terms of the builtin flags 230 countries are supported. The following table lists all available flags: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    1: 'Afghanistan' 2: 'Republic of Angola'
    3: 'Republic of Albania' 4: 'Alderney'
    5: 'Democratic and Popular Republic of Algeria' 6: 'Territory of American Samoa'
    7: 'Principality of Andorra' 8: 'British Overseas Territory of Anguilla'
    9: 'Antarctica' 10: 'Argentine Republic'
    11: 'League of Arab States' 12: 'Republic of Armenia'
    13: 'Aruba' 14: 'Commonwealth of Australia'
    15: 'Republic of Austria' 16: 'Azerbaijani Republic'
    17: 'British Antarctic Territory' 18: 'Kingdom of Belgium'
    19: 'British Overseas Territory of Bermuda' 20: 'Commonwealth of the Bahamas'
    21: 'Kingdom of Bahrain' 22: 'Republic of Belarus'
    23: 'Republic of Bolivia' 24: 'Belize'
    25: 'Republic of Benin' 26: 'Republic of Botswana'
    27: 'Federative Republic of Brazil' 28: 'Barbados'
    29: 'British Indian Ocean Territory' 30: 'Brunei Darussalam'
    31: 'Republic of Burkina' 32: 'Republic of Bulgaria'
    33: 'Republic of Burundi' 34: 'Overseas Territory of the British Virgin Islands'
    35: 'Central African Republic' 36: 'Kingdom of Cambodia'
    37: 'Republic of Cameroon' 38: 'Dominion of Canada'
    39: 'Caribbean Community' 40: 'Republic of Cape Verde'
    41: 'Republic of Chad' 42: 'Republic of Chile'
    43: 'Territory of Christmas Island' 44: 'Commonwealth of Independent States'
    45: 'Cook Islands' 46: 'Republic of Colombia'
    47: 'Territory of Cocos Islands' 48: 'Commonwealth'
    49: 'Union of the Comoros' 50: 'Republic of the Congo'
    51: 'Republic of Costa Rica' 52: 'Republic of Croatia'
    53: 'Republic of Cuba' 54: 'British Overseas Territory of the Cayman Islands'
    55: 'Republic of Cyprus' 56: 'The Czech Republic'
    57: 'Kingdom of Denmark' 58: 'Republic of Djibouti'
    59: 'Commonwealth of Dominica' 60: 'Dominican Republic'
    61: 'Republic of Ecuador' 62: 'Arab Republic of Egypt'
    63: 'Republic of El Salvador' 64: 'England'
    65: 'Republic of Equatorial Guinea' 66: 'State of Eritrea'
    67: 'Republic of Estonia' 68: 'Ethiopia'
    69: 'European Union' 70: 'British Overseas Territory of the Falkland Islands'
    71: 'International Federation of Vexillological Associations' 72: 'Republic of Fiji'
    73: 'Republic of Finland' 74: 'Territory of French Polynesia'
    75: 'French Republic' 76: 'Overseas Department of French Guiana'
    77: 'Gabonese Republic' 78: 'Republic of the Gambia'
    79: 'Republic of Georgia' 80: 'Federal Republic of Germany'
    81: 'Republic of Ghana' 82: 'Gibraltar'
    83: 'Hellenic Republic' 84: 'State of Grenada'
    85: 'Overseas Department of Guadeloupe' 86: 'Territory of Guam'
    87: 'Republic of Guatemala' 88: 'The Bailiwick of Guernsey'
    89: 'Republic of Guinea' 90: 'Republic of Haiti'
    91: 'Hong Kong Special Administrative Region' 92: 'Republic of Honduras'
    93: 'Republic of Hungary' 94: 'Republic of Iceland'
    95: 'International Committee of the Red Cross' 96: 'Republic of India'
    97: 'Republic of Indonesia' 98: 'Republic of Iraq'
    99: 'Republic of Ireland' 100: 'Organization of the Islamic Conference'
    101: 'Isle of Man' 102: 'State of Israel'
    103: 'Italian Republic' 104: 'Jamaica'
    105: 'Japan' 106: 'The Bailiwick of Jersey'
    107: 'Hashemite Kingdom of Jordan' 108: 'Republic of Kazakhstan'
    109: 'Republic of Kenya' 110: 'Republic of Kiribati'
    111: 'State of Kuwait' 112: 'Kyrgyz Republic'
    113: 'Republic of Latvia' 114: 'Lebanese Republic'
    115: 'Kingdom of Lesotho' 116: 'Republic of Liberia'
    117: 'Principality of Liechtenstein' 118: 'Republic of Lithuania'
    119: 'Grand Duchy of Luxembourg' 120: 'Macao Special Administrative Region'
    121: 'Republic of Macedonia' 122: 'Republic of Madagascar'
    123: 'Republic of the Marshall Islands' 124: 'Republic of Mali'
    125: 'Federation of Malaysia' 126: 'Republic of Malta'
    127: 'Republic of Malawi' 128: 'Overseas Department of Martinique'
    129: 'Islamic Republic of Mauritania' 130: 'Territorial Collectivity of Mayotte'
    131: 'United Mexican States' 132: 'Federated States of Micronesia'
    133: 'Midway Islands' 134: 'Republic of Moldova'
    135: 'Principality of Monaco' 136: 'Republic of Mongolia'
    137: 'British Overseas Territory of Montserrat' 138: 'Kingdom of Morocco'
    139: 'Republic of Mozambique' 140: 'Republic of Mauritius'
    141: 'Union of Myanmar' 142: 'Republic of Namibia'
    143: 'North Atlantic Treaty Organization' 144: 'Republic of Nauru'
    145: 'Turkish Republic of Northern Cyprus' 146: 'Netherlands Antilles'
    147: 'Kingdom of Nepal' 148: 'Kingdom of the Netherlands'
    149: 'Territory of Norfolk Island' 150: 'Federal Republic of Nigeria'
    151: 'Republic of Nicaragua' 152: 'Republic of Niger'
    153: 'Niue' 154: 'Commonwealth of the Northern Mariana Islands'
    155: 'Province of Northern Ireland' 156: 'Nordic Council'
    157: 'Kingdom of Norway' 158: 'Territory of New Caledonia and Dependencies'
    159: 'New Zealand' 160: 'Organization of American States'
    161: 'Organization of African Unity' 162: 'International Olympic Committee'
    163: 'Sultanate of Oman' 164: 'Islamic Republic of Pakistan'
    165: 'Republic of Palau' 166: 'Independent State of Papua New Guinea'
    167: 'Republic of Paraguay' 168: 'Republic of the Philippines'
    169: 'British Overseas Territory of the Pitcairn Islands' 170: 'Republic of Poland'
    171: 'Republic of Portugal' 172: 'Commonwealth of Puerto Rico'
    173: 'State of Qatar' 174: 'Russian Federation'
    175: 'Republic of Rwanda' 176: 'Kingdom of Saudi Arabia'
    177: 'Republic of San Marino' 178: 'Nordic Sami Conference'
    179: 'Sark' 180: 'Scotland'
    181: 'Principality of Seborga' 182: 'Republic of Sierra Leone'
    183: 'Republic of Singapore' 184: 'Republic of Korea'
    185: 'Republic of Slovenia' 186: 'Somali Republic'
    187: 'Republic of Somaliland' 188: 'Republic of South Africa'
    189: 'Solomon Islands' 190: 'Kingdom of Spain'
    191: 'Secretariat of the Pacific Community' 192: 'Democratic Socialist Republic of Sri Lanka'
    193: 'Saint Lucia' 194: 'Republic of the Sudan'
    195: 'Republic of Suriname' 196: 'Slovak Republic'
    197: 'Kingdom of Sweden' 198: 'Swiss Confederation'
    199: 'Syrian Arab Republic' 200: 'Kingdom of Swaziland'
    201: 'Republic of China' 202: 'Republic of Tajikistan'
    203: 'United Republic of Tanzania' 204: 'Kingdom of Thailand'
    205: 'Autonomous Region of Tibet' 206: 'Turkmenistan'
    207: 'Togolese Republic' 208: 'Tokelau'
    209: 'Kingdom of Tonga' 210: 'Tristan da Cunha'
    211: 'Tromelin' 212: 'Republic of Tunisia'
    213: 'Republic of Turkey' 214: 'Tuvalu'
    215: 'United Arab Emirates' 216: 'Republic of Uganda'
    217: 'Ukraine' 218: 'United Kingdom of Great Britain'
    219: 'United Nations' 220: 'United States of America'
    221: 'Oriental Republic of Uruguay' 222: 'Virgin Islands of the United States'
    223: 'Republic of Uzbekistan' 224: 'State of the Vatican City'
    225: 'Republic of Vanuatu' 226: 'Bolivarian Republic of Venezuela'
    227: 'Republic of Yemen' 228: 'Democratic Republic of Congo'
    229: 'Republic of Zimbabwe'
    + + 
    + +

    Example

    +// A standard shape
    $lineplot->mark->SetType(MARK_FILLEDCIRCLE);
    $lineplot->mark->Show();

    // Use image in file 'mark.jpg' as mark., aslo scale it to
    // half the size
    $lineplot->mark->SetType(MARK_IMAGE,'mark.jpg',0.5);
    $lineplot->mark->Show();

    // Using the built-in image diamond in yellow color and 70% of originally size
    $lineplot->mark->SetType(MARK_IMG_DIAMOND, 'yellow', 0.7);
    $lineplot->mark->Show();

    // Setting the plotmarks to a Swedish flag showing the three
    // ways of doing it
    ....
    $p1->mark->SetType(MARK_FLAG1,'sweden');
    // OR
    $p1->mark->SetType(MARK_FLAG1,197);
    // OR
    $p1->mark->SetType(MARK_FLAG1,'Kingdom of Sweden');

    +

    +

    +

     

     

    + +Specify line weight

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line weight
    + +

    Description
    Specify line weight 
    + +

    Example

    +$line->mark->SetWeight(2); +
    +

    +

     

     

    + +Set width of plot mark

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + Width in pixels
    + +

    Description
    Set width of plot mark 
    + +

    Example

    +$lineplot->mark->SetWidth(10);
    +

    +

    +

     

     

    + +Enable or disable plotmarks

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +true +True=Show plot marks
    + +

    Description
    Enable or disable plotmarks. By default plot marks are not shown so if you want to display them you need to use this method. + 
    + +

    Example

    +$lineplot->mark->Show(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PolarAxis.html b/html/includes/jpgraph/docs/ref/PolarAxis.html new file mode 100644 index 0000000000..5c6bd138c1 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PolarAxis.html @@ -0,0 +1,277 @@ +


    CLASS PolarAxis EXTENDS Axis
    +(Defined in: jpgraph_polar.php : 151)
     PolarAxis  Axis  
     HideTicks() 
    SetAngleFont() 
    SetAngleStep() 
    SetColor() 
    SetGridColor() 
    SetTickColors() 
    ShowAngleDegreeMark() 
    ShowAngleLabel() 
    ShowGrid() 
    +
     
     

    Class usage and Overview
    Represents the different axis for a polar plot. This class holds the property both for the radius and the angle axis classes. It is accessed throught the 'axis' property in the PolarGraph class.

      +

    See also related classes:
    PolarGraph

     


    Class Methods

    +

     

     

    + +HIde ticks marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +Hide radius tick marks
    +$aAngleFlg + + +true +Hide angle tick marks
    + +

    Description
    HIde ticks marks 
    + +

    Example

    +// Hide just the angle tick marks
    $polargraph->axis->HideTicks(false,true);
    +

    +

    +

     

     

    + +Set font for angles

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFam + + Font family
    +$aFontStyle + + +FS_NORMAL +Font style
    +$aFontSize + + +10 +Font size
    + +

    Description
    Set font for angle labels on the polar graph. 
    + +

    Example

    +$polargraph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); +
    +

    +

     

     

    + +Set angle step

    + + + + +
    ArgumentDefaultDescription
    +$aStep + + Step in degrees
    + +

    Description
    Specify the angle step, in degrees, between the angle markers. 
    + +

    Example

    +// Set 20 degrees between each marker
    $polargraph->axis->SetAngleStep(20);
    +

    +

    +

     

     

    + +Specify axis and label colors

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color for radius axis
    +$aRadColor + + +'' +Color for radius labels
    +$aAngleColor + + +'' +Color for angle labels
    + +

    Description
    Specify axis and label colors. 
    +  
    See also
    PolarAxis::SetGridColor +

    Example

    +$polargraph->axis->SetColor('black','navy','darkred'); +
    +

    +

     

     

    + +Set colors for the various grids

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajorColor + + Major radius grid color
    +$aMinorColor + + +'' +Minor radius grid color
    +$aAngleColor + + +'' +Angle grid color
    + +

    Description
    Set colors for the various grids 
    + +

    Example

    +// Set "Soft" colors for the grid
    $polargraph->axis->SetGridColor('lightgray','lightgray','lightgray');
    +

    +

    +

     

     

    + +Specify color for axis tick marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aRadColor + + Radius axis colors
    +$aAngleColor + + +'' +Angle axis colors
    + +

    Description
    Specify color for axis tick marks 
    + +

    Example

    +$polargraph->axis->SetTickColor('red'); +
    +

    +

     

     

    + +Add a degree mark after each angel label

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +True=Add mark
    + +

    Description
    Add a degree mark after each angel label ( a small sperscripted 'o' ). This is enabled by default. 
    + +

    Example

    +$polargraph->axis->ShowAngleDegreeMark(true); +
    +

    +

     

     

    + +Show angle labels

    + + + + +
    ArgumentDefaultDescription
    +$aFlg + + +true +True=show labels
    + +

    Description
    Show angle labels. This is on by default. 
    + +

    Example

    +// Enable angle labels
    $polargraph->axis->ShowAngleLabel();
    +

    +

    +

     

     

    + +Determine what grid lines should be visible

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aMajor + + +true +Show major radius grid lines
    +$aMinor + + +false +Show minor radius grid lines
    +$aAngle + + +true +Show angle grid lines
    + +

    Description
    Determine what grid lines should be visible. 
    + +

    Example

    +// Just display major radius grid line and angles
    $polargraph->axis->ShowGrid(true,false,true);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PolarGraph.html b/html/includes/jpgraph/docs/ref/PolarGraph.html new file mode 100644 index 0000000000..b5b6b2c59f --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PolarGraph.html @@ -0,0 +1,257 @@ +


    CLASS PolarGraph EXTENDS Graph
    +(Defined in: jpgraph_polar.php : 639)
     PolarGraph  Graph  
     PolarGraph() 
    Set90AndMargin() 
    SetDensity() 
    SetPlotSize() 
    SetScale() 
    SetType() 
    Stroke() 
    +
     
     

    Class usage and Overview
    Represent a polar graph. Accessible properties are + +
      +
    • axis, An instance of PolarAxis() use to manipulate apperance of both radius and angle axis in the graph. +

      +

    See also related classes:
    PolarAxis

     


    Class Methods

    +

     

     

    + +Construct a new graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aWidth + + +300 +Width (in pixels)
    +$aHeight + + +200 +Height (in pixels)
    +$aCachedName + + +"" +Cache name
    +$aTimeOut + + +0 +Cache timeout
    +$aInline + + +true +Inline flag (DEPRECATED)
    + +

    Description
    Construct a new Polar Graph. This is completely analog to the standard Graph() creation and follows the exactly same pattern.  
    + +

    Example

    +$polargraph = new PolarGraph(300,500); +
    +

    +

     

     

    + +Rotate the polar graph 90 degrees

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + +0 +Left margin
    +$rm + + +0 +Right Margin
    +$tm + + +0 +Top margin
    +$bm + + +0 +Bottom margin
    + +

    Description
    Rotate the polar graph 90 degrees 
    + +

    Example

    +$polargraph->Set90AndMargin(40,40,40,40); +
    +

    +

     

     

    + +Specify density for the radius axis

    + + + + +
    ArgumentDefaultDescription
    +$aDense + + Density
    + +

    Description
    This is analog to the density specification for the X, and Y-scale s for the standard X-Y-plots. +This specifies how close the autoscaling algorithm will place the tick marks to each other. + +The tick density can be one of + +
      +
    • TICKD_DENSE, Dense tick layout +
    • TICKD_NORMAL, Normal tick layout +
    • TICKD_SPARSE, Sparse tick layout (few tick marks) +
    • TICKD_VERYSPARSE, Very Sparse tick layout (very few tick marks) +
    + +By default the radius density os set to TICKD_DENSE + 
    + +

    Example

    +// Slightly fewer ticks than default
    $polargraph->SetDensity(TICKD_NORMAL);
    +

    +

    +

     

     

    + +Alternative way to specify size of the plot area

    + + + + + + +
    ArgumentDefaultDescription
    +$w + + Width
    +$h + + Height
    + +

    Description
    You can specify the plot area size an posiion in the graph in two ways. The frst is the standard way of specifying the margins on the sides with SetMargins() method. + +This method centers a plot area with the specified width and height inthe middle of the graph, it is basically a short form for + +SetMargins( +$graphwidth-($w/2),$graphwidth-($w/2), +$graphheight-($h/2),$graphheight-($h/2)); + 
    + +

    Example

    +$polargraph->SetPlotSize(200,250); +
    +

    +

     

     

    + +Specify scale type (linear or log)

    + + + + + + +
    ArgumentDefaultDescription
    +$aScale + + Linear "lin" or logarithmic "log" scale
    +$rmax + + +0 +Manual maximum value
    + +

    Description
    Specify scale type (linear or log) for the radius scale. A linear scale is specified as 'lin' and a logarithmic scale is specified as 'log' 
    + +

    Example

    +// Specify a logarithmic scale for the radius
    $polargraph->SetScale('log');
    +

    +

    +

     

     

    + +Specify if the graphs should be 360 or 180

    + + + + +
    ArgumentDefaultDescription
    +$aType + + Type
    + +

    Description
    Specify if the polargraph should be a full 360 degrees or just 180 degrees. The possible values for type are + +
      +
    • POLAR_360, A full 360 polar plot +
    • POLAR_180, A half 180 polar plot +
    + +By default the graph is a full 260 degrees. 
    + +

    Example

    +$polargraph->SetType(POLAR_360);
    +

    +

    +

     

     

    + +Send graph back to browser or file

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +File name
    + +

    Description
    Send a graph back to browser or to a file. This must be the last call in your script. + + 
    + +

    Example

    +$polargraph->Stroke(); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/PolarPlot.html b/html/includes/jpgraph/docs/ref/PolarPlot.html new file mode 100644 index 0000000000..85036293e9 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/PolarPlot.html @@ -0,0 +1,165 @@ +


    CLASS PolarPlot
    +(Defined in: jpgraph_polar.php : 36)
     PolarPlot 
     PolarPlot() 
    SetColor() 
    SetCSIMTargets() 
    SetFillColor() 
    SetLegend() 
    SetWeight() 
    +
     

    Class usage and Overview
    Represents a polar plot. A polar plot is a line plot that may have marks or be filled. + +Public properties are + +
      +
    • mark, Instance of class PlotMark. Make sit possible to add Plot marks in the plot. +

      +

    See also related classes:
    PlotMark

     


    Class Methods

    +

     

     

    + +Constructor. Create a new Polar plot

    + + + + +
    ArgumentDefaultDescription
    +$aData + + Data array
    + +

    Description
    A polar plot is created form an array of (angle,radius) specification for each plot point.. 
    + +

    Example

    +$pdata = array(0,0,15,35,40,70,70,120);

    $polarplot = new PolarPlot($pdata);
    $polarplot->SetFillColor('lightblue@0.5');

    $polargraph->Add($polarplot);

    $polargraph->Stroke();
    +

    +

    +

     

     

    + +Specify line color for polar plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Line Color
    + +

    Description
    Specify line color for polar plot 
    + +

    Example

    +$polarplot->SetColor('navy'); +
    +

    +

     

     

    + +Specify URL targets for markers

    + + + + + + +
    ArgumentDefaultDescription
    +$aTargets + + URL targets
    +$aAlts + + +null +Alt texts
    + +

    Description
    Specify URL targets for markers on the polar plot. If you have specified a mark the polar plot you can add URL targets for each mark with this method. + +Remember that to create an image map graph you need to construct the graph with the Graph::StrokeCSIM() method instead of the ordinary Graph::Stroke() 
    +  
    See also
    Graph::StrokeCSIM +

    Example

    +// Dummy targets
    $t = array('#1','#2','#3','#4','#5','#6');

    $polarplot->SetCSIMTargets($t);

    +

    +

    +

     

     

    + +Specify fill color for plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Fill color
    + +

    Description
    Specify fill color for plot. If the fill color is specified as '' then no fill will be used. 
    +  
    See also
    PolarPlot::SetColor +

    Example

    +$polarplot->SetFillColor('orange'); +
    +

    +

     

     

    + +Specify legend text for the plot

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLegend + + Legend text
    +$aCSIM + + +"" +URL target for this legend
    +$aCSIMAlt + + +"" +ALT text for this legend
    + +

    Description
    Specify legend text for the plot. When image maps are used you can also specify a URL for this legend. 
    + +

    Example

    +$polarplot->SetLegend('Year 2002'); +
    +

    +

     

     

    + +Sepcify line weight (in pixels)

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Line weight
    + +

    Description
    Sepcify line weight for plot 
    + +

    Example

    +$polarplot->SetWeight(2); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Progress.html b/html/includes/jpgraph/docs/ref/Progress.html new file mode 100644 index 0000000000..2ad2c8fdea --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Progress.html @@ -0,0 +1,102 @@ +


    CLASS Progress
    +(Defined in: jpgraph_gantt.php : 3027)
     Progress 
     Set() 
    SetFillColor() 
    SetPattern() 
    +
     

    Class usage and Overview
    Represents the progress bar inside the activity bar in Gantt Charts

      +

    See also related classes:
    GanttGraph and GanttBar

     


    Class Methods

    +

     

     

    + +Specify progress of activity in percent.

    + + + + +
    ArgumentDefaultDescription
    +$aProg + + Progress in percent (0-1)
    + +

    Description
    Specify progress of activity in percent. The shape of the progress bar can be specified with Progress::SetPattern() 
    +  
    See also
    Progress::SetPattern +

    Example

    +$bar->progress->Set(0.8); +
    +

    +

     

     

    + +Set fill (background) color for progress bar

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Set fill (background) color for progress bar 
    + +

    Example

    +$bar->progress->SetFillColor('white'); +
    +

    +

     

     

    + +Specify pattern class to use for progress bar

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aPattern + + Pattern
    +$aColor + + +"blue" +Color
    +$aDensity + + +98 +Density
    + +

    Description
    Specify pattern class to use for progress bar. Valid patterns for the first argument are: + +
      +
    • BAND_RDIAG, Right diagonal lines +
    • BAND_LDIAG, Left diagonal lines +
    • BAND_SOLID, Solid one color +
    • BAND_LVERT, Vertical lines +
    • BAND_LHOR, Horizontal lines +
    • BAND_VLINE, Vertical lines +
    • BAND_HLINE, Horizontal lines +
    • BAND_3DPLANE, "3D" Plane +
    • BAND_HVCROSS, Vertical/Hor crosses +
    • BAND_DIAGCROSS, Diagonal crosses +
    + + 
    +  
    See also
    GanttBar::SetPattern +

    Example

    +$activity->Set(0.8);
    $activity->progress->SetPattern(BAND_RDIAG,"blue");
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarAxis.html b/html/includes/jpgraph/docs/ref/RadarAxis.html new file mode 100644 index 0000000000..5c6132c8f7 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarAxis.html @@ -0,0 +1,10 @@ +


    CLASS RadarAxis EXTENDS Axis
    +(Defined in: jpgraph_radar.php : 163)
     RadarAxis  Axis  
     
     

    Class usage and Overview
    Represents the axis for a spider plot

      +


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarGraph.html b/html/includes/jpgraph/docs/ref/RadarGraph.html new file mode 100644 index 0000000000..bd1e56561b --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarGraph.html @@ -0,0 +1,385 @@ +


    CLASS RadarGraph EXTENDS Graph
    +(Defined in: jpgraph_radar.php : 434)
     RadarGraph  Graph  
     Add() 
    HideTickMarks() 
    RadarGraph() 
    SetCenter() 
    SetColor() 
    SetPlotSize() 
    SetPos() 
    SetScale() 
    SetSize() 
    SetTickDensity() 
    SetTitles() 
    ShowMinorTickmarks() 
    Stroke() 
    SupressTickMarks() 
    +
     
     

    Class usage and Overview
    Spider graph. This graph type can only be used together with spider plots.

      +


    Class Methods

    +

     

     

    + +Add a spider plot to the spider graph

    + + + + +
    ArgumentDefaultDescription
    +&$splot + + Plot to add (instance of SpiderPlot)
    + +

    Description
    Add a spider plot to the spider graph 
    + +

    Example

    +$spidergraph->Add($spiderplot1); +
    +

    +

     

     

    + +Hide tick marks on spider axis

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Hide tick marks
    + +

    Description
    Hide tick marks on spider axis 
    + +

    Example

    +$spidergraph->HideTickMarks();
    +

    +

    +

     

     

    + +Construct a new radar graph

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$width + + +300 +Imaghe width
    +$height + + +200 +Image Height
    +$cachedName + + +"" +Cache file name
    +$timeout + + +0 +Cache timout (in minutes)
    +$inline + + +1 +Inline image
    + +

    Description
    See Graph::Graph(). + 
    +  
    See also
    Graph::Graph +

    Example

    +$radargraph = new RadarGraph(300,300); +
    +

    +

     

     

    + +Specify position for center of spider graph

    + + + + + + +
    ArgumentDefaultDescription
    +$px + + Fraction of width
    +$py + + +0.5 +Fraction of height
    + +

    Description
    Specify the position for the center of the spider graph in fractions of the image width and height. 
    + +

    Example

    +$spidergraph->SetCenter(0.6, 0.5); +
    +

    +

     

     

    + +Set background color for graph

    + + + + +
    ArgumentDefaultDescription
    +$c + + Color
    + +

    Description
    Set background color for graph 
    + +

    Example

    +$spidergraph->SetColor('lightyellow');
    +

    +

    +

     

     

    + +Specify size of spider graph

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + Fraction of image size
    + +

    Description
    DEPRECATED
    +Use SetSize() instead +
    +Specify the length of the axis of the spider plot as fraction of the min(height,width) 
    +  
    See also
    RadarGraph::SetCenter and RadarGraph::SetSize +

    Example

    +$radargraph->SetPlotSize(0.7);
    +

    +

    +

     

     

    + +Alias for Set Center. Specify position of the center of the graph

    + + + + + + +
    ArgumentDefaultDescription
    +$px + + Fraction of width
    +$py + + +0.5 +Fraction of height
    + +

    Description
    Alias for SetCenter. Specify position for the center of the graph. 
    +  
    See also
    RadarGraph::SetCenter +

    Example

    +$graph->SetPos(0.5,0.6); +
    +

    +

     

     

    + +Specify manual scale for spider graph

    + + + + + + + + +
    ArgumentDefaultDescription
    +$axtype + + Axis type
    +$ymin + + +1 +Min Y-value
    +$ymax + + +1 +Max Y-value
    + +

    Description
    Specify axis type and min/max value for the scale. 
    + +

    Example

    +$spidergraph->SetScale('lin',0,50); +
    +

    +

     

     

    + +Specify the length of the axis

    + + + + +
    ArgumentDefaultDescription
    +$aSize + + Fraction of image size
    + +

    Description
    pecify the length of the axis of the spider plot as fraction of the min(height,width) 
    + +

    Example

    +$radargraph->SetPlotSize(0.7); +
    +

    +

     

     

    + +Specify tick density

    + + + + +
    ArgumentDefaultDescription
    +$densy + + +TICKD_NORMAL +Density
    + +

    Description
    Tick density can be specified as +
      +
    • TICKD_DENSE, Tick marks close +
    • TICKD_NORMAL, Tick marks as normal +
    • TICKD_SPARSE, Tick marks sparse +
    • TICKD_VERYSPARSE, TIck marks very sparse +

    + +

    Example

    +$spidergraph->SetTickDensity(TICKD_VERYSPARSE); +
    +

    +

     

     

    + +Specify titles for all the spider axis

    + + + + +
    ArgumentDefaultDescription
    +$title + + Array of titles
    + +

    Description
    Set the title for the axis in the spider graph. If no titles have been specified then they will be numbered from 1 to maximum number of axis. 
    + +

    Example

    +$spidergraph->SetTitles(array('Jan','Feb','March','Apr')); +
    +

    +

     

     

    + +Show minor tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Show minor tick marks
    + +

    Description
    By default the minor tick marks are hidden. This method turns them on. 
    + +

    Example

    +$spidergraph->ShowMinorTickMArks();
    +

    +

    +

     

     

    + +Stroke the Spider graph

    + + + + +
    ArgumentDefaultDescription
    +$aStrokeFileName + + +"" +Filename
    + +

    Description
    Stroke the spider graph and send it back to the browser or write it to a file if a filename have been specified. + +This is normally the last method call in your script. 
    +  
    See also
    Graph::Stroke +

    Example

    +$spidergraph->Stroke();
    +

    +

    +

     

     

    + +Suppress all tick marks on the spider axis

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +True=Hide tick marks
    + +

    Description
    Suppress all tick marks on the spider axis 
    +  
    See also
    RadarGraph::ShowMinorTickmarks +

    Example

    +$spidergraph->SupressTickMarks();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarGrid.html b/html/includes/jpgraph/docs/ref/RadarGrid.html new file mode 100644 index 0000000000..69aa9d6db5 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarGrid.html @@ -0,0 +1,10 @@ +


    CLASS RadarGrid EXTENDS Grid
    +(Defined in: jpgraph_radar.php : 274)
     RadarGrid  Grid  
     
     

    Class usage and Overview
    Represents the grid for a spider plot

      +

    See also related classes:
    SpiderAxis and SpiderGraph

     


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarLinearTicks.html b/html/includes/jpgraph/docs/ref/RadarLinearTicks.html new file mode 100644 index 0000000000..df7f607c46 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarLinearTicks.html @@ -0,0 +1,10 @@ +


    CLASS RadarLinearTicks EXTENDS LinearTicks
    +(Defined in: jpgraph_radar.php : 89)
     RadarLinearTicks  LinearTicks  
     
     

    Class usage and Overview
    Handle linear ticks on a single spider axis

      +

    See also related classes:
    SpiderGraph and SpiderLogTicks

     


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarLogTicks.html b/html/includes/jpgraph/docs/ref/RadarLogTicks.html new file mode 100644 index 0000000000..7f9fb8372e --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarLogTicks.html @@ -0,0 +1,10 @@ +


    CLASS RadarLogTicks EXTENDS Ticks
    +(Defined in: jpgraph_radar.php : 14)
     RadarLogTicks  Ticks  
     
     

    Class usage and Overview
    Represent logarithmic ticks on a single spider axis

      +


    Class Methods


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RadarPlot.html b/html/includes/jpgraph/docs/ref/RadarPlot.html new file mode 100644 index 0000000000..15f1830f6b --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RadarPlot.html @@ -0,0 +1,181 @@ +


    CLASS RadarPlot
    +(Defined in: jpgraph_radar.php : 314)
     RadarPlot 
     RadarPlot() 
    SetColor() 
    SetFill() 
    SetFillColor() 
    SetLegend() 
    SetLineStyle() 
    SetLineWeight() 
    +
     

    Class usage and Overview
    Create a new spider plot. + +A spider plot can only be added to a SpiderGraph

      +

    See also related classes:
    SpiderGraph

     


    Class Methods

    +

     

     

    + +Create a new Radar plot

    + + + + +
    ArgumentDefaultDescription
    +$data + + Data array
    + +

    Description
    Creates a new radar plot 
    + +

    Example

    +$radar = new RadarPlot($data); +
    +

    +

     

     

    + +Specify color for the plot

    + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color for line
    +$aFillColor + + +false +Fill color
    + +

    Description
    Set the color for the plot. Note that you can also use the method SetFillColor() to specify the fill color. This non-orthogonality is in place to make the API be more flexible. + + 
    +  
    See also
    RadarPlot::SetFillColor +

    Example

    +$spideplot->SetColor('darkred','lightblue');
    +

    +

    +

     

     

    + +Deprecated. Turn filling on and off

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +True=Use fill color and fill plot
    + +

    Description
    Deprecated. Turn filling on and off. When the fill color is pecified with either SetFillColor() or SetColor() this will tuen on the filling of the plot. + +This method might be useful if you programatically have set the colro and later need to disable the fill. 
    + +

    Example

    +$spiderplot->SetFillColor('lightblue');

    // ... some code

    // Turn off the fill
    if( $doNotFillSpiderPlot )
        $spiderplot->SetFill(false);

    +

    +

    +

     

     

    + +Specify fill color for plot

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify fill color for plot. + +Note. You can also use SetColor() to specify both fill and line color. 
    +  
    See also
    RadarPlot::SetColor +

    Example

    +$spiderplot->SetFillColor('lightblue'); +
    +

    +

     

     

    + +Specify legend text for this plot

    + + + + +
    ArgumentDefaultDescription
    +$legend + + Legend string
    + +

    Description
    Specify legend text for this plot. 
    + +

    Example

    +$spiderplot->SetLegend('Stress level'); +
    +

    +

     

     

    + +Specify line style for the plot lines

    + + + + +
    ArgumentDefaultDescription
    +$aStyle + + Line style
    + +

    Description
    The line style can be one of +
      +
    • "solid" +
    • "dashed" +
    • "longdashed" +
    • "dotted" +

    + +

    Example

    +$radarplot->SetLineStyle('dotted'); +
    +

    +

     

     

    + +Set line weight

    + + + + +
    ArgumentDefaultDescription
    +$w + + Line weight in pixels
    + +

    Description
    Set line weight. 
    + +

    Example

    +$spiderplot->SetLineWeight(2); +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/RotImage.html b/html/includes/jpgraph/docs/ref/RotImage.html new file mode 100644 index 0000000000..abf791e964 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/RotImage.html @@ -0,0 +1,137 @@ +


    CLASS RotImage EXTENDS Image
    +(Defined in: jpgraph.php : 7530)
     RotImage  Image 
     SetAngle() 
    SetCenter() 
    SetMargin() 
    SetTranslation() 
    +
     RoundedRectangle() 
    SetAlphaBlending() 
    SetAntiAliasing() 
    SetCanvasColor() 
    SetExpired() 
    SetImgFormat() 
    +SetMargin() 
    SetQuality() 
    SetTransparent() 
    +
     

    Class usage and Overview
    A subclass of Image class which implements a rotated version of all methods in the base Image class. + +The Image class used in JpGraph is actually not the class Image but rather this class as we want to have the rotating possibility. + +The rotation is accomplished by standard 2D rotation matrices.

      +

    See also related classes:
    Image

     


    Class Methods

    +

     

     

    + +Specify rotation angle

    + + + + +
    ArgumentDefaultDescription
    +$a + + Angle in degrees
    + +

    Description
    Specify the rotation angle for the other graphic primitives in this class. + +The rotation is performed around point (0,0). + 
    +  
    See also
    RotImage::SetTranslation and RotImage::SetCenter +

    Example

    +$graph->img->SetAngle(45);
    +

    +

    +

     

     

    + +Set rotation center

    + + + + + + +
    ArgumentDefaultDescription
    +$dx + + Specify rotation center X
    +$dy + + Specify rotation center Y
    + +

    Description
    Specify center of rotation. (0,0) is the upper left most point in the image. By default the rotation point is choosen as tjhe midpoint of the image when the RotImage class is initially created. + 
    +  
    See also
    RotImage::SetTranslation and RotImage::SetAngle +

    Example

    +$width=600; $height=400;
    $graph = new Graph($width,$height);
    $graph->img->SetMargin($leftm,$rightm,$topm,$bottomm);
    $graph->SetAngle(20);

    // Rotate graph around the plots (0,0) point, i.e
    // where the graph axis intersect.
    $graph->img->SetCenter($leftm,$height-($topm+$bottomm));
    +

    +

    +

     

     

    + +Specify margin for plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$lm + + Left margin
    +$rm + + Right margin
    +$tm + + Top margin
    +$bm + + Bottom margin
    + +

    Description
    Specify the margin, i.e. the area on the side of the actual plot which is used for titles, labels, legends ans so on. + 
    + +

    Example

    +$graph->img->SetMargin(30,30,50,20);
    +

    +

    +

     

     

    + +Specify translation (in pixels)

    + + + + + + +
    ArgumentDefaultDescription
    +$dx + + Horizontal translation
    +$dy + + Vertical translation
    + +

    Description
    The translation is applied after the rotation of the image. 
    +  
    See also
    RotImage::SetCenter and RotImage::SetAngle +

    Example

    +$graph->img->SetTranslation(10,10) +
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/ScatterPlot.html b/html/includes/jpgraph/docs/ref/ScatterPlot.html new file mode 100644 index 0000000000..b20320a3c1 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/ScatterPlot.html @@ -0,0 +1,102 @@ +


    CLASS ScatterPlot EXTENDS Plot
    +(Defined in: jpgraph_scatter.php : 130)
     ScatterPlot  Plot  
     ScatterPlot() 
    SetImpuls() 
    SetLinkPoints() 
    +
     
     

    Class usage and Overview
    A scatter plto is used to display a number of points specified by (x,y) coordinates. To specify the apperance of points the 'mark' property has to be set. See PlotMark class for further details. +

    +The marks can also be connected with lines by calling the method SetLinkPoints()

      +

    See also related classes:
    LinePlot and PlotMark

     


    Class Methods

    +

     

     

    + +Constructor

    + + + + + + +
    ArgumentDefaultDescription
    +$datay + + Y-data array
    +$datax + + +false +X-data array
    + +

    Description
    Create a new scatter plot 
    + +

    Example

    +$datax = array( ... );
    $datay = array( ... );
    $scatter = new ScatterPlot($datay,$datax);
    +

    +

    +

     

     

    + +Specify impuls type of sctter plot

    + + + + +
    ArgumentDefaultDescription
    +$f + + +true +True=Use impuls type
    + +

    Description
    By specifying the impuls type each plot is linked to the X-axis by a line. + +This type of plots is often used to illustrate signals in discrete time signal processing. 
    + +

    Example

    +$scatterplot->SetImpuls();
    +

    +

    +

     

     

    + +Combine the scatter plot points with a line

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Link scatter points
    +$aColor + + +"black" +Color of line
    +$aWeight + + +1 +Line width
    + +

    Description
    Link scatter plots with a line of specified color and width. 
    + +

    Example

    +$scatterplot->SetLinkPoints();
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Shape.html b/html/includes/jpgraph/docs/ref/Shape.html new file mode 100644 index 0000000000..6facfadc2a --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Shape.html @@ -0,0 +1,562 @@ +


    CLASS Shape
    +(Defined in: jpgraph_canvtools.php : 69)
     Shape 
     Bezier() 
    Circle() 
    FilledCircle() 
    FilledPolygon() 
    FilledRectangle() 
    FilledRoundedRectangle() 
    IndentedRectangle() 
    Line() 
    Polygon() 
    Rectangle() 
    RoundedRectangle() 
    SetColor() 
    SetTextAlign() 
    ShadowRectangle() 
    Shape() 
    +
     

    Class usage and Overview
    This is mainly awrapper class around thye current image class used. It is meant to make it easier to work with a Canvas graph and a Canvas scale. Basically the class uses the specified scale to trasnalte coordinates which is then passed on to the standard Image routines. +

      +

    See also related classes:
    CanvasScale

     


    Class Methods

    +

     

     

    + +Draw a bezier curve

    + + + + + + +
    ArgumentDefaultDescription
    +$p + + Array with control points
    +$aSteps + + +40 +Number of line segments in curve
    + +

    Description
    Draw a Bezier line with specified in the $p array. The points are specified according to the current scale. The positions in the array has the following meaning +

    +(0,1) x0,y0 (First point on curver)
    +(2,3) x,y, (Control point 1)
    +(4,5) x,y, (Control point 2)
    +(6,7) x,y, (End point of curve)
    +

    +See example in canvasbezierex1.php + + 
    + +

    Example

    +$p = array(3,6,6,9,5,3,7,4);

    $shape->SetColor('black');
    $shape->Bezier($p);
    +

    +

    +

     

     

    + +Draw a circle

    + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Center X-coordinate
    +$y1 + + Center Y-coordinate
    +$r + + Radius
    + +

    Description
    Draw a circle onto the canvas + 
    +  
    See also
    Image::Circle +

    Example

    +// The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    $shape->SetColor('black');


    // .. and a circle (x,y,diameter)
    $shape->Circle(5,14,2);

    +

    +

    +

     

     

    + +Draw a filled circle to a canvas

    + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Center X-coordinate
    +$y1 + + Center Y-coordinate
    +$r + + Radius
    + +

    Description
    Draw a filled circle on the canvas using the specified scale. +

    +Note: If you are using GD1.xx you will see moire-patterns in large circles. This is due to the lack of a proper filled circle function in GD 1.xx. Using GD 2.xx will avoid this problem. + 
    +  

    See also
    Image::FilledCircle +

    Example

    +// The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    $shape->SetColor('black');


    // .. and a circle (x,y,diameter)
    $shape->FilledCircle(5,14,2);

    +

    +

    +

     

     

    + +Draw a filled polygon

    + + + + +
    ArgumentDefaultDescription
    +$p + + Polygon array
    + +

    Description
    Draw a filled polygon 
    +

    +

     

     

    + +Draw a filled rectangle on the canvas

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Top left X
    +$y1 + + Top left Y
    +$x2 + + Bottom right X
    +$y2 + + Bottom right Y
    + +

    Description
    Draw a filled rectangle on the canvas using the current sclae. + 
    + +

    Example

    +
    // .. add a rectangle
    $shape->SetColor('green');
    $shape->FilledRectangle(15,8,19,14);
    +

    +

    +

     

     

    + +Create a filled rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Top left X
    +$y1 + + Top left Y
    +$x2 + + Bottom right X
    +$y2 + + Bottom right Y
    +$r + + +null +Corner radius
    + +

    Description
    Create a filled rectangle with rounded corners 
    +

    +

     

     

    + +A filled rectangle with one corner 'indented'

    + + + + + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$xt + + Top left X
    +$yt + + Top left Y
    +$w + + Width
    +$h + + Height
    +$iw + + +0 +Indented width
    +$ih + + +0 +Indeted height
    +$aCorner + + +3 +Corner to indent
    +$aFillColor + + +"" +Fill color
    +$r + + +4 +Corner radius
    + +

    Description
    A rounded rectangle where one of the corner has been moved "into" the rectangle. The indention is determined by the two argument +'iw' width and 'ih' height. +

    +The corners (as used in the $aCorner) are numbered as +0=Top left, 1=top right, 2=bottom right, 3=bottom left + 
    +

    +

     

     

    + +Draw a line between

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + X1
    +$y1 + + Y1
    +$x2 + + X2
    +$y2 + + Y2
    + +

    Description
    Draw a line between two points in the canvas using the current scale. 
    +  
    See also
    Image::Line +

    Example

    +
    // Add a black line
    $shape->SetColor('black');
    $shape->Line(0,0,20,20);
    +

    +

    +

     

     

    + +Draw a closed polygon

    + + + + + + +
    ArgumentDefaultDescription
    +$p + + Array of points in polygon
    +$aClosed + + +false +No description available
    + +

    Description
    Draw a closed polygon 
    + +

    Example

    +$p = array(3,6,6,9,5,3,7,4);
    $shape->SetColor('blue:0.35');
    $shape->Polygon($p);
    +

    +

    +

     

     

    + +Draw a rectangle on the canvas

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Top left X
    +$y1 + + Top left Y
    +$x2 + + Bottom right X
    +$y2 + + Bottom right Y
    + +

    Description
    Draw a rectangle on the canvas using the current scale. 
    + +

    Example

    +// .. add a rectangle
    $shape->SetColor('green');
    $shape->Rectangle(15,8,19,14);
    +

    +

    +

     

     

    + +Draw a rectangle with rounded corners

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Top left X
    +$y1 + + Top left Y
    +$x2 + + Bottom right X
    +$y2 + + Bottom right Y
    +$r + + +null +Corner radius
    + +

    Description
    Draw a rectangle with rounded corners 
    +

    +

     

     

    + +Specify color to use when drawing shapes

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color specification
    + +

    Description
    Specify color to use when drawing shapes 
    +  
    See also
    RGB::Color +

    Example

    +// Add a black line
    $shape->SetColor('black');
    $shape->Line(0,0,20,20);
    +

    +

    +

     

     

    + +Specify bae point for StrokeText()

    + + + + + + +
    ArgumentDefaultDescription
    +$halign + + Horizontal position for basepoint
    +$valign + + +"bottom" +Vertical position for base point
    + +

    Description
    Specifies how the coordinate for the text should be interpretated. Possible values for horizontal base-position are + +
      +
    • "left" +
    • "center" +
    • "right" +
    + +and for vertical + + +
      +
    • "top" +
    • "center" +
    • "bottom" +

    + +

    Example

    +// Interpret the text coordinate as beeing the
    // top left corner of the bounding box for the text
    $shape->SetTextAlign('left','top');

    $shape->StrokeText(....)
    +

    +

    +

     

     

    + +Draw a filled rectangle with a drop shadow

    + + + + + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$x1 + + Top left X
    +$y1 + + Top left Y
    +$x2 + + Bottom right X
    +$y2 + + Bottom right Y
    +$fcolor + + +false +Fill color
    +$shadow_width + + +null +Shadow width
    +$shadow_color + + +array(102,102,102) +Shadow color
    + +

    Description
    Draw a filled rectangle with a drop shadow 
    +

    +

     

     

    + +Methods to draw shapes on canvas

    + + + + + + +
    ArgumentDefaultDescription
    +&$aGraph + + Canvas graph
    +&$scale + + Canvas scale
    + +

    Description
    Create a new shape class used to draw siple shape onto a canvas using the specified scale. 
    +  
    See also
    CanvasGraph::CanvasGraph and CanvasScale::CanvasScale +

    Example

    +// Setup a basic canvas we can work 
    $g = new CanvasGraph(400,200,'auto');
    $g->SetMargin(5,11,6,11);
    $g->SetShadow();
    $g->SetMarginColor("teal");

    // We need to stroke the plotarea and margin before we add the
    // text since we otherwise would overwrite the text.
    $g->InitFrame();

    // Create a new scale
    $scale = new CanvasScale($g);
    $scale->Set(0,$xmax,0,$ymax);

    // The shape class is wrapper around the Imgae class which translates
    // the coordinates for us
    $shape = new Shape($g,$scale);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Spline.html b/html/includes/jpgraph/docs/ref/Spline.html new file mode 100644 index 0000000000..21d98eb3f0 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Spline.html @@ -0,0 +1,70 @@ +


    CLASS Spline
    +(Defined in: jpgraph_regstat.php : 17)
     Spline 
     Get() 
    Spline() 
    +
     

    Class usage and Overview
    Utility class to help construct an interpolated data points given an arbitrary number of data points. +

    +This class doesn't draw any graphs by itself it is only used to generate a new set of data points representing the smooth line from the input which are the control lines for the cubic spline. +

    +The principle of using this class is that you first create an instance of this class and giving it the X,Y values for your control points. +

    +You can then get back an interpolated smooth dataset by calling the Get() method. This method takeas as argument how many data points you want the interpolated graph to have. +

    +Technical note: The spline is constructed with natural 2:nd derivates at the start and end points of the line. +

      +


    Class Methods

    +

     

     

    + +Return the two new data vectors

    + + + + +
    ArgumentDefaultDescription
    +$num + + +50 +Number of data points
    + +

    Description
    Return a data set representing the interpolated smooth curve passing through all the specified control points. 
    + +

    Example

    +$spline = new Spline($xcontrol_points, $ycontrol_points);
    list ($xdata, $ydata) = $spline->Get(100);
    $lp = new LinePlot($ydata, $xdata);
    +

    +

    +

     

     

    + +Constructor. Create a new Spline object

    + + + + + + +
    ArgumentDefaultDescription
    +$xdata + + Control points. X-coordinates
    +$ydata + + Control points. Y-coordinates
    + +

    Description
    Constructor. Create a new Spline object. The spline is determined by it's control points which are given with it's X and Y coordinates as arguments. +

    +Technical note: The spline is constructed with natural 2:nd derivates at the start and end point. 
    + +

    Example

    +$spline = new Spline($xcontrol_points, $ycontrol_points);
    list ($xdata, $ydata) = $spline->Get(100);
    $lp = new LinePlot($ydata, $xdata);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/StockPlot.html b/html/includes/jpgraph/docs/ref/StockPlot.html new file mode 100644 index 0000000000..5c27b9e7a8 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/StockPlot.html @@ -0,0 +1,135 @@ +


    CLASS StockPlot EXTENDS Plot
    +(Defined in: jpgraph_stock.php : 15)
     StockPlot  Plot  
     HideEndLines() 
    SetColor() 
    SetWidth() 
    StockPlot() 
    +
     
     

    Class usage and Overview
    Create a stock chart graph, aka Candle-chart, aka Box-graph. +Each data point is represented by four values +(open,close,min,max) + +

      +


    Class Methods

    +

     

     

    + +Show horizontal mark lines at the end of min/max lines

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +Flag true=show end lines
    + +

    Description
    Show horizontal mark lines at the end of min/max lines. This is enabled by default. 
    + +

    Example

    +$stock->HideEndLines(); +
    +

    +

     

     

    + +Specify colors for the stock plot

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aColor + + Line color for positive bars
    +$aColor1 + + +'white' +Fill color for positive bars
    +$aColor2 + + +'darkred' +Line color for negative bars
    +$aColor3 + + +'darkred' +Fill color for negative bars
    + +

    Description
    Specify the colros for a stock chart. A positive bar is defined as a bar where close > open. A negative bar is defined as a bar where close < open. + +The positive line color is always used for the min/max lines. + +By default positve colors are black and white. Negative colors are 'red' and 'red'. + 
    + +

    Example

    +$stockplot->SetColor('black','white','red','red'); +
    +

    +

     

     

    + +Specify width for stock bars in pixels

    + + + + +
    ArgumentDefaultDescription
    +$aWidth + + Width in pixels
    + +

    Description
    Specify width for stock bars in pixels 
    + +

    Example

    +$stockplot->SetWidth(8); +
    +

    +

     

     

    + +Constructor for Stock plots

    + + + + + + +
    ArgumentDefaultDescription
    +&$datay + + Y data array
    +$datax + + +false +X data array
    + +

    Description
    Create a new Stock data plot. Each data value consists of 4 data points. (open,close,min,max) + +If the $ydata isn't an even number of data quadruples an error message will result. 
    + +

    Example

    +$ydata = array( .... )
    $stockplot = new StockPlot($ydata);
    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/SuperScriptText.html b/html/includes/jpgraph/docs/ref/SuperScriptText.html new file mode 100644 index 0000000000..29204a012c --- /dev/null +++ b/html/includes/jpgraph/docs/ref/SuperScriptText.html @@ -0,0 +1,190 @@ +


    CLASS SuperScriptText EXTENDS Text
    +(Defined in: jpgraph.php : 3155)
     SuperScriptText  Text  
     FromReal() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Set() 
    SetSuperFont() 
    SuperScriptText() 
    +
     
     

    Class usage and Overview
    This class is responsible for formatting a text string which have a superscript at the end. This is used to generate scientific numbers. +

      +

    See also related classes:
    Text

     


    Class Methods

    +

     

     

    + +Create a scientific representation for a number

    + + + + + + +
    ArgumentDefaultDescription
    +$aVal + + Real value to be used
    +$aPrecision + + +2 +Precision (number of digits) to be printed
    + +

    Description
    Initialized the class from a real value to be used to present a scientific text string. + 
    +  
    See also
    SuperScriptText::Set +

    Example

    +$t = new SuperScriptText();
    $t->FromReal(12341.56);

    // Will print 1.23*10^4
    +

    +

    +

     

     

    + +Hight of font (approximate the height of the text)

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + Image context
    + +

    Description
    Return height of text. 
    +  
    See also
    SuperScriptText::GetTextHeight and SuperScriptText::GetWidth

    +

     

     

    + +Hight of text

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + Image context
    + +

    Description
    Hight of text 
    +

    +

     

     

    + +Total width of text

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + Image context
    + +

    Description
    Total width of text 
    +

    +

     

     

    + +Convert a floating point number to scientific notation

    + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + Mantissa
    +$aSuper + + +"" +Exponent
    + +

    Description
    Specify the string manuall by specifyin mantissa and exponent. 
    +  
    See also
    SuperScriptText::FromReal +

    Example

    +$t = new SuperScriptText();
    $t->Set("1.34 10","5");
    // Will generate "1.34 10^5"
    +

    +

    +

     

     

    + +Manually set font to be used for superscript

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFontFam + + Font family
    +$aFontStyle + + +FS_NORMAL +Font style
    +$aFontSize + + +8 +Font size
    + +

    Description
    Used to manually specify font to be used for superscript. If not specified it will be detemined automatically based on the font used for the mantissa. The font for the superscript will be roughly 70% of the size of the base font.  
    +

    +

     

     

    + +Constructor

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + +"" +Mantissa text
    +$aSuper + + +"" +Suoerscript text
    +$aXAbsPos + + +0 +X-position (in pixels)
    +$aYAbsPos + + +0 +Y-position (in pixels)
    + +

    Description
    Creates a new SUperSCriptClass 
    +  
    See also
    Text::Text


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Text.html b/html/includes/jpgraph/docs/ref/Text.html new file mode 100644 index 0000000000..c7faa3cf4c --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Text.html @@ -0,0 +1,777 @@ +


    CLASS Text
    +(Defined in: jpgraph.php : 2778)
     Text 
     Align() 
    Center() 
    GetFontHeight() 
    GetTextHeight() 
    GetWidth() 
    Hide() 
    ParagraphAlign() 
    Pos() 
    Set() 
    SetAlign() 
    SetAngle() 
    SetBox() 
    SetColor() 
    SetCSIMTarget() 
    SetFont() 
    SetMargin() 
    SetOrientation() 
    SetParagraphAlign() 
    SetPos() 
    SetScalePos() 
    SetShadow() 
    SetWordWrap() 
    Show() 
    Text() 
    +
     

    Class usage and Overview
    All text that is to be draw onto any graph is handled by this class. You create each text you want printed as an instance of this class. + +It is possible to adjust both font, color, alignment and paragraph alignment. + +If the text contains multiple lines (separated by "\n") the paragraph alignment determines how each line is formatted (i.e. left,center or right) +

      +


    Class Methods

    +

     

     

    + +Specify alignment for the text in relation to the x,y position for text

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal alignment
    +$aVAlign + + +"top" +Vertical alignment
    +$aParagraphAlign + + +"" +Paragraph alignment
    + +

    Description
    This determines how the text's x,y position is to be interpretated. + +Valid horizontal alignments are +
      +
    • 'left' +
    • 'center' +
    • 'right' +
    + +Valid vertical position are +
      +
    • 'top' +
    • 'middle' or 'center' +
    • 'bottom' +
    + +Valid paragraph alignment +
      +
    • 'left' +
    • 'center' +
    • 'right' +

    +  
    See also
    Text::ParagraphAlign +

    Example

    +$text = new Text();
    +

    +

    +

     

     

    + +Center the text between left and right coordinates

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aLeft + + Left corner X-coordinate
    +$aRight + + Right corner X-coordinate
    +$aYAbsPos + + +false +The common Y-coodinate
    + +

    Description
    Center the text between left and right coordinates on the same Y-coordinate 
    +  
    See also
    Text::Pos +

    Example

    +$txt->Center(50,150,75); +
    +

    +

     

     

    + +Height of font

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + No description available
    + +

    Description
    Return the height of the font used in the text. + +The difference between this method and the GetTextHeight() is that this method uses a predefined character to determine the height while GetTextHeight() uses the actual text in the string. + 
    +  
    See also
    Text::GetTextHeight and Text::GetWidth +

    Example

    +$height = $txt->GetFontHeight($graph->img) +
    +

    +

     

     

    + +Return the height of the actual text in the text object

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + No description available
    + +

    Description
    Return the height of the text in this object. + +The difference between this method and the GetFontHeight() is that that method uses a predefined character to determine the height while GetTextHeight() uses the actual text in the string. 
    +  
    See also
    Text::GetFontHeight and Text::GetWidth +

    Example

    +$height = $txt->GetTextHeight($graph->img);
    +

    +

    +

     

     

    + +Get total width of text

    + + + + +
    ArgumentDefaultDescription
    +&$aImg + + No description available
    + +

    Description
    Get total width of text 
    +  
    See also
    Text::GetTextHeight and Text::GetFontHeight +

    Example

    +$width = $txt->GetWidth($graph->img);
    +

    +

    +

     

     

    + +Hide the text

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide text
    + +

    Description
    The opposite of Show() 
    +  
    See also
    Text::Show +

    Example

    +$txt->Hide(); +
    +

    +

     

     

    + +Specifies the alignment for a multi line text

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + Alignment for a multiline text
    + +

    Description
    Specify the paragraph alignment for a multi line text. Each text line is separated by a "\n" character. + +Valid alignments are: +
      +
    • 'left' +
    • 'center' +
    • 'right' +
     
    +  
    See also
    Text::Align +

    Example

    +$txt->Set("The first line\nSec line\nThird line");
    $txt->ParagraphAlign('center');

    // Will give the result:
    //
    //  The first line
    //     Sec line
    //    Third line
    +

    +

    +

     

     

    + +Specify the position and alignment for the text object

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aXAbsPos + + +0 +X-position absolute position
    +$aYAbsPos + + +0 +Y-position absolute position
    +$aHAlign + + +"left" +Horizontal alignment
    +$aVAlign + + +"top" +Vertical alignment
    + +

    Description
    Set the position text to be displayed. As a convinience the horizontal alignment may also be set in this call. + +If you need to specify vertical position you have to use the Align() method. 
    +  
    See also
    Text::Align, Text::Set and Text::ParagraphAlign +

    Example

    +$txt->Pos(100,150,'center');
    +

    +

    +

     

     

    + +Set text to be displayed

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + Text string
    + +

    Description
    Set text to be displayed 
    + +

    Example

    +$txt->Set('Hello world'); +
    +

    +

     

     

    + +Alias for Align()

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal anchor point
    +$aVAlign + + +"top" +Vertical anchor point
    +$aParagraphAlign + + +"" +Paragraph alignment
    + +

    Description
    See Align 
    +  
    See also
    Text::Align

    +

     

     

    + +Specify text angle

    + + + + +
    ArgumentDefaultDescription
    +$aAngle + + Angle in degrees
    + +

    Description
    Specify Orientation of text. If TTF fonts are used then the orientation can be a arbitrary angle. If the builtin fonts are used then only horizontal and vertical position can be used, i.e 0 or 90 degrees, 
    + +

    Example

    +$txt->SetAngle(45); +
    +

    +

     

     

    + +Set parameters for poossible frame around text

    + + + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aFrameColor + + +array(255,255,255) +Color for text background
    +$aBorderColor + + +array(0,0,0) +Color for border around text
    +$aShadowColor + + +false +Color for shadow
    +$aCornerRadius + + +4 +Corner radius for rectangle
    +$aShadowWidth + + +3 +Drop shadow width
    + +

    Description
    Specify parameters for background color, border and possible text drop shadow. +
    +If no shadow color is specified then no shadow will appear. +

    +To use the old style of stright corners specify a corner radius of 0. + + 
    +  

    See also
    Text::SetShadow +

    Example

    +$txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $graph->AddText($txt);

    +

    +

    +

     

     

    + +Set text color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify color for text 
    + +

    Example

    +$txt->SetColor('darkblue'); +
    +

    +

     

     

    + +Specify CSIM Target for text

    + + + + + + +
    ArgumentDefaultDescription
    +$aTarget + + Target URL
    +$aAlt + + +null +Alt-tag text
    + +

    Description
    Specify Client Side Image Target for text 
    + +

    Example

    +$graph->title->SetCSIMTarget('mainpage.html','Go to main page');
    +

    +

    +

     

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFamily + + Font family
    +$aStyle + + +FS_NORMAL +Font style
    +$aSize + + +10 +Font size
    + +

    Description
    Specify font family, size and style. Two major types of font families can be used, builtin bitmnapped fonts or TTF fonts. The builtin fonts have a fixed size which can't be altered. + +Valid styles are +
      +
    • FS_NORMAL +
    • FS_BOLD +
    • FS_ITALIC +
    • FS_BOLDITALIC +
    + +Valid values for the internal font families are +
      +
    • FF_FONT0, Internal font 1 (small font) +
    • FF_FONT1, Internal font 2, (Medium size) +
    • FF_FONT2, Internal font 3, (large size) +
    + +Note: FF_FONT0 only suppor font style FS_NORMAL + +The available TTF are by default +
      +
    • FF_ARIAL +
    • FF_TIMES, (Times Roman) +
    • FF_COURIER, (Courier new) +
    • FF_VERDANA, (Verdana) +
    • FF_BOOK, (Bookman) +
    • FF_HANDWRT, (Handwriting) +
    • FF_COMIC, (Sans Comic) +

    +  
    See also
    Image::StrokeText +

    Example

    +$txt->SetFont(FF_ARIAL, FS_BOLD, 14); +
    +

    +

     

     

    + +Set the contect sensiive margin

    + + + + +
    ArgumentDefaultDescription
    +$aMarg + + Margin in pixels
    + +

    Description
    Specify a context sensitive margin for the text. Depending on in which context the text is used the margin will be interpretated accordingly. 
    + +

    Example

    +// Start further away from the top of graph
    $graph->title->SetMargin(15);
    +

    +

    +

     

     

    + +Deprecated. Use SetAngle instead. Specify text angle

    + + + + +
    ArgumentDefaultDescription
    +$aDirection + + +0 +Orientation of text in degrees
    + +

    Description
    Deprecated. Use SetAngle() instead. +Specify Orientation of text. If TTF fonts are used then the orientation can be a arbitrary angle. If the builtin fonts are used then only horizontal and vertical position can be used, i.e 0 or 90 degrees, 
    + +

    Example

    +$txt->SetOrientation(90); // Vertical text +
    +

    +

     

     

    + +Specifies the alignment for a multi line text

    + + + + +
    ArgumentDefaultDescription
    +$aAlign + + Horizontal alignment
    + +

    Description
    Determines how a multi-line text paragraph will be formatted. Each line in the paragraph will be treated individually. Allowed values are +
      +
    1. "center" +
    2. "left" +
    3. "right" +
    + +Note: Paragraph alignment is only applicable to horizontal text, i.e. angle = 0 . For paragraphs at an angle the alignbment will always be "left". + 
    + +

    Example

    +$graph->title->Set("Multi line\ntext !");
    $graph->title->SetParagraphAlign('right');

    // Default for title is "center"
    +

    +

    +

     

     

    + +Alias for Pos()

    + + + + + + + + + + +
    ArgumentDefaultDescription
    +$aXAbsPos + + +0 +X position
    +$aYAbsPos + + +0 +Y position
    +$aHAlign + + +"left" +Horizontal align
    +$aVAlign + + +"top" +Vertical align
    + +

    Description
    Alias for Pos() 
    +  
    See also
    Text::Pos +

    Example

    +$txt->Pos(100,150,'center'); +
    +

    +

     

     

    + +Specify the position of the text using the plot scale positions

    + + + + + + +
    ArgumentDefaultDescription
    +$aX + + X-position
    +$aY + + Y-position
    + +

    Description
    Specify the position of the text using the plot scale positions. The Y position is taken to be the Y axis. It is not possible to use Y2 scale to specify the position. 
    + +

    Example

    +$txt = new Text();
    $txt->SetScalePos(27.3, 278.9);
    +

    +

    +

     

     

    + +Add a drop shadow to boxed text

    + + + + + + +
    ArgumentDefaultDescription
    +$aShadowColor + + +'darkgray' +Shadow color
    +$aShadowWidth + + +3 +Shadow width (in pixels)
    + +

    Description
    If the text has been boxed (by call to SetBox()) then you can easily add a drop shadow by just calling this method. +

    +Note: You can also specify the shadow directly in the SetBox() call. This method was added to make Text more like other graph objects which have a SetShadow() method. 
    +  

    See also
    Text::SetBox +

    Example

    +$txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $txt->SetShadow();
    $graph->AddText($txt);
    +

    +

    +

     

     

    + +Specify a maximum line length

    + + + + +
    ArgumentDefaultDescription
    +$aCol + + Number of chars in column
    + +

    Description
    Specify a maximum line length. This method will insert suitable line breaks to ensure thateach line never exeeds the specified number of characters. The method will not break words. 
    + +

    Example

    +$txt = new Text('A suitable long text which will be broken');
    $txt->SetWordWrap(15);
    +

    +

    +

     

     

    + +Show or hide the text string

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +true +True=Display text
    + +

    Description
    Show or hide the text string. By default the text string is turned off. So a call to Show() is becessary for the text string to be displayed in the graph. + 
    + +

    Example

    +$txt->Show();
    +

    +

    +

     

     

    + +Constructor. Create new text at absolute pixel coordinates

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aTxt + + +'' +Text string
    +$aXAbsPos + + +0 +X-coordinate
    +$aYAbsPos + + +0 +Y-coordinate
    + +

    Description
    Create a new object to repesent a text string that is to be displayed on the graph. + +If the position is not specified when the object is created it can later be specified with a call to the Pos() method. + +The default alignment is to interpret the x,y coordinate as being the lower left corner of the bounding box for the text string. + +Note. The texts are hidden by default and you must remember toi call Show() to make the text appear in the image. 
    +  
    See also
    Text::Pos, Text::Set, Text::ParagraphAlign and Text::Show +

    Example

    +// Possible creations of text objects

    // Case 1. Text and position is specified later
    $txt = new Text();

    // Case 2. Position is specified later
    $txt = new Text('Hello world');

    // Case 3. Full specification
    $txt = new Text('Hello world',100,150);

    // A more real life example
    $txt = new Text("Note: Simple textnote.\nWIth two lines");
    $txt->SetFont(FF_FONT1,FS_BOLD);
    $txt->Pos(0.5,0.97,'center','bottom');
    $txt->SetBox('yellow','black');
    $graph->AddText($txt);



    +

    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/TextProperty.html b/html/includes/jpgraph/docs/ref/TextProperty.html new file mode 100644 index 0000000000..f2fcbd8797 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/TextProperty.html @@ -0,0 +1,189 @@ +


    CLASS TextProperty
    +(Defined in: jpgraph_gantt.php : 1501)
     TextProperty 
     Align() 
    Set() 
    SetAlign() 
    SetColor() 
    SetFont() 
    Show() 
    +
     

    Class usage and Overview
    This is very similair to Text but this is only used as an internal helper class in Gantt chart. In comparison with text it has the added funtionality that it can handle tabs. + +In the next version of JpGraph the extra functionality that this class has should be added to the real class Text() to make the class more orthogonal. + +Since this is just an internal helper class it has its justified position though. This was oroginally considered a very experimental text class and it made sence to compartmetn thath functionlity in a separate class to the stnadard Text() class. +

      +

    See also related classes:
    Text

     


    Class Methods

    +

     

     

    + +Specify vertical and horizontal alignment

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal alignment
    +$aVAlign + + +"bottom" +Vertical alignment
    + +

    Description
    Specify the anchor point fo the text. The anchor point determines how the texts x,y positions should be interpretated. + 
    +

    +

     

     

    + +Specify text string

    + + + + +
    ArgumentDefaultDescription
    +$aTxt + + Text string
    + +

    Description
    Specify text string 
    + +

    Example

    +$graph->title->Set("Overview for year 2002");
    +

    +

    +

     

     

    + +Specify alignment for text

    + + + + + + +
    ArgumentDefaultDescription
    +$aHAlign + + Horizontal alignment
    +$aVAlign + + +"bottom" +Vertical alignment
    + +

    Description
    Specify alignment for text. Same as TextProperty::Align() 
    +  
    See also
    TextProperty::Align

    +

     

     

    + +Set text color

    + + + + +
    ArgumentDefaultDescription
    +$aColor + + Color
    + +

    Description
    Specify text color 
    + +

    Example

    +SetColor('red:0.6'); +
    +

    +

     

     

    + +Specify font

    + + + + + + + + +
    ArgumentDefaultDescription
    +$aFFamily + + Font family
    +$aFStyle + + +FS_NORMAL +Font style
    +$aFSize + + +10 +Font size
    + +

    Description
    Specify font family, size and style. Two major types of font families can be used, builtin bitmnapped fonts or TTF fonts. The builtin fonts have a fixed size which can't be altered. + +Valid styles are +
      +
    • FS_NORMAL +
    • FS_BOLD +
    • FS_ITALIC +
    • FS_BOLDITALIC +
    + +Valid values for the internal font families are +
      +
    • FF_FONT0, Internal font 1 (small font) +
    • FF_FONT1, Internal font 2, (Medium size) +
    • FF_FONT2, Internal font 3, (large size) +
    + +Note: FF_FONT0 only suppor font style FS_NORMAL + +The available TTF are by default +
      +
    • FF_ARIAL +
    • FF_TIMES, (Times Roman) +
    • FF_COURIER, (Courier new) +
    • FF_VERDANA, (Verdana) +
    • FF_BOOK, (Bookman) +
    • FF_HANDWRT, (Handwriting) +
    • FF_COMIC, (Sans Comic) +

    +  
    See also
    Image::StrokeText +

    Example

    +SetFont(FF_ARIAL,FS_NORMAL,12) +
    +

    +

     

     

    + +Unhide/hide the text

    + + + + +
    ArgumentDefaultDescription
    +$aShow + + +true +True=Show text
    + +

    Description
    Specify if the text should be displayed or hidden 
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/Ticks.html b/html/includes/jpgraph/docs/ref/Ticks.html new file mode 100644 index 0000000000..3855d6c170 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/Ticks.html @@ -0,0 +1,306 @@ +


    CLASS Ticks
    +(Defined in: jpgraph.php : 3942)
     Ticks 
     Set() 
    SetColor() 
    SetFormatCallback() 
    SetLabelFormat() 
    SetSide() 
    SetSize() 
    SetWeight() 
    SupressFirst() 
    SupressLast() 
    SupressMinorTickMarks() 
    SupressTickMarks() 
    SupressZeroLabel() 
    +
     

    Class usage and Overview
    This is the abstract base class for ticks. Specifying the common signature for both linear and logartihmic ticks. + +Ticks are normally a property of the scale and can be accessed via the $graph->scale->ticks property. +

      +


    Class Methods

    +

     

     

    + +Set the distance between major and minor tick marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aMaj + + Distance (world coordinates) for major tick marks
    +$aMin + + Distance (world coordinates) for minor tick marks
    + +

    Description
    Set the distance between major and minor tick marks. Note that when the scale is specified manually then the tick marks must also be specified manually. 
    +  
    See also
    Graph::SetScale +

    Example

    +$graph->yaxis->scale->ticks->Set(10,5);
    +

    +

    +

     

     

    + +Set color for tick marks

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajorColor + + Major tick mark color
    +$aMinorColor + + +"" +Minor tick mark color
    + +

    Description
    Specify tick mark colors. If no minor tick mark color is specified then it will be the same as the major tick marks color. 
    + +

    Example

    +$graph->yaxis->scale->ticks->SetColor('red','black');
    +

    +

    +

     

     

    + +Specify a format callback function for labels

    + + + + +
    ArgumentDefaultDescription
    +$aCallbackFuncName + + name of function
    + +

    Description
    Specifies a callback function which will be called and given each tick label in turn as the argument. The callback function is supposed to return a proper formatted label to be displayed. + +Note: There is a shortcut to this method through the Axis::SetLabelFormatCallback. + +Note 2: The PHP function number_format() is often usefull in callback functions. + 
    +  
    See also
    Axis::SetLabelFormatCallback +

    Example

    +// Callback function for Y-scale. Use money format with
    // a ',' to separate 1000:s
    function yScaleCallback($aVal) {
        return number_format($aVal);
    }


    // Short for $graph->yaxis->scale->ticks->SetFormatCallback()
    $graph->yaxis->SetLabelFormatCallback('yScaleCallback');

    +

    +

    +

     

     

    + +Set format string for automatic labels

    + + + + + + +
    ArgumentDefaultDescription
    +$aFormatString + + Specify a printf() style format string
    +$aDate + + +FALSE +No description available
    + +

    Description
    Specify a printf() style format string. + +Note: Can also be called trough the shortcut Axis::SetLabelFormatString() + 
    +  
    See also
    Ticks::SetFormatCallback +

    Example

    +$graph->yaxis->SetLabelFormatString("%-02.1f"); +
    +

    +

     

     

    + +Specify side of axis for ticks

    + + + + +
    ArgumentDefaultDescription
    +$aSide + + Side
    + +

    Description
    Synonym for SetDirection(). +Specify what side of the axis the tick marks should be drawn on. For Y -axis the possible directions are + +
      +
    • SIDE_LEFT +
    • SIDE_RIGHT +
    + +and for X-axis the possible parameters are + +
      +
    • SIDE_UP +
    • SIDE_DOWN +
     
    +  
    See also
    Axis::SetTickSide, Axis::SetLabelSide and Axis::SetTitleSide +

    Example

    +$graph->xaxis->scale->ticks->SetSide(SIDE_UP);
    +

    +

    +

     

     

    + +Specify absolute size of tick marks in pixels

    + + + + + + +
    ArgumentDefaultDescription
    +$aMajSize + + Major tick size
    +$aMinSize + + +3 +Minor tick size
    + +

    Description
    Specify absolute size of tick marks in pixels 
    + +

    Example

    +$graph->xaxis->scale->ticks->SetSize(8,3); +
    +

    +

     

     

    + +Specify width of tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aWeight + + Width (in pixels)
    + +

    Description
    Specify width of tick marks 
    + +

    Example

    +$graph->xaxis->scale->ticks->SetWeight(2); +
    +

    +

     

     

    + +Hide the first tick mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide the vbery first tick mark on the axis
    + +

    Description
    Hide the first tick mark on the axis. 
    +  
    See also
    Ticks::SupressLast +

    Example

    +$graph->xaxis->scale->ticks->SupressFirst();
    +

    +

    +

     

     

    + +Hide the last tick mark

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide the last tick mark
    + +

    Description
    Hide the last tick mark on the axis 
    +  
    See also
    Ticks::SupressFirst

    +

     

     

    + +Hide all minor tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide minor tick marks
    + +

    Description
    Hide all minor tick marks 
    +

    +

     

     

    + +Hide major tick marks

    + + + + +
    ArgumentDefaultDescription
    +$aHide + + +true +True=Hide major tick marks
    + +

    Description
    Hide major tick marks 
    +  
    See also
    Ticks::SupressMinorTickMarks

    +

     

     

    + +Don't display the first zero label

    + + + + +
    ArgumentDefaultDescription
    +$aFlag + + +true +True=Hide zero-label
    + +

    Description
    Hide any label with numeric value == 0.0 
    +


    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/class_toc.html b/html/includes/jpgraph/docs/ref/class_toc.html new file mode 100644 index 0000000000..1ba80cd4e5 --- /dev/null +++ b/html/includes/jpgraph/docs/ref/class_toc.html @@ -0,0 +1,618 @@ +JpGraph

    +
    1. AccBarPlot
    +    1.1 AccBarPlot
    +    1.2 Max
    +    1.3 Min
    +2. AccLinePlot
    +    2.1 AccLinePlot
    +    2.2 Max
    +    2.3 Min
    +    2.4 SetInterpolateMode
    +3. AntiSpam
    +    3.1 AntiSpam
    +    3.2 Rand
    +    3.3 Set
    +    3.4 Stroke
    +4. Axis
    +    4.1 Hide
    +    4.2 HideFirstLastLabel
    +    4.3 HideFirstTickLabel
    +    4.4 HideLabels
    +    4.5 HideLastTickLabel
    +    4.6 HideLine
    +    4.7 HideTicks
    +    4.8 HideZeroLabel
    +    4.9 SetColor
    +    4.10 SetFont
    +    4.11 SetLabelAlign
    +    4.12 SetLabelAngle
    +    4.13 SetLabelFormat
    +    4.14 SetLabelFormatCallback
    +    4.15 SetLabelFormatString
    +    4.16 SetLabelMargin
    +    4.17 SetLabelPos
    +    4.18 SetLabelSide
    +    4.19 SetMajTickPositions
    +    4.20 SetPos
    +    4.21 SetPosAbsDelta
    +    4.22 SetTextLabelInterval
    +    4.23 SetTextTickInterval
    +    4.24 SetTextTicks
    +    4.25 SetTickDirection
    +    4.26 SetTickLabelMargin
    +    4.27 SetTickLabels
    +    4.28 SetTickPositions
    +    4.29 SetTickSide
    +    4.30 SetTitle
    +    4.31 SetTitleMargin
    +    4.32 SetTitleSide
    +    4.33 SetWeight
    +5. BarPlot
    +    5.1 BarPlot
    +    5.2 SetAbsWidth
    +    5.3 SetAlign
    +    5.4 SetFillColor
    +    5.5 SetFillGradient
    +    5.6 SetNoFill
    +    5.7 SetPattern
    +    5.8 SetShadow
    +    5.9 SetValuePos
    +    5.10 SetWidth
    +    5.11 SetYBase
    +    5.12 SetYMin
    +6. Bezier
    +    6.1 Bezier
    +    6.2 Get
    +7. BoxPlot
    +    7.1 BoxPlot
    +    7.2 SetMedianColor
    +8. CanvasGraph
    +    8.1 CanvasGraph
    +    8.2 InitFrame
    +    8.3 Stroke
    +9. CanvasRectangleText
    +    9.1 CanvasRectangleText
    +    9.2 ParagraphAlign
    +    9.3 Pos
    +    9.4 Set
    +    9.5 SetAutoMargin
    +    9.6 SetColor
    +    9.7 SetCornerRadius
    +    9.8 SetFillColor
    +    9.9 SetFont
    +    9.10 SetFontColor
    +    9.11 SetPos
    +    9.12 SetShadow
    +    9.13 SetTxt
    +    9.14 Stroke
    +10. CanvasScale
    +    10.1 CanvasScale
    +    10.2 Set
    +    10.3 Translate
    +    10.4 TranslateX
    +    10.5 TranslateY
    +11. DateLocale
    +    11.1 DateLocale
    +    11.2 GetDayAbb
    +    11.3 GetLongMonthName
    +    11.4 GetMonth
    +    11.5 GetShortDay
    +    11.6 GetShortMonth
    +    11.7 GetShortMonthName
    +    11.8 Set
    +12. DateScale
    +    12.1 AdjustForDST
    +    12.2 SetDateAlign
    +    12.3 SetDateFormat
    +    12.4 SetTimeAlign
    +13. DigitalLED74
    +    13.1 DigitalLED74
    +    13.2 SetSupersampling
    +    13.3 StrokeNumber
    +14. DisplayValue
    +    14.1 HideZero
    +    14.2 SetAlign
    +    14.3 SetAngle
    +    14.4 SetColor
    +    14.5 SetFont
    +    14.6 SetFormat
    +    14.7 SetFormatCallback
    +    14.8 SetMargin
    +    14.9 Show
    +15. ErrMsgText
    +16. ErrorLinePlot
    +    16.1 ErrorLinePlot
    +17. ErrorPlot
    +    17.1 ErrorPlot
    +18. FieldArrow
    +    18.1 SetColor
    +    18.2 SetSize
    +19. FieldPlot
    +    19.1 FieldPlot
    +    19.2 SetCallback
    +20. Footer
    +21. FuncGenerator
    +    21.1 E
    +    21.2 FuncGenerator
    +22. GanttActivityInfo
    +    22.1 Hide
    +    22.2 SetBackgroundColor
    +    22.3 SetColor
    +    22.4 SetColTitles
    +    22.5 SetColumnMargin
    +    22.6 SetFont
    +    22.7 SetFontColor
    +    22.8 SetHeaderAlign
    +    22.9 SetStyle
    +    22.10 Show
    +23. GanttBar
    +    23.1 GanttBar
    +    23.2 SetColor
    +    23.3 SetFillColor
    +    23.4 SetHeight
    +    23.5 SetPattern
    +    23.6 SetShadow
    +24. GanttGraph
    +    24.1 Add
    +    24.2 CreateSimple
    +    24.3 GanttGraph
    +    24.4 SetDateRange
    +    24.5 SetLabelVMarginFactor
    +    24.6 SetSimpleFont
    +    24.7 SetSimpleStyle
    +    24.8 SetVMarginFactor
    +    24.9 ShowHeaders
    +    24.10 Stroke
    +25. GanttPlotObject
    +    25.1 SetCaptionMargin
    +    25.2 SetConstrain
    +    25.3 SetCSIMAlt
    +    25.4 SetCSIMTarget
    +    25.5 SetLabelLeftMargin
    +26. GanttScale
    +    26.1 SetDateLocale
    +    26.2 SetRange
    +    26.3 SetTableTitleBackground
    +    26.4 SetVertLayout
    +    26.5 SetWeekStart
    +    26.6 UseWeekendBackground
    +27. GanttVLine
    +    27.1 GanttVLine
    +    27.2 SetDayOffset
    +    27.3 SetTitleMargin
    +28. Graph
    +    28.1 Add
    +    28.2 AddBand
    +    28.3 AddLine
    +    28.4 AddText
    +    28.5 AddY
    +    28.6 AddY2
    +    28.7 CheckCSIMCache
    +    28.8 GetHTMLImageMap
    +    28.9 Graph
    +    28.10 Set3DPerspective
    +    28.11 Set90AndMargin
    +    28.12 SetAlphaBlending
    +    28.13 SetAngle
    +    28.14 SetAxisLabelBackground
    +    28.15 SetAxisStyle
    +    28.16 SetBackgroundCFlag
    +    28.17 SetBackgroundCountryFlag
    +    28.18 SetBackgroundGradient
    +    28.19 SetBackgroundImage
    +    28.20 SetBackgroundImageMix
    +    28.21 SetBox
    +    28.22 SetClipping
    +    28.23 SetColor
    +    28.24 SetCSIMImgAlt
    +    28.25 SetFrame
    +    28.26 SetFrameBevel
    +    28.27 SetGridDepth
    +    28.28 SetIconDepth
    +    28.29 SetImgFormat
    +    28.30 SetMargin
    +    28.31 SetMarginColor
    +    28.32 SetScale
    +    28.33 SetShadow
    +    28.34 SetTextScaleAbsCenterOff
    +    28.35 SetTickDensity
    +    28.36 SetTitleBackground
    +    28.37 SetTitleBackgroundFillStyle
    +    28.38 SetY2OrderBack
    +    28.39 SetY2Scale
    +    28.40 SetYDeltaDist
    +    28.41 SetYScale
    +    28.42 Stroke
    +    28.43 StrokeCSIM
    +    28.44 StrokeFrameBackground
    +29. GraphTabTitle
    +    29.1 Set
    +    29.2 SetColor
    +    29.3 SetCorner
    +    29.4 SetFillColor
    +    29.5 SetPos
    +    29.6 SetTabAlign
    +    29.7 SetWidth
    +30. Grid
    +    30.1 SetColor
    +    30.2 SetFill
    +    30.3 SetLineStyle
    +    30.4 SetWeight
    +    30.5 Show
    +31. GroupBarPlot
    +    31.1 GroupBarPlot
    +32. GTextTable
    +    32.1 GTextTable
    +    32.2 Init
    +    32.3 MergeCells
    +    32.4 MergeCol
    +    32.5 MergeRow
    +    32.6 Set
    +    32.7 SetAlign
    +    32.8 SetAnchorPos
    +    32.9 SetBorder
    +    32.10 SetCellAlign
    +    32.11 SetCellColor
    +    32.12 SetCellCountryFlag
    +    32.13 SetCellCSIMTarget
    +    32.14 SetCellFillColor
    +    32.15 SetCellFont
    +    32.16 SetCellImage
    +    32.17 SetCellImageConstrain
    +    32.18 SetCellNumberFormat
    +    32.19 SetCellPadding
    +    32.20 SetColAlign
    +    32.21 SetColColor
    +    32.22 SetColFillColor
    +    32.23 SetColFont
    +    32.24 SetColGrid
    +    32.25 SetColImage
    +    32.26 SetColNumberFormat
    +    32.27 SetColor
    +    32.28 SetColPadding
    +    32.29 SetCSIMTarget
    +    32.30 SetFillColor
    +    32.31 SetFont
    +    32.32 SetGrid
    +    32.33 SetImage
    +    32.34 SetMinColWidth
    +    32.35 SetMinRowHeight
    +    32.36 SetNumberFormat
    +    32.37 SetPadding
    +    32.38 SetPos
    +    32.39 SetRowAlign
    +    32.40 SetRowColor
    +    32.41 SetRowFillColor
    +    32.42 SetRowFont
    +    32.43 SetRowGrid
    +    32.44 SetRowImage
    +    32.45 SetRowNumberFormat
    +    32.46 SetRowPadding
    +    32.47 SetScalePos
    +    32.48 toString
    +33. HeaderProperty
    +    33.1 SetBackgroundColor
    +    33.2 SetFont
    +    33.3 SetFontColor
    +    33.4 SetFormatString
    +    33.5 SetFrameColor
    +    33.6 SetFrameWeight
    +    33.7 SetIntervall
    +    33.8 SetLabelFormatString
    +    33.9 SetStyle
    +    33.10 SetSundayFontColor
    +    33.11 SetTitleVertMargin
    +    33.12 SetWeekendColor
    +34. HorizontalGridLine
    +    34.1 SetRowFillColor
    +    34.2 SetStart
    +    34.3 Show
    +35. IconImage
    +    35.1 IconImage
    +    35.2 SetAlign
    +36. IconPlot
    +    36.1 IconPlot
    +    36.2 SetAnchor
    +    36.3 SetCountryFlag
    +    36.4 SetMix
    +    36.5 SetPos
    +    36.6 SetScale
    +37. Image
    +    37.1 RoundedRectangle
    +    37.2 SetAlphaBlending
    +    37.3 SetAntiAliasing
    +    37.4 SetCanvasColor
    +    37.5 SetExpired
    +    37.6 SetImgFormat
    +    37.7 SetMargin
    +    37.8 SetQuality
    +    37.9 SetTransparent
    +38. Legend
    +    38.1 Hide
    +    38.2 Pos
    +    38.3 SetAbsPos
    +    38.4 SetColor
    +    38.5 SetColumns
    +    38.6 SetFillColor
    +    38.7 SetFont
    +    38.8 SetFrameWeight
    +    38.9 SetHColMargin
    +    38.10 SetLayout
    +    38.11 SetLeftMargin
    +    38.12 SetLineSpacing
    +    38.13 SetLineWeight
    +    38.14 SetMarkAbsHSize
    +    38.15 SetMarkAbsSize
    +    38.16 SetMarkAbsVSize
    +    38.17 SetPos
    +    38.18 SetReverse
    +    38.19 SetShadow
    +    38.20 SetVColMargin
    +39. LinearScale
    +    39.1 SetAutoMax
    +    39.2 SetAutoMin
    +    39.3 SetAutoTicks
    +    39.4 SetGrace
    +40. LinearTicks
    +    40.1 AdjustForDST
    +    40.2 GetMajor
    +    40.3 GetMinor
    +    40.4 Set
    +    40.5 SetMajTickPositions
    +    40.6 SetTextLabelStart
    +    40.7 SetTickPositions
    +41. LineErrorPlot
    +    41.1 LineErrorPlot
    +42. LinePlot
    +    42.1 AddArea
    +    42.2 LinePlot
    +    42.3 SetBarCenter
    +    42.4 SetColor
    +    42.5 SetFastStroke
    +    42.6 SetFillColor
    +    42.7 SetFillFromYMin
    +    42.8 SetFillGradient
    +    42.9 SetStepStyle
    +    42.10 SetStyle
    +43. LineProperty
    +    43.1 SetColor
    +    43.2 SetStyle
    +    43.3 SetWeight
    +    43.4 Show
    +44. LogScale
    +    44.1 GetMaxVal
    +    44.2 GetMinVal
    +45. LogTicks
    +    45.1 SetLabelLogType
    +46. MileStone
    +    46.1 MileStone
    +47. PieGraph
    +    47.1 Add
    +    47.2 PieGraph
    +    47.3 SetAntiAliasing
    +    47.4 SetColor
    +    47.5 Stroke
    +48. PiePlot
    +    48.1 Explode
    +    48.2 ExplodeAll
    +    48.3 ExplodeSlice
    +    48.4 PiePlot
    +    48.5 SetCenter
    +    48.6 SetColor
    +    48.7 SetCSIMTargets
    +    48.8 SetFont
    +    48.9 SetFontColor
    +    48.10 SetGuideLines
    +    48.11 SetGuideLinesAdjust
    +    48.12 SetLabelPos
    +    48.13 SetLabels
    +    48.14 SetLabelType
    +    48.15 SetLegends
    +    48.16 SetShadow
    +    48.17 SetSize
    +    48.18 SetSliceColors
    +    48.19 SetStartAngle
    +    48.20 SetTheme
    +    48.21 SetValueType
    +    48.22 ShowBorder
    +49. PiePlot3D
    +    49.1 PiePlot3d
    +    49.2 SetAngle
    +    49.3 SetCSIMTargets
    +    49.4 SetEdge
    +    49.5 SetHeight
    +    49.6 SetLabelMargin
    +    49.7 SetLabels
    +    49.8 SetLegends
    +    49.9 SetSliceColors
    +    49.10 SetStartAngle
    +    49.11 ShowBorder
    +50. PiePlotC
    +    50.1 PiePlotC
    +    50.2 SetMid
    +    50.3 SetMidColor
    +    50.4 SetMidCSIM
    +    50.5 SetMidSize
    +    50.6 SetMidTitle
    +51. Plot
    +    51.1 HideLegend
    +    51.2 SetCenter
    +    51.3 SetColor
    +    51.4 SetCSIMTargets
    +    51.5 SetLegend
    +    51.6 SetLineWeight
    +52. PlotBand
    +    52.1 PlotBand
    +    52.2 SetDensity
    +    52.3 SetOrder
    +    52.4 ShowFrame
    +53. PlotLine
    +    53.1 HideLegend
    +    53.2 PlotLine
    +    53.3 SetColor
    +    53.4 SetDirection
    +    53.5 SetLegend
    +    53.6 SetPosition
    +    53.7 SetWeight
    +54. PlotMark
    +    54.1 Hide
    +    54.2 SetCallback
    +    54.3 SetCallbackYX
    +    54.4 SetColor
    +    54.5 SetDefaultWidth
    +    54.6 SetFillColor
    +    54.7 SetSize
    +    54.8 SetType
    +    54.9 SetWeight
    +    54.10 SetWidth
    +    54.11 Show
    +55. PolarAxis
    +    55.1 HideTicks
    +    55.2 SetAngleFont
    +    55.3 SetAngleStep
    +    55.4 SetColor
    +    55.5 SetGridColor
    +    55.6 SetTickColors
    +    55.7 ShowAngleDegreeMark
    +    55.8 ShowAngleLabel
    +    55.9 ShowGrid
    +56. PolarGraph
    +    56.1 PolarGraph
    +    56.2 Set90AndMargin
    +    56.3 SetDensity
    +    56.4 SetPlotSize
    +    56.5 SetScale
    +    56.6 SetType
    +    56.7 Stroke
    +57. PolarPlot
    +    57.1 PolarPlot
    +    57.2 SetColor
    +    57.3 SetCSIMTargets
    +    57.4 SetFillColor
    +    57.5 SetLegend
    +    57.6 SetWeight
    +58. Progress
    +    58.1 Set
    +    58.2 SetFillColor
    +    58.3 SetPattern
    +59. RadarAxis
    +60. RadarGraph
    +    60.1 Add
    +    60.2 HideTickMarks
    +    60.3 RadarGraph
    +    60.4 SetCenter
    +    60.5 SetColor
    +    60.6 SetPlotSize
    +    60.7 SetPos
    +    60.8 SetScale
    +    60.9 SetSize
    +    60.10 SetTickDensity
    +    60.11 SetTitles
    +    60.12 ShowMinorTickmarks
    +    60.13 Stroke
    +    60.14 SupressTickMarks
    +61. RadarGrid
    +62. RadarLinearTicks
    +63. RadarLogTicks
    +64. RadarPlot
    +    64.1 RadarPlot
    +    64.2 SetColor
    +    64.3 SetFill
    +    64.4 SetFillColor
    +    64.5 SetLegend
    +    64.6 SetLineStyle
    +    64.7 SetLineWeight
    +65. RotImage
    +    65.1 SetAngle
    +    65.2 SetCenter
    +    65.3 SetMargin
    +    65.4 SetTranslation
    +66. ScatterPlot
    +    66.1 ScatterPlot
    +    66.2 SetImpuls
    +    66.3 SetLinkPoints
    +67. Shape
    +    67.1 Bezier
    +    67.2 Circle
    +    67.3 FilledCircle
    +    67.4 FilledPolygon
    +    67.5 FilledRectangle
    +    67.6 FilledRoundedRectangle
    +    67.7 IndentedRectangle
    +    67.8 Line
    +    67.9 Polygon
    +    67.10 Rectangle
    +    67.11 RoundedRectangle
    +    67.12 SetColor
    +    67.13 SetTextAlign
    +    67.14 ShadowRectangle
    +    67.15 Shape
    +68. Spline
    +    68.1 Get
    +    68.2 Spline
    +69. StockPlot
    +    69.1 HideEndLines
    +    69.2 SetColor
    +    69.3 SetWidth
    +    69.4 StockPlot
    +70. SuperScriptText
    +    70.1 FromReal
    +    70.2 GetFontHeight
    +    70.3 GetTextHeight
    +    70.4 GetWidth
    +    70.5 Set
    +    70.6 SetSuperFont
    +    70.7 SuperScriptText
    +71. Text
    +    71.1 Align
    +    71.2 Center
    +    71.3 GetFontHeight
    +    71.4 GetTextHeight
    +    71.5 GetWidth
    +    71.6 Hide
    +    71.7 ParagraphAlign
    +    71.8 Pos
    +    71.9 Set
    +    71.10 SetAlign
    +    71.11 SetAngle
    +    71.12 SetBox
    +    71.13 SetColor
    +    71.14 SetCSIMTarget
    +    71.15 SetFont
    +    71.16 SetMargin
    +    71.17 SetOrientation
    +    71.18 SetParagraphAlign
    +    71.19 SetPos
    +    71.20 SetScalePos
    +    71.21 SetShadow
    +    71.22 SetWordWrap
    +    71.23 Show
    +    71.24 Text
    +72. TextProperty
    +    72.1 Align
    +    72.2 Set
    +    72.3 SetAlign
    +    72.4 SetColor
    +    72.5 SetFont
    +    72.6 Show
    +73. Ticks
    +    73.1 Set
    +    73.2 SetColor
    +    73.3 SetFormatCallback
    +    73.4 SetLabelFormat
    +    73.5 SetSide
    +    73.6 SetSize
    +    73.7 SetWeight
    +    73.8 SupressFirst
    +    73.9 SupressLast
    +    73.10 SupressMinorTickMarks
    +    73.11 SupressTickMarks
    +    73.12 SupressZeroLabel
    +

    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/index.html b/html/includes/jpgraph/docs/ref/index.html new file mode 100644 index 0000000000..40b98a967d --- /dev/null +++ b/html/includes/jpgraph/docs/ref/index.html @@ -0,0 +1,10 @@ + + + + Project documentation + + + ; + + + \ No newline at end of file diff --git a/html/includes/jpgraph/docs/ref/projinfo.html b/html/includes/jpgraph/docs/ref/projinfo.html new file mode 100644 index 0000000000..88127dd5ab --- /dev/null +++ b/html/includes/jpgraph/docs/ref/projinfo.html @@ -0,0 +1,5 @@ +
    JpGraph
    +

    Documentation status: 98%

    Total number of Classes: 106, Methods: 1065

    +This version does not include private methods & classes

    Generated at 18 Mar 2007 at 13:32
    +


    +JpGraph is a fully OO graph drawing library for PHP.

    This software library is released under QPL 1.0

    © 2002 - 2005 Aditus Consulting. All rights reserved.

    \ No newline at end of file diff --git a/html/includes/jpgraph/docs/reference.png b/html/includes/jpgraph/docs/reference.png new file mode 100644 index 0000000000000000000000000000000000000000..e23dfc099ea0043315df496a9ef72fedd3b6ff0d GIT binary patch literal 531 zcmV+u0_^>XP)ceKCI%+BQ0pU8uC* zO92zrsM#WG8`mfEQy?VTZTh?BF)?igs)Vd@pT12y+p-H4k?2An`O>7sJQS!$CM2@2 zc*ah=wLWQ^n1=#&p74lN?6lpYs+eoM3DCGM!LAA(cTXDo{+Zn&qazC8Uau^$Fg;zlRA|%or9Qk=o3;XsG6*Sp zd$YzU0{{pq%Il)s^d8p6=oJ|K2ad&oq0y4Kw#M$Bm7#7FU+W9|O-pDMJk7$4`33Mj VCWRC_vK0UT002ovPDHLkV1jI2@D>07 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/Examples/accbarex1.php b/html/includes/jpgraph/src/Examples/accbarex1.php new file mode 100644 index 0000000000..2af8062a3b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/accbarex1.php @@ -0,0 +1,40 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b1plot->value->Show(); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$b2plot->value->Show(); + +// Create the grouped bar plot +$gbplot = new AccBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/alphabarex1.php b/html/includes/jpgraph/src/Examples/alphabarex1.php new file mode 100644 index 0000000000..335b52a40e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/alphabarex1.php @@ -0,0 +1,75 @@ +SetScale("textlin"); +$graph->img->SetMargin(40,80,30,40); + +// Adjust the position of the legend box +$graph->legend->Pos(0.02,0.15); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.3'); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Set a nice summer (in Stockholm) image +$graph->SetBackgroundImage('stship.jpg',BGIMG_COPY); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('white'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('white'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using alpha blending with a background'); +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('orange@0.4'); +$bplot2->SetFillColor('brown@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/antispamex01.php b/html/includes/jpgraph/src/Examples/antispamex01.php new file mode 100644 index 0000000000..f34e52ccbe --- /dev/null +++ b/html/includes/jpgraph/src/Examples/antispamex01.php @@ -0,0 +1,18 @@ +Rand(5); + +// Stroke random cahllenge +if( $spam->Stroke() === false ) { + die('Illegal or no data to plot'); +} + +?> + diff --git a/html/includes/jpgraph/src/Examples/backgroundex01.php b/html/includes/jpgraph/src/Examples/backgroundex01.php new file mode 100644 index 0000000000..b2931720ca --- /dev/null +++ b/html/includes/jpgraph/src/Examples/backgroundex01.php @@ -0,0 +1,51 @@ +img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLPLOT); + +$graph->img->SetAntiAliasing("white"); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/backgroundex02.php b/html/includes/jpgraph/src/Examples/backgroundex02.php new file mode 100644 index 0000000000..e9077433b6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/backgroundex02.php @@ -0,0 +1,51 @@ +img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); + +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/backgroundex03.php b/html/includes/jpgraph/src/Examples/backgroundex03.php new file mode 100644 index 0000000000..587dbd359e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/backgroundex03.php @@ -0,0 +1,51 @@ +img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_COPY); + +$graph->img->SetAntiAliasing("white"); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Background image"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("New tiger -99"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/balloonex1.php b/html/includes/jpgraph/src/Examples/balloonex1.php new file mode 100644 index 0000000000..76309921ae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/balloonex1.php @@ -0,0 +1,56 @@ +SetScale("linlin"); +$graph->img->SetMargin(40,100,40,40); +$graph->SetShadow(); +$graph->title->Set("Example of ballon scatter plot"); +// Use a lot of grace to get large scales +$graph->yaxis->scale->SetGrace(50,10); + +// Make sure X-axis as at the bottom of the graph +$graph->xaxis->SetPos('min'); + +// Create the scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); + +// Uncomment the following two lines to display the values +$sp1->value->Show(); +$sp1->value->SetFont(FF_FONT1,FS_BOLD); + +// Specify the callback +$sp1->mark->SetCallback("FCallback"); + +// Setup the legend for plot +$sp1->SetLegend('Year 2002'); + +// Add the scatter plot to the graph +$graph->Add($sp1); + +// ... and send to browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/balloonex2.php b/html/includes/jpgraph/src/Examples/balloonex2.php new file mode 100644 index 0000000000..642e62a65e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/balloonex2.php @@ -0,0 +1,78 @@ +SetScale("intlin"); +$graph->SetMargin(40,40,40,40); +$graph->SetMarginColor('wheat'); + +$graph->title->Set("Example of ballon scatter plot with X,Y callback"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->title->SetMargin(10); + +// Use a lot of grace to get large scales since the ballon have +// size and we don't want them to collide with the X-axis +$graph->yaxis->scale->SetGrace(50,10); +$graph->xaxis->scale->SetGrace(50,10); + +// Make sure X-axis as at the bottom of the graph and not at the default Y=0 +$graph->xaxis->SetPos('min'); + +// Set X-scale to start at 0 +$graph->xscale->SetAutoMin(0); + +// Create the scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); + +// Uncomment the following two lines to display the values +$sp1->value->Show(); +$sp1->value->SetFont(FF_FONT1,FS_BOLD); + +// Specify the callback +$sp1->mark->SetCallbackYX("FCallback"); + +// Add the scatter plot to the graph +$graph->Add($sp1); + +// ... and send to browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bar2scalesex1.php b/html/includes/jpgraph/src/Examples/bar2scalesex1.php new file mode 100644 index 0000000000..4f34b28c57 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bar2scalesex1.php @@ -0,0 +1,48 @@ +title->Set('Example with 2 scale bars'); + +// Setup Y and Y2 scales with some "grace" +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->yaxis->scale->SetGrace(30); +$graph->y2axis->scale->SetGrace(30); + +//$graph->ygrid->Show(true,true); +$graph->ygrid->SetColor('gray','lightgray@0.5'); + +// Setup graph colors +$graph->SetMarginColor('white'); +$graph->y2axis->SetColor('darkred'); + + +// Create the "dummy" 0 bplot +$bplotzero = new BarPlot($datazero); + +// Create the "Y" axis group +$ybplot1 = new BarPlot($datay); +$ybplot1->value->Show(); +$ybplot = new GroupBarPlot(array($ybplot1,$bplotzero)); + +// Create the "Y2" axis group +$ybplot2 = new BarPlot($datay2); +$ybplot2->value->Show(); +$ybplot2->value->SetColor('darkred'); +$ybplot2->SetFillColor('darkred'); +$y2bplot = new GroupBarPlot(array($bplotzero,$ybplot2)); + +// Add the grouped bar plots to the graph +$graph->Add($ybplot); +$graph->AddY2($y2bplot); + +// .. and finally stroke the image back to browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bar_csimex1.php b/html/includes/jpgraph/src/Examples/bar_csimex1.php new file mode 100644 index 0000000000..a212c0e414 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bar_csimex1.php @@ -0,0 +1,52 @@ +SetScale("textlin"); +$graph->img->SetMargin(60,30,20,40); +$graph->yaxis->SetTitleMargin(45); +$graph->yaxis->scale->SetGrace(30); +$graph->SetShadow(); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Create targets for the image maps. One for each column +$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); +$bplot->SetFillColor("orange"); + +// Use a shadow on the bar graphs (just use the default settings) +$bplot->SetShadow(); +$bplot->value->SetFormat(" $ %2.1f",70); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->SetColor("blue"); +$bplot->value->Show(); + +$graph->Add($bplot); + +$graph->title->Set("Image maps barex1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + + +?> diff --git a/html/includes/jpgraph/src/Examples/bar_csimex2.php b/html/includes/jpgraph/src/Examples/bar_csimex2.php new file mode 100644 index 0000000000..2645900d88 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bar_csimex2.php @@ -0,0 +1,51 @@ +SetScale("textlin"); +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3", +"bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b1plot->SetCSIMTargets($targ,$alts); + +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9", +"bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b2plot->SetCSIMTargets($targ,$alts); + +// Create the grouped bar plot +$abplot = new AccBarPlot(array($b1plot,$b2plot)); + +$abplot->SetShadow(); +$abplot->value->Show(); + +// ...and add it to the graPH +$graph->Add($abplot); + +$graph->title->Set("Image map barex2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/bar_csimex3.php b/html/includes/jpgraph/src/Examples/bar_csimex3.php new file mode 100644 index 0000000000..9d2858e22c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bar_csimex3.php @@ -0,0 +1,88 @@ +SetAngle(90); +$graph->SetScale("textlin"); + +// The negative margins are necessary since we +// have rotated the image 90 degress and shifted the +// meaning of width, and height. This means that the +// left and right margins now becomes top and bottom +// calculated with the image width and not the height. +$graph->img->SetMargin(-80,-80,210,210); + +$graph->SetMarginColor('white'); + +// Setup title for graph +$graph->title->Set('Horizontal bar graph'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->subtitle->Set("With image map\nNote: The URL just points back to this image"); + +// Setup X-axis. +$graph->xaxis->SetTitle("X-title",'center'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetAngle(90); +$graph->xaxis->SetTitleMargin(30); +$graph->xaxis->SetLabelMargin(15); +$graph->xaxis->SetLabelAlign('right','center'); + +// Setup Y-axis + +// First we want it at the bottom, i.e. the 'max' value of the +// x-axis +$graph->yaxis->SetPos('max'); + +// Arrange the title +$graph->yaxis->SetTitle("Turnaround (mkr)",'center'); +$graph->yaxis->SetTitleSide(SIDE_RIGHT); +$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->yaxis->title->SetAngle(0); +$graph->yaxis->title->Align('center','top'); +$graph->yaxis->SetTitleMargin(30); + +// Arrange the labels +$graph->yaxis->SetLabelSide(SIDE_RIGHT); +$graph->yaxis->SetLabelAlign('center','top'); + +// Create the bar plots with image maps +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$targ=array("bar_clsmex2.php#1","bar_clsmex2.php#2","bar_clsmex2.php#3", + "bar_clsmex2.php#4","bar_clsmex2.php#5","bar_clsmex2.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b1plot->SetCSIMTargets($targ,$alts); + +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$targ=array("bar_clsmex2.php#7","bar_clsmex2.php#8","bar_clsmex2.php#9", + "bar_clsmex2.php#10","bar_clsmex2.php#11","bar_clsmex2.php#12"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$b2plot->SetCSIMTargets($targ,$alts); + +// Create the accumulated bar plot +$abplot = new AccBarPlot(array($b1plot,$b2plot)); +$abplot->SetShadow(); + +// We want to display the value of each bar at the top +$abplot->value->Show(); +$abplot->value->SetFont(FF_FONT1,FS_NORMAL); +$abplot->value->SetAlign('left','center'); +$abplot->value->SetColor("black","darkred"); +$abplot->value->SetFormat('%.1f mkr'); + +// ...and add it to the graph +$graph->Add($abplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/barformatcallbackex1.php b/html/includes/jpgraph/src/Examples/barformatcallbackex1.php new file mode 100644 index 0000000000..b1f136feb5 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barformatcallbackex1.php @@ -0,0 +1,30 @@ +SetScale("textlin"); + +// Create a bar plots +$bar1 = new BarPlot($data); + +// Setup the callback function +$bar1->value->SetFormatCallback("cbFmtPercentage"); +$bar1->value->Show(); + +// Add the plot to the graph +$graph->Add($bar1); + +// .. and send the graph back to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex1.php b/html/includes/jpgraph/src/Examples/bargradex1.php new file mode 100644 index 0000000000..eb5e880a7e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex1.php @@ -0,0 +1,47 @@ +img->SetMargin(60,20,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("lightblue"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Bar gradient (Left reflection)"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","#EEEEEE",GRAD_LEFT_REFLECTION); + +// Set color for the frame of each bar +$bplot->SetColor("white"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex2.php b/html/includes/jpgraph/src/Examples/bargradex2.php new file mode 100644 index 0000000000..49831927d6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex2.php @@ -0,0 +1,48 @@ +img->SetMargin(60,20,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,18); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); +$graph->xaxis->SetColor("black","red"); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,11); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex3.php b/html/includes/jpgraph/src/Examples/bargradex3.php new file mode 100644 index 0000000000..e6992ef439 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex3.php @@ -0,0 +1,50 @@ +img->SetMargin(60,20,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,16); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex4.php b/html/includes/jpgraph/src/Examples/bargradex4.php new file mode 100644 index 0000000000..1de0a9dd42 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex4.php @@ -0,0 +1,47 @@ +img->SetMargin(60,30,30,40); +$graph->SetScale("textlin"); +$graph->SetMarginColor("teal"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Bargraph with small variations"); +$graph->title->SetColor("white"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +// Setup color for axis and labels +$graph->xaxis->SetColor("black","white"); +$graph->yaxis->SetColor("black","white"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Setup X-axis title (color & font) +$graph->xaxis->title->Set("X-axis"); +$graph->xaxis->title->SetColor("white"); +$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,10); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$tcol=array(100,100,255); +$fcol=array(255,100,100); +$bplot->SetFillGradient($fcol,$tcol,GRAD_HOR); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex5.php b/html/includes/jpgraph/src/Examples/bargradex5.php new file mode 100644 index 0000000000..8a21307cdb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex5.php @@ -0,0 +1,52 @@ +img->SetMargin(60,30,30,40); +$graph->SetScale("textlin"); +$graph->SetMarginColor("teal"); +$graph->SetShadow(); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// This is how you make the bar graph start from something other than 0 +$bplot->SetYMin(0.302); + +// Setup color for gradient fill style +$tcol=array(100,100,255); +$fcol=array(255,100,100); +$bplot->SetFillGradient($fcol,$tcol,GRAD_VERT); +$bplot->SetFillColor("orange"); +$graph->Add($bplot); + +// Set up the title for the graph +$graph->title->Set("Bargraph which doesn't start from y=0"); +$graph->title->SetColor("yellow"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); + +// Setup color for axis and labels +$graph->xaxis->SetColor("black","white"); +$graph->yaxis->SetColor("black","white"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Setup X-axis title (color & font) +$graph->xaxis->title->Set("X-axis"); +$graph->xaxis->title->SetColor("white"); +$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,10); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradex6.php b/html/includes/jpgraph/src/Examples/bargradex6.php new file mode 100644 index 0000000000..b5556e7df3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradex6.php @@ -0,0 +1,51 @@ +img->SetMargin(60,150,30,50); +$graph->SetScale("textlin"); +$graph->SetMarginColor("silver"); +$graph->SetShadow(); + +// Set up the title for the graph +$graph->title->Set("Example negative bars"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,16); +$graph->title->SetColor("darkred"); + +// Setup font for axis +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10); + +// Show 0 label on Y-axis (default is not to show) +$graph->yscale->ticks->SupressZeroLabel(false); + +// Setup X-axis labels +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetLabelAngle(50); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); +$bplot->SetLegend("Result 1999","blue"); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","steelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex1.php b/html/includes/jpgraph/src/Examples/bargradsmallex1.php new file mode 100644 index 0000000000..10b60beda3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex1.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_MIDVER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex2.php b/html/includes/jpgraph/src/Examples/bargradsmallex2.php new file mode 100644 index 0000000000..5761008681 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex2.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_MIDHOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_MIDHOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex3.php b/html/includes/jpgraph/src/Examples/bargradsmallex3.php new file mode 100644 index 0000000000..c16eaa6ef3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex3.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_HOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_HOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex4.php b/html/includes/jpgraph/src/Examples/bargradsmallex4.php new file mode 100644 index 0000000000..63bf0a70a6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex4.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_VER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_VER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex5.php b/html/includes/jpgraph/src/Examples/bargradsmallex5.php new file mode 100644 index 0000000000..f9f738ba21 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex5.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_WIDE_MIDVER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDVER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex6.php b/html/includes/jpgraph/src/Examples/bargradsmallex6.php new file mode 100644 index 0000000000..b762a87683 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex6.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_WIDE_MIDHOR"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_WIDE_MIDHOR); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex7.php b/html/includes/jpgraph/src/Examples/bargradsmallex7.php new file mode 100644 index 0000000000..cb18edc478 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex7.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_CENTER"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient("navy","lightsteelblue",GRAD_CENTER); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bargradsmallex8.php b/html/includes/jpgraph/src/Examples/bargradsmallex8.php new file mode 100644 index 0000000000..a1a0ea9ba5 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bargradsmallex8.php @@ -0,0 +1,34 @@ +SetScale("textlin"); +$graph->img->SetMargin(25,15,25,25); + +$graph->title->Set('"GRAD_RAISED_PANEL"'); +$graph->title->SetColor('darkred'); + +// Setup font for axis +$graph->xaxis->SetFont(FF_FONT1); +$graph->yaxis->SetFont(FF_FONT1); + +// Create the bar pot +$bplot = new BarPlot($datay); +$bplot->SetWidth(0.6); + +// Setup color for gradient fill style +$bplot->SetFillGradient('navy','orange',GRAD_RAISED_PANEL); + +// Set color for the frame of each bar +$bplot->SetColor("navy"); +$graph->Add($bplot); + +// Finally send the graph to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barimgex1.php b/html/includes/jpgraph/src/Examples/barimgex1.php new file mode 100644 index 0000000000..324adda748 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barimgex1.php @@ -0,0 +1,29 @@ +SetScale("textlin"); + +$graph->title->Set('Images on top of bars'); +$graph->title->SetFont(FF_VERA,FS_BOLD,13); + +$graph->SetTitleBackground('lightblue:1.1',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); + +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); + +$lplot = new LinePlot($datay); +//$lplot->SetColor('white@1'); +$lplot->SetBarCenter(); +$lplot->mark->SetType(MARK_IMG_LBALL,'red'); + +$graph->Add($bplot); +$graph->Add($lplot); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barintex1.php b/html/includes/jpgraph/src/Examples/barintex1.php new file mode 100644 index 0000000000..4c9b273604 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barintex1.php @@ -0,0 +1,48 @@ +img->SetMargin(40,30,30,40); +$graph->SetScale("textint"); +$graph->SetShadow(); +$graph->SetFrame(false); // No border around the graph + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(100); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT2); + +// Setup graph title ands fonts +$graph->title->Set("Example of integer Y-scale"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set("Year 2002"); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); +$bplot->SetShadow(); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +// Black color for positive values and darkred for negative values +$bplot->value->SetColor("black","darkred"); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barintex2.php b/html/includes/jpgraph/src/Examples/barintex2.php new file mode 100644 index 0000000000..acbbaac847 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barintex2.php @@ -0,0 +1,58 @@ +img->SetMargin(40,30,40,40); +$graph->SetScale("textint"); +$graph->SetFrame(true,'blue',1); +$graph->SetColor('lightblue'); +$graph->SetMarginColor('lightblue'); + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +$graph->yaxis->scale->SetGrace(20); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->SetColor('darkblue','black'); + +// Stup "hidden" y-axis by given it the same color +// as the background +$graph->yaxis->SetColor('lightblue','darkblue'); +$graph->ygrid->SetColor('white'); + +// Setup graph title ands fonts +$graph->title->Set('Example of integer Y-scale'); +$graph->subtitle->Set('(With "hidden" y-axis)'); + +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set("Year 2002"); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkblue'); +$bplot->SetColor('darkblue'); +$bplot->SetWidth(0.5); +$bplot->SetShadow('darkgray'); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,8); +$bplot->value->SetFormat('$%d'); +// Black color for positive values and darkred for negative values +$bplot->value->SetColor("black","darkred"); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barline_csimex1.php b/html/includes/jpgraph/src/Examples/barline_csimex1.php new file mode 100644 index 0000000000..895337d971 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barline_csimex1.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->img->SetMargin(40,20,30,40); +$graph->title->Set("CSIM example with bar and line"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup axis titles +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_FILLEDCIRCLE); +$lineplot->mark->SetWidth(5); +$lineplot->mark->SetColor('black'); +$lineplot->mark->SetFillColor('red'); +$lineplot->SetCSIMTargets($targ,$alt); + +// Create line plot +$barplot=new barPlot($ydata2); +$barplot->SetCSIMTargets($targ,$alt); + +// Add the plots to the graph +$graph->Add($lineplot); +$graph->Add($barplot); + +$graph->StrokeCSIM(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/barlinealphaex1.php b/html/includes/jpgraph/src/Examples/barlinealphaex1.php new file mode 100644 index 0000000000..ec995c4c7f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barlinealphaex1.php @@ -0,0 +1,74 @@ +GetShortMonth(); + +// Create the graph. +$graph = new Graph(300,200); +$graph->SetScale("textlin"); +$graph->SetMarginColor('white'); + +// Adjust the margin slightly so that we use the +// entire area (since we don't use a frame) +$graph->SetMargin(30,1,20,5); + +// Box around plotarea +$graph->SetBox(); + +// No frame around the image +$graph->SetFrame(false); + +// Setup the tab title +$graph->tabtitle->Set('Year 2003'); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,10); + +// Setup the X and Y grid +$graph->ygrid->SetFill(true,'#DDDDDD@0.5','#BBBBBB@0.5'); +$graph->ygrid->SetLineStyle('dashed'); +$graph->ygrid->SetColor('gray'); +$graph->xgrid->Show(); +$graph->xgrid->SetLineStyle('dashed'); +$graph->xgrid->SetColor('gray'); + +// Setup month as labels on the X-axis +$graph->xaxis->SetTickLabels($months); +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(45); + +// Create a bar pot +$bplot = new BarPlot($ydata); +$bplot->SetWidth(0.6); +$fcol='#440000'; +$tcol='#FF9090'; + +$bplot->SetFillGradient($fcol,$tcol,GRAD_LEFT_REFLECTION); + +// Set line weigth to 0 so that there are no border +// around each bar +$bplot->SetWeight(0); + +$graph->Add($bplot); + +// Create filled line plot +$lplot = new LinePlot($ydata2); +$lplot->SetFillColor('skyblue@0.5'); +$lplot->SetColor('navy@0.7'); +$lplot->SetBarCenter(); + +$lplot->mark->SetType(MARK_SQUARE); +$lplot->mark->SetColor('blue@0.5'); +$lplot->mark->SetFillColor('lightblue'); +$lplot->mark->SetSize(6); + +$graph->Add($lplot); + +// .. and finally send it back to the browser +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barlinefreq_csimex1.php b/html/includes/jpgraph/src/Examples/barlinefreq_csimex1.php new file mode 100644 index 0000000000..5fec735ae7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barlinefreq_csimex1.php @@ -0,0 +1,100 @@ +CheckCSIMCache('auto'); + +// Setup some basic graph parameters +$graph->SetScale("textlin"); +$graph->SetY2Scale('lin',0,100); +$graph->img->SetMargin(50,70,30,40); +$graph->yaxis->SetTitleMargin(30); +$graph->SetMarginColor('#EEEEEE'); + +// Setup titles and fonts +$graph->title->Set("Frequence plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +$graph->y2axis->SetTickSide(SIDE_RIGHT); +$graph->y2axis->SetColor('black','blue'); +$graph->y2axis->SetLabelFormat('%3d.0%%'); + +// Create a bar pot +$bplot = new BarPlot($data_freq); + +// Create targets and alt texts for the image maps. One for each bar +// (In this example this is just "dummy" targets) +$targ=array("#1","#2","#3","#4","#5","#6","#7"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); + + +// Create accumulative graph +$lplot = new LinePlot($data_accfreq); + +// We want the line plot data point in the middle of the bars +$lplot->SetBarCenter(); + +// Use transperancy +$lplot->SetFillColor('lightblue@0.6'); +$lplot->SetColor('blue@0.6'); +//$lplot->SetColor('blue'); +$graph->AddY2($lplot); + + +// Setup the bars +$bplot->SetFillColor("orange@0.2"); +$bplot->SetValuePos('center'); +$bplot->value->SetFormat("%d"); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->Show(); + +// Add it to the graph +$graph->Add($bplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/barlinefreqex1.php b/html/includes/jpgraph/src/Examples/barlinefreqex1.php new file mode 100644 index 0000000000..210b5bf18e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barlinefreqex1.php @@ -0,0 +1,83 @@ +SetScale("textlin"); +$graph->SetY2Scale('lin',0,100); +$graph->img->SetMargin(50,70,30,40); +$graph->yaxis->SetTitleMargin(30); +$graph->SetMarginColor('#EEEEEE'); + +// Setup titles and fonts +$graph->title->Set("Frequence plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Turn the tickmarks +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +$graph->y2axis->SetTickSide(SIDE_RIGHT); +$graph->y2axis->SetColor('black','blue'); +$graph->y2axis->SetLabelFormat('%3d.0%%'); + +// Create a bar pot +$bplot = new BarPlot($data_freq); + +// Create accumulative graph +$lplot = new LinePlot($data_accfreq); + +// We want the line plot data point in the middle of the bars +$lplot->SetBarCenter(); + +// Use transperancy +$lplot->SetFillColor('lightblue@0.6'); +$lplot->SetColor('blue@0.6'); +$graph->AddY2($lplot); + +// Setup the bars +$bplot->SetFillColor("orange@0.2"); +$bplot->SetValuePos('center'); +$bplot->value->SetFormat("%d"); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->Show(); + +// Add it to the graph +$graph->Add($bplot); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/barpatternex1.php b/html/includes/jpgraph/src/Examples/barpatternex1.php new file mode 100644 index 0000000000..deac421397 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barpatternex1.php @@ -0,0 +1,33 @@ +SetScale("textlin"); + +$graph->SetMarginColor('navy:1.9'); +$graph->SetBox(); + +$graph->title->Set('Bar Pattern'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); + +$graph->SetTitleBackground('lightblue:1.3',TITLEBKG_STYLE2,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'lightblue','blue'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor('darkorange'); +$bplot->SetWidth(0.6); + +$bplot->SetPattern(PATTERN_CROSS1,'navy'); + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/barscalecallbackex1.php b/html/includes/jpgraph/src/Examples/barscalecallbackex1.php new file mode 100644 index 0000000000..2315b47a89 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/barscalecallbackex1.php @@ -0,0 +1,59 @@ +img->SetMargin(80,30,30,40); +$graph->SetScale("textint"); +$graph->SetShadow(); +$graph->SetFrame(false); // No border around the graph + +// Add some grace to the top so that the scale doesn't +// end exactly at the max value. +// Since we are using integer scale the gace gets intervalled +// to adding integer values. +// For example grace 10 to 100 will add 1 to max, 101-200 adds 2 +// and so on... +$graph->yaxis->scale->SetGrace(30); +$graph->yaxis->SetLabelFormatCallback('yScaleCallback'); + +// Setup X-axis labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetFont(FF_FONT2); + +// Setup graph title ands fonts +$graph->title->Set("Example of Y-scale callback formatting"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->Set("Year 2002"); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); +$bplot->SetShadow(); + +// Setup the values that are displayed on top of each bar +$bplot->value->Show(); +// Must use TTF fonts if we want text at an arbitrary angle +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +$bplot->value->SetFormat('$ %0.0f'); +// Black color for positive values and darkred for negative values +$bplot->value->SetColor("black","darkred"); +$graph->Add($bplot); + +// Finally stroke the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/bartutex1.php b/html/includes/jpgraph/src/Examples/bartutex1.php new file mode 100644 index 0000000000..fc7061357c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex1.php @@ -0,0 +1,35 @@ +SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Set title and subtitle +$graph->title->Set("Elementary barplot with a text scale"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex12.php b/html/includes/jpgraph/src/Examples/bartutex12.php new file mode 100644 index 0000000000..41eca7fb96 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex12.php @@ -0,0 +1,90 @@ +SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use text X-scale so we can text labels on the X-axis +$graph->SetScale("textlin"); + +// Y2-axis is linear +$graph->SetY2Scale("lin"); + +// Color the two Y-axis to make them easier to associate +// to the corresponding plot (we keep the axis black though) +$graph->yaxis->SetColor("black","red"); +$graph->y2axis->SetColor("black","orange"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("100 data points, X-Scale: 'text'"); + +// Use built in font (don't need TTF support) +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger then default +$graph->img->SetMargin(40,140,40,80); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.03,0.5,"right","center"); + +// Display every 6:th tickmark +$graph->xaxis->SetTextTickInterval(6); + +// Label every 2:nd tick mark +$graph->xaxis->SetTextLabelInterval(2); + +// Setup the labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetLabelAngle(90); + +// Create a red line plot +$p1 = new LinePlot($datay); +$p1->SetColor("red"); +$p1->SetLegend("Pressure"); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetFillColor("orange"); +$b1->SetAbsWidth(8); + +// Drop shadow on bars adjust the default values a little bit +$b1->SetShadow("steelblue",2,2); + +// The order the plots are added determines who's ontop +$graph->Add($p1); +$graph->AddY2($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex2.php b/html/includes/jpgraph/src/Examples/bartutex2.php new file mode 100644 index 0000000000..4072d98712 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex2.php @@ -0,0 +1,40 @@ +GetShortMonth(); + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($months); + +// Set title and subtitle +$graph->title->Set("Textscale with specified labels"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); + +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex3.php b/html/includes/jpgraph/src/Examples/bartutex3.php new file mode 100644 index 0000000000..4ab88a011c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex3.php @@ -0,0 +1,44 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 3"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex4.php b/html/includes/jpgraph/src/Examples/bartutex4.php new file mode 100644 index 0000000000..65a4a329b2 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex4.php @@ -0,0 +1,47 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +//$databarx = array('tXi','','','xxx','','','iXii','','','OOO','','','tOO'); +$graph->xaxis->SetFont(FF_FONT1,FS_NORMAL); +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(3); + +// Set title and subtitle +$graph->title->Set("Displaying only every third label"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +//$b1->SetAbsWidth(6); +//$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex5.php b/html/includes/jpgraph/src/Examples/bartutex5.php new file mode 100644 index 0000000000..93a092e3a7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex5.php @@ -0,0 +1,45 @@ +GetShortMonth(); + +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(1); +$graph->xaxis->SetTextTickInterval(3); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 5"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetWidth(0.4); + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bartutex6.php b/html/includes/jpgraph/src/Examples/bartutex6.php new file mode 100644 index 0000000000..375fd70e55 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bartutex6.php @@ -0,0 +1,47 @@ +GetShortMonth(); +srand ((double) microtime() * 1000000); +for( $i=0; $i<25; ++$i) { + $databary[]=rand(1,50); + $databarx[]=$months[$i%12]; +} + +// New graph with a drop shadow +$graph = new Graph(300,200,'auto'); +$graph->SetShadow(); + +// Use a "text" X-scale +$graph->SetScale("textlin"); + +// Specify X-labels +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetTextLabelInterval(3); + +// Hide the tick marks +$graph->xaxis->HideTicks(); + +// Set title and subtitle +$graph->title->Set("Bar tutorial example 6"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetWidth(0.4); + + +// The order the plots are added determines who's ontop +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/bezierex1.php b/html/includes/jpgraph/src/Examples/bezierex1.php new file mode 100644 index 0000000000..ba1af08486 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bezierex1.php @@ -0,0 +1,54 @@ +Get(50); + +// Create the graph +$g = new Graph(300,200); +$g->SetMargin(30,20,40,30); +$g->title->Set("Bezier interpolation"); +$g->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$g->subtitle->Set('(Control points shown in red)'); +$g->subtitle->SetColor('darkred'); +$g->SetMarginColor('lightblue'); + +//$g->img->SetAntiAliasing(); + +// We need a linlin scale since we provide both +// x and y coordinates for the data points. +$g->SetScale('linlin'); + +// We want 1 decimal for the X-label +$g->xaxis->SetLabelFormat('%1.1f'); + +// We use a scatterplot to illustrate the original +// contro points. +$bplot = new ScatterPlot($ydata,$xdata); +$bplot->mark->SetFillColor('red@0.3'); +$bplot->mark->SetColor('red@0.5'); + +// And a line plot to stroke the smooth curve we got +// from the original control points +$lplot = new LinePlot($newy,$newx); +$lplot->SetColor('navy'); + +// Add the plots to the graph and stroke +$g->Add($lplot); +$g->Add($bplot); +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/bkgimgflagex1.php b/html/includes/jpgraph/src/Examples/bkgimgflagex1.php new file mode 100644 index 0000000000..26aec98d3c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bkgimgflagex1.php @@ -0,0 +1,81 @@ +SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/bkgimgflagex2.php b/html/includes/jpgraph/src/Examples/bkgimgflagex2.php new file mode 100644 index 0000000000..d2e05ec7cd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bkgimgflagex2.php @@ -0,0 +1,83 @@ +SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_UP,100,180); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/bkgimgflagex3.php b/html/includes/jpgraph/src/Examples/bkgimgflagex3.php new file mode 100644 index 0000000000..0ab9480000 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bkgimgflagex3.php @@ -0,0 +1,83 @@ +SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_DOWN,100,180); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/bkgimgflagex4.php b/html/includes/jpgraph/src/Examples/bkgimgflagex4.php new file mode 100644 index 0000000000..48f606ea12 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/bkgimgflagex4.php @@ -0,0 +1,83 @@ +SetScale("textlin"); +$graph->SetMargin(40,20,20,40); +$graph->SetMarginColor('white:0.9'); +$graph->SetColor('white'); +$graph->SetShadow(); + +// Apply a perspective transformation at the end +$graph->Set3DPerspective(SKEW3D_LEFT,350,320,true); + +// Adjust the position of the legend box +$graph->legend->Pos(0.03,0.10); + +// Adjust the color for theshadow of the legend +$graph->legend->SetShadow('darkgray@0.5'); +$graph->legend->SetFillColor('lightblue@0.1'); +$graph->legend->Hide(); + +// Get localised version of the month names +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->SetBackgroundCountryFlag('mais',BGIMG_COPY,50); + +// Set axis titles and fonts +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetColor('white'); + +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('navy'); + +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('navy'); + +//$graph->ygrid->Show(false); +$graph->ygrid->SetColor('white@0.5'); + +// Setup graph title +$graph->title->Set('Using a country flag background'); + +// Some extra margin (from the top) +$graph->title->SetMargin(3); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Create the three var series we will combine +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +// Setup the colors with 40% transparency (alpha channel) +$bplot1->SetFillColor('yellow@0.4'); +$bplot2->SetFillColor('red@0.4'); +$bplot3->SetFillColor('darkgreen@0.4'); + +// Setup legends +$bplot1->SetLegend('Label 1'); +$bplot2->SetLegend('Label 2'); +$bplot3->SetLegend('Label 3'); + +// Setup each bar with a shadow of 50% transparency +$bplot1->SetShadow('black@0.4'); +$bplot2->SetShadow('black@0.4'); +$bplot3->SetShadow('black@0.4'); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/blueblack400x300grad.png b/html/includes/jpgraph/src/Examples/blueblack400x300grad.png new file mode 100644 index 0000000000000000000000000000000000000000..8852862a747ba6df7a8e68c546535f0659ee714f GIT binary patch literal 1165 zcmXYxdrXaS7{@;(Sqimkh3=8)qP13Y7Sm;&Ln_@4p-qaT!cC}3uoXY)Iv2>LIoJ091cM-?1#Ou z2MQn$c0n%egdLCtnUDeLkOrG!6KsT3SPw~%06K_=ScryI5CtnB62c)2mO~IMgC(#S ze8C$$U?I4H3pjxT%mq8JtkDLnVS1k9#51sR)5We%-Fwmwkp-<9&qAZ=R$jhafF_@EJ44^#6<5a$ZD)hm^D5UEeSWc1jNYQ2P^yop zHKM*%s<)^?0cCBjj`zQ5L;c#TPH#y%;vHJn_I+lGogvgOGonVXt?&+QG6))=)LKzX zMa>qqQPmz3by#A4sFwUCrb%K3)=7+qpd$)33OXTZSJhNZ;eq4sngcQaCpCMCOS!m2 zC5VfIxERHyutHoui%Xp}VD=OAnnG0rZh~&tO-+B^cWNi*K&c&4wQ48UQX8UT)J|SX zOq#6Iyj0L0L7Nk$LwiAU6na!T>=*QdLW2bz(e~Z7ihPh^lbbapZ8fU~ti;7rT*eNI zONY3uR4xJHGF#MORjYO~q}1xE&5o&ia!S-Ea!<_R;*cXF6s?sJG!p(%&VKBmgc}9j zr_eA#w+cG3M$iaBTNGL%=mkOl`fTf%V|rET{`As>IuuW-pH#ietr+!OG_NSmzbpTZ PSetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Setup URL target for image map +$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5')); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +//$p1->SetCenter(); +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/boxstockex1.php b/html/includes/jpgraph/src/Examples/boxstockex1.php new file mode 100644 index 0000000000..e85eed7372 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/boxstockex1.php @@ -0,0 +1,33 @@ +SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/boxstockex2.php b/html/includes/jpgraph/src/Examples/boxstockex2.php new file mode 100644 index 0000000000..c9330e708d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/boxstockex2.php @@ -0,0 +1,38 @@ +SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Box Stock chart example'); +$graph->subtitle->Set('(Indented X-axis)'); + +// Create a new stock plot +$p1 = new BoxPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Indent bars so they dont start and end at the edge of the +// plot area +$p1->SetCenter(); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/builtinplotmarksex1.php b/html/includes/jpgraph/src/Examples/builtinplotmarksex1.php new file mode 100644 index 0000000000..28775c44c2 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/builtinplotmarksex1.php @@ -0,0 +1,65 @@ +SetMargin(30,20,60,20); +$graph->SetMarginColor('white'); +$graph->SetScale("linlin"); + +// Hide the frame around the graph +$graph->SetFrame(false); + +// Setup title +$graph->title->Set("Using Builtin PlotMarks"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +// Note: requires jpgraph 1.12p or higher +// $graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT); +$graph->tabtitle->Set('Region 1' ); +$graph->tabtitle->SetWidth(TABTITLE_WIDTHFULL); + +// Enable X and Y Grid +$graph->xgrid->Show(); +$graph->xgrid->SetColor('gray@0.5'); +$graph->ygrid->SetColor('gray@0.5'); + +// Format the legend box +$graph->legend->SetColor('navy'); +$graph->legend->SetFillColor('lightgreen'); +$graph->legend->SetLineWeight(1); +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8); +$graph->legend->SetShadow('gray@0.4',3); +$graph->legend->SetAbsPos(15,120,'right','bottom'); + +// Create the line plots + +$p1 = new LinePlot($datay1); +$p1->SetColor("red"); +$p1->SetFillColor("yellow@0.5"); +$p1->SetWeight(2); +$p1->mark->SetType(MARK_IMG_DIAMOND,5,0.6); +$p1->SetLegend('2006'); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$p2->SetColor("darkgreen"); +$p2->SetWeight(2); +$p2->SetLegend('2001'); +$p2->mark->SetType(MARK_IMG_MBALL,'red'); +$graph->Add($p2); + +// Add a vertical line at the end scale position '7' +$l1 = new PlotLine(VERTICAL,7); +$graph->Add($l1); + +// Output the graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/canvas_jpgarchex.php b/html/includes/jpgraph/src/Examples/canvas_jpgarchex.php new file mode 100644 index 0000000000..fcf8121c4d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvas_jpgarchex.php @@ -0,0 +1,143 @@ +SetMargin(2,3,2,3); +$g->SetMarginColor("teal"); +$g->InitFrame(); + +// ... and a scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// ... we need shape since we want the indented rectangle +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + +// ... basic parameters for the overall image +$l = 2; // Left margin +$r = 18; // Row number to start the lowest line on +$width = 16; // Total width + +// Setup the two basic rectangle text object we will use +$tt = new CanvasRectangleText(); +$tt->SetFont(FF_ARIAL,FS_NORMAL,14); +$tt->SetFillColor(''); +$tt->SetColor(''); +$tt->SetFontColor('navy'); + +$t = new CanvasRectangleText(); +$t->SetFont(FF_ARIAL,FS_NORMAL,14); +$t->SetFillColor('goldenrod1'); +$t->SetFontColor('navy'); + + +// Now start drawing the arch overview from the bottom and up +// This is all pretty manual and one day I will write a proper +// framework to make it easy to construct these types of architecture +// overviews. But for now, just plain old coordinates.. + +// Line: GD Library and image libraries +$h=3; +$s = 3; $d=$l + $width-9; +$t->SetFillColor('cadetblue3'); +$t->Set("TTF",$d,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$t->Set("PNG",$d+$s,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$t->Set("JPEG",$d+2*$s,$r+2,$s,1); +$t->Stroke($g->img,$scale); +$shape->IndentedRectangle($l,$r,$width,$h,$s*3,1,2,'lightgreen'); +$tt->Set("GD Basic library\n(1.8.x or 2.x)",$l,$r,$width,$h-1); +$tt->Stroke($g->img,$scale); + + +// Area: Basic internal JpGraph architecture +$t->SetFillColor('goldenrod1'); +$h = 2; +$r -= $h; $d=8; +$t->Set("Image primitives\n(RGB, Anti-aliasing,\nGD Abstraction)",$l,$r-0.5,$width*0.5,$h+0.5); +$t->Stroke($g->img,$scale); +$t->Set("Image Cache &\nStreaming",$l+0.5*$width,$r,$width*0.4,$h); +$t->Stroke($g->img,$scale); + +$r -= $h; $d=8; +$t->Set("2D Rot & Transformation",$l,$r,$width*0.5,$h-0.5); $t->Stroke($g->img,$scale); + + +$r -= 2; $h = 4; +$shape->IndentedRectangle($l,$r,$width*0.9,$h,$d,2,3,'goldenrod1'); +$tt->Set("Axis, Labelling, (Auto)-Scaling",$l,$r,$width*0.9,$h-2); $tt->Stroke($g->img,$scale); + +$r -= 1; +$shape->IndentedRectangle($l,$r,$width,7,$width*0.9,6,3,'goldenrod1'); +$tt->Set("Error handling & Utility classes",$l,$r,$width,1); $tt->Stroke($g->img,$scale); + + +// Area: Top area with graph components +$t->SetFillColor('gold1'); +$r -= 3; +$w = $width*0.55/4; $h = 2; +$t->Set("Gantt\nGraph",$l,$r,$w,$h); +$t->Stroke($g->img,$scale); + +$t->Set("Pie\nGraph",$l+$w,$r,$w,$h); +$t->Stroke($g->img,$scale); +$t->Set("Radar\nGraph",$l+$w*2,$r,$w,$h); +$t->Stroke($g->img,$scale); + +$shape->IndentedRectangle($l,$r,$width,3,4*$w,2,0,'gold1'); +$tt->Set("Base Graph\n(Orthogonal\ncoordinate system)",$l+4*$w,$r,$width-$w*4,3); +$tt->Stroke($g->img,$scale); + +$r -= 2; +$d = 0.7; +$shape->IndentedRectangle($l+3*$w,$r,$w,4, $w*$d,2,0,'gold1'); +$t->Set("Canv\nUtil",$l+3*$w,$r,$w*$d,$h); $t->Stroke($g->img,$scale); +$tt->Set("Canvas\nGraph",$l+3*$w,$r+2,$w,2); $tt->Stroke($g->img,$scale); + +// Top line of plotting plugins +$t->SetFillColor('cyan'); +$t->Set("Gantt\nPlot",$l,$r,$w,$h); $t->Stroke($g->img,$scale); +$t->Set("2D\nPlot",$l+$w,$r,$w/2,$h); $t->Stroke($g->img,$scale); +$t->Set("3D\nPlot",$l+$w+$w/2,$r,$w/2,$h);$t->Stroke($g->img,$scale); +$t->Set("Radar\nPlot",$l+2*$w,$r,$w,$h); $t->Stroke($g->img,$scale); + +$wp = ($width - 4*$w)/4; +$t->Set("Error\nPlot",$l+4*$w,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Line\nPlot",$l+4*$w+$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Bar\nPlot",$l+4*$w+2*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); +$t->Set("Scatter\nPlot",$l+4*$w+3*$wp,$r,$wp,$h); $t->Stroke($g->img,$scale); + +// Show application top +$r -= 2.5; $h=2; +$t->SetFillColor('blue'); +$t->SetFontColor('white'); +$t->SetFont(FF_ARIAL,FS_BOLD,20); +$t->Set("PHP Application",$l,$r,$width,$h); $t->Stroke($g->img,$scale); + +// Stroke title +$r = 0.5; +$tt->SetFontColor('black'); +$tt->SetFont(FF_TIMES,FS_BOLD,28); +$tt->Set("JpGraph Architecture Overview",$l,$r,$width,1); +$tt->Stroke($g->img,$scale); + +// Stroke footer +$tt->SetFont(FF_VERDANA,FS_NORMAL,10); +$tt->Set("Generated: ".date("ymd H:m",time()),0.1,$ymax*0.95); +$tt->Stroke($g->img,$scale); + +// .. and stream it all back +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasbezierex1.php b/html/includes/jpgraph/src/Examples/canvasbezierex1.php new file mode 100644 index 0000000000..e87977dd97 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasbezierex1.php @@ -0,0 +1,40 @@ +title->Set('Bezier line with control points'); + +// Setup control point for bezier +$p = array(3,6, + 6,9, + 5,3, + 7,4); + +// Visualize control points +$shape->SetColor('blue'); +$shape->Line($p[0],$p[1],$p[2],$p[3]); +$shape->FilledCircle($p[2],$p[3],-6); + +$shape->SetColor('red'); +$shape->Line($p[4],$p[5],$p[6],$p[7]); +$shape->FilledCircle($p[4],$p[5],-6); + +// Draw bezier +$shape->SetColor('black'); +$shape->Bezier($p); + +// Frame it with a square +$shape->SetColor('navy'); +$shape->Rectangle(0.5,2,9.5,9.5); + +// ... and stroke it +$g->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex01.php b/html/includes/jpgraph/src/Examples/canvasex01.php new file mode 100644 index 0000000000..8a95c190ee --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex01.php @@ -0,0 +1,37 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Draw a text box in the middle +$txt="This\nis\na TEXT!!!"; +$t = new Text($txt,200,10); +$t->SetFont(FF_ARIAL,FS_BOLD,40); + +// How should the text box interpret the coordinates? +$t->Align('center','top'); + +// How should the paragraph be aligned? +$t->ParagraphAlign('center'); + +// Add a box around the text, white fill, black border and gray shadow +$t->SetBox("white","black","gray"); + +// Stroke the text +$t->Stroke($g->img); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex02.php b/html/includes/jpgraph/src/Examples/canvasex02.php new file mode 100644 index 0000000000..f1ef91b58e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex02.php @@ -0,0 +1,42 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Add a black line +$g->img->SetColor('black'); +$g->img->Line(0,0,100,100); + +// .. and a circle (x,y,diameter) +$g->img->Circle(100,100,50); + +// .. and a filled circle (x,y,diameter) +$g->img->SetColor('red'); +$g->img->FilledCircle(200,100,50); + +// .. add a rectangle +$g->img->SetColor('green'); +$g->img->FilledRectangle(10,10,50,50); + +// .. add a filled rounded rectangle +$g->img->SetColor('green'); +$g->img->FilledRoundedRectangle(300,30,350,80,10); +// .. with a darker border +$g->img->SetColor('darkgreen'); +$g->img->RoundedRectangle(300,30,350,80,10); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex03.php b/html/includes/jpgraph/src/Examples/canvasex03.php new file mode 100644 index 0000000000..5c0971c5a1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex03.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex04.php b/html/includes/jpgraph/src/Examples/canvasex04.php new file mode 100644 index 0000000000..3a3c295d38 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex04.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex05.php b/html/includes/jpgraph/src/Examples/canvasex05.php new file mode 100644 index 0000000000..ee45eaabf1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex05.php @@ -0,0 +1,58 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + + +// Add a black line +$shape->SetColor('black'); +$shape->Line(0,0,20,20); + +// .. and a circle (x,y,diameter) +$shape->Circle(5,14,2); + +// .. and a filled circle (x,y,diameter) +$shape->SetColor('red'); +$shape->FilledCircle(11,8,3); + +// .. add a rectangle +$shape->SetColor('green'); +$shape->FilledRectangle(15,8,19,14); + +// .. add a filled rounded rectangle +$shape->SetColor('green'); +$shape->FilledRoundedRectangle(2,3,8,6); +// .. with a darker border +$shape->SetColor('darkgreen'); +$shape->RoundedRectangle(2,3,8,6); + + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvasex06.php b/html/includes/jpgraph/src/Examples/canvasex06.php new file mode 100644 index 0000000000..1af4b6d861 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvasex06.php @@ -0,0 +1,42 @@ +SetMargin(5,11,6,11); +$g->SetShadow(); +$g->SetMarginColor("teal"); + +// We need to stroke the plotarea and margin before we add the +// text since we otherwise would overwrite the text. +$g->InitFrame(); + +// Create a new scale +$scale = new CanvasScale($g); +$scale->Set(0,$xmax,0,$ymax); + +// The shape class is wrapper around the Imgae class which translates +// the coordinates for us +$shape = new Shape($g,$scale); +$shape->SetColor('black'); + +$shape->IndentedRectangle(1,2,15,15,8,8,CORNER_TOPLEFT,'khaki'); + +$shape->IndentedRectangle(1,20,15,15,8,8,CORNER_BOTTOMLEFT,'khaki'); + +$shape->IndentedRectangle(20,2,15,15,8,8,CORNER_TOPRIGHT,'khaki'); + +$shape->IndentedRectangle(20,20,15,15,8,8,CORNER_BOTTOMRIGHT,'khaki'); + +// Stroke the graph +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/canvaspiralex1.php b/html/includes/jpgraph/src/Examples/canvaspiralex1.php new file mode 100644 index 0000000000..ca60610556 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/canvaspiralex1.php @@ -0,0 +1,78 @@ +SetColor($color1); + $img->Line($x,$y,$x+$s1*$w,$y); + } + else { + $x = $x + $s2*$w*$r; + $w = (1-$r)*$w; + $h = $h / (1-$r) * $r; + $s2 *= -1; + $img->SetColor($color1); + $img->Line($x,$y,$x,$y-$s2*$h); + } + $img->SetColor($color2); + $img->FilledRectangle($x-1,$y-1,$x+1,$y+1); + $img->Arc($x,$y,2*$w+1,2*$h+1,$sa,$ea); + $img->Arc($x,$y,2*$w,2*$h,$sa,$ea); + $img->Arc($x,$y,2*$w-1,2*$h-1,$sa,$ea); + $img->Line($x_old,$y_old,$x,$y); + $x_old=$x; $y_old=$y; + } +} + +$g = new CanvasGraph($w,$h); +//$gr = 1.61803398874989484820; + +$p = SeaShell($g->img,0,20,$w-1,$h-21,$r,19); +$g->img->SetColor('black'); +$g->img->Rectangle(0,20,$w-1,$h-1); +$g->img->SetFont(FF_FONT2,FS_BOLD); +$g->img->SetTextAlign('center','top'); +$g->img->StrokeText($w/2,0,"Canvas Spiral"); + +$g->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/centeredlineex01.php b/html/includes/jpgraph/src/Examples/centeredlineex01.php new file mode 100644 index 0000000000..0ba4556589 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/centeredlineex01.php @@ -0,0 +1,35 @@ +img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of line centered plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + + +// Use 20% "grace" to get slightly larger scale then min/max of +// data +$graph->yscale->SetGrace(20); + + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/centeredlineex02.php b/html/includes/jpgraph/src/Examples/centeredlineex02.php new file mode 100644 index 0000000000..be4763e2eb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/centeredlineex02.php @@ -0,0 +1,30 @@ +img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line centered plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("green"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/centeredlineex03.php b/html/includes/jpgraph/src/Examples/centeredlineex03.php new file mode 100644 index 0000000000..2ed6cfb368 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/centeredlineex03.php @@ -0,0 +1,31 @@ +img->SetMargin(40,40,40,80); +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example slanted X-labels"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); + +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,11); +$graph->xaxis->SetTickLabels($labels); +$graph->xaxis->SetLabelAngle(45); + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/centerlinebarex1.php b/html/includes/jpgraph/src/Examples/centerlinebarex1.php new file mode 100644 index 0000000000..e9b8393ffd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/centerlinebarex1.php @@ -0,0 +1,35 @@ +img->SetMargin(40,80,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->Set('Center the line points in bars'); + +$line = new LinePlot($ydata); +$line->SetBarCenter(); +$line->SetWeight(2); + +$bar = new BarPlot($ydata); +$bar2 = new BarPlot($ydata); +$bar2->SetFillColor("red"); + +$gbar = new GroupbarPlot(array($bar,$bar2)); + +$graph->Add($gbar); +$graph->Add($line); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/combgraphex1.php b/html/includes/jpgraph/src/Examples/combgraphex1.php new file mode 100644 index 0000000000..b59ac32828 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/combgraphex1.php @@ -0,0 +1,89 @@ +getTicks($datax,DSUTILS_MONTH1); + +// Now create the real graph +// Combine a line and a bar graph + +// We add some grace to the end of the X-axis scale so that the first and last +// data point isn't exactly at the very end or beginning of the scale +$grace = 400000; +$xmin = $datax[0]-$grace; +$xmax = $datax[$n-1]+$grace;; + +// Overall width of graphs +$w = 450; +// Left and right margin for each graph +$lm=25; $rm=15; + +//---------------------- +// Setup the line graph +//---------------------- +$graph = new Graph($w,250); +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->SetMargin($lm,$rm,10,30); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); +$graph->SetBox(true); +$graph->title->Set('Example of combined graph'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph->xaxis->SetLabelFormatString('My',true); +$graph->xgrid->Show(); +$p1 = new LinePlot($datay,$datax); +$graph->Add($p1); + +//---------------------- +// Setup the bar graph +//---------------------- +$graph2 = new Graph($w,110); +$graph2->SetScale('linlin',0,0,$xmin,$xmax); +$graph2->SetMargin($lm,$rm,5,10); +$graph2->SetMarginColor('white'); +$graph2->SetFrame(false); +$graph2->SetBox(true); +$graph2->xgrid->Show(); +$graph2->xaxis->SetTickPositions($tickPositions,$minTickPositions); +$graph2->xaxis->SetLabelFormatString('My',true); +$graph2->xaxis->SetPos('max'); +$graph2->xaxis->HideLabels(); +$graph2->xaxis->SetTickSide(SIDE_DOWN); +$b1 = new BarPlot($datay2,$datax); +$b1->SetFillColor('teal'); +$b1->SetColor('teal:1.2'); +$graph2->Add($b1); + +//----------------------- +// Create a multigraph +//---------------------- +$mgraph = new MGraph(); +$mgraph->SetMargin(2,2,2,2); +$mgraph->SetFrame(true,'darkgray',2); +$mgraph->Add($graph); +$mgraph->Add($graph2,0,240); +$mgraph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/dateaxisex1.php b/html/includes/jpgraph/src/Examples/dateaxisex1.php new file mode 100644 index 0000000000..e39143260e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dateaxisex1.php @@ -0,0 +1,55 @@ +SetMargin(40,40,30,70); +$graph->title->Set('Date: '.date('Y-m-d',$now)); +$graph->SetAlphaBlending(); + +// Setup a manual x-scale (We leave the sentinels for the +// Y-axis at 0 which will then autoscale the Y-axis.) +// We could also use autoscaling for the x-axis but then it +// probably will start a little bit earlier than the first value +// to make the first value an even number as it sees the timestamp +// as an normal integer value. +$graph->SetScale("intlin",0,200,$now,$datax[$n-1]); + +// Setup the x-axis with a format callback to convert the timestamp +// to a user readable time +$graph->xaxis->SetLabelFormatCallback('TimeCallback'); +$graph->xaxis->SetLabelAngle(90); + +// Create the line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor("blue"); + +// Set the fill color partly transparent +$p1->SetFillColor("blue@0.4"); + +// Add lineplot to the graph +$graph->Add($p1); + +// Output line +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/dateaxisex2.php b/html/includes/jpgraph/src/Examples/dateaxisex2.php new file mode 100644 index 0000000000..c9935a7305 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dateaxisex2.php @@ -0,0 +1,38 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/dateaxisex3.php b/html/includes/jpgraph/src/Examples/dateaxisex3.php new file mode 100644 index 0000000000..4fa810ca02 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dateaxisex3.php @@ -0,0 +1,48 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +// It is possible to adjust the density for the X-axis as well +// The following call makes the dates a little more sparse +// $graph->SetTickDensity(TICKD_NORMAL,TICKD_SPARSE); + +// The automatic format string for dates can be overridden +// $graph->xaxis->scale->SetDateFormat('h:i'); + +// Adjust the start/end to a specific alignment +$graph->xaxis->scale->SetTimeAlign(MINADJ_15); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/dateaxisex4.php b/html/includes/jpgraph/src/Examples/dateaxisex4.php new file mode 100644 index 0000000000..9d7dd6657e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dateaxisex4.php @@ -0,0 +1,44 @@ +SetMargin(40,40,30,130); + +// Fix the Y-scale to go between [0,100] and use date for the x-axis +$graph->SetScale('datlin',0,100); +$graph->title->Set("Example on Date scale"); + +// Set the angle for the labels to 90 degrees +$graph->xaxis->SetLabelAngle(90); + +// The automatic format string for dates can be overridden +$graph->xaxis->scale->SetDateFormat('H:i'); + +// Adjust the start/end to a specific alignment +$graph->xaxis->scale->SetTimeAlign(MINADJ_10); + +$line = new LinePlot($data,$xdata); +$line->SetLegend('Year 2005'); +$line->SetFillColor('lightblue@0.5'); +$graph->Add($line); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/dbschemaex1.php b/html/includes/jpgraph/src/Examples/dbschemaex1.php new file mode 100644 index 0000000000..34451d506b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dbschemaex1.php @@ -0,0 +1,117 @@ +' + return str_replace('JpGraph','', $aName); +} + +// Global callback to format each field name in the table +function FormatFldName($aName,$aTable) { + return $aName; +} + + +class Driver { + + var $ig, $img, $iscale, $ishape; + var $iymax,$ixmax; + var $iwidth,$iheight; + + function Driver() { + + // Define Image size and coordinate grid space to work within + $this->iwidth = 600; + $this->iheight= 750; + $this->iymax = 50; + $this->ixmax = 55; + + // Setup a basic canvas + $this->ig = new CanvasGraph($this->iwidth,$this->iheight,'auto'); + $this->img = $this->ig->img; + + // Define the scale to be used + $this->iscale = new CanvasScale($this->ig); + $this->iscale->Set(0,$this->ixmax,0,$this->iymax); + $this->ishape = new Shape($this->ig,$this->iscale); + + // A small frame around the canvas + $this->ig->SetMargin(2,3,2,3); + $this->ig->SetMarginColor("teal"); + $this->ig->InitFrame(); + + } + + function Run() { + + $leftm=1.5; // Left margin (for table schemes) + $topm=5; // Top margin (for table schemes) + $tblwidth=15; // Individual table width + $tlo=1; // Offset for top line + + // Add the background color for the project specific tables + $this->ishape->IndentedRectangle($leftm,$topm-1,3*$tblwidth+$tlo+6,45, + $tlo+2*$tblwidth+2,30,CORNER_BOTTOMLEFT, + 'lightblue'); + + // Stroke the tables (series of x,y offsets, If =-1 then use the + // automtic positioning + $tblposadj=array($tlo,0,$tblwidth+$tlo+2,0,2*$tblwidth+$tlo+4, + 0,-1,16,-1,16); + $dbschema = new ImgDBSchema('jpgraph_doc','FormatTblName','FormatFldName'); + $dbschema->SetMargin($leftm,$topm); + $dbschema->SetTableWidth($tblwidth); + $dbschema->Stroke($this->img,$this->iscale,$tblposadj); + + $tt = new CanvasRectangleText(); + $tt->SetFillColor(''); + $tt->SetColor(''); + $tt->SetFontColor('navy'); + + // Add explanation + $tt->SetFont(FF_ARIAL,FS_NORMAL,12); + $tt->Set('Project specific tables',$tblwidth+$leftm+3,16,15); + $tt->Stroke($this->img,$this->iscale); + + // Add title + $tt->SetColor(''); + $tt->SetFont(FF_VERDANA,FS_BOLD,26); + $tt->Set('DDDA - DB Schema',9,0.5,30); + $tt->Stroke($this->img,$this->iscale); + + // Add a version and date + $tt->SetFillColor('yellow'); + $tt->SetFont(FF_FONT1,FS_NORMAL,10); + $tt->Set("Generated: ".date("ymd H:i",time()),1,$this->iymax*0.96,15); + $tt->Stroke($this->img,$this->iscale); + + $this->ig->Stroke(); + } +} + +$driver = new Driver(); +$driver->Run(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/dupyaxisex1.php b/html/includes/jpgraph/src/Examples/dupyaxisex1.php new file mode 100644 index 0000000000..0f8fb5b589 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/dupyaxisex1.php @@ -0,0 +1,31 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(300,200,"auto"); +$graph->SetScale("linlin"); +$graph->SetMargin(50,50,20,30); +$graph->SetFrame(false); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); + +$graph->title->Set('Duplicating Y-axis'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->SetAxisStyle(AXSTYLE_YBOXIN); +$graph->xgrid->Show(); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor("blue"); +$lp1->SetWeight(2); +$graph->Add($lp1); + +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/example0.php b/html/includes/jpgraph/src/Examples/example0.php new file mode 100644 index 0000000000..9ccff2be03 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example0.php @@ -0,0 +1,21 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example1.1.php b/html/includes/jpgraph/src/Examples/example1.1.php new file mode 100644 index 0000000000..3e8755343b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example1.1.php @@ -0,0 +1,25 @@ +SetScale("textlin"); +$graph->img->SetMargin(30,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Example 1.1 same y-values"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); +$lineplot->SetWeight(5); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example1.2.php b/html/includes/jpgraph/src/Examples/example1.2.php new file mode 100644 index 0000000000..36e605466a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example1.2.php @@ -0,0 +1,29 @@ +SetScale("textlin"); +$graph->img->SetMargin(30,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Dashed lineplot"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); + +// Style can also be specified as SetStyle([1|2|3|4]) or +// SetStyle("solid"|"dotted"|"dashed"|"lobgdashed") +$lineplot->SetStyle("dashed"); + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example1.php b/html/includes/jpgraph/src/Examples/example1.php new file mode 100644 index 0000000000..14921c4ca6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example1.php @@ -0,0 +1,25 @@ +SetScale("textlin"); +$graph->img->SetMargin(50,90,40,50); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->title->Set("Examples for graph"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetLegend("Test 1"); +$lineplot->SetColor("blue"); + + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example10.php b/html/includes/jpgraph/src/Examples/example10.php new file mode 100644 index 0000000000..f870cd0625 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example10.php @@ -0,0 +1,59 @@ +img->SetMargin(40,110,20,40); +$graph->SetScale("textlog"); +$graph->SetY2Scale("log"); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +$graph->yaxis->scale->ticks->SupressFirst(); +$graph->y2axis->scale->ticks->SupressFirst(); +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 10"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example11.php b/html/includes/jpgraph/src/Examples/example11.php new file mode 100644 index 0000000000..fa9c0182ae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example11.php @@ -0,0 +1,44 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot2=new LinePlot($ydata2); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->Add($lineplot2); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Timing a graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("red"); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example13.php b/html/includes/jpgraph/src/Examples/example13.php new file mode 100644 index 0000000000..0ea9ede730 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example13.php @@ -0,0 +1,36 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the error plot +$errplot=new ErrorPlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Simple error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example14.php b/html/includes/jpgraph/src/Examples/example14.php new file mode 100644 index 0000000000..98f1c71a45 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example14.php @@ -0,0 +1,37 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the error plot +$errplot=new ErrorPlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Simple error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example15.php b/html/includes/jpgraph/src/Examples/example15.php new file mode 100644 index 0000000000..5d93eeec4b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example15.php @@ -0,0 +1,40 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the linear plot +$errplot=new ErrorLinePlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); +$errplot->line->SetWeight(2); +$errplot->line->SetColor("blue"); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Linear error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + + +// Display the graph +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/example16.1.php b/html/includes/jpgraph/src/Examples/example16.1.php new file mode 100644 index 0000000000..a6c315ab05 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.1.php @@ -0,0 +1,46 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$l2plot = new LinePlot($l2datay); +$l2plot->SetFillColor("orange"); +$l2plot->SetLegend("Result"); + +// Add the plots to the graph +$graph->Add($l2plot); +$graph->Add($l1plot); + +$graph->title->Set("Mixing line and filled line"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +//$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example16.2.php b/html/includes/jpgraph/src/Examples/example16.2.php new file mode 100644 index 0000000000..bae6e2f6b3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.2.php @@ -0,0 +1,46 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($l1plot); +$graph->Add($bplot); + + +$graph->title->Set("Adding a line plot to a bar graph v1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +//$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example16.3.php b/html/includes/jpgraph/src/Examples/example16.3.php new file mode 100644 index 0000000000..7c58688257 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.3.php @@ -0,0 +1,47 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + + +$graph->title->Set("Adding a line plot to a bar graph v1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +//$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example16.4.php b/html/includes/jpgraph/src/Examples/example16.4.php new file mode 100644 index 0000000000..24ff875e6b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.4.php @@ -0,0 +1,44 @@ +SetScale("intlin"); + +$graph->img->SetMargin(40,130,20,40); +$graph->SetShadow(); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + +$graph->title->Set("Adding a line plot to a bar graph v3"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example16.5.php b/html/includes/jpgraph/src/Examples/example16.5.php new file mode 100644 index 0000000000..820fb0b7fa --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.5.php @@ -0,0 +1,57 @@ +img->SetMargin(40,70,20,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->SetColor(array(250,250,250)); + +$graph->img->SetTransparent("white"); + +$t1 = new Text("This is a text"); +$t1->Pos(0.5,0.5); +$t1->SetOrientation("h"); +$t1->SetFont(FF_FONT1,FS_BOLD); +$t1->SetBox("white","black","gray"); +$t1->SetColor("black"); +$graph->AddText($t1); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("blue"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +// Create the bar plot +$l2plot = new BarPlot($l2datay); +$l2plot->SetFillColor("orange"); +$l2plot->SetLegend("Result"); + +// Add the plots to the graph +$graph->Add($l1plot); +$graph->Add($l2plot); + + +$graph->title->Set("Example 16.3"); +$graph->xaxis->title->Set("Month"); +$graph->yaxis->title->Set("x10,000 US$"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->xaxis->SetTickLabels($datax); +//$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example16.6.php b/html/includes/jpgraph/src/Examples/example16.6.php new file mode 100644 index 0000000000..45feceadd2 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.6.php @@ -0,0 +1,53 @@ +SetScale("linlin"); + +// Setup title +$graph->title->Set("Example of linear regression"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// make sure that the X-axis is always at the +// bottom at the plot and not just at Y=0 which is +// the default position +$graph->xaxis->SetPos('min'); + +// Create the scatter plot with some nice colors +$sp1 = new ScatterPlot($datay2,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); +$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); + +// Create the regression line +$lplot = new LinePlot($datay); +$lplot->SetWeight(2); +$lplot->SetColor('navy'); + +// Add the pltos to the line +$graph->Add($sp1); +$graph->Add($lplot); + +// ... and stroke +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example16.php b/html/includes/jpgraph/src/Examples/example16.php new file mode 100644 index 0000000000..4a680a4290 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example16.php @@ -0,0 +1,44 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,30,20,40); +$graph->SetShadow(); + +// Create the linear plot +$errplot=new ErrorLinePlot($errdatay); +$errplot->SetColor("red"); +$errplot->SetWeight(2); +$errplot->SetCenter(); +$errplot->line->SetWeight(2); +$errplot->line->SetColor("blue"); + +// Setup the legends +$errplot->SetLegend("Min/Max"); +$errplot->line->SetLegend("Average"); + +// Add the plot to the graph +$graph->Add($errplot); + +$graph->title->Set("Linear error plot"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$datax = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($datax); + + +// Display the graph +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/example17.php b/html/includes/jpgraph/src/Examples/example17.php new file mode 100644 index 0000000000..c53f9dd863 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example17.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the linear plots for each category +$dplot[] = new LinePLot($datay1); +$dplot[] = new LinePLot($datay2); +$dplot[] = new LinePLot($datay3); + +$dplot[0]->SetFillColor("red"); +$dplot[1]->SetFillColor("blue"); +$dplot[2]->SetFillColor("green"); + +// Create the accumulated graph +$accplot = new AccLinePlot($dplot); + +// Add the plot to the graph +$graph->Add($accplot); + +$graph->xaxis->SetTextTickInterval(2); +$graph->title->Set("Example 17"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example18.php b/html/includes/jpgraph/src/Examples/example18.php new file mode 100644 index 0000000000..cb9bf19f73 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example18.php @@ -0,0 +1,32 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example19.1.php b/html/includes/jpgraph/src/Examples/example19.1.php new file mode 100644 index 0000000000..4abe27605a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example19.1.php @@ -0,0 +1,35 @@ +SetScale("linlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph, linear scale"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example19.php b/html/includes/jpgraph/src/Examples/example19.php new file mode 100644 index 0000000000..4523eaecda --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example19.php @@ -0,0 +1,35 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example2.1.php b/html/includes/jpgraph/src/Examples/example2.1.php new file mode 100644 index 0000000000..6c7e02f170 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example2.1.php @@ -0,0 +1,30 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot->value->Show(); +$lineplot->value->SetColor("red"); +$lineplot->value->SetFont(FF_FONT1,FS_BOLD); + + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example2.5.php b/html/includes/jpgraph/src/Examples/example2.5.php new file mode 100644 index 0000000000..b03acd911b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example2.5.php @@ -0,0 +1,26 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.5"); +$graph->xaxis->title->Set("X-title"); +$graph->xaxis->SetPos("min"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example2.6.php b/html/includes/jpgraph/src/Examples/example2.6.php new file mode 100644 index 0000000000..1b6d44f9a1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example2.6.php @@ -0,0 +1,27 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetStepStyle(); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2.6 (Line with stepstyle)"); +$graph->xaxis->title->Set("X-title"); +$graph->xaxis->SetPos("min"); +$graph->yaxis->title->Set("Y-title"); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example2.php b/html/includes/jpgraph/src/Examples/example2.php new file mode 100644 index 0000000000..3345e5ca5c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example2.php @@ -0,0 +1,25 @@ +SetScale("textlin"); + +// Setup margin and titles +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.1.php b/html/includes/jpgraph/src/Examples/example20.1.php new file mode 100644 index 0000000000..b778f8dca0 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.1.php @@ -0,0 +1,36 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.2.php b/html/includes/jpgraph/src/Examples/example20.2.php new file mode 100644 index 0000000000..317342c6bf --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.2.php @@ -0,0 +1,37 @@ +SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with Y-scale grace"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.3.php b/html/includes/jpgraph/src/Examples/example20.3.php new file mode 100644 index 0000000000..abbedccee7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.3.php @@ -0,0 +1,40 @@ +SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$bplot->value->SetAngle(45); +$bplot->value->SetFormat('%0.1f'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with Y-scale grace"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.4.php b/html/includes/jpgraph/src/Examples/example20.4.php new file mode 100644 index 0000000000..60acb072be --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.4.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->yaxis->scale->SetGrace(20); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->SetShadow(); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +$bplot->value->SetAngle(45); +$bplot->value->SetFormat('%0.1f'); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph with drop shadow"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.5.php b/html/includes/jpgraph/src/Examples/example20.5.php new file mode 100644 index 0000000000..78bc5ef254 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.5.php @@ -0,0 +1,47 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); + +// Setup values +$bplot->value->Show(); +$bplot->value->SetFormat('%d'); +$bplot->value->SetFont(FF_FONT1,FS_BOLD); + +// Center the values in the bar +$bplot->SetValuePos('center'); + +// Make the bar a little bit wider +$bplot->SetWidth(0.7); + +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Centered values for bars"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example20.php b/html/includes/jpgraph/src/Examples/example20.php new file mode 100644 index 0000000000..b98d04dc4f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example20.php @@ -0,0 +1,36 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Adjust fill color +$bplot->SetFillColor('orange'); +$bplot->SetWidth(1.0); +$graph->Add($bplot); + +// Setup the titles +$graph->title->Set("Bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example21.php b/html/includes/jpgraph/src/Examples/example21.php new file mode 100644 index 0000000000..3b7a6addd6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example21.php @@ -0,0 +1,39 @@ +SetScale("textlin"); +$graph->xgrid->Show(true,true); +$graph->xaxis->SetTextTickInterval(2); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Example 21"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example22.php b/html/includes/jpgraph/src/Examples/example22.php new file mode 100644 index 0000000000..17cb8182c8 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example22.php @@ -0,0 +1,38 @@ +SetScale("textlin"); +$graph->SetShadow(); + +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($b1plot,$b2plot)); +$gbplot->SetWidth(0.9); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Adjusting the width"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example23.php b/html/includes/jpgraph/src/Examples/example23.php new file mode 100644 index 0000000000..d529f10aed --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example23.php @@ -0,0 +1,37 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +// Create the bar plots +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("blue"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("orange"); + +// Create the grouped bar plot +$gbplot = new AccBarPlot(array($b1plot,$b2plot)); + +// ...and add it to the graPH +$graph->Add($gbplot); + +$graph->title->Set("Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example24.php b/html/includes/jpgraph/src/Examples/example24.php new file mode 100644 index 0000000000..dce7868867 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example24.php @@ -0,0 +1,46 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,30,20,40); + +$b1plot = new BarPlot($data1y); +$b1plot->SetFillColor("orange"); +$b2plot = new BarPlot($data2y); +$b2plot->SetFillColor("blue"); +$b3plot = new BarPlot($data3y); +$b3plot->SetFillColor("green"); +$b4plot = new BarPlot($data4y); +$b4plot->SetFillColor("brown"); + +// Create the accumulated bar plots +$ab1plot = new AccBarPlot(array($b1plot,$b2plot)); +$ab2plot = new AccBarPlot(array($b3plot,$b4plot)); + +// Create the grouped bar plot +$gbplot = new GroupBarPlot(array($ab1plot,$ab2plot)); + +// ...and add it to the graph +$graph->Add($gbplot); + +$graph->title->Set("Grouped Accumulated bar plots"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example25.1.php b/html/includes/jpgraph/src/Examples/example25.1.php new file mode 100644 index 0000000000..5ecee62f12 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example25.1.php @@ -0,0 +1,41 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text("This is a text"); +$txt->Pos(10,25); +$txt->SetFont(FF_FONT1,FS_BOLD); +$txt->SetBox('yellow','navy','gray'); +$txt->SetColor("red"); +$graph->AddText($txt); + + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example25.2.php b/html/includes/jpgraph/src/Examples/example25.2.php new file mode 100644 index 0000000000..42d52c08d8 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example25.2.php @@ -0,0 +1,42 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text("This is a text\nwith many\nand even\nmore\nlines of text"); +$txt->Pos(0.5,0.5,"center","center"); +$txt->SetFont(FF_FONT2,FS_BOLD); +$txt->ParagraphAlign('cenetered'); +$txt->SetBox('yellow','navy','gray'); +$txt->SetColor("red"); +$graph->AddText($txt); + + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example25.php b/html/includes/jpgraph/src/Examples/example25.php new file mode 100644 index 0000000000..004efdd281 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example25.php @@ -0,0 +1,39 @@ +SetScale("textlin"); + +// Add a drop shadow +$graph->SetShadow(); + +// Adjust the margin a bit to make more room for titles +$graph->img->SetMargin(40,30,20,40); + +// Create a bar pot +$bplot = new BarPlot($datay); +$graph->Add($bplot); + +// Create and add a new text +$txt=new Text("This is a text"); +$txt->Pos(0,0); +$txt->SetColor("red"); +$graph->AddText($txt); + + +// Setup the titles +$graph->title->Set("A simple bar graph"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example26.1.php b/html/includes/jpgraph/src/Examples/example26.1.php new file mode 100644 index 0000000000..91762625fe --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example26.1.php @@ -0,0 +1,23 @@ +SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetLegends($gDateLocale->GetShortMonth()); +$p1->SetCenter(0.4); +$p1->SetValueType(PIE_VALUE_ABS); +$p1->value->SetFormat('%d'); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example26.php b/html/includes/jpgraph/src/Examples/example26.php new file mode 100644 index 0000000000..f9c0ed2902 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example26.php @@ -0,0 +1,18 @@ +SetShadow(); + +$graph->title->Set("A simple Pie plot"); + +$p1 = new PiePlot($data); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example27.1.php b/html/includes/jpgraph/src/Examples/example27.1.php new file mode 100644 index 0000000000..bbcf2cb9e0 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example27.1.php @@ -0,0 +1,25 @@ +SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->SetAngle(20); +$p1->SetSize(0.5); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example27.2.php b/html/includes/jpgraph/src/Examples/example27.2.php new file mode 100644 index 0000000000..0566380a9a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example27.2.php @@ -0,0 +1,24 @@ +SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->ExplodeSlice(1); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example27.3.php b/html/includes/jpgraph/src/Examples/example27.3.php new file mode 100644 index 0000000000..d55bfe8b8d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example27.3.php @@ -0,0 +1,24 @@ +SetShadow(); + +$graph->title->Set("A simple 3D Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->ExplodeSlice(1); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example27.php b/html/includes/jpgraph/src/Examples/example27.php new file mode 100644 index 0000000000..918830f84d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example27.php @@ -0,0 +1,24 @@ +SetShadow(); + +$graph->title->Set("A simple Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot3D($data); +$p1->SetSize(0.5); +$p1->SetCenter(0.45); +$p1->SetLegends($gDateLocale->GetShortMonth()); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example28.1.php b/html/includes/jpgraph/src/Examples/example28.1.php new file mode 100644 index 0000000000..ed4f17f387 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example28.1.php @@ -0,0 +1,22 @@ +SetShadow(); + +$graph->title->Set("'earth' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("earth"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example28.2.php b/html/includes/jpgraph/src/Examples/example28.2.php new file mode 100644 index 0000000000..9eb755df1d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example28.2.php @@ -0,0 +1,22 @@ +SetShadow(); + +$graph->title->Set("'pastel' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("pastel"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example28.3.php b/html/includes/jpgraph/src/Examples/example28.3.php new file mode 100644 index 0000000000..0b12e4e0c4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example28.3.php @@ -0,0 +1,22 @@ +SetShadow(); + +$graph->title->Set("'water' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("water"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example28.php b/html/includes/jpgraph/src/Examples/example28.php new file mode 100644 index 0000000000..8b8d36b09f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example28.php @@ -0,0 +1,22 @@ +SetShadow(); + +$graph->title->Set("'sand' Theme"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.5,0.55); +$p1->value->Show(false); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/example3.1.php b/html/includes/jpgraph/src/Examples/example3.1.php new file mode 100644 index 0000000000..fa57d0e63b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.1.php @@ -0,0 +1,35 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_UTRIANGLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 3.1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetColor("red"); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.2.1.php b/html/includes/jpgraph/src/Examples/example3.2.1.php new file mode 100644 index 0000000000..5a3da51aad --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.2.1.php @@ -0,0 +1,35 @@ +SetScale("textlin"); +$graph->yaxis->scale->SetGrace(10,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Grace value, version 1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.2.2.php b/html/includes/jpgraph/src/Examples/example3.2.2.php new file mode 100644 index 0000000000..8d2839f93e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.2.2.php @@ -0,0 +1,37 @@ +SetScale("textlin"); +$graph->yaxis->scale->SetGrace(10,10); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Grace value version 2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->xaxis->SetPos('min'); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.2.php b/html/includes/jpgraph/src/Examples/example3.2.php new file mode 100644 index 0000000000..55637f9b12 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.2.php @@ -0,0 +1,34 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_CIRCLE); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 3.2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.3.php b/html/includes/jpgraph/src/Examples/example3.3.php new file mode 100644 index 0000000000..b8b8ab6488 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.3.php @@ -0,0 +1,37 @@ +SetScale("textlin"); + +// Adjust the margin +$graph->img->SetMargin(40,20,20,40); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->value->show(); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Displaying the values"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.4.php b/html/includes/jpgraph/src/Examples/example3.4.php new file mode 100644 index 0000000000..05b1e444aa --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.4.php @@ -0,0 +1,41 @@ +SetScale("textlin"); + +// Adjust the margin +$graph->img->SetMargin(40,20,20,40); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot->mark->SetType(MARK_UTRIANGLE); +$lineplot->value->show(); +$lineplot->value->SetColor('darkred'); +$lineplot->value->SetFont(FF_FONT1,FS_BOLD); +$lineplot->value->SetFormat('$%0.1f'); + + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Displaying the values"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example3.php b/html/includes/jpgraph/src/Examples/example3.php new file mode 100644 index 0000000000..bebbf91ab1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example3.php @@ -0,0 +1,35 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 3"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$graph->yaxis->SetColor("red"); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example4.php b/html/includes/jpgraph/src/Examples/example4.php new file mode 100644 index 0000000000..201cefbf83 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example4.php @@ -0,0 +1,42 @@ +SetScale("textlin"); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot2=new LinePlot($ydata2); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->Add($lineplot2); + +$graph->img->SetMargin(40,20,20,40); +$graph->title->Set("Example 4"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("red"); +$graph->yaxis->SetWeight(2); +$graph->SetShadow(); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example5.1.php b/html/includes/jpgraph/src/Examples/example5.1.php new file mode 100644 index 0000000000..df1d4f4969 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example5.1.php @@ -0,0 +1,47 @@ +img->SetMargin(40,40,20,40); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 5"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example5.php b/html/includes/jpgraph/src/Examples/example5.php new file mode 100644 index 0000000000..d2a27db04d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example5.php @@ -0,0 +1,44 @@ +img->SetMargin(40,40,20,40); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 5"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example6.1.php b/html/includes/jpgraph/src/Examples/example6.1.php new file mode 100644 index 0000000000..f00e08c8e9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example6.1.php @@ -0,0 +1,55 @@ +SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,40,20,70); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Adjust the axis color +$graph->y2axis->SetColor("orange"); +$graph->yaxis->SetColor("blue"); + +$graph->title->Set("Example 6.1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Adjust the legend position +$graph->legend->SetLayout(LEGEND_HOR); +$graph->legend->Pos(0.4,0.95,"center","bottom"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example6.2.php b/html/includes/jpgraph/src/Examples/example6.2.php new file mode 100644 index 0000000000..b5e38cd64a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example6.2.php @@ -0,0 +1,47 @@ +SetScale("textlin"); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,40,20,70); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot->SetStepStyle(); + +// Adjust the axis color +$graph->yaxis->SetColor("blue"); + +$graph->title->Set("Example 6.2"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend("Plot 1"); + +// Add the plot to the graph +$graph->Add($lineplot); + +// Adjust the legend position +$graph->legend->SetLayout(LEGEND_HOR); +$graph->legend->Pos(0.4,0.95,"center","bottom"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example6.php b/html/includes/jpgraph/src/Examples/example6.php new file mode 100644 index 0000000000..6e4b22f887 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example6.php @@ -0,0 +1,54 @@ +SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Adjust the margin +$graph->img->SetMargin(40,140,20,40); + +// Create the two linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Adjust the axis color +$graph->y2axis->SetColor("orange"); +$graph->yaxis->SetColor("blue"); + +$graph->title->Set("Example 6"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +// Set the colors for the plots +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +// Set the legends for the plots +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Adjust the legend position +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example7.php b/html/includes/jpgraph/src/Examples/example7.php new file mode 100644 index 0000000000..24d9f7a739 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example7.php @@ -0,0 +1,44 @@ +SetScale("textlin"); +$graph->SetY2Scale("log"); +$graph->SetShadow(); +$graph->img->SetMargin(40,110,20,40); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$graph->yaxis->SetColor('blue'); + +$graph->title->Set("Example 7"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); +$lineplot2->SetWeight(2); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example8.1.php b/html/includes/jpgraph/src/Examples/example8.1.php new file mode 100644 index 0000000000..3025c2b5b6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example8.1.php @@ -0,0 +1,57 @@ +SetScale("textlog"); +$graph->SetY2Scale("log"); + +$graph->SetShadow(); +$graph->SetMargin(40,110,20,40); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +$lineplot2=new LinePlot($y2data); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->scale->ticks->SupressFirst(); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); + +$graph->title->Set("Example 8"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); +$graph->y2axis->SetColor("orange"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example8.php b/html/includes/jpgraph/src/Examples/example8.php new file mode 100644 index 0000000000..64c62e7b62 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example8.php @@ -0,0 +1,48 @@ +SetScale("textlog"); +$graph->SetShadow(); +$graph->img->SetMargin(40,110,20,40); + +// Show the gridlines +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Example 8"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +// Adjust the color of the Y axis +$graph->yaxis->SetColor("blue"); + +// Specifya a legend +$lineplot->SetLegend("Plot 1"); + +// Adjust the position of the grid box +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example9.1.php b/html/includes/jpgraph/src/Examples/example9.1.php new file mode 100644 index 0000000000..896682eacc --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example9.1.php @@ -0,0 +1,50 @@ +SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +$graph->xaxis->SetTextLabelInterval(2); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example9.2.php b/html/includes/jpgraph/src/Examples/example9.2.php new file mode 100644 index 0000000000..3e5bf49088 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example9.2.php @@ -0,0 +1,52 @@ +SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,50); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); +//$graph->xaxis->SetTextLabelInterval(2); +$graph->xaxis->SetLabelAngle(90); + + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/example9.php b/html/includes/jpgraph/src/Examples/example9.php new file mode 100644 index 0000000000..27a73f56ab --- /dev/null +++ b/html/includes/jpgraph/src/Examples/example9.php @@ -0,0 +1,49 @@ +SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Specify the tick labels +$a = $gDateLocale->GetShortMonth(); +$graph->xaxis->SetTickLabels($a); + +// Create the linear plot +$lineplot=new LinePlot($ydata); + +// Add the plot to the graph +$graph->Add($lineplot); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/exampleex9.php b/html/includes/jpgraph/src/Examples/exampleex9.php new file mode 100644 index 0000000000..a5be5e6a2b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/exampleex9.php @@ -0,0 +1,63 @@ +SetScale("textlog"); + +$graph->img->SetMargin(40,110,20,40); + +$graph->SetY2Scale("log"); +$graph->SetShadow(); + +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,false); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +$graph->yaxis->scale->ticks->SupressFirst(); +$graph->y2axis->scale->ticks->SupressFirst(); +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Examples 9"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +$graph->legend->Pos(0.05,0.5,"right","center"); + +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetTextTickInterval(2); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/fieldscatterex1.php b/html/includes/jpgraph/src/Examples/fieldscatterex1.php new file mode 100644 index 0000000000..ed2a542ef6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/fieldscatterex1.php @@ -0,0 +1,92 @@ + 1 ) $f=1; + $red = floor((1-$f)*255); + $blue = floor($f*255); + $color = array($red,0,$blue); + //echo "x=$x, y=$y, blue=$blue, red=$red
    "; + return array($color,$size,$arrowsize); +} + +// Create data for a simulated pseudo-magnetic radient field +$datax = array(); +$datay = array(); +$angle = array(); +for($x=1; $x < 10; ++$x ) { + for($y=10; $y<100; $y += 10) { + $a = -1; + if( $x==$polex && $y==$poley ) continue; + if( $x==$polex ) { + if( $y > $poley ) $a=90; + else $a = 270; + } + if( $y==$poley ) { + if( $x > $polex ) $a=0; + else $a=180; + } + if( $a == -1 ) { + $d1 = $y-$poley; + $d2 = ($polex-$x)*20; + if( $y < $poley ) $d2 *= -1; + $h = sqrt($d1*$d1+$d2*$d2); + $t = -$d2/$h; + $ac = acos($t); + if( $y < $poley ) $ac += M_PI; + $a = $ac * 180/M_PI; + } + $datax[] = $x; + $datay[] = $y; + $angle[] = $a; + } +} + +// Setup the graph +$graph = new Graph(300,200); +$graph->SetScale("intlin",0,100,0,10); +$graph->SetMarginColor('lightblue'); + + +// ..and titles +$graph->title->Set("Field plot"); + +// Setup the field plot +$fp = new FieldPlot($datay,$datax,$angle); + +// Setup formatting callback +$fp->SetCallback('FldCallback'); + +// First size argument is length (in pixels of arrow) +// Second size argument is roughly size of arrow. Arrow size is specified as +// an integer in the range [0,9] +$fp->arrow->SetSize(20,2); +$fp->arrow->SetColor('navy'); + +$graph->Add($fp); + +// .. and output +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/filledgridex1.php b/html/includes/jpgraph/src/Examples/filledgridex1.php new file mode 100644 index 0000000000..adac8889bd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledgridex1.php @@ -0,0 +1,50 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,50,30,30); + +$graph->title->Set('Filled Y-grid'); + + +$graph->yaxis->HideZeroLabel(); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->xgrid->Show(); + +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); +$p1->SetLegend('Line 1'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("red"); +$p2->SetLegend('Line 2'); +$graph->Add($p2); + +// Create the third line +$p3 = new LinePlot($datay3); +$p3->SetColor("orange"); +$p3->SetLegend('Line 3'); +$graph->Add($p3); + +$graph->legend->SetShadow('gray@0.4',5); +$graph->legend->SetPos(0.1,0.1,'right','top'); +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/filledline01.php b/html/includes/jpgraph/src/Examples/filledline01.php new file mode 100644 index 0000000000..6f01974483 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledline01.php @@ -0,0 +1,24 @@ +img->SetMargin(40,40,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/filledlineex01.1.php b/html/includes/jpgraph/src/Examples/filledlineex01.1.php new file mode 100644 index 0000000000..124690d03a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledlineex01.1.php @@ -0,0 +1,24 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); +$graph->SetGridDepth(DEPTH_FRONT); + +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/filledlineex01.php b/html/includes/jpgraph/src/Examples/filledlineex01.php new file mode 100644 index 0000000000..3bc240bef3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledlineex01.php @@ -0,0 +1,23 @@ +SetScale("textlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/filledlineex02.php b/html/includes/jpgraph/src/Examples/filledlineex02.php new file mode 100644 index 0000000000..91476080a6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledlineex02.php @@ -0,0 +1,24 @@ +img->SetMargin(40,40,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of filled line plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(Starting from Y=0)"); + +$graph->yaxis->scale->SetAutoMin(0); + +$p1 = new LinePlot($datay); +$p1->SetFillColor("orange"); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$graph->Add($p1); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/filledlineex03.php b/html/includes/jpgraph/src/Examples/filledlineex03.php new file mode 100644 index 0000000000..21698b65e3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledlineex03.php @@ -0,0 +1,23 @@ +SetScale('intlin'); +$graph->title->Set('Filled line with NULL values'); +//Make sure data starts from Zero whatever data we have +$graph->yscale->SetAutoMin(0); + +$p1 = new LinePlot($datay); +$p1->SetFillColor('lightblue'); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/filledstepstyleex1.php b/html/includes/jpgraph/src/Examples/filledstepstyleex1.php new file mode 100644 index 0000000000..41bcbaebc4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/filledstepstyleex1.php @@ -0,0 +1,39 @@ +SetScale("textlin"); +$graph->SetShadow(true); +$graph->SetMarginColor("antiquewhite"); +$graph->img->SetMargin(60,40,40,50); +$graph->img->setTransparent("white"); +$graph->xaxis->SetFont(FF_FONT1); +$graph->xaxis->setTextTickInterval(1); +$graph->xaxis->SetTextLabelInterval(1); +$graph->legend->SetFillColor("antiquewhite"); +$graph->legend->SetShadow(true); +$graph->legend->SetLayout(LEGEND_VERT); +$graph->legend->Pos(0.02,0.01); +$graph->title->Set("Step Styled Example"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot = new LinePlot($ydata); +$lineplot->SetColor("black"); +$lineplot->setFillColor("gray7"); +$lineplot->SetStepStyle(); +$lineplot->SetLegend(" 2002 "); + +// add plot to the graph +$graph->Add($lineplot); +$graph->ygrid->show(false,false); + +// display graph +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/fixscale_radarex1.php b/html/includes/jpgraph/src/Examples/fixscale_radarex1.php new file mode 100644 index 0000000000..82f4e6fb2c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/fixscale_radarex1.php @@ -0,0 +1,37 @@ +SetScale("lin",0,50); +$graph->yscale->ticks->Set(25,5); +$graph->SetColor("white"); +$graph->SetShadow(); + +$graph->SetCenter(0.5,0.55); + +$graph->axis->SetFont(FF_FONT1,FS_BOLD); +$graph->axis->SetWeight(2); + +// Uncomment the following lines to also show grid lines. +//$graph->grid->SetLineStyle("longdashed"); +//$graph->grid->SetColor("navy"); +//$graph->grid->Show(); + +$graph->ShowMinorTickMarks(); + +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles(array("One","Two","Three","Four","Five","Sex","Seven","Eight","Nine","Ten")); + +$plot = new RadarPlot(array(12,35,20,30,33,15,37)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFillColor('lightblue'); +$plot->SetLineWeight(2); + +$graph->Add($plot); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/funcex1.php b/html/includes/jpgraph/src/Examples/funcex1.php new file mode 100644 index 0000000000..b324c2b771 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/funcex1.php @@ -0,0 +1,58 @@ +E(-1.2*M_PI,1.2*M_PI); + +$f = new FuncGenerator('$x*$x'); +list($x2data,$y2data) = $f->E(-2,2); + +// Setup the basic graph +$graph = new Graph(450,350,"auto"); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); + +// ... and titles +$graph->title->Set('Example of Function plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(With some more advanced axis formatting\nHiding first and last label)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->xgrid->Show(); + +$graph->yaxis->SetPos(0); +$graph->yaxis->SetWeight(2); +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('black','darkblue'); +$graph->yaxis->HideTicks(true,false); +$graph->yaxis->HideFirstLastLabel(); + +$graph->xaxis->SetWeight(2); +$graph->xaxis->HideZeroLabel(); +$graph->xaxis->HideFirstLastLabel(); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('black','darkblue'); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('blue'); +$lp1->SetWeight(2); + +$lp2 = new LinePlot($y2data,$x2data); +list($xm,$ym)=$lp2->Max(); +$lp2->SetColor('red'); +$lp2->SetWeight(2); + + +$graph->Add($lp1); +$graph->Add($lp2); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/funcex2.php b/html/includes/jpgraph/src/Examples/funcex2.php new file mode 100644 index 0000000000..80dbe3b516 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/funcex2.php @@ -0,0 +1,34 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(380,450,"auto"); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); +$graph->SetAxisStyle(AXSTYLE_SIMPLE); + +//$graph->xaxis->SetLabelFormat('%.1f'); + +$graph->title->Set("Function plot with marker"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXOUT Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->mark->SetType(MARK_FILLEDCIRCLE); +$lp1->mark->SetFillColor("red"); +$lp1->SetColor("blue"); + +$graph->Add($lp1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/funcex3.php b/html/includes/jpgraph/src/Examples/funcex3.php new file mode 100644 index 0000000000..046c27ddfe --- /dev/null +++ b/html/includes/jpgraph/src/Examples/funcex3.php @@ -0,0 +1,37 @@ +E(-M_PI,M_PI,25); + +$graph = new Graph(350,430,"auto"); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->img->SetMargin(50,50,60,40); +$graph->SetBox(true,'black',2); +$graph->SetMarginColor('white'); +$graph->SetColor('lightyellow'); +$graph->SetAxisStyle(AXSTYLE_BOXIN); +$graph->xgrid->Show(); + + +//$graph->xaxis->SetLabelFormat('%.0f'); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set("Function plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXIN Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor("blue"); +$lp1->SetWeight(2); + +$graph->Add($lp1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/funcex4.php b/html/includes/jpgraph/src/Examples/funcex4.php new file mode 100644 index 0000000000..ad8db88d45 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/funcex4.php @@ -0,0 +1,63 @@ +E(-1.2*M_PI,1.2*M_PI); + +$f = new FuncGenerator('$x*$x'); +list($x2data,$y2data) = $f->E(-2,2); + +// Setup the basic graph +$graph = new Graph(450,350,"auto"); +$graph->SetScale("linlin"); +//$graph->SetShadow(); +$graph->img->SetMargin(5,10,60,9); +$graph->SetBox(true,'green',2); +$graph->SetMarginColor('black'); +$graph->SetColor('black'); + +// ... and titles +$graph->title->Set('Example of Function plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor('lightgreen'); +$graph->subtitle->Set("(With some more advanced axis formatting\nHiding first and last label)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor('lightgreen'); + +$graph->xgrid->Show(); +$graph->xgrid->SetColor('darkgreen'); +$graph->ygrid->SetColor('darkgreen'); + +$graph->yaxis->SetPos(0); +$graph->yaxis->SetWeight(2); +$graph->yaxis->HideZeroLabel(); +$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->SetColor('green','green'); +$graph->yaxis->HideTicks(true,true); +$graph->yaxis->HideFirstLastLabel(); + +$graph->xaxis->SetWeight(2); +$graph->xaxis->HideZeroLabel(); +$graph->xaxis->HideFirstLastLabel(); +$graph->xaxis->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->SetColor('green','green'); + +$lp1 = new LinePlot($ydata,$xdata); +$lp1->SetColor('yellow'); +$lp1->SetWeight(2); + +$lp2 = new LinePlot($y2data,$x2data); +list($xm,$ym)=$lp2->Max(); +$lp2->SetColor('blue'); +$lp2->SetWeight(2); + + +$graph->Add($lp1); +$graph->Add($lp2); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttconstrainex0.php b/html/includes/jpgraph/src/Examples/ganttconstrainex0.php new file mode 100644 index 0000000000..a9a8920222 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttconstrainex0.php @@ -0,0 +1,38 @@ +title->Set("Example with grouping and constrains"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttconstrainex1.php b/html/includes/jpgraph/src/Examples/ganttconstrainex1.php new file mode 100644 index 0000000000..7d3ed5309f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttconstrainex1.php @@ -0,0 +1,39 @@ +title->Set("Example with grouping and constrains"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttconstrainex2.php b/html/includes/jpgraph/src/Examples/ganttconstrainex2.php new file mode 100644 index 0000000000..2e079dd932 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttconstrainex2.php @@ -0,0 +1,39 @@ +title->Set("Example with grouping and constrains"); +//$graph->SetFrame(false); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->CreateSimple($data,$constrains,$progress); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttcsimex01.php b/html/includes/jpgraph/src/Examples/ganttcsimex01.php new file mode 100644 index 0000000000..50a67d2048 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttcsimex01.php @@ -0,0 +1,28 @@ +SetCSIMTarget('#','Go back 1'); +$bar1->title->SetCSIMTarget('#','Go back 1 (title)'); +$bar2 = new GanttBar(1,"Activity 2","2002-01-03","2002-01-25"); +$bar2->SetCSIMTarget('#','Go back 2'); +$bar2->title->SetCSIMTarget('#','Go back 2 (title)'); + +$graph = new GanttGraph(500); +$graph->title->Set("Example with image map"); +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + +$graph->Add(array($bar1,$bar2)); + +// And stroke +$graph->StrokeCSIM(); + + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttcsimex02.php b/html/includes/jpgraph/src/Examples/ganttcsimex02.php new file mode 100644 index 0000000000..7ec82142ca --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttcsimex02.php @@ -0,0 +1,40 @@ +title->Set("Example with image map"); +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + +$graph->CreateSimple($data,$constrains,$progress); + +// Add the specified activities +//SetupSimpleGantt($graph,$data,$constrains,$progress); + +// And stroke +$graph->StrokeCSIM(); + + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttex00.php b/html/includes/jpgraph/src/Examples/ganttex00.php new file mode 100644 index 0000000000..42141895c6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex00.php @@ -0,0 +1,14 @@ +Add($activity); + +// Display the Gantt chart +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex01.php b/html/includes/jpgraph/src/Examples/ganttex01.php new file mode 100644 index 0000000000..30e6263b0a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex01.php @@ -0,0 +1,40 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex02.php b/html/includes/jpgraph/src/Examples/ganttex02.php new file mode 100644 index 0000000000..76ec5b4495 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex02.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("Main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Show day, week and month scale +//$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); +$graph->ShowHeaders(GANTT_HWEEK ); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_WNBR); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-02-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex03.php b/html/includes/jpgraph/src/Examples/ganttex03.php new file mode 100644 index 0000000000..d4a0e40e08 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex03.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(7,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex04.php b/html/includes/jpgraph/src/Examples/ganttex04.php new file mode 100644 index 0000000000..5796854d91 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex04.php @@ -0,0 +1,46 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$graph->Add($milestone); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex05.php b/html/includes/jpgraph/src/Examples/ganttex05.php new file mode 100644 index 0000000000..1ea07b0d71 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex05.php @@ -0,0 +1,48 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex06.php b/html/includes/jpgraph/src/Examples/ganttex06.php new file mode 100644 index 0000000000..35b28d5b64 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex06.php @@ -0,0 +1,52 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex07.php b/html/includes/jpgraph/src/Examples/ganttex07.php new file mode 100644 index 0000000000..d2902b9a4f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex07.php @@ -0,0 +1,53 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex08.php b/html/includes/jpgraph/src/Examples/ganttex08.php new file mode 100644 index 0000000000..9255433616 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex08.php @@ -0,0 +1,63 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex09.php b/html/includes/jpgraph/src/Examples/ganttex09.php new file mode 100644 index 0000000000..7ebf6b564f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex09.php @@ -0,0 +1,66 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(8); + +// Finally add the bar to the graph +$graph->Add($activity); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex10.php b/html/includes/jpgraph/src/Examples/ganttex10.php new file mode 100644 index 0000000000..1966ea1d30 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex10.php @@ -0,0 +1,90 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(1); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(1); + + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex11.php b/html/includes/jpgraph/src/Examples/ganttex11.php new file mode 100644 index 0000000000..0408f5561b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex11.php @@ -0,0 +1,89 @@ +SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(10); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(10); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex12.php b/html/includes/jpgraph/src/Examples/ganttex12.php new file mode 100644 index 0000000000..e19dd39f7e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex12.php @@ -0,0 +1,93 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("A nice main title"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(Draft version)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(0); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Add a right marker +$activity->rightMark->Show(); +$activity->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity->rightMark->SetWidth(13); +$activity->rightMark->SetColor("red"); +$activity->rightMark->SetFillColor("red"); +$activity->rightMark->title->Set("M5"); +$activity->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity->rightMark->title->SetColor("white"); + +// Set absolute height +$activity->SetHeight(10); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-20"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Add a right marker +$activity2->rightMark->Show(); +$activity2->rightMark->SetType(MARK_FILLEDCIRCLE); +$activity2->rightMark->SetWidth(13); +$activity2->rightMark->SetColor("red"); +$activity2->rightMark->SetFillColor("red"); +$activity2->rightMark->title->Set("M5"); +$activity2->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); +$activity2->rightMark->title->SetColor("white"); + +// Set absolute height +$activity2->SetHeight(10); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Create a miletone +$milestone = new MileStone(2,"Milestone","2002-01-15","2002-01-15"); +$milestone->title->SetColor("black"); +$milestone->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($milestone); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex13.php b/html/includes/jpgraph/src/Examples/ganttex13.php new file mode 100644 index 0000000000..aff2d2fbd9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex13.php @@ -0,0 +1,71 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex13.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Instead of week number show the date for the first day in the week +// on the week scale +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Make the week scale font smaller than the default +$graph->scale->week->SetFont(FF_FONT0); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR4); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[ER,TR]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[BO,SW,JC]"); + +// ADjust font for caption +$activity2->caption->SetFont(FF_ARIAL,FS_BOLD); +$activity2->caption->SetColor("darkred"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex14.php b/html/includes/jpgraph/src/Examples/ganttex14.php new file mode 100644 index 0000000000..ef7195c321 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex14.php @@ -0,0 +1,67 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex14.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); + + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex15.php b/html/includes/jpgraph/src/Examples/ganttex15.php new file mode 100644 index 0000000000..af1468d75e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex15.php @@ -0,0 +1,68 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex15.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex16.php b/html/includes/jpgraph/src/Examples/ganttex16.php new file mode 100644 index 0000000000..c8e2a0396d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex16.php @@ -0,0 +1,73 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex16.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); +$graph->scale->tableTitle->Show(); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex17.php b/html/includes/jpgraph/src/Examples/ganttex17.php new file mode 100644 index 0000000000..f8f90f8e73 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex17.php @@ -0,0 +1,78 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex17.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex18.php b/html/includes/jpgraph/src/Examples/ganttex18.php new file mode 100644 index 0000000000..7ccfe4facb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex18.php @@ -0,0 +1,82 @@ +SetBox(); +$graph->SetShadow(); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex18.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); + +// Modify the appearance of the dividing lines +$graph->scale->divider->SetWeight(3); +$graph->scale->divider->SetColor("navy"); + +$graph->scale->dividerh->SetWeight(3); +$graph->scale->dividerh->SetColor("navy"); + +$graph->SetBox(true,"navy",3); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex19.php b/html/includes/jpgraph/src/Examples/ganttex19.php new file mode 100644 index 0000000000..091d82e698 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex19.php @@ -0,0 +1,84 @@ +SetBox(); +$graph->SetShadow(); + +// Use swedish locale +$graph->scale->SetDateLocale("sv_SE"); + +// Add title and subtitle +$graph->title->Set("Example of captions"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->subtitle->Set("(ganttex19.php)"); + +// Show day, week and month scale +$graph->ShowHeaders(GANTT_HDAY | GANTT_HWEEK | GANTT_HMONTH); + +// Set table title +$graph->scale->tableTitle->Set("(Rev: 1.22)"); +$graph->scale->tableTitle->SetFont(FF_FONT1,FS_BOLD); +$graph->scale->SetTableTitleBackground("silver"); +$graph->scale->tableTitle->Show(); + +$graph->scale->divider->SetStyle('solid'); +$graph->scale->divider->SetWeight(2); +$graph->scale->divider->SetColor('black'); + + +$graph->SetBox(true,"navy",2); + + +// Use the short name of the month together with a 2 digit year +// on the month scale +$graph->scale->month->SetStyle(MONTHSTYLE_SHORTNAMEYEAR2); +$graph->scale->month->SetFontColor("white"); +$graph->scale->month->SetBackgroundColor("blue"); + +// 0 % vertical label margin +$graph->SetLabelVMarginFactor(1); + +// Format the bar for the first activity +// ($row,$title,$startdate,$enddate) +$activity = new GanttBar(0,"Project","2001-12-21","2002-01-07","[50%]"); + +// Yellow diagonal line pattern on a red background +$activity->SetPattern(BAND_RDIAG,"yellow"); +$activity->SetFillColor("red"); + +// Set absolute height +$activity->SetHeight(10); + +// Specify progress to 60% +$activity->progress->Set(0.6); +$activity->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Format the bar for the second activity +// ($row,$title,$startdate,$enddate) +$activity2 = new GanttBar(1,"Project","2001-12-21","2002-01-02","[30%]"); + +// Yellow diagonal line pattern on a red background +$activity2->SetPattern(BAND_RDIAG,"yellow"); +$activity2->SetFillColor("red"); + +// Set absolute height +$activity2->SetHeight(10); + +// Specify progress to 30% +$activity2->progress->Set(0.3); +$activity2->progress->SetPattern(BAND_HVCROSS,"blue"); + +// Finally add the bar to the graph +$graph->Add($activity); +$graph->Add($activity2); + +// Add a vertical line +$vline = new GanttVLine("2001-12-24","Phase 1"); +$vline->SetDayOffset(0.5); +//$graph->Add($vline); + +// ... and display it +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/ganttex30.php b/html/includes/jpgraph/src/Examples/ganttex30.php new file mode 100644 index 0000000000..d1cb9a8198 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex30.php @@ -0,0 +1,87 @@ +SetShadow(); +$graph->SetBox(); + +// Titles for chart +$graph->title->Set("General conversion plan"); +$graph->subtitle->Set("(Revision: 2001-11-18)"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// For illustration we enable all headers. +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); + +// For the week we choose to show the start date of the week +// the default is to show week number (according to ISO 8601) +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Change the scale font +$graph->scale->week->SetFont(FF_FONT0); +$graph->scale->year->SetFont(FF_ARIAL,FS_BOLD,12); + + +// Setup some data for the gantt bars +$data = array( + array(0,"Group 1", "2001-10-29","2001-11-27",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-11-8","2001-12-14"), + array(2," Label 3", "2001-11-01","2001-11-8"), + array(4,"Group 2", "2001-11-07","2001-12-19",FF_FONT1,FS_BOLD,8), + array(5," Label 4", "2001-11-8","2001-12-19"), + array(6," Label 5", "2001-11-01","2001-11-8") + ); + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + + // If you like each bar can have a shadow + // $bar->SetShadow(true,"darkgray"); + + // For illustration lets make each bar be red with yellow diagonal stripes + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + + // To indicate progress each bar can have a smaller bar within + // For illustrative purpose just set the progress to 50% for each bar + $bar->progress->Set(0.5); + + // Each bar may also have optional left and right plot marks + // As illustration lets put a filled circle with a number at the end + // of each bar + $bar->rightMark->SetType(MARK_FILLEDCIRCLE); + $bar->rightMark->SetFillColor("red"); + $bar->rightMark->SetColor("red"); + $bar->rightMark->SetWidth(10); + + // Title for the mark + $bar->rightMark->title->Set("".$i+1); + $bar->rightMark->title->SetColor("white"); + $bar->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,10); + $bar->rightMark->Show(); + + // ... and add the bar to the gantt chart + $graph->Add($bar); +} + +// Create a milestone mark +$ms = new MileStone(7,"M5","2001-12-10","10/12"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +// Create a vertical line to emphasize the milestone +$vl = new GanttVLine("2001-12-10","Phase 1","darkred"); +$vl->SetDayOffset(0.5); // Center the line in the day +$graph->Add($vl); + +// Output the graph +$graph->Stroke(); + +// EOF +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/ganttex_slice.php b/html/includes/jpgraph/src/Examples/ganttex_slice.php new file mode 100644 index 0000000000..acb5fe7bfe --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttex_slice.php @@ -0,0 +1,78 @@ +SetShadow(); +$graph->SetBox(); + +// Only show part of the Gantt +$graph->SetDateRange('2001-11-22','2002-1-24'); + +// Weeks start on Sunday +$graph->scale->SetWeekStart(0); + +$graph->title->Set("General conversion plan"); +$graph->subtitle->Set("(Slice between 2001-11-22 to 2002-01-24)"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); + +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); + + +$data = array( + array(0,"Group 1\tJohan", "2002-1-23","2002-01-28",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-10-26","2001-11-16"), + array(2," Label 3", "2001-11-30","2001-12-01"), + array(4,"Group 2", "2001-11-30","2001-12-22",FF_FONT1,FS_BOLD,8), + array(5," Label 4", "2001-11-30","2001-12-1"), + array(6," Label 5", "2001-12-6","2001-12-8"), + array(8," Label 8", "2001-11-30","2002-01-02") + ); + + +// make up some fictionary activity bars +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + + $bar->rightMark->Show(); + $bar->rightMark->SetType(MARK_FILLEDCIRCLE); + $bar->rightMark->SetWidth(8); + $bar->rightMark->SetColor("red"); + $bar->rightMark->SetFillColor("red"); + $bar->rightMark->title->Set($i+1); + $bar->rightMark->title->SetFont(FF_ARIAL,FS_BOLD,12); + $bar->rightMark->title->SetColor("white"); + + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $bar->progress->Set($i/10); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + + $graph->Add($bar); +} + + +// The line will NOT be shown since it is outside the specified slice +$vline = new GanttVLine("2002-02-28"); +$vline->title->Set("2002-02-28"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +// The milestone will NOT be shown since it is outside the specified slice +$ms = new MileStone(7,"M5","2002-01-28","28/1"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +$graph->Stroke(); + + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gantthgridex1.php b/html/includes/jpgraph/src/Examples/gantthgridex1.php new file mode 100644 index 0000000000..21ce4d1884 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gantthgridex1.php @@ -0,0 +1,63 @@ +title->Set("Grid example"); +$graph->subtitle->Set("(Horizontal grid)"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,14); + +// Specify what headers to show +$graph->ShowHeaders(GANTT_HMONTH|GANTT_HDAY ); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT0); + +// Setup a horizontal grid +$graph->hgrid->Show(); +$graph->hgrid->SetRowFillColor('darkblue@0.9'); + + +for($i=0; $i 4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $graph->Add($bar); +} + +// Setup a vertical marker line +$vline = new GanttVLine("2001-11-01"); +$vline->SetDayOffset(0.5); +$vline->title->Set("2001-11-01"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +// Setup a milestone +$ms = new MileStone(6,"M5","2001-11-28","28/12"); +$ms->title->SetFont(FF_FONT1,FS_BOLD); +$graph->Add($ms); + +// And to show that you can also add an icon we add "Tux" +$icon = new IconPlot('penguin.png',0.01,0.95,1,15); +$icon->SetAnchor('left','bottom'); +$graph->Add($icon); + +// .. and finally send it back to the browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gantthourex1.php b/html/includes/jpgraph/src/Examples/gantthourex1.php new file mode 100644 index 0000000000..0cd89fed30 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gantthourex1.php @@ -0,0 +1,51 @@ +SetMarginColor('blue:1.7'); +$graph->SetColor('white'); + +$graph->SetBackgroundGradient('navy','white',GRAD_HOR,BGRAD_MARGIN); +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->hour->SetFont(FF_FONT1); +$graph->scale->day->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->day->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set("Example of hours in scale"); +$graph->title->SetColor('white'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR); + +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); +$graph->scale->week->SetFont(FF_FONT1); +$graph->scale->hour->SetIntervall(4); + +$graph->scale->hour->SetStyle(HOURSTYLE_HM24); +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE3); + +$data = array( + array(0," Label 1", "2001-01-26 04:00","2001-01-26 14:00"), + array(1," Label 2", "2001-01-26 10:00","2001-01-26 18:00"), + array(2," Label 3", "2001-01-26","2001-01-27 10:00") +); + + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $graph->Add($bar); +} + +$graph->Stroke(); + + + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gantthourminex1.php b/html/includes/jpgraph/src/Examples/gantthourminex1.php new file mode 100644 index 0000000000..749c27503f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gantthourminex1.php @@ -0,0 +1,90 @@ +SetMarginColor('darkgreen@0.8'); +$graph->SetColor('white'); + +// We want to display day, hour and minute scales +$graph->ShowHeaders(GANTT_HDAY | GANTT_HHOUR | GANTT_HMIN); + +// We want to have the following titles in our columns +// describing each activity +$graph->scale->actinfo->SetColTitles( + array('Act','Duration','Start','Finish','Resp'));//,array(100,70,70,70)); + +// Uncomment the following line if you don't want the 3D look +// in the columns headers +//$graph->scale->actinfo->SetStyle(ACTINFO_2D); + +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); + +//These are the default values for use in the columns +//$graph->scale->actinfo->SetFontColor('black'); +//$graph->scale->actinfo->SetBackgroundColor('lightgray'); +//$graph->scale->actinfo->vgrid->SetStyle('solid'); + +$graph->scale->actinfo->vgrid->SetColor('gray'); +$graph->scale->actinfo->SetColor('darkgray'); + +// Setup day format +$graph->scale->day->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->day->SetFont(FF_ARIAL); +$graph->scale->day->SetStyle(DAYSTYLE_SHORTDAYDATE1); + +// Setup hour format +$graph->scale->hour->SetIntervall(1); +$graph->scale->hour->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->hour->SetFont(FF_FONT0); +$graph->scale->hour->SetStyle(HOURSTYLE_H24); +$graph->scale->hour->grid->SetColor('gray:0.8'); + +// Setup minute format +$graph->scale->minute->SetIntervall(30); +$graph->scale->minute->SetBackgroundColor('lightyellow:1.5'); +$graph->scale->minute->SetFont(FF_FONT0); +$graph->scale->minute->SetStyle(MINUTESTYLE_MM); +$graph->scale->minute->grid->SetColor('lightgray'); + +$graph->scale->tableTitle->Set('Phase 1'); +$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->scale->SetTableTitleBackground('darkgreen@0.6'); +$graph->scale->tableTitle->Show(true); + +$graph->title->Set("Example of hours & mins scale"); +$graph->title->SetColor('darkgray'); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); + + +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $graph->Add($bar); +} + + +$vline = new GanttVLine("2001-11-27 13:00"); +$vline->title->Set("27/11 13:00"); +$vline->title->SetFont(FF_FONT1,FS_BOLD,10); +$graph->Add($vline); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gantticonex1.php b/html/includes/jpgraph/src/Examples/gantticonex1.php new file mode 100644 index 0000000000..6b36329037 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gantticonex1.php @@ -0,0 +1,76 @@ +title->Set("Using the builtin icons"); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + + +// 1.5 line spacing to make more room +$graph->SetVMarginFactor(1.5); + +// Setup some nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Note','Task','Duration','Start','Finish'),array(30,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Uncomment this to keep the columns but show no headers +//$graph->scale->actinfo->Show(false); + +// Setup the icons we want to use +$erricon = new IconImage(GICON_FOLDER,0.6); +$startconicon = new IconImage(GICON_FOLDEROPEN,0.6); +$endconicon = new IconImage(GICON_TEXTIMPORTANT,0.5); + +// Store the icons in the first column and use plain text in the others +$data = array( + array(0,array($erricon,"Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array($startconicon,"Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array($endconicon,"Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $bar->title->SetCSIMTarget(array('#1'.$i,'#2'.$i,'#3'.$i,'#4'.$i,'#5'.$i),array('11'.$i,'22'.$i,'33'.$i)); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttmonthyearex1.php b/html/includes/jpgraph/src/Examples/ganttmonthyearex1.php new file mode 100644 index 0000000000..25128ff9b7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttmonthyearex1.php @@ -0,0 +1,50 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-01'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + +// Data for our example activities +$data = array( + array(0,"Group 1 Johan", "2001-11-23","2002-03-1",FF_FONT1,FS_BOLD,8), + array(1," Label 2", "2001-10-26","2001-11-16")); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("red"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttmonthyearex2.php b/html/includes/jpgraph/src/Examples/ganttmonthyearex2.php new file mode 100644 index 0000000000..02703b6321 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttmonthyearex2.php @@ -0,0 +1,66 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + + +// Setup activity info + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Name','Duration','Start','Finish'),array(100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Data for our example activities +$data = array( + array(0,array("Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array("Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array("Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttmonthyearex3.php b/html/includes/jpgraph/src/Examples/ganttmonthyearex3.php new file mode 100644 index 0000000000..2dbf314c6b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttmonthyearex3.php @@ -0,0 +1,66 @@ +title->Set("Only month & year scale"); + +// Setup some "very" nonstandard colors +$graph->SetMarginColor('lightgreen@0.8'); +$graph->SetBox(true,'yellow:0.6',2); +$graph->SetFrame(true,'darkgreen',4); +$graph->scale->divider->SetColor('yellow:0.6'); +$graph->scale->dividerh->SetColor('yellow:0.6'); + +// Explicitely set the date range +// (Autoscaling will of course also work) +$graph->SetDateRange('2001-10-06','2002-4-10'); + +// Display month and year scale with the gridlines +$graph->ShowHeaders(GANTT_HMONTH | GANTT_HYEAR); +$graph->scale->month->grid->SetColor('gray'); +$graph->scale->month->grid->Show(true); +$graph->scale->year->grid->SetColor('gray'); +$graph->scale->year->grid->Show(true); + + +// Setup activity info + +// For the titles we also add a minimum width of 100 pixels for the Task name column +$graph->scale->actinfo->SetColTitles( + array('Type','Name','Duration','Start','Finish'),array(40,100)); +$graph->scale->actinfo->SetBackgroundColor('green:0.5@0.5'); +$graph->scale->actinfo->SetFont(FF_ARIAL,FS_NORMAL,10); +$graph->scale->actinfo->vgrid->SetStyle('solid'); +$graph->scale->actinfo->vgrid->SetColor('gray'); + +// Data for our example activities +$data = array( + array(0,array("","Pre-study","102 days","23 Nov '01","1 Mar '02") + , "2001-11-23","2002-03-1",FF_ARIAL,FS_NORMAL,8), + array(1,array("","Prototype","21 days","26 Oct '01","16 Nov '01"), + "2001-10-26","2001-11-16",FF_ARIAL,FS_NORMAL,8), + array(2,array("","Report","12 days","1 Mar '02","13 Mar '02"), + "2002-03-01","2002-03-13",FF_ARIAL,FS_NORMAL,8) +); + +// Create the bars and add them to the gantt chart +for($i=0; $i4 ) + $bar->title->SetFont($data[$i][4],$data[$i][5],$data[$i][6]); + $bar->SetPattern(BAND_RDIAG,"yellow"); + $bar->SetFillColor("gray"); + $bar->progress->Set(0.5); + $bar->progress->SetPattern(GANTT_SOLID,"darkgreen"); + $graph->Add($bar); +} + +// Output the chart +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/ganttsimpleex1.php b/html/includes/jpgraph/src/Examples/ganttsimpleex1.php new file mode 100644 index 0000000000..64e9cf7bc3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ganttsimpleex1.php @@ -0,0 +1,31 @@ +title->Set("Gantt Graph using CreateSimple()"); + +// Setup scale +$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY); + +// Add the specified activities +$graph->CreateSimple($data); + +// .. and stroke the graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gradbkgex1.php b/html/includes/jpgraph/src/Examples/gradbkgex1.php new file mode 100644 index 0000000000..0f25c64a7d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gradbkgex1.php @@ -0,0 +1,66 @@ +SetMarginColor('white'); +$graph->SetScale("textlin",0,50); +$graph->SetMargin(30,50,30,30); + +// We must have the frame enabled to get the gradient +// However, we don't want the frame line so we set it to +// white color which makes it invisible. +$graph->SetFrame(true,'white'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('blue','navy:0.5',GRAD_HOR,BGRAD_PLOT); + +// Setup the tab title +$graph->tabtitle->Set(' 3rd Division ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); + +// Setup x,Y grid +$graph->xgrid->Show(); +$graph->xgrid->SetColor('gray@0.5'); +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); +$graph->ygrid->SetColor('gray@0.5'); + +// Setup color for axis and labels on axis +$graph->xaxis->SetColor('orange','black'); +$graph->yaxis->SetColor('orange','black'); + +// Ticks on the outsid +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Setup the legend box colors and font +$graph->legend->SetColor('white','navy'); +$graph->legend->SetFillColor('navy@0.25'); +$graph->legend->SetFont(FF_ARIAL,FS_BOLD,8); +$graph->legend->SetShadow('darkgray@0.4',3); +$graph->legend->SetPos(0.05,0.05,'right','top'); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("red"); +$p1->SetWeight(2); +$p1->SetLegend('2002'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("lightyellow"); +$p2->SetLegend('2001'); +$p2->SetWeight(2); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gradlinefillex1.php b/html/includes/jpgraph/src/Examples/gradlinefillex1.php new file mode 100644 index 0000000000..c5b11cb7e9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gradlinefillex1.php @@ -0,0 +1,29 @@ +SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetMarginColor('darkgreen@0.8'); + +$graph->title->Set('Gradient filled line plot'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetWeight(0); +$p1->SetFillGradient('red','yellow'); + +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gradlinefillex2.php b/html/includes/jpgraph/src/Examples/gradlinefillex2.php new file mode 100644 index 0000000000..2c3d9fee8f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gradlinefillex2.php @@ -0,0 +1,30 @@ +SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex2'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen'); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gradlinefillex3.php b/html/includes/jpgraph/src/Examples/gradlinefillex3.php new file mode 100644 index 0000000000..4f842d3848 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gradlinefillex3.php @@ -0,0 +1,30 @@ +SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex3'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen',4); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/gradlinefillex4.php b/html/includes/jpgraph/src/Examples/gradlinefillex4.php new file mode 100644 index 0000000000..59760c6576 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/gradlinefillex4.php @@ -0,0 +1,31 @@ +SetMargin(40,40,20,30); +$graph->SetScale("intlin"); +$graph->SetBox(); +$graph->SetMarginColor('darkgreen@0.8'); + +// Setup a background gradient image +$graph->SetBackgroundGradient('darkred','yellow',GRAD_HOR,BGRAD_PLOT); + +$graph->title->Set('Gradient filled line plot ex2'); +$graph->yscale->SetAutoMin(0); + +// Create the line +$p1 = new LinePlot($datay); +$p1->SetFillGradient('white','darkgreen'); +$p1->SetStepStyle(); +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/groupbarex1.php b/html/includes/jpgraph/src/Examples/groupbarex1.php new file mode 100644 index 0000000000..900caafbbe --- /dev/null +++ b/html/includes/jpgraph/src/Examples/groupbarex1.php @@ -0,0 +1,44 @@ +SetScale("textlin"); +$graph->SetShadow(); +$graph->img->SetMargin(40,30,40,40); +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +$graph->xaxis->title->Set('Year 2002'); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Group bar plot'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$bplot1 = new BarPlot($datay1); +$bplot2 = new BarPlot($datay2); +$bplot3 = new BarPlot($datay3); + +$bplot1->SetFillColor("orange"); +$bplot2->SetFillColor("brown"); +$bplot3->SetFillColor("darkgreen"); + +$bplot1->SetShadow(); +$bplot2->SetShadow(); +$bplot3->SetShadow(); + +$bplot1->SetShadow(); +$bplot2->SetShadow(); +$bplot3->SetShadow(); + +$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3)); +$gbarplot->SetWidth(0.6); +$graph->Add($gbarplot); + +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/horizbarex1.php b/html/includes/jpgraph/src/Examples/horizbarex1.php new file mode 100644 index 0000000000..8c9258c95b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/horizbarex1.php @@ -0,0 +1,64 @@ +SetScale("textlin"); + +// Rotate graph 90 degrees and set margin +$graph->Set90AndMargin(50,20,50,30); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Horizontal bar graph ex 1"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->subtitle->Set("(No Y-axis)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(10); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// We don't want to display Y-axis +$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("black","darkred"); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + +// .. and stroke the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/horizbarex2.php b/html/includes/jpgraph/src/Examples/horizbarex2.php new file mode 100644 index 0000000000..a0cc4181b3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/horizbarex2.php @@ -0,0 +1,70 @@ +SetScale("textlin"); + +$top = 80; +$bottom = 30; +$left = 50; +$right = 30; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Horizontal bar graph ex 2"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->subtitle->Set("(Axis at top)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(5); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); +$graph->yaxis->SetLabelAlign('center','bottom'); +$graph->yaxis->SetLabelAngle(45); +$graph->yaxis->SetLabelFormat('%d'); +$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,12); + +// We don't want to display Y-axis +//$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("black","darkred"); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/horizbarex3.php b/html/includes/jpgraph/src/Examples/horizbarex3.php new file mode 100644 index 0000000000..1105e0623f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/horizbarex3.php @@ -0,0 +1,99 @@ +SetScale("textlin"); + +$top = 50; +$bottom = 80; +$left = 50; +$right = 20; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +$graph->xaxis->SetPos('min'); + +// Nice shadow +$graph->SetShadow(); + +// Setup title +$graph->title->Set("Horizontal bar graph ex 3"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->subtitle->Set("(Axis at bottom)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_FONT2,FS_BOLD,12); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(5); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// Setup the Y-axis to be displayed in the bottom of the +// graph. We also finetune the exact layout of the title, +// ticks and labels to make them look nice. +$graph->yaxis->SetPos('max'); + +// First make the labels look right +$graph->yaxis->SetLabelAlign('center','top'); +$graph->yaxis->SetLabelFormat('%d'); +$graph->yaxis->SetLabelSide(SIDE_RIGHT); + +// The fix the tick marks +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Finally setup the title +$graph->yaxis->SetTitleSide(SIDE_RIGHT); +$graph->yaxis->SetTitleMargin(35); + +// To align the title to the right use : +$graph->yaxis->SetTitle('Turnaround 2002','high'); +$graph->yaxis->title->Align('right'); + +// To center the title use : +//$graph->yaxis->SetTitle('Turnaround 2002','center'); +//$graph->yaxis->title->Align('center'); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,12); +$graph->yaxis->title->SetAngle(0); + +$graph->yaxis->SetFont(FF_FONT2,FS_NORMAL); +// If you want the labels at an angle other than 0 or 90 +// you need to use TTF fonts +//$graph->yaxis->SetLabelAngle(0); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,12); +$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("black","darkred"); +$bplot->value->SetFormat('%.1f mkr'); + +// Add the bar to the graph +$graph->Add($bplot); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/horizbarex4.php b/html/includes/jpgraph/src/Examples/horizbarex4.php new file mode 100644 index 0000000000..84248ed518 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/horizbarex4.php @@ -0,0 +1,48 @@ +SetScale("textlin"); + +$top = 60; +$bottom = 30; +$left = 80; +$right = 30; +$graph->Set90AndMargin($left,$right,$top,$bottom); + +// Nice shadow +$graph->SetShadow(); + +// Setup labels +$lbl = array("Andrew\nTait","Thomas\nAnderssen","Kevin\nSpacey","Nick\nDavidsson", +"David\nLindquist","Jason\nTait","Lorin\nPersson"); +$graph->xaxis->SetTickLabels($lbl); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center','right'); + +// Label align for Y-axis +$graph->yaxis->SetLabelAlign('center','bottom'); + +// Titles +$graph->title->Set('Year Married'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetWidth(0.5); +$bplot->SetYMin(1990); + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/horizbarex6.php b/html/includes/jpgraph/src/Examples/horizbarex6.php new file mode 100644 index 0000000000..7289f8d51a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/horizbarex6.php @@ -0,0 +1,83 @@ +SetScale("textlin"); + +// No frame around the image +$graph->SetFrame(false); + +// Rotate graph 90 degrees and set margin +$graph->Set90AndMargin(100,20,50,30); + +// Set white margin color +$graph->SetMarginColor('white'); + +// Use a box around the plot area +$graph->SetBox(); + +// Use a gradient to fill the plot area +$graph->SetBackgroundGradient('white','lightblue',GRAD_HOR,BGRAD_PLOT); + +// Setup title +$graph->title->Set("Graphic card performance"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,11); +$graph->subtitle->Set("(Non optimized)"); + +// Setup X-axis +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,8); + +// Some extra margin looks nicer +$graph->xaxis->SetLabelMargin(10); + +// Label align for X-axis +$graph->xaxis->SetLabelAlign('right','center'); + +// Add some grace to y-axis so the bars doesn't go +// all the way to the end of the plot area +$graph->yaxis->scale->SetGrace(20); + +// We don't want to display Y-axis +$graph->yaxis->Hide(); + +// Now create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetShadow(); + +//You can change the width of the bars if you like +//$bplot->SetWidth(0.5); + +// Set gradient fill for bars +$bplot->SetFillGradient('darkred','yellow',GRAD_HOR); + +// We want to display the value of each bar at the top +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD,10); +//$bplot->value->SetAlign('left','center'); +$bplot->value->SetColor("white"); +$bplot->value->SetFormat('%.1f'); +$bplot->SetValuePos('max'); + +// Add the bar to the graph +$graph->Add($bplot); + +// Add some explanation text +$txt = new Text('Note: Higher value is better.'); +$txt->SetPos(190,399,'center','bottom'); +$txt->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->Add($txt); + +// .. and stroke the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/imgmarkercsimex1.php b/html/includes/jpgraph/src/Examples/imgmarkercsimex1.php new file mode 100644 index 0000000000..e7a1748228 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/imgmarkercsimex1.php @@ -0,0 +1,55 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Setup the tab +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); +$graph->tabtitle->SetColor('darkred','#E1E1FF'); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the plot +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); + +$p1->SetCSIMTargets(array('#1','#2','#3','#4','#5')); + +// Use an image of favourite car as +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5); +//$p1->mark->SetType(MARK_SQUARE); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +$graph->StrokeCSIM(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/imgmarkerex1.php b/html/includes/jpgraph/src/Examples/imgmarkerex1.php new file mode 100644 index 0000000000..536622aa39 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/imgmarkerex1.php @@ -0,0 +1,52 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Setup the tab +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); +$graph->tabtitle->SetColor('darkred','#E1E1FF'); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the plot +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); + +// Use an image of favourite car as marker +$p1->mark->SetType(MARK_IMG,'saab_95.jpg',0.5); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/impulsex1.php b/html/includes/jpgraph/src/Examples/impulsex1.php new file mode 100644 index 0000000000..bcb1109bac --- /dev/null +++ b/html/includes/jpgraph/src/Examples/impulsex1.php @@ -0,0 +1,23 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Simple mpuls plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->SetImpuls(); + +$graph->Add($sp1); +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/impulsex2.php b/html/includes/jpgraph/src/Examples/impulsex2.php new file mode 100644 index 0000000000..4ca1ca44a6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/impulsex2.php @@ -0,0 +1,29 @@ +SetScale("textlin"); + +$graph->SetShadow(); +$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Impuls plot, variant 2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->Set("Impuls respons"); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay);//,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(4); +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(3); + +$graph->Add($sp1); +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/impulsex3.php b/html/includes/jpgraph/src/Examples/impulsex3.php new file mode 100644 index 0000000000..8b1dc6a494 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/impulsex3.php @@ -0,0 +1,53 @@ +SetScale("intlin"); +$graph->SetShadow(); +$graph->SetBox(); + +$graph->title->Set("Impuls Example 3"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Set format callback for labels +$graph->yaxis->SetLabelFormatCallback("mycallback"); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Extend the margin for the labels on the Y-axis and reverse the direction +// of the ticks on the Y-axis +$graph->yaxis->SetLabelMargin(12); +$graph->xaxis->SetLabelMargin(6); +$graph->yaxis->SetTickSide(SIDE_LEFT); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Create a new impuls type scatter plot +$sp1 = new ScatterPlot($datay); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->mark->SetFillColor("red"); +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(1); +$sp1->mark->SetWidth(3); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/impulsex4.php b/html/includes/jpgraph/src/Examples/impulsex4.php new file mode 100644 index 0000000000..08acb75d70 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/impulsex4.php @@ -0,0 +1,75 @@ +SetScale("intlin"); + +$graph->SetShadow(); +$graph->SetBox(); +$graph->title->Set("Impuls Example 4"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Set some other color then the boring default +$graph->SetColor("lightyellow"); +$graph->SetMarginColor("khaki"); + +// Set legend box specification +$graph->legend->SetFillColor("white"); +$graph->legend->SetLineWeight(2); + +// Set X-axis at the minimum value of Y-axis (default will be at 0) +$graph->xaxis->SetPos("min"); // "min" will position the x-axis at the minimum value of the Y-axis + +// Extend the margin for the labels on the Y-axis and reverse the direction +// of the ticks on the Y-axis +$graph->yaxis->SetLabelMargin(12); +$graph->xaxis->SetLabelMargin(6); +$graph->yaxis->SetTickSide(SIDE_LEFT); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Add mark graph with static lines +$line = new PlotLine(HORIZONTAL,0,"black",2); +$graph->AddLine($line); + +// Create a new impuls type scatter plot +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_SQUARE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(3); + +$sp1->SetImpuls(); +$sp1->SetColor("blue"); +$sp1->SetWeight(1); +$sp1->SetLegend("Non-causal signal"); + +$graph->Add($sp1); + +// Create the envelope plot +$ep1 = new LinePlot($datayenv,$datax); +$ep1->SetStyle("dotted"); +$ep1->SetLegend("Positive envelope"); + +$graph->Add($ep1); + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/inyaxisex1.php b/html/includes/jpgraph/src/Examples/inyaxisex1.php new file mode 100644 index 0000000000..5954eb69c5 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/inyaxisex1.php @@ -0,0 +1,51 @@ +SetScale("linlin"); +$graph->img->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +$graph->title->Set("Depth curve. Dive #2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y-axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + + +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); + + +$graph->Add($lp1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/inyaxisex2.php b/html/includes/jpgraph/src/Examples/inyaxisex2.php new file mode 100644 index 0000000000..51da310fef --- /dev/null +++ b/html/includes/jpgraph/src/Examples/inyaxisex2.php @@ -0,0 +1,53 @@ +SetScale("linlin"); +$graph->img->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); +$graph->SetBackgroundImage("blueblack400x300grad.png",1); +//$graph->SetBackgroundImage("lightbluedarkblue400x300grad.png",1); + +$graph->title->Set("Depth curve. Dive #2"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y-axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + + +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); + + +$graph->Add($lp1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/inyaxisex3.php b/html/includes/jpgraph/src/Examples/inyaxisex3.php new file mode 100644 index 0000000000..702549f4ce --- /dev/null +++ b/html/includes/jpgraph/src/Examples/inyaxisex3.php @@ -0,0 +1,69 @@ +SetScale("linlin"); +$graph->SetY2Scale("lin"); +$graph->SetMargin(50,50,60,40); +$graph->SetMarginColor('darkblue'); +$graph->SetColor('darkblue'); + +// Setup titles +$graph->title->Set("Inverting both Y-axis"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetColor("white"); + +$graph->subtitle->Set("(Negated Y & Y2 axis)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); +$graph->subtitle->SetColor("white"); + +// Setup axis +$graph->yaxis->SetLabelFormatCallback("_cb_negate"); +$graph->xaxis->SetColor("lightblue","white"); +$graph->yaxis->SetColor("lightblue","white"); +$graph->ygrid->SetColor("blue"); + +// Setup Y2 axis +$graph->y2axis->SetLabelFormatCallback("_cb_negate"); +$graph->y2axis->SetColor("darkred","white"); +$graph->y2scale->SetAutoMax(0); // To make sure it starts with 0 + +// Setup plot 1 +$lp1 = new LinePlot($ydata); +$lp1->SetColor("yellow"); +$lp1->SetWeight(2); +$graph->Add($lp1); + +// Setup plot 2 +$lp2 = new LinePlot($y2data); +$lp2->SetColor("darkred"); +$lp2->SetWeight(2); +$graph->AddY2($lp2); + +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/ledex1.php b/html/includes/jpgraph/src/Examples/ledex1.php new file mode 100644 index 0000000000..c9d35b3183 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ledex1.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_GREEN); + + + +?> diff --git a/html/includes/jpgraph/src/Examples/ledex2.php b/html/includes/jpgraph/src/Examples/ledex2.php new file mode 100644 index 0000000000..257f6d43d1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ledex2.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_RED); + + + +?> diff --git a/html/includes/jpgraph/src/Examples/ledex3.php b/html/includes/jpgraph/src/Examples/ledex3.php new file mode 100644 index 0000000000..8693847088 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ledex3.php @@ -0,0 +1,12 @@ +StrokeNumber('0123456789. ABCDEFGHIJKL',LEDC_YELLOW); + + + +?> diff --git a/html/includes/jpgraph/src/Examples/ledex4.php b/html/includes/jpgraph/src/Examples/ledex4.php new file mode 100644 index 0000000000..e4138550ce --- /dev/null +++ b/html/includes/jpgraph/src/Examples/ledex4.php @@ -0,0 +1,12 @@ +StrokeNumber('ABC123.',LEDC_RED); + + + +?> diff --git a/html/includes/jpgraph/src/Examples/lightbluedarkblue400x300grad.png b/html/includes/jpgraph/src/Examples/lightbluedarkblue400x300grad.png new file mode 100644 index 0000000000000000000000000000000000000000..86092ecfd852b479f7e21ed69415fd8b554bf2ff GIT binary patch literal 1165 zcmXYxX)u&=9LFCmG9o#%iA5W;x!Q~f8P{glon&-~R>)*9%2Fc7IF@DCO^#)gn-Y@b z46B?Qa^)z=i_-LJO(SXZ`@eWzJm2|!zTfZv_x$H!y1P2aN*|NPFie(4wfDdO9fqvd7TTn9rM}kbL`fSnJu%d=9%=y>9qO}DYb&+YC%%fR03}@o;wj&HvX_= z>_PG9{lfQA`R^igM(%R>5n23j)^KS0P)OR~o#eN{NdrL%{eh4AZpHS}V|x6eyL}nm zKKI^Si|D!%{@OdV(<|haXK=@*pqCc|+THxyTyC~H`?fk>e?h(4a>4sK#p{`!XS0n* zleJr;l}m%AQ@uH@?wmuNDW%rLw#L}H`i#}n)0S0+=1=s^czS0mNyZhrWUh`8muOI~ ztyiW=DkbQYs1qNnX&2))i&QlVRgM=Z;qw)b=F2PR$tmW_%IC<)WlPI&q@>xBQdts` znK*Hl*ny03kL64Z!{KT6HlER?TY}3f%HkMB(7>DL%_lGWMbVS!QFDLzYujr57K9k~ zT4N*wPqJWOsWQxkjVe_If9hDX<`75Kj?PF_vZIUCe57iFngi-AQnf%eAf*hdDztv5 zl8M8dA|JPOEpp1>4@nOhCYcy$nnS0uw8&jdKuJi=1vMGeU{E{IY$m8%5c3mN(uJ5V zh*@@l7!5$T5y}R17tjgLeoRb!p1MW6-T#vcHNhnnT+Ta#i#)in!6k+TF6-b@4h4in zKx+_+3g7_^qV1o)?8N>~g!(YMiDuDGBw*GE#h{&xLd*?Vr|=Y@bAWccLPJ?V!w{MQ z4VM62L8u|1+th^?oLQUy!SLIgP^%jiz<~<^Tz1mHg%2)P$b|$hhd?z%vuG!qNX_2g z><+pog`oDpJrSCKLl_(()(MVa0pY9g?ROF&oDFCkLX83S1$5UDP*XsA5t;-j7tp`j t0sO;jQ(5YLmAmMp5MX`}b%$H=n{e_-EJb&MF(dlTU^I%WeY34!;y+H$?{NSC literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/Examples/linebarcentex1.php b/html/includes/jpgraph/src/Examples/linebarcentex1.php new file mode 100644 index 0000000000..9c220c57ae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linebarcentex1.php @@ -0,0 +1,49 @@ +GetShortMonth(); + +// Create the graph. +$graph = new Graph(400,200,"auto"); +$graph->SetScale("textlin"); +$graph->SetMargin(40,130,20,40); +$graph->SetShadow(); +$graph->xaxis->SetTickLabels($datax); + +// Create the linear error plot +$l1plot=new LinePlot($l1datay); +$l1plot->SetColor("red"); +$l1plot->SetWeight(2); +$l1plot->SetLegend("Prediction"); + +//Center the line plot in the center of the bars +$l1plot->SetBarCenter(); + + +// Create the bar plot +$bplot = new BarPlot($l2datay); +$bplot->SetFillColor("orange"); +$bplot->SetLegend("Result"); + +// Add the plots to t'he graph +$graph->Add($bplot); +$graph->Add($l1plot); + + +$graph->title->Set("Adding a line plot to a bar graph v1"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/linebarex1.php b/html/includes/jpgraph/src/Examples/linebarex1.php new file mode 100644 index 0000000000..c821d825e9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linebarex1.php @@ -0,0 +1,75 @@ +SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use an integer X-scale +$graph->SetScale("textlin"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("100 data points, X-Scale: 'text'"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger +// then default +$graph->img->SetMargin(40,140,40,80); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Display every 10:th datalabel +$graph->xaxis->SetTextTickInterval(6); +$graph->xaxis->SetTextLabelInterval(2); +$graph->xaxis->SetTickLabels($databarx); +$graph->xaxis->SetLabelAngle(90); + +// Create a red line plot +$p1 = new LinePlot($datay); +$p1->SetColor("red"); +$p1->SetLegend("Pressure"); + +// Create the bar plot +$b1 = new BarPlot($databary); +$b1->SetLegend("Temperature"); +$b1->SetAbsWidth(6); +$b1->SetShadow(); + +// The order the plots are added determines who's ontop +$graph->Add($p1); +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/linebarex2.php b/html/includes/jpgraph/src/Examples/linebarex2.php new file mode 100644 index 0000000000..2db2402b5d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linebarex2.php @@ -0,0 +1,59 @@ +SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); +$graph->SetShadow(); + +// Use an integer X-scale +$graph->SetScale("intlin"); + +// Set title and subtitle +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("(\"left\" aligned bars)"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Make the margin around the plot a little bit bigger +// then default +$graph->img->SetMargin(40,120,40,40); + +// Slightly adjust the legend from it's default position in the +// top right corner to middle right side +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create a red line plot +$p1 = new LinePlot($datay,$datax); +$p1->SetColor("red"); +$p1->SetLegend("Status one"); +$graph->Add($p1); + +// Create the bar plot +$b1 = new BarPlot($databary,$databarx); +$b1->SetLegend("Status two"); +$b1->SetAlign("left"); +$b1->SetShadow(); +$graph->Add($b1); + +// Finally output the image +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/linebarex3.php b/html/includes/jpgraph/src/Examples/linebarex3.php new file mode 100644 index 0000000000..8fa79231ba --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linebarex3.php @@ -0,0 +1,52 @@ +img->SetMargin(40,180,40,40); +$graph->SetBackgroundImage("tiger_bkg.png",BGIMG_FILLFRAME); + +//$graph->img->SetAntiAliasing(); + +$graph->SetScale("intlin"); +$graph->SetShadow(); +$graph->title->Set("Combined bar and line plot"); +$graph->subtitle->Set("(\"center\" aligned bars)"); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Slightly adjust the legend from it's default position in the +// top right corner. +$graph->legend->Pos(0.05,0.5,"right","center"); + +// Create the first line + +$p1 = new LinePlot($datay,$datax); +$p1->SetWeight(1); +$p1->SetColor("red"); +$p1->SetLegend("Triumph Tiger -98"); +$graph->Add($p1); + +$b1 = new BarPlot($databary,$databarx); +$b1->SetAbsWidth(10); +$b1->SetAlign("center"); +$b1->SetShadow(); +$graph->Add($b1); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/linegraceex.php b/html/includes/jpgraph/src/Examples/linegraceex.php new file mode 100644 index 0000000000..e9b7c30e84 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linegraceex.php @@ -0,0 +1,31 @@ +img->SetMargin(40,40,40,40); + +$graph->img->SetAntiAliasing(); +$graph->SetScale("textlin"); +$graph->SetShadow(); +$graph->title->Set("Example of 10% top/bottom grace"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Add 10% grace to top and bottom of plot +$graph->yscale->SetGrace(10,10); + +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/lineiconex1.php b/html/includes/jpgraph/src/Examples/lineiconex1.php new file mode 100644 index 0000000000..5bc4ad216e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/lineiconex1.php @@ -0,0 +1,49 @@ +SetMargin(40,40,20,30); +$graph->SetScale("textlin"); + +$graph->title->Set('Adding an icon ("tux") in the background'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +//$graph->SetBackgroundGradient('red','blue'); + +$graph->xaxis->SetPos('min'); + +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetFillGradient('yellow@0.4','red@0.4'); + +$p2 = new LinePlot($datay2); +$p2->SetColor("black"); +$p2->SetFillGradient('green@0.4','white'); + +$p3 = new LinePlot($datay3); +$p3->SetColor("blue"); +$p3->SetFillGradient('navy@0.4','white@0.4'); + +$graph->Add($p1); +$graph->Add($p2); +$graph->Add($p3); + +$icon = new IconPlot('penguin.png',0.2,0.3,1,30); +$icon->SetAnchor('center','center'); +$graph->Add($icon); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/lineiconex2.php b/html/includes/jpgraph/src/Examples/lineiconex2.php new file mode 100644 index 0000000000..6215ab5821 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/lineiconex2.php @@ -0,0 +1,32 @@ +SetMargin(40,40,20,30); +$graph->SetScale("textlin"); + +$graph->title->Set('Adding a country flag as a an icon'); + +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); +$p1->SetFillGradient('yellow@0.4','red@0.4'); + +$graph->Add($p1); + +$icon = new IconPlot(); +$icon->SetCountryFlag('iceland',50,30,1.5,40,3); +$icon->SetAnchor('left','top'); +$graph->Add($icon); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/linlogex1.php b/html/includes/jpgraph/src/Examples/linlogex1.php new file mode 100644 index 0000000000..68aa45448a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/linlogex1.php @@ -0,0 +1,64 @@ +SetScale("linlog"); +$graph->img->SetMargin(40,20,20,40); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->Set("ab/2"); +$graph->yaxis->title->Set("rho_s"); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->ygrid->Show(true,true); +$graph->xgrid->Show(true,true); + +$errorplot=new ErrorPlot($ydata, $xdata); + +$graph->Add($errorplot); + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/listallflags.php b/html/includes/jpgraph/src/Examples/listallflags.php new file mode 100644 index 0000000000..a26706eefd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/listallflags.php @@ -0,0 +1,29 @@ +\n"; +$cols=0; +while( list($key,$val) = each($flags->iCountryNameMap) ) { + + echo '
    '; + echo "$key
    idx=$val\n"; + + if( ++$cols == 5 ) { + echo "\n"; + $cols=0; + } +} + +echo ""; + +?> + diff --git a/html/includes/jpgraph/src/Examples/listallflags_helper.php b/html/includes/jpgraph/src/Examples/listallflags_helper.php new file mode 100644 index 0000000000..29681caa0c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/listallflags_helper.php @@ -0,0 +1,25 @@ +GetImgByIdx($idx); +header ("Content-type: image/png"); +ImagePng ($img); + +?> diff --git a/html/includes/jpgraph/src/Examples/listfontsex1.php b/html/includes/jpgraph/src/Examples/listfontsex1.php new file mode 100644 index 0000000000..32f45b32d0 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/listfontsex1.php @@ -0,0 +1,117 @@ +Set(0,27,0,53); +$g->SetMargin(5,6,5,6); +$g->SetColor('white'); +$g->SetMarginColor("teal"); +$g->InitFrame(); + + +$t = new CanvasRectangleText(); +$t->SetFillColor('lightgreen'); +$t->SetFontColor('navy'); +$t->SetFont(FF_ARIAL,FS_NORMAL,16); +$t->Set("\n\n\n\n\n\n\n\n\n\n\nTTF Fonts",0.5,19,26,32); +$t->Stroke($g->img,$scale); + + +$t = new CanvasRectangleText(); + +$t->SetFillColor(''); +$t->SetFontColor('black'); +$t->SetColor(''); +$t->SetShadow(''); +$t->SetFont(FF_ARIAL,FS_BOLD,18); +$t->Set('Family',1,1,8); +$t->Stroke($g->img,$scale); + +$t->Set('Italic style',9,1,8); +$t->Stroke($g->img,$scale); + +$t->Set('Bold style',17.5,1,8); +$t->Stroke($g->img,$scale); + + +$t->SetFillColor('yellow'); +$t->SetFontColor('black'); +$t->SetColor('black'); +$t->SetShadow('gray'); + +$r=6;$c=1;$w=7.5;$h=3.5; + +$fonts=array( + array("Font 0",FF_FONT0,FS_NORMAL), + array("",FF_FONT0,FS_ITALIC), + array("",FF_FONT0,FS_BOLD), + + array("Font 1",FF_FONT1,FS_NORMAL), + array("",FF_FONT1,FS_ITALIC), + array("Font 1 bold",FF_FONT1,FS_BOLD), + + array("Font 2",FF_FONT2,FS_NORMAL), + array("",FF_FONT2,FS_ITALIC), + array("Font 2 bold",FF_FONT2,FS_BOLD), + + array("Arial",FF_ARIAL,FS_NORMAL), + array("Arial italic",FF_ARIAL,FS_ITALIC), + array("Arial bold",FF_ARIAL,FS_BOLD), + + array("Verdana",FF_VERDANA,FS_NORMAL), + array("Verdana italic",FF_VERDANA,FS_ITALIC), + array("Verdana bold",FF_VERDANA,FS_BOLD), + + + array("Trebuche",FF_TREBUCHE,FS_NORMAL), + array("Trebuche italic",FF_TREBUCHE,FS_ITALIC), + array("Trebuche bold",FF_TREBUCHE,FS_BOLD), + + array("Georgia",FF_GEORGIA,FS_NORMAL), + array("Georgia italic",FF_GEORGIA,FS_ITALIC), + array("Georgia bold",FF_GEORGIA,FS_BOLD), + + array("Comic",FF_COMIC,FS_NORMAL), + array("",FF_COMIC,FS_ITALIC), + array("Comic bold",FF_COMIC,FS_BOLD), + + array("Courier",FF_COURIER,FS_NORMAL), + array("Courier italic",FF_COURIER,FS_ITALIC), + array("Courier bold",FF_COURIER,FS_BOLD), + + + array("Times normal",FF_TIMES,FS_NORMAL), + array("Times italic",FF_TIMES,FS_ITALIC), + array("Times bold italic",FF_TIMES,FS_BOLDITALIC), + ); + + +$n=count($fonts); + +for( $i=0; $i < $n; ++$i ) { + + if( $i==9 ) $r += 3; + + if( $fonts[$i][0] ) { + $t->SetTxt($fonts[$i][0]); + $t->SetPos($c,$r,$w,$h); + $t->SetFont($fonts[$i][1],$fonts[$i][2],13); + $t->Stroke($g->img,$scale); + } + + $c += $w+1; + if( $c > 30-$w-2 ) { + $c = 1; + $r += 4; + } + +} + +$g->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/logbarex1.php b/html/includes/jpgraph/src/Examples/logbarex1.php new file mode 100644 index 0000000000..06b7e49a1b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/logbarex1.php @@ -0,0 +1,48 @@ +img->SetMargin(50,30,50,50); +$graph->SetScale("textlog"); +//$graph->SetShadow(); + +// Setup titles for graph and axis +$graph->title->Set("Bar with logarithmic Y-scale"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,18); + +$graph->xaxis->SetTitle("2002"); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); +$graph->yaxis->SetTitle("Y-title",'center'); +$graph->yaxis->SetTitleMargin(30); + +// Setup month on X-scale +//$graph->xaxis->SetTickLabels($datax); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +//You can also set a manual base of the bars +//$bplot->SetYBase(0.001); + +/* +$bplot->SetShadow(); +$bplot->value->Show(); +$bplot->value->SetFont(FF_ARIAL,FS_BOLD); +$bplot->value->SetAngle(45); +$bplot->value->SetColor("black","darkred"); +*/ + +$graph->Add($bplot); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/loglogex1.php b/html/includes/jpgraph/src/Examples/loglogex1.php new file mode 100644 index 0000000000..d1364373cf --- /dev/null +++ b/html/includes/jpgraph/src/Examples/loglogex1.php @@ -0,0 +1,59 @@ +SetScale("loglog"); +$graph->SetY2Scale("lin"); +$graph->y2axis->SetColor("blue","blue"); + +$graph->img->SetMargin(50,70,40,50); +$graph->title->Set("Geoelektrik"); +$graph->xaxis->title->Set("Auslage ab/2 [m]"); +$graph->yaxis->title->Set("rho_s [Ohm m]"); +$graph->y2axis->title->Set("mn/2 [m]"); +$graph->y2axis->title->SetColor("blue"); +$graph->y2axis->SetTitleMargin(35); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xgrid->Show(true,true); +$graph->ygrid->Show(true,true); + +// Create the linear plot + +$lineplot=new LinePlot($rhos,$ab2); +$lineplot->SetWeight(1); +$lineplot->mark->SetType(MARK_FILLEDCIRCLE); +$lineplot->mark->SetWidth(2); + +// Create scatter plot + +$scplot=new ScatterPlot($mn2,$ab2); +$scplot->mark->SetType(MARK_FILLEDCIRCLE); +$scplot->mark->SetColor("blue"); +$scplot->mark->SetWidth(2); + +// Add plots to the graph + +$graph->AddY2($scplot); +$graph->Add($lineplot); + +// Display the graph +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/manscaleex1.php b/html/includes/jpgraph/src/Examples/manscaleex1.php new file mode 100644 index 0000000000..4bb452fc3a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manscaleex1.php @@ -0,0 +1,22 @@ +SetScale("textlin",3,35); +$graph->yscale->ticks->Set(7,2); + +$graph->title->Set('Manual scale, manual ticks'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/manscaleex2.php b/html/includes/jpgraph/src/Examples/manscaleex2.php new file mode 100644 index 0000000000..79abb18453 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manscaleex2.php @@ -0,0 +1,21 @@ +SetScale("textlin",3,35); + +$graph->title->Set('Manual scale, exact limits'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/manscaleex3.php b/html/includes/jpgraph/src/Examples/manscaleex3.php new file mode 100644 index 0000000000..4d1d8d8ce0 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manscaleex3.php @@ -0,0 +1,23 @@ +SetScale("textlin",3,35); +$graph->SetTickDensity(TICKD_DENSE); +$graph->yscale->SetAutoTicks(); + +$graph->title->Set('Manual scale, auto ticks'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/manscaleex4.php b/html/includes/jpgraph/src/Examples/manscaleex4.php new file mode 100644 index 0000000000..b1f01fd134 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manscaleex4.php @@ -0,0 +1,22 @@ +SetScale("textlin",3,35); +$graph->yscale->SetAutoTicks(); + +$graph->title->Set('Manual scale, allow adjustment'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$line = new LinePlot($ydata); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/manualtickex1.php b/html/includes/jpgraph/src/Examples/manualtickex1.php new file mode 100644 index 0000000000..f2e27c2c73 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manualtickex1.php @@ -0,0 +1,73 @@ +GetTicks($datax); + +// We add some grace to the end of the X-axis scale so that the first and last +// data point isn't exactly at the very end or beginning of the scale +$grace = 400000; +$xmin = $datax[0]-$grace; +$xmax = $datax[$n-1]+$grace; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); + +// +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('intlin',0,0,$xmin,$xmax); +$graph->title->Set('Basic example with manual ticks'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetTickPositions($tickPositions,$minTickPositions); + +// The labels should be formatted at dates with "Year-month" +$graph->xaxis->SetLabelFormatString('My',true); + +// Use Ariel font +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,9); + +// Add a X-grid +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor('teal'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/manualtickex2.php b/html/includes/jpgraph/src/Examples/manualtickex2.php new file mode 100644 index 0000000000..bb8175f959 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/manualtickex2.php @@ -0,0 +1,72 @@ +E(0,10); + +// Now get labels at 1/2 PI intervall +$tickPositions = array(); +$tickLabels = array(); +$tickPositions[0] = 0; +$tickLabels[0] = '0'; +for($i=1; $i/2*M_PI < 11 ; ++$i ) { + $tickPositions[$i] = $i/2*M_PI; + if( $i % 2 ) + $tickLabels[$i] = $i.'/2'.SymChar::Get('pi'); + else + $tickLabels[$i] = ($i/2).SymChar::Get('pi'); +} + +$n = count($datax); +$xmin = $datax[0]; +$xmax = $datax[$n-1]; + +// +// The code to setup a very basic graph +// +$graph = new Graph(400,200); + +// +// We use an integer scale on the X-axis since the positions on the X axis +// are assumed to be UNI timestamps +$graph->SetScale('linlin',0,0,$xmin,$xmax); +$graph->title->Set('Example with manual tick labels'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,12); + +// +// Make sure that the X-axis is always at the bottom of the scale +// (By default the X-axis is alwys positioned at Y=0 so if the scale +// doesn't happen to include 0 the axis will not be shown) +$graph->xaxis->SetPos('min'); + +// Now set the tic positions +$graph->xaxis->SetMajTickPositions($tickPositions,$tickLabels); + +// Use Times font +$graph->xaxis->SetFont(FF_TIMES,FS_NORMAL,10); +$graph->yaxis->SetFont(FF_TIMES,FS_NORMAL,10); + +// Add a X-grid +$graph->xgrid->Show(); + +// Create the plot line +$p1 = new LinePlot($datay,$datax); +$p1->SetColor('teal'); +$graph->Add($p1); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/markflagex1.php b/html/includes/jpgraph/src/Examples/markflagex1.php new file mode 100644 index 0000000000..a68c43ea82 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/markflagex1.php @@ -0,0 +1,74 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,5,25,20); + +// Enable X-grid as well +$graph->xgrid->Show(); + +// Use months as X-labels +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +//------------------------ +// Create the plots +//------------------------ +$p1 = new LinePlot($datay[0]); +$p1->SetColor("navy"); + +// Use a flag +$p1->mark->SetType(MARK_FLAG1,'chin'); + +// Displayes value on top of marker image +$p1->value->SetFormat('%d mil'); +$p1->value->Show(); +$p1->value->SetColor('darkred'); +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p1->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p1->SetCenter(); + +$graph->Add($p1); + +//------------ +// 2:nd plot +//------------ +$p2 = new LinePlot($datay[1]); +$p2->SetColor("navy"); + +// Use a flag +$p2->mark->SetType(MARK_FLAG1,'united states'); + +// Displayes value on top of marker image +$p2->value->SetFormat('%d mil'); +$p2->value->Show(); +$p2->value->SetColor('darkred'); +$p2->value->SetFont(FF_ARIAL,FS_BOLD,10); +// Increase the margin so that the value is printed avove tje +// img marker +$p2->value->SetMargin(14); + +// Incent the X-scale so the first and last point doesn't +// fall on the edges +$p2->SetCenter(); +$graph->Add($p2); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/multconstganttex01.php b/html/includes/jpgraph/src/Examples/multconstganttex01.php new file mode 100644 index 0000000000..d59d5e6a13 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/multconstganttex01.php @@ -0,0 +1,30 @@ +title->Set("Example with multiple constrains"); + +$bar1 = new GanttBar(0, "Label 1", "2003-06-08", "2003-06-12"); +$bar2 = new GanttBar(1, "Label 2", "2003-06-16", "2003-06-19"); +$bar3 = new GanttBar(2, "Label 3", "2003-06-15", "2003-06-21"); + +//create constraints +$bar1->SetConstrain(1, CONSTRAIN_ENDSTART); +$bar1->SetConstrain(2, CONSTRAIN_ENDSTART); + +// Setup scale +$graph->ShowHeaders(/*GANTT_HYEAR | GANTT_HMONTH |*/ GANTT_HDAY | GANTT_HWEEK); +$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAYWNBR); + +// Add the specified activities +$graph->Add($bar1); +$graph->Add($bar2); +$graph->Add($bar3); + +// .. and stroke the graph +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/mulyaxiscsimex1.php b/html/includes/jpgraph/src/Examples/mulyaxiscsimex1.php new file mode 100644 index 0000000000..31b941201c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/mulyaxiscsimex1.php @@ -0,0 +1,75 @@ +SetMargin(60,180,50,40); +$graph->SetMarginColor('white'); +$graph->title->Set("Multi Y-axes with Image Map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the scales for all axes +$graph->SetScale("intlin"); +$graph->SetYScale(0,'int'); +$graph->SetYScale(1,'int'); + +// Standard Y-axis plot +$lp1 = new LinePlot($datay1); +$lp1->SetLegend('2001'); +$lp1->mark->SetType(MARK_DIAMOND); +$lp1->mark->SetWidth(15); +$lp1->mark->SetFillColor('orange'); +$lp1->SetCSIMTargets($targ1,$alts1); +$graph->yaxis->title->Set('Basic Rate'); +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->yaxis->title->SetColor('black'); +$graph->Add($lp1); + +// First multi Y-axis plot +$lp2 = new LinePlot($datay2); +$lp2->SetLegend('2002'); +$lp2->mark->SetType(MARK_DIAMOND); +$lp2->mark->SetWidth(15); +$lp2->mark->SetFillColor('darkred'); +$lp2->SetCSIMTargets($targ2,$alts2); +$graph->ynaxis[0]->SetColor('darkred'); +$graph->ynaxis[0]->title->Set('Rate A'); +$graph->ynaxis[0]->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->ynaxis[0]->title->SetColor('darkred'); +$graph->AddY(0,$lp2); + +// Second multi Y-axis plot +$lp3 = new LinePlot($datay3); +$lp3->SetLegend('2003'); +$lp3->mark->SetType(MARK_DIAMOND); +$lp3->mark->SetWidth(15); +$lp3->mark->SetFillColor('darkgreen'); +$lp3->SetCSIMTargets($targ3,$alts3); +$graph->ynaxis[1]->SetColor('darkgreen'); +$graph->ynaxis[1]->title->Set('Rate B'); +$graph->ynaxis[1]->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->ynaxis[1]->title->SetColor('darkgreen'); +$graph->AddY(1,$lp3); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); +?> diff --git a/html/includes/jpgraph/src/Examples/mulyaxisex1.php b/html/includes/jpgraph/src/Examples/mulyaxisex1.php new file mode 100644 index 0000000000..638042c12e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/mulyaxisex1.php @@ -0,0 +1,51 @@ +SetMargin(40,150,40,30); +$graph->SetMarginColor('white'); + +$graph->SetScale('intlin'); +$graph->title->Set('Using multiple Y-axis'); +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); + +$graph->SetYScale(0,'lin'); +$graph->SetYScale(1,'lin'); +$graph->SetYScale(2,'lin'); + +$p1 = new LinePlot($datay); +$graph->Add($p1); + +$p2 = new LinePlot($datay2); +$p2->SetColor('teal'); +$graph->AddY(0,$p2); +$graph->ynaxis[0]->SetColor('teal'); + +$p3 = new LinePlot($datay3); +$p3->SetColor('red'); +$graph->AddY(1,$p3); +$graph->ynaxis[1]->SetColor('red'); + +$p4 = new LinePlot($datay4); +$p4->SetColor('blue'); +$graph->AddY(2,$p4); +$graph->ynaxis[2]->SetColor('blue'); + +// Output line +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/negbarvalueex01.php b/html/includes/jpgraph/src/Examples/negbarvalueex01.php new file mode 100644 index 0000000000..5c60ee9141 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/negbarvalueex01.php @@ -0,0 +1,39 @@ +img->SetMargin(60,30,40,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// DIsplay value at top of each bar +$bplot->value->Show(); +$bplot->SetShadow(); + +$graph->Add($bplot); + +// Position the scale at the min of the other axis +$graph->xaxis->SetPos("min"); + +// Add 10% more space at top and bottom of graph +$graph->yscale->SetGrace(10,10); + +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); +$graph->title->Set("Example of bar plot with absolute labels"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_NORMAL,16); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/nullvalueex01.php b/html/includes/jpgraph/src/Examples/nullvalueex01.php new file mode 100644 index 0000000000..b9fedccfc9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/nullvalueex01.php @@ -0,0 +1,56 @@ +img->SetMargin(40,150,40,80); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +//Setup title +$graph->title->Set("Line plot with null values"); + +// Use built in font +$graph->title->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Slightly adjust the legend from it's default position +$graph->legend->Pos(0.03,0.5,"right","center"); +$graph->legend->SetFont(FF_FONT1,FS_BOLD); + +// Setup X-scale +$graph->xaxis->SetTickLabels($datax); +$graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->xaxis->SetLabelAngle(45); + +// Create the first line +$p1 = new LinePlot($datay); +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); +$p1->SetColor("blue"); +$p1->SetCenter(); +$p1->SetLegend("Undefined\nvariant 1"); +$graph->Add($p1); + +// ... and the second +$p2 = new LinePlot($data2y); +$p2->mark->SetType(MARK_STAR); +$p2->mark->SetFillColor("red"); +$p2->mark->SetWidth(4); +$p2->SetColor("red"); +$p2->SetCenter(); +$p2->SetLegend("Undefined\nvariant 2"); +$graph->Add($p2); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/partiallyfilledlineex1.php b/html/includes/jpgraph/src/Examples/partiallyfilledlineex1.php new file mode 100644 index 0000000000..4f5fae9474 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/partiallyfilledlineex1.php @@ -0,0 +1,44 @@ +SetScale("textlin"); +$graph->SetShadow(true); +$graph->SetMarginColor("lightblue"); + +// Setup format for legend +$graph->legend->SetFillColor("antiquewhite"); +$graph->legend->SetShadow(true); + +// Setup title +$graph->title->Set("Filled Area Example"); +$graph->title->SetFont(FF_FONT2,FS_BOLD); + +// Setup semi-filled line plot +$lineplot = new LinePlot($ydata); +$lineplot->SetLegend("Semi-filled\nLineplot"); + +// Set line color +$lineplot->SetColor("black"); + +// Setup the two areas to be filled +$lineplot->AddArea(2,5,LP_AREA_FILLED,"red"); +$lineplot->AddArea(6,8,LP_AREA_FILLED,"green"); + +// Display the marks on the lines +$lineplot->mark->SetType(MARK_DIAMOND); +$lineplot->mark->SetSize(8); +$lineplot->mark->Show(); + +// add plot to the graph +$graph->Add($lineplot); + +// display graph +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/penguin.png b/html/includes/jpgraph/src/Examples/penguin.png new file mode 100644 index 0000000000000000000000000000000000000000..2ae426ae3c5d4804b12b6a468d6fe9c7aa960a28 GIT binary patch literal 8284 zcmV-iAfw-jP)003nO0ssI2ii(N*00009a7bBm000ND z000ND0n~znVgLXj07*naRCt`cTWfGtRhB;c+-F`l?~o7@!XpU@^3;eXQXQ4n799(w zEX%6-r~hW=M^AVEnEq)wHQiFvLpu)G7FKDAqu4@A%S*IDMd&1u#7KyNyvPIcCO719 zb6@A2`SxDt?0d)q!Uf&Zx6eKIJl40@THku?9cCDYq8rNH4W=mZ-4e%*@eY-l{~yoI zEZ$qw&S^pY{X!mHz!W!x_&_kmimc#WjYmGsfuC#Gu}aR^evLJ;gBC ztch6sJl=N1h43!l%^a#0)dGQle{5`EaBy&7V0wC5({+#Aotv9mR8*9cljHSz#ijRO zlW`%u;~+UzW<>R#o}Pw=hWh&YD_5=n-PqVzI2`7eK(~hBcDt7>SyEC`vUTg$ZQHgj zUAk1sp9S(0o zg45*$P_N7Fa5$h$XmxUO((m^tBzS-MZ@+x;#TQ*pC%Z>YS_p-e5_8yHeD2d}MsHyV zBX+M)nswSZa`fnLe)XH7;URdJ(`h<_lMAhK?YUe)i=UDc5`iB`qR}Y60`17i(Cfed zeNJ}vQ@?oHw34}k&3k6nu*vC+$!foDAq%+$mHkS?6i8(k>Ms2D-+v2ukQjIXSdCq8 z;3R*m!%4s57zY54V`x4S36G2n@7lF%`SRtZWox)`%>uAUQEjuJ#t_@%l02Rjtn3%W zW{X*mHKr%0_U_#ac45LubP*>sO*eEyXqhp(p7ANcHG~sp>~gu1l9EzVQc_b>!AbAF z`))WGq9`)YduNF{cigKE?M!1yz=NKuo;`Q&i!Z)#IbAvjr^EI#Gc%#D;7l+W4)OS? zLoY^lcFy{B>(-W)B_$?-T{}BFF)8pymlz2N2`5gRcDak{FL-h^y$4{J?4g_$r`tjBe!7`^Tk>wY0SC+_7U|V6eEj&_oNc69UR2bUEr%g@ix$;wt8s!Yfm8ynwx>#gqY?(y+) zAVi!zaNxj-RV(-faYT-L%DfjCb#=8vLqkYVcI?=(a^*_68T^k-OxQ5X%*@Ek&1G=U zXf!l~5l}h35Qn2Gu%T{rv;=^$qtfReT8NI5%UFaQNFZ-)fpxR#ujg zk%0gZ3`|t9$LW*Y@n$)78~Q`AsMkTEBih{1)_s zAc{xT*49SD(fOm-qQ|{ix#R$*T)ld=wyqXr2uTt&;A3J^e zG~mHRFJHdg-rk;_o&CZKFF=P#-$0~zf`dm%M{jR$ds_!bcn{-#_@QB-bf~MXi9{k0 zOxJX12}ySAG8r5K;KnM*p!9AllMn^_QC}kVFF@|ICDiBf* z09tNpYBDF0#aTq(4}^?C=!S+y$}pok@M_@w)Ra^%kimkXU`Bdsl2>Js2{)UG%uK9a zwJI|sOV|M`Ut3;WTs%BHJbL2>3>zR35}8Qw5IkY1S|m#IC_vt|x!!{xigZ+0kd!H% zU0vP1eX7GbIUTqem`P6a>EY1&2iA{`2Zx6TGLxMzJoAVz)Z#VU}zZH>+R{`>J{)DVsv$NPEJjwrKiQ+-?_I67!=4kfFWLkMIaRH zv-jGy+}s>P)zZ>afAP%E_2|r!6ulsI$Q^1b%~unPJgX*rpPwI#7^&I054v3La3pfI zyBiPVwmRmQc^nyPe}Dhb;2?r(+;keB4u!P{iiZ%>(}B~cPl4R2-nrV@Kn2aYNiGgL}X%3+}vQmONH8l-t zMHVhH+n)}h7`(H>!6J!iY54)tP*@9xLanW>eO+zdq$K7rochEgYtr*GO0&~Fj&LY| zKr%Cv;PRy;dPgD}cnG=z7{ivem{!U|zZwkAAP$MQ8Szz&@gbCXFs~9iIyyiPR0=7g zIYNY}91)G_X#Vuo9x@(PSXr7-y(l^UYJ z;-%K*%UATMW)}WG6+$~ycJbo(NWe@za5ZYMuj19E60Ou62|3pS5-Y$QN2xdc#{*=?c28_%76X!*NAw`?ZFcW8&&

    J$1RYb@PLp;}JF9u71qp0T1~!ISj;k=%I(6dg`g<nh6HqLsp_l=b$b?#c_`%ThpAccJ;#Q!6 ziHQmNhMfEP=buNt3yD!uKxo4pP`0bQY{TQ#Px(^J*v-pQO)n@cz@*>+q>AftBXK4r zZd{FAlkDR6-%m_V3KRWF5L$8@$QzMu(%j<{vLf@=kf00<;3win2%3usdi5yn;30G}Jw1Kn#*Gf1 z)=VME#2LhKm|0?C;))e3Hf-3Cot34^PMA*lliZF49bQi}~6aUz5S7n_@F>*`2>Ioa7Oii(KeeJMWXONEJ|@I{ygRl*O& zFP4o`>y)E4%p^#}8vZ|_Mw$ek#F!-p{{Xy}mX?C$g_Kt;UWtpeQd=LEhGCpK^*2N_ zdKc`F`YZ4{9H3^;$;rV1q9QC%^z#Xn5sRfJC`GioBl0VOX3Px#@I%-;4slIGLj#W) zcNz2-sl!{72~qN%K6RReg1>=dpftzI8yg!NQDLR{e2a&tELMlKpeqLF1E$pc{qKnNcrkv2DK1;KjPfiB)4&E`gqbpO zs|7KSap9SShcA8b_vpxSL!l6OmG{kgONxo~&3Q!(F;{n?#>F9wHS@W9^mg~W@x~h{ zcFBG~p)g2dc3eO>ZHC70qNGQWR(i|qF>+=hI1BQA)Qp4;zF`(Zu=IQHy%(4c*zdki z2!$XNq%gaC_Ux^#t)+!AMK~d4$ue)2kYv%Qim%3e6OS7yS}4L|K`Vs8VHOvv$LkSQ zasr_N$he=fJz?ZH33rWy=||99_OogH0@m0I1= zT<;>{Lrn1X>$_fuyNl{O2tz6_E6>Zzla@w>tYXWaWz{DhG0(y)a--G7#WX>58F)Al z2;ePlCyHnO1o*UzatM#7xw#p(8VUvtilKKJi$$^JII}j2;19$-rwmh;$ z_Hd<%N=?eIro+s?5~h?C7h{^t99=LLlK7sUo~Wh)7(I#>-l+UPbm-7G-+aT9@E zKZA-n} z<;s;37-@_?DOi*C1`-kjco~;t;zWiT5p}0oc!bNKeo5G z%bqlW+`M@+LKahEq#_ZT$(N09bUmiadFMcSJC4^q@Bki8R}wR$I!Q&U&Dg-ez|hbT zDl$Q7PNE!uY-?-#@WYR2iw8Z?gm62AmaGRpI&kF35x}GBMkvH6C@5IBZkYxj%gP@WqQ4A&)Vi zHO)e35sb>9I)n#gp;Bmt^R?^YhacuEL539lcJ^tv(uJ9H5qK~P}FhbWM+zENd>P%5hEW9Ue$C> ztiGwVVHL!B^5n@27cR_QqMCVqM2f>rJ~A6M+W;jQk4l@JF0EfByWe=h^m`s%&U*=#x)Aq1;+ZVTcrQ zdEs)i1*9l|2PMlIiZD=`MkyPqQ7R4p9~Hw6e!*c;E=oi|!js9W@oId9B!*S)AT}a3 zm2Cuv(}6dFR71hg9E8?e&wl$YLZ?ioB|>D_X=$lq+l4}lMDkM-rsP$rMmrA)be4L} zhWDJ^x^^`h3X(Wqs!y}(cw9l&D5a(B7aoXDW-SCjhp2??T*eX76QbehS6_WSJv}o! zgy?)DEJBZAb^eeI%9Sv=9(GHJk808bWx9yji14imx-K`V$?ou+P>Jszug8;^potAv zhFE@cst%Z2&SMHt;nb3pOTNv8E;>hPX?K^~>h!P=qK4UzSTiRM4rLDvZTt(J4{R)YKHJ9J5s? z9uN{cL3m`h5LoKsn+v-UOwFEGtcA zNU^wqmh8cQxSKzDz7{<$KF+Ch-aB)x!90+rr z8zK3XQ`6JX1`fjE5IrOk=5k9Nk{S{B3kwU7PQp0IQee7~SqO0@UW^HoIU3nyX=&-s zojVobz9OHBtrN*>q>qurWK;waZ-N!^{g^^;W?T`m5hsBkcSNI_ZmjLIjz}0H8<< zBoiegBzUrTCE}%JYMK!$c~nESbc;9gX0gaHnO%5YGiuJ&_;2{>98C(dy05r6s>R|k z4jz1PGlDj3Ll>K@%$)`?ga!;!r3Q%=*|hZZ^ljU=i4x2;F)_it&g-0;i%O*tNYWKG zHc82(KwEfJ)HX^$L?-c4X=`ear> zIW!Run^guVQv?oXaU-E z@eUf4OMl=A-~HLoeujgzw6vU@oR*drBm;+AkU(>cZpYNolLI4(bh{+U~_Zx`|rOGnvtcpJ?WLRDRjustz233|Lt6FY!t^8pV>dR zYu}yk%-xy07-BnM?1Bkt>Zk&nCSY3Ow4!Q|5NchgP0|#}sG=%q-Kt2fT0=l;`l0G4 zLgGMGsj2#*D2hXAD`=GjP)gHalaL_W3RZ02!JU1+zq_|PeKWJWcV~?4Lwsnf&IkY5 z+nb#?@4esqI~xoJI3>YQ5GHJHZeG{YQi?{DLSFmw`n)?n-*x`{Id~*Mlfn;I69h)T zsj=aMYaha#!z078OWwF~Bj*EQMQN^1#rh#8NVf=f8h&L_a~hmDsZPAZB^K6u;lhQ} zr%wZJJ1}V4VP(|G}$HDpJ{C7%s4uz%Ki0#36NP}|lD5)ITH*DC@*4ol4@=&29eqdABp_;+O zeQa#Z$BYDDok5jN_|w_5Pd)YYtko=Q%K;%^Na4;%Bm#mBrWUlqrO1qj7LZtQZy@Wu zULp~VM#1(>PEG=l;*w#Oq_&XNc|s?0JYnY}y`Vq(*yjdc84Ly4p)bx;CUMw_t#B!Y zrd6*YT#tFp%q}NT3Bee^{yPT_oI3RzS>^$kRWd@vj=tIXU604(tM!4$2Y-N;F%gBp zS4$<+KpSijh&S+xqlKe#2q7n!w%3KMg_b+aoN{lC_r(*(L3b#-SkEIWrbMin@9@Tf zMY^d3e05~x$!~mfWMsJfY_3pT7O@VkJ8YTf#Fnzc$y+!Ca7#Nsk|MUu(5H*9$Bxr5*bn&s7xqMQlXv2utd5sNIr#gFDW z&_$YyRn7$l=O-xeL!W+Ve_x+UTT<FKdoe8>9s(zD&6B7EBw z;y^1nmHqwwTeohd-VjX!q{j{JG2h`dtl2r{PK9OMUmif!^L; z!n=wb!j{_NN;=tzWyirh96NRlILRV(XEDUeM-*|V_|by(riHKC%O<=_nweR!&;38> z-?wic_p~Y+%YNg4?W5RPT$;2ya^%S1D<|{$EW<5n1YTeJ0Z)7S0io?WR+= zV)OBTS$Y_=#-jolEP-8wxB^LnshdV_MKJWeg9o4e_Ol8-Ikar0sPO$X7?m{paIFAX zOr_I@INz3V(9DP@SffW-&xDA9Fz!$Los-kd*S`ui!2@{|M3!>)rnI11vu}jOEiMdQ# z!#Z|#Zr}dHAN{za{j*l{5?a(^-#ZGi13M<7!G$cyKiZd1?+7OgC91>}{C3VDdjej#ct^lUo%_Fw<_yTM;)<55)v zj1WMx3{5W-K+@dFg8G%OKK-RH?+r)l1=e3dnD1}s=^LZ}JoASWGZU9vS4l1PYJEVd za_giZnt3IU#DwVgw|&jGYA3=jo3u*EtDJ|tNMupQ4&obnCUxcV#j~&f_S*2dTGec5 z2+F23r)$Z4N>U+GA#=GL+*U=B_l1MjEL7MGEj2SU@m_xHT$3*r*D|$URdl(trmE-V zxkO4f1=+0^(9OiuKWbL4$I5DeXe%9F#F*vsvm$H3& z#nysuJ}h2~Pkns->ZQcghpEJPDjCb9Q#Ib|aL8ZdmR*t|0bpXmK;rO~58Tx?4fi)0 z2FdAoA|qAR)P(}UZ1QI6=4c`PNhX=nb$6}b7Y+rg6q>Vd6DSOQe@Kq0kHwc=7UTaW0000SetShadow(); + +// Set A title for the plot +$graph->title->Set("3D Pie Client side image map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot3D($data); +$p1->SetLegends(array("Jan (%d)","Feb","Mar","Apr","May","Jun","Jul")); +$targ=array("pie3d_csimex1.php?v=1","pie3d_csimex1.php?v=2","pie3d_csimex1.php?v=3", + "pie3d_csimex1.php?v=4","pie3d_csimex1.php?v=5","pie3d_csimex1.php?v=6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); + +// Use absolute labels +$p1->SetLabelType(1); +$p1->value->SetFormat("%d kr"); + +// Move the pie slightly to the left +$p1->SetCenter(0.4,0.5); + +$graph->Add($p1); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie3dex1.php b/html/includes/jpgraph/src/Examples/pie3dex1.php new file mode 100644 index 0000000000..aa0bfddb29 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie3dex1.php @@ -0,0 +1,32 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 1 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetAngle(30); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,12); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie3dex2.php b/html/includes/jpgraph/src/Examples/pie3dex2.php new file mode 100644 index 0000000000..50057fffc3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie3dex2.php @@ -0,0 +1,45 @@ +SetShadow(); + + +// Set A title for the plot +$graph->title->Set("Example 2 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(0.4); +$p1->SetHeight(5); + +// Adjust projection angle +$p1->SetAngle(45); + +// You can explode several slices by specifying the explode +// distance for some slices in an array +$p1->Explode(array(0,40,0,30)); + +// As a shortcut you can easily explode one numbered slice with +// $p1->ExplodeSlice(3); + +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,10); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie3dex3.php b/html/includes/jpgraph/src/Examples/pie3dex3.php new file mode 100644 index 0000000000..cc4b52abae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie3dex3.php @@ -0,0 +1,42 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 3 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// As a shortcut you can easily explode one numbered slice with +$p1->ExplodeSlice(3); + +// Setup the slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie3dex4.php b/html/includes/jpgraph/src/Examples/pie3dex4.php new file mode 100644 index 0000000000..d86aeec04a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie3dex4.php @@ -0,0 +1,46 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 4 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// Adjsut angle for first slice +$p1->SetStartAngle(45); + +// As a shortcut you can easily explode one numbered slice with +$p1->ExplodeSlice(3); + +// Setup slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie3dex5.php b/html/includes/jpgraph/src/Examples/pie3dex5.php new file mode 100644 index 0000000000..4843157157 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie3dex5.php @@ -0,0 +1,46 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 5 3D Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,18); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + +// Create 3D pie plot +$p1 = new PiePlot3d($data); +$p1->SetTheme("sand"); +$p1->SetCenter(0.4); +$p1->SetSize(80); + +// Adjust projection angle +$p1->SetAngle(45); + +// Adjsut angle for first slice +$p1->SetStartAngle(45); + +// Display the slice values +$p1->value->SetFont(FF_ARIAL,FS_BOLD,11); +$p1->value->SetColor("navy"); + +// Add colored edges to the 3D pie +// NOTE: You can't have exploded slices with edges! +$p1->SetEdge("navy"); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")); + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pie_csimex1.php b/html/includes/jpgraph/src/Examples/pie_csimex1.php new file mode 100644 index 0000000000..9e16cd28d4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pie_csimex1.php @@ -0,0 +1,35 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Client side image map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot($data); +$p1->SetCenter(0.4,0.5); + +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul")); +$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3", +"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); + +$graph->Add($p1); + + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/piebkgex1.php b/html/includes/jpgraph/src/Examples/piebkgex1.php new file mode 100644 index 0000000000..d53661d31b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/piebkgex1.php @@ -0,0 +1,95 @@ +SetMargin(1,1,40,1); +$graph->SetMarginColor('navy'); +$graph->SetShadow(false); + +// Setup background +$graph->SetBackgroundImage('worldmap1.jpg',BGIMG_FILLPLOT); + +// Setup title +$graph->title->Set("Pie plots with background image"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,20); +$graph->title->SetColor('white'); + +$p = array(); +// Create the plots +for( $i=0; $i < $n; ++$i ) { + $d = "data$i"; + $p[] = new PiePlot3D($data[$i]); +} + +// Position the four pies +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetCenter($piepos[2*$i],$piepos[2*$i+1]); +} + +// Set the titles +for( $i=0; $i < $n; ++$i ) { + $p[$i]->title->Set($titles[$i]); + $p[$i]->title->SetColor('white'); + $p[$i]->title->SetFont(FF_ARIAL,FS_BOLD,12); +} + +// Label font and color setup +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->SetFont(FF_ARIAL,FS_BOLD); + $p[$i]->value->SetColor('white'); +} + +// Show the percetages for each slice +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->Show(); +} + +// Label format +for( $i=0; $i < $n; ++$i ) { + $p[$i]->value->SetFormat("%01.1f%%"); +} + +// Size of pie in fraction of the width of the graph +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetSize(0.15); +} + +// Format the border around each slice + + +for( $i=0; $i < $n; ++$i ) { + $p[$i]->SetEdge(false); + $p[$i]->ExplodeSlice(1); +} + +// Use one legend for the whole graph +$p[0]->SetLegends(array("May","June","July","Aug")); +$graph->legend->Pos(0.05,0.35); +$graph->legend->SetShadow(false); + +for( $i=0; $i < $n; ++$i ) { + $graph->Add($p[$i]); +} + +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/piec_csimex1.php b/html/includes/jpgraph/src/Examples/piec_csimex1.php new file mode 100644 index 0000000000..ff8d1f12fb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/piec_csimex1.php @@ -0,0 +1,87 @@ +SetFrame(false); + +// Uncomment this line to add a drop shadow to the border +// $graph->SetShadow(); + +// Setup title +$graph->title->Set("CSIM Center Pie plot ex 1"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set the radius of pie (as fraction of image size) +$p1->SetSize(0.32); + +// Move the center of the pie slightly to the top of the image +$p1->SetCenter(0.5,0.45); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,12); +$p1->value->SetColor('white'); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// The label array values may have printf() formatting in them. The argument to the +// form,at string will be the value of the slice (either the percetage or absolute +// depending on what was specified in the SetLabelType() above. +$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%", + "peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%"); +$p1->SetLabels($lbl); + +// Uncomment this line to remove the borders around the slices +// $p1->ShowBorder(false); + +// Add drop shadow to slices +$p1->SetShadow(); + +// Explode all slices 15 pixels +$p1->ExplodeAll(15); + +// Setup the CSIM targets +$targ=array("piec_csimex1.php#1","piec_csimex1.php#2","piec_csimex1.php#3", + "piec_csimex1.php#4","piec_csimex1.php#5","piec_csimex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$p1->SetCSIMTargets($targ,$alts); +$p1->SetMidCSIM("piec_csimex1.php#7","Center"); + + +// Setup a small help text in the image +$txt = new Text("Note: This is an example of image map. Hold\nyour mouse over the slices to see the values.\nThe URL just points back to this page"); +$txt->SetFont(FF_FONT1,FS_BOLD); +$txt->Pos(0.5,0.97,'center','bottom'); +$txt->SetBox('yellow','black'); +$txt->SetShadow(); +$graph->AddText($txt); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->StrokeCSIM(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/piecex1.php b/html/includes/jpgraph/src/Examples/piecex1.php new file mode 100644 index 0000000000..8de02d4d33 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/piecex1.php @@ -0,0 +1,46 @@ +title->Set("Pie plot with center circle"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set size of pie +$p1->SetSize(0.32); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,10); +$p1->value->SetColor('black'); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,10); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/piecex2.php b/html/includes/jpgraph/src/Examples/piecex2.php new file mode 100644 index 0000000000..1ecbfcd324 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/piecex2.php @@ -0,0 +1,70 @@ +SetFrame(false); + +// Uncomment this line to add a drop shadow to the border +// $graph->SetShadow(); + +// Setup title +$graph->title->Set("PiePlotC"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,18); +$graph->title->SetMargin(8); // Add a little bit more margin from the top + +// Create the pie plot +$p1 = new PiePlotC($data); + +// Set size of pie +$p1->SetSize(0.35); + +// Label font and color setup +$p1->value->SetFont(FF_ARIAL,FS_BOLD,12); +$p1->value->SetColor('white'); + +$p1->value->Show(); + +// Setup the title on the center circle +$p1->midtitle->Set("Test mid\nRow 1\nRow 2"); +$p1->midtitle->SetFont(FF_ARIAL,FS_NORMAL,14); + +// Set color for mid circle +$p1->SetMidColor('yellow'); + +// Use percentage values in the legends values (This is also the default) +$p1->SetLabelType(PIE_VALUE_PER); + +// The label array values may have printf() formatting in them. The argument to the +// form,at string will be the value of the slice (either the percetage or absolute +// depending on what was specified in the SetLabelType() above. +$lbl = array("adam\n%.1f%%","bertil\n%.1f%%","johan\n%.1f%%", + "peter\n%.1f%%","daniel\n%.1f%%","erik\n%.1f%%"); +$p1->SetLabels($lbl); + +// Uncomment this line to remove the borders around the slices +// $p1->ShowBorder(false); + +// Add drop shadow to slices +$p1->SetShadow(); + +// Explode all slices 15 pixels +$p1->ExplodeAll(15); + +// Add plot to pie graph +$graph->Add($p1); + +// .. and send the image on it's marry way to the browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex1.php b/html/includes/jpgraph/src/Examples/pieex1.php new file mode 100644 index 0000000000..bf00510182 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex1.php @@ -0,0 +1,32 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 1 Pie plot"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,14); +$graph->title->SetColor("brown"); + +// Create pie plot +$p1 = new PiePlot($data); +//$p1->SetSliceColors(array("red","blue","yellow","green")); +$p1->SetTheme("earth"); + +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,10); +// Set how many pixels each slice should explode +$p1->Explode(array(0,15,15,25,15)); + + +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex2.php b/html/includes/jpgraph/src/Examples/pieex2.php new file mode 100644 index 0000000000..d80a8d5a3a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex2.php @@ -0,0 +1,24 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Example 2 Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create +$p1 = new PiePlot($data); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May","Jun","Jul")); +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex3.php b/html/includes/jpgraph/src/Examples/pieex3.php new file mode 100644 index 0000000000..0f1ac218f9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex3.php @@ -0,0 +1,53 @@ +SetShadow(); + +// Set A title for the plot +$graph->title->Set("Multiple - Pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create plots +$size=0.13; +$p1 = new PiePlot($data); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +$p1->SetSize($size); +$p1->SetCenter(0.25,0.32); +$p1->value->SetFont(FF_FONT0); +$p1->title->Set("2001"); + +$p2 = new PiePlot($data); +$p2->SetSize($size); +$p2->SetCenter(0.65,0.32); +$p2->value->SetFont(FF_FONT0); +$p2->title->Set("2002"); + +$p3 = new PiePlot($data); +$p3->SetSize($size); +$p3->SetCenter(0.25,0.75); +$p3->value->SetFont(FF_FONT0); +$p3->title->Set("2003"); + +$p4 = new PiePlot($data); +$p4->SetSize($size); +$p4->SetCenter(0.65,0.75); +$p4->value->SetFont(FF_FONT0); +$p4->title->Set("2004"); + +$graph->Add($p1); +$graph->Add($p2); +$graph->Add($p3); +$graph->Add($p4); + +$graph->Stroke(); + +?> + + + diff --git a/html/includes/jpgraph/src/Examples/pieex4.php b/html/includes/jpgraph/src/Examples/pieex4.php new file mode 100644 index 0000000000..2a1a1684a4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex4.php @@ -0,0 +1,25 @@ +SetShadow(); + +$graph->title->Set("Example 4 of pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$p1 = new PiePlot($data); +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetSize(0.3); +$p1->SetCenter(0.4); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex5.php b/html/includes/jpgraph/src/Examples/pieex5.php new file mode 100644 index 0000000000..89c2bb4a22 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex5.php @@ -0,0 +1,31 @@ +SetShadow(); + +// Setup graph title +$graph->title->Set("Example 5 of pie plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Create pie plot +$p1 = new PiePlot($data); +$p1->value->SetFont(FF_VERDANA,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetSize(0.3); +$p1->SetCenter(0.4); +$p1->SetLegends(array("Jan","Feb","Mar","Apr","May")); +//$p1->SetStartAngle(M_PI/8); +$p1->ExplodeSlice(3); + +$graph->Add($p1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex6.php b/html/includes/jpgraph/src/Examples/pieex6.php new file mode 100644 index 0000000000..bba3187677 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex6.php @@ -0,0 +1,48 @@ +SetShadow(); + +// Setup title +$graph->title->Set("Example of pie plot with absolute labels"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// The pie plot +$p1 = new PiePlot($data); + +// Move center of pie to the left to make better room +// for the legend +$p1->SetCenter(0.35,0.5); + +// No border +$p1->ShowBorder(false); + +// Label font and color setup +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); + +// Use absolute values (type==1) +$p1->SetLabelType(PIE_VALUE_ABS); + +// Label format +$p1->value->SetFormat("$%d"); +$p1->value->Show(); + +// Size of pie in fraction of the width of the graph +$p1->SetSize(0.3); + +// Legends +$p1->SetLegends(array("May ($%d)","June ($%d)","July ($%d)","Aug ($%d)")); +$graph->legend->Pos(0.05,0.15); + +$graph->Add($p1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex7.php b/html/includes/jpgraph/src/Examples/pieex7.php new file mode 100644 index 0000000000..62037ec25e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex7.php @@ -0,0 +1,52 @@ +SetShadow(); + +// Setup title +$graph->title->Set("Pie plot with absolute labels"); +$graph->subtitle->Set('(With hidden 0 labels)'); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// The pie plot +$p1 = new PiePlot($data); + + +// Move center of pie to the left to make better room +// for the legend +$p1->SetCenter(0.35,0.5); + +// No border +$p1->ShowBorder(false); + +// Label font and color setup +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); + +// Use absolute values (type==1) +$p1->SetLabelType(PIE_VALUE_ABS); + +// Label format +$p1->value->SetFormat("$%d"); +$p1->value->HideZero(); +$p1->value->Show(); + +// Size of pie in fraction of the width of the graph +$p1->SetSize(0.3); + +// Legends +$p1->SetLegends(array("May ($%d)","June ($%d)","July ($%d)","Aug ($%d)")); +$graph->legend->Pos(0.05,0.2); + +$graph->Add($p1); +$graph->Stroke(); +?> + + diff --git a/html/includes/jpgraph/src/Examples/pieex8.php b/html/includes/jpgraph/src/Examples/pieex8.php new file mode 100644 index 0000000000..c5ea25f954 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex8.php @@ -0,0 +1,33 @@ +SetShadow(); + +// Title setup +$graph->title->Set("Adjusting the label pos"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the pie plot +$p1 = new PiePlot($data); + +// Adjust size and position of plot +$p1->SetSize(0.4); +$p1->SetCenter(0.5,0.52); + +// Setup slice labels and move them into the plot +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetLabelPos(0.6); + +// Finally add the plot +$graph->Add($p1); + +// ... and stroke it +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/pieex9.php b/html/includes/jpgraph/src/Examples/pieex9.php new file mode 100644 index 0000000000..5a5536a3fd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pieex9.php @@ -0,0 +1,39 @@ +SetShadow(); + +// Title setup +$graph->title->Set("Exploding all slices"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup the pie plot +$p1 = new PiePlot($data); + +// Adjust size and position of plot +$p1->SetSize(0.35); +$p1->SetCenter(0.5,0.52); + +// Setup slice labels and move them into the plot +$p1->value->SetFont(FF_FONT1,FS_BOLD); +$p1->value->SetColor("darkred"); +$p1->SetLabelPos(0.65); + +// Explode all slices +$p1->ExplodeAll(10); + +// Add drop shadow +$p1->SetShadow(); + +// Finally add the plot +$graph->Add($p1); + +// ... and stroke it +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/pielabelsex1.php b/html/includes/jpgraph/src/Examples/pielabelsex1.php new file mode 100644 index 0000000000..65c6100818 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pielabelsex1.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines +$p1->SetGuideLines(); +$p1->SetGuideLinesAdjust(1.4); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pielabelsex2.php b/html/includes/jpgraph/src/Examples/pielabelsex2.php new file mode 100644 index 0000000000..beaa7c7f56 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pielabelsex2.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +$p1->SetGuideLines(true,false); +$p1->SetGuideLinesAdjust(1.5); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pielabelsex3.php b/html/includes/jpgraph/src/Examples/pielabelsex3.php new file mode 100644 index 0000000000..d0296c7474 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pielabelsex3.php @@ -0,0 +1,39 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +// and force guide lines to always beeing used +$p1->SetGuideLines(true,false,true); +$p1->SetGuideLinesAdjust(1.5); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pielabelsex4.php b/html/includes/jpgraph/src/Examples/pielabelsex4.php new file mode 100644 index 0000000000..0c744612e6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pielabelsex4.php @@ -0,0 +1,38 @@ +title->Set("Label guide lines"); +$graph->title->SetFont(FF_VERDANA,FS_BOLD,12); +$graph->title->SetColor("darkblue"); +$graph->legend->Pos(0.1,0.2); + + +// Create pie plot +$p1 = new PiePlot($data); +$p1->SetCenter(0.5,0.55); +$p1->SetSize(0.3); + +// Enable and set policy for guide-lines. Make labels line up vertically +$p1->SetGuideLines(true,false); +$p1->SetGuideLinesAdjust(1.1); + +// Setup the labels +$p1->SetLabelType(PIE_VALUE_PER); +$p1->value->Show(); +$p1->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$p1->value->SetFormat('%2.1f%%'); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/plotlineex1.php b/html/includes/jpgraph/src/Examples/plotlineex1.php new file mode 100644 index 0000000000..6daa481624 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/plotlineex1.php @@ -0,0 +1,35 @@ +SetScale("textlin"); +$graph->SetMargin(40,20,50,70); + +$graph->legend->SetPos(0.5,0.97,'center','bottom'); + +$graph->title->Set('Plot line legend'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,14); + +$graph->SetTitleBackground('lightblue:1.3',TITLEBKG_STYLE2,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'lightblue','navy'); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->value->Show(); +$bplot->value->SetFont(FF_VERDANA,FS_BOLD,8); +$bplot->SetValuePos('top'); +$bplot->SetLegend('Bar Legend'); +$graph->Add($bplot); + +$pline = new PlotLine(HORIZONTAL,8,'red',2); +$pline->SetLegend('Line Legend'); +$graph->legend->SetColumns(10); +$graph->Add($pline); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/polarex0-180.php b/html/includes/jpgraph/src/Examples/polarex0-180.php new file mode 100644 index 0000000000..68f93dfbdf --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex0-180.php @@ -0,0 +1,27 @@ +SetScale('lin'); +$graph->SetMargin(35,35,25,25); +$graph->SetType(POLAR_180); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex0.php b/html/includes/jpgraph/src/Examples/polarex0.php new file mode 100644 index 0000000000..46cddfee61 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex0.php @@ -0,0 +1,26 @@ +SetScale('lin'); +$graph->SetMargin(35,35,25,25); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex1.php b/html/includes/jpgraph/src/Examples/polarex1.php new file mode 100644 index 0000000000..dc6533760a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex1.php @@ -0,0 +1,30 @@ +SetScale('lin'); +$graph->SetType(POLAR_180); +//$graph->SetAngle(90); +//$graph->SetMargin(30-150,30-150,30+150,30+150); +$graph->Set90AndMargin(40,40,40,40); +//$graph->axis->SetLabelAlign('right','center'); + +$p = new PolarPlot($data); +$p->SetLegend("Test"); +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex10.php b/html/includes/jpgraph/src/Examples/polarex10.php new file mode 100644 index 0000000000..093c1e57ae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex10.php @@ -0,0 +1,66 @@ +SetScale('log',100); +$graph->SetType(POLAR_360); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9'); + +// Set label and axis colors +$graph->axis->SetColor('black','navy','darkred'); + +// Draw the ticks on the bottom side of the radius axis +$graph->axis->SetTickSide(SIDE_DOWN); + +// Increase the margin for the labels since we changed the +// side of the ticks. +$graph->axis->SetLabelMargin(6); + +// Change fonts +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + + +// Setup graph title +$graph->title->Set('Polar plot #10'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Setup tab title +$graph->tabtitle->Set('Microphone #1'); +$graph->tabtitle->SetColor('brown:0.5','lightyellow'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex2.php b/html/includes/jpgraph/src/Examples/polarex2.php new file mode 100644 index 0000000000..3bb700496b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex2.php @@ -0,0 +1,34 @@ +SetScale('lin'); + +$graph->title->Set('Polar plot #2'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex3-lin.php b/html/includes/jpgraph/src/Examples/polarex3-lin.php new file mode 100644 index 0000000000..29e5bb0bd1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex3-lin.php @@ -0,0 +1,33 @@ +SetScale('lin',200); +$graph->SetType(POLAR_180); + +$graph->title->Set('Polar plot #3'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +$graph->axis->ShowGrid(true,false); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex3.php b/html/includes/jpgraph/src/Examples/polarex3.php new file mode 100644 index 0000000000..c0b160e273 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex3.php @@ -0,0 +1,33 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); + +$graph->title->Set('Polar plot #3'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +$graph->axis->ShowGrid(true,false); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex4.php b/html/includes/jpgraph/src/Examples/polarex4.php new file mode 100644 index 0000000000..f9c6950638 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex4.php @@ -0,0 +1,34 @@ +SetScale('log'); + +$graph->title->Set('Polar plot #4'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex5.php b/html/includes/jpgraph/src/Examples/polarex5.php new file mode 100644 index 0000000000..69a9910c21 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex5.php @@ -0,0 +1,37 @@ +SetScale('log'); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +$graph->title->Set('Polar plot #5'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + +// Hide last labels on the Radius axis +// They intersect with the box otherwise +$graph->axis->HideLastTickLabel(); + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex6.php b/html/includes/jpgraph/src/Examples/polarex6.php new file mode 100644 index 0000000000..dddde3223d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex6.php @@ -0,0 +1,35 @@ +SetScale('log'); +$graph->SetType(POLAR_180); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +$graph->title->Set('Polar plot #6'); +$graph->title->SetFont(FF_FONT2,FS_BOLD); +$graph->title->SetColor('navy'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightred@0.5'); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex7-1.php b/html/includes/jpgraph/src/Examples/polarex7-1.php new file mode 100644 index 0000000000..bbdd3e622c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex7-1.php @@ -0,0 +1,50 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); +$graph->SetPlotSize(220,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_HOR,BGRAD_PLOT); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #7'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex7-2.php b/html/includes/jpgraph/src/Examples/polarex7-2.php new file mode 100644 index 0000000000..342fc57dad --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex7-2.php @@ -0,0 +1,53 @@ +SetScale('log',100); +$graph->SetType(POLAR_360); +$graph->SetPlotSize(220,300); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_MIDHOR,BGRAD_PLOT); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +$graph->title->Set('Polar plot #7-2'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('yellow@0.6'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex7.php b/html/includes/jpgraph/src/Examples/polarex7.php new file mode 100644 index 0000000000..735aa8f1e7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex7.php @@ -0,0 +1,53 @@ +SetScale('lin',300); +$graph->SetType(POLAR_180); +$graph->SetPlotSize(220,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +$graph->SetBackgroundGradient('blue:1.3','brown:1.4',GRAD_HOR,BGRAD_PLOT); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('gray','gray','gray'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #7'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex8.php b/html/includes/jpgraph/src/Examples/polarex8.php new file mode 100644 index 0000000000..84b1167323 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex8.php @@ -0,0 +1,54 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); +//$graph->SetPlotSize(250,250); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Set plotarea color +$graph->SetColor('lightblue'); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.8','lightblue:0.8','lightblue:0.8'); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->title->Set('Polar plot #8'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Adjust legen box position and color +$graph->legend->SetColor('navy','darkgray'); +$graph->legend->SetFillColor('white'); +$graph->legend->SetShadow('darkgray@0.5',5); + +$p = new PolarPlot($data); +$p->SetFillColor('white@0.5'); +$p->mark->SetType(MARK_SQUARE); +$p->SetLegend("Mirophone #1\n(No amps)"); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/polarex9.php b/html/includes/jpgraph/src/Examples/polarex9.php new file mode 100644 index 0000000000..206413c31a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/polarex9.php @@ -0,0 +1,63 @@ +SetScale('log',100); +$graph->SetType(POLAR_180); + +// Hide frame around graph (by setting width=0) +$graph->SetFrame(true,'white',1); + +// Show both major and minor grid lines +$graph->axis->ShowGrid(true,true); + +// Set color for gradient lines +$graph->axis->SetGridColor('lightblue:0.9','lightblue:0.9','lightblue:0.9'); + +// Set label and axis colors +$graph->axis->SetColor('black','navy','darkred'); + +// Draw the ticks on the bottom side of the radius axis +$graph->axis->SetTickSide(SIDE_DOWN); + +// Increase the margin for the labels since we changed the +// side of the ticks. +$graph->axis->SetLabelMargin(6); + +// Change fonts +$graph->axis->SetFont(FF_ARIAL,FS_NORMAL,8); +$graph->axis->SetAngleFont(FF_ARIAL,FS_NORMAL,8); + +// Setup axis title +$graph->axis->SetTitle('Coverage (in meter)','middle'); +$graph->axis->title->SetFont(FF_FONT1,FS_BOLD); + +// Setup graph title +$graph->title->Set('Polar plot #9'); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('navy'); + +// Setup tab title +$graph->tabtitle->Set('Microphone #1'); +$graph->tabtitle->SetColor('brown:0.5','lightyellow'); + + +$p = new PolarPlot($data); +$p->SetFillColor('lightblue@0.5'); +$p->mark->SetType(MARK_SQUARE); + +$graph->Add($p); + +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/pushpinex1.php b/html/includes/jpgraph/src/Examples/pushpinex1.php new file mode 100644 index 0000000000..3102d3021d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pushpinex1.php @@ -0,0 +1,62 @@ +img->SetMargin(1,1,1,1); +$graph->SetScale('linlin',0,100,0,100); + +// We don't want any axis to be shown +$graph->xaxis->Hide(); +$graph->yaxis->Hide(); + +// Use a worldmap as the background and let it fill the plot area +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT); + +// Setup a nice title with a striped bevel background +$graph->title->Set("Pushpin graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('white'); +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen'); + +// Finally create the scatterplot +$sp = new ScatterPlot($datay,$datax); + +// We want the markers to be an image +$sp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6); + +// Install the Y-X callback for the markers +$sp->mark->SetCallbackYX('markCallback'); + +// ... and add it to the graph +$graph->Add($sp); + +// .. and output to browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/pushpinex2.php b/html/includes/jpgraph/src/Examples/pushpinex2.php new file mode 100644 index 0000000000..58c97730dd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/pushpinex2.php @@ -0,0 +1,63 @@ +img->SetMargin(1,1,1,1); +$graph->SetScale('linlin',0,100,0,100); + +// We don't want any axis to be shown +$graph->xaxis->Hide(); +$graph->yaxis->Hide(); + +// Use a worldmap as the background and let it fill the plot area +$graph->SetBackgroundImage(WORLDMAP,BGIMG_FILLPLOT); + +// Setup a nice title with a striped bevel background +$graph->title->Set("Pushpin graph"); +$graph->title->SetFont(FF_ARIAL,FS_BOLD,16); +$graph->title->SetColor('white'); +$graph->SetTitleBackground('darkgreen',TITLEBKG_STYLE1,TITLEBKG_FRAME_BEVEL); +$graph->SetTitleBackgroundFillStyle(TITLEBKG_FILLSTYLE_HSTRIPED,'blue','darkgreen'); + +// Finally create the lineplot +$lp = new LinePlot($datay,$datax); +$lp->SetColor('lightgray'); + +// We want the markers to be an image +$lp->mark->SetType(MARK_IMG_PUSHPIN,'blue',0.6); + +// Install the Y-X callback for the markers +$lp->mark->SetCallbackYX('markCallback'); + +// ... and add it to the graph +$graph->Add($lp); + +// .. and output to browser +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/radarex1.php b/html/includes/jpgraph/src/Examples/radarex1.php new file mode 100644 index 0000000000..e300697f1a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex1.php @@ -0,0 +1,15 @@ +Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex2.php b/html/includes/jpgraph/src/Examples/radarex2.php new file mode 100644 index 0000000000..18ddb0c345 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex2.php @@ -0,0 +1,21 @@ +title->Set('Weekly goals'); +$graph->subtitle->Set('Year 2003'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightred'); +$graph->SetSize(0.6); +$graph->SetPos(0.5,0.6); +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex3.php b/html/includes/jpgraph/src/Examples/radarex3.php new file mode 100644 index 0000000000..a61e394917 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex3.php @@ -0,0 +1,21 @@ +GetShortMonth(); +$graph->SetTitles($titles); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex4.php b/html/includes/jpgraph/src/Examples/radarex4.php new file mode 100644 index 0000000000..c285e10acb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex4.php @@ -0,0 +1,25 @@ +GetShortMonth(); +$graph->SetTitles($titles); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex5.php b/html/includes/jpgraph/src/Examples/radarex5.php new file mode 100644 index 0000000000..901db85808 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex5.php @@ -0,0 +1,26 @@ +GetShortMonth(); +$graph->SetTitles($titles); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex6.1.php b/html/includes/jpgraph/src/Examples/radarex6.1.php new file mode 100644 index 0000000000..f6ca02b7ae --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex6.1.php @@ -0,0 +1,45 @@ +SetShadow(); + +// Create the titles for the axis +$titles = $gDateLocale->GetShortMonth(); +$graph->SetTitles($titles); +$graph->SetColor('lightyellow'); + +// ADjust the position to make more room +// for the legend +$graph->SetCenter(0.4,0.55); +$graph->SetSize(0.6); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); +$plot->SetLegend("QA results"); + +$plot2 = new RadarPlot($data2); +$plot2->SetLegend("Target"); +$plot2->SetColor('red'); +$plot2->SetFill(false); +$plot2->SetLineWeight(2); + + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Add($plot2); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex6.php b/html/includes/jpgraph/src/Examples/radarex6.php new file mode 100644 index 0000000000..8b71761156 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex6.php @@ -0,0 +1,35 @@ +SetShadow(); + +// Create the titles for the axis +$titles = $gDateLocale->GetShortMonth(); +$graph->SetTitles($titles); +$graph->SetColor('lightyellow'); + +// ADjust the position to make more room +// for the legend +$graph->SetCenter(0.4,0.5); + +// Add grid lines +$graph->grid->Show(); +$graph->grid->SetColor('darkred'); +$graph->grid->SetLineStyle('dotted'); + +$plot = new RadarPlot($data); +$plot->SetFillColor('lightblue'); +$plot->SetLegend("QA results"); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex7.php b/html/includes/jpgraph/src/Examples/radarex7.php new file mode 100644 index 0000000000..5340f255fb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex7.php @@ -0,0 +1,48 @@ +SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); +$graph->axis->SetWeight(2); + +// Setup the grid lines +$graph->grid->SetLineStyle("longdashed"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles(array("One","Two","Three","Four","Five","Sex","Seven","Eight","Nine","Ten")); +// Create the first radar plot +$plot = new RadarPlot(array(30,80,60,40,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetColor("blue","lightred"); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex8.1.php b/html/includes/jpgraph/src/Examples/radarex8.1.php new file mode 100644 index 0000000000..4d85dd2c97 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex8.1.php @@ -0,0 +1,52 @@ +img->SetAntiAliasing(); + +// Set background color and shadow +$graph->SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); + +// Setup the grid lines +$graph->grid->SetLineStyle("solid"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$graph->SetTitles($gDateLocale->GetShortMonth()); + +// Create the first radar plot +$plot = new RadarPlot(array(70,80,60,90,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetLineWeight(2); +$plot2->SetColor("blue"); +$plot2->SetFill(false); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex8.php b/html/includes/jpgraph/src/Examples/radarex8.php new file mode 100644 index 0000000000..0e7a2a1a4c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex8.php @@ -0,0 +1,51 @@ +img->SetAntiAliasing(); + +// Set background color and shadow +$graph->SetColor("white"); +$graph->SetShadow(); + +// Position the graph +$graph->SetCenter(0.4,0.55); + +// Setup the axis formatting +$graph->axis->SetFont(FF_FONT1,FS_BOLD); + +// Setup the grid lines +$graph->grid->SetLineStyle("solid"); +$graph->grid->SetColor("navy"); +$graph->grid->Show(); +$graph->HideTickMarks(); + +// Setup graph titles +$graph->title->Set("Quality result"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->SetTitles($gDateLocale->GetShortMonth()); + +// Create the first radar plot +$plot = new RadarPlot(array(70,80,60,90,71,81,47)); +$plot->SetLegend("Goal"); +$plot->SetColor("red","lightred"); +$plot->SetFill(false); +$plot->SetLineWeight(2); + +// Create the second radar plot +$plot2 = new RadarPlot(array(70,40,30,80,31,51,14)); +$plot2->SetLegend("Actual"); +$plot2->SetLineWeight(2); +$plot2->SetColor("blue"); +$plot2->SetFill(false); + +// Add the plots to the graph +$graph->Add($plot2); +$graph->Add($plot); + +// And output the graph +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/radarex9.php b/html/includes/jpgraph/src/Examples/radarex9.php new file mode 100644 index 0000000000..14f97c271e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarex9.php @@ -0,0 +1,33 @@ +title->Set("Accumulated PPM"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); + +$graph->subtitle->Set("(according to direction)"); +$graph->subtitle->SetFont(FF_VERDANA,FS_ITALIC,10); + + +$graph->SetTitles($titles); +$graph->SetCenter(0.5,0.55); +$graph->HideTickMarks(); +$graph->SetColor('lightyellow'); +$graph->axis->SetColor('darkgray@0.3'); +$graph->grid->SetColor('darkgray@0.3'); +$graph->grid->Show(); + +$graph->SetGridDepth(DEPTH_BACK); + +$plot = new RadarPlot($data); +$plot->SetColor('red@0.2'); +$plot->SetLineWeight(1); +$plot->SetFillColor('red@0.7'); +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/radarlogex1.php b/html/includes/jpgraph/src/Examples/radarlogex1.php new file mode 100644 index 0000000000..390c2fbef6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarlogex1.php @@ -0,0 +1,53 @@ +img->SetAntiAliasing(); + +// Make the spider graph fill out it's bounding box +$graph->SetPlotSize(0.85); + +// Use logarithmic scale (If you don't use any SetScale() +// the spider graph will default to linear scale +$graph->SetScale("log"); + +// Uncomment the following line if you want to supress +// minor tick marks +//$graph->yscale->ticks->SupressMinorTickMarks(); + +// We want the major tick marks to be black and minor +// slightly less noticable +$graph->yscale->ticks->SetMarkColor("black","darkgray"); + +// Set the axis title font +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Use blue axis +$graph->axis->SetColor("blue"); + +$plot = new RadarPlot($data); +$plot->SetLineWeight(1); +$plot->SetColor('forestgreen'); + +$plot2 = new RadarPlot($data2); +$plot2->SetLineWeight(2); +$plot2->SetColor('red'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Add($plot2); +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/radarlogex2.php b/html/includes/jpgraph/src/Examples/radarlogex2.php new file mode 100644 index 0000000000..3198f426a4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarlogex2.php @@ -0,0 +1,47 @@ +img->SetAntiAliasing(); + +// Make the spider graph fill out it's bounding box +$graph->SetPlotSize(0.85); + +// Use logarithmic scale (If you don't use any SetScale() +// the spider graph will default to linear scale +$graph->SetScale("log"); + +// Uncomment the following line if you want to supress +// minor tick marks +// $graph->yscale->ticks->SupressMinorTickMarks(); + +// We want the major tick marks to be black and minor +// slightly less noticable +$graph->yscale->ticks->SetMarkColor("black","darkgray"); + +// Set the axis title font +$graph->axis->title->SetFont(FF_ARIAL,FS_BOLD,12); + +// Use blue axis +$graph->axis->SetColor("blue"); + +$plot = new RadarPlot($data); +$plot->SetLineWeight(2); +$plot->SetColor('forestgreen'); + +// Add the plot and display the graph +$graph->Add($plot); +$graph->Stroke(); +?> + diff --git a/html/includes/jpgraph/src/Examples/radarmarkex1.php b/html/includes/jpgraph/src/Examples/radarmarkex1.php new file mode 100644 index 0000000000..af4cba5dc4 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/radarmarkex1.php @@ -0,0 +1,35 @@ +title->Set("Radar with marks"); +$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12); + +$graph->SetTitles($titles); +$graph->SetCenter(0.5,0.55); +$graph->HideTickMarks(); +$graph->SetColor('lightgreen@0.7'); +$graph->axis->SetColor('darkgray'); +$graph->grid->SetColor('darkgray'); +$graph->grid->Show(); + +$graph->axis->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$graph->axis->title->SetMargin(5); +$graph->SetGridDepth(DEPTH_BACK); +$graph->SetSize(0.6); + +$plot = new RadarPlot($data); +$plot->SetColor('red@0.2'); +$plot->SetLineWeight(1); +$plot->SetFillColor('red@0.7'); + +$plot->mark->SetType(MARK_IMG_SBALL,'red'); + +$graph->Add($plot); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/rotateex1.php b/html/includes/jpgraph/src/Examples/rotateex1.php new file mode 100644 index 0000000000..5bfc82325a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotateex1.php @@ -0,0 +1,46 @@ +SetAngle(40); +$graph->img->SetMargin(80,80,80,80); +$graph->SetScale("textlin"); +$graph->SetY2Scale("lin"); +$graph->SetShadow(); + +// Create the linear plot +$lineplot=new LinePlot($ydata); +$lineplot2=new LinePlot($y2data); + +// Add the plot to the graph +$graph->Add($lineplot); +$graph->AddY2($lineplot2); +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); +$graph->y2axis->SetColor("orange"); + +$graph->title->Set("Example 1 rotated graph (40 degree)"); +$graph->legend->Pos(0.05,0.1,"right","top"); + +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); +$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); + +$lineplot->SetColor("blue"); +$lineplot->SetWeight(2); + +$lineplot2->SetColor("orange"); +$lineplot2->SetWeight(2); + +$graph->yaxis->SetColor("blue"); + +$lineplot->SetLegend("Plot 1"); +$lineplot2->SetLegend("Plot 2"); + +// Display the graph +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/rotex0.php b/html/includes/jpgraph/src/Examples/rotex0.php new file mode 100644 index 0000000000..fe990e0e80 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex0.php @@ -0,0 +1,22 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/rotex1.php b/html/includes/jpgraph/src/Examples/rotex1.php new file mode 100644 index 0000000000..455e35d668 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex1.php @@ -0,0 +1,24 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(45); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/rotex2.php b/html/includes/jpgraph/src/Examples/rotex2.php new file mode 100644 index 0000000000..2e3a3304e9 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex2.php @@ -0,0 +1,24 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(90); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/rotex3.php b/html/includes/jpgraph/src/Examples/rotex3.php new file mode 100644 index 0000000000..2f05091c5c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex3.php @@ -0,0 +1,25 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(45); +$graph->img->SetCenter(floor(270/2),floor(170/2)); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/rotex4.php b/html/includes/jpgraph/src/Examples/rotex4.php new file mode 100644 index 0000000000..eeb2d97d29 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex4.php @@ -0,0 +1,25 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(90); +$graph->img->SetCenter(floor(270/2),floor(170/2)); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/rotex5.php b/html/includes/jpgraph/src/Examples/rotex5.php new file mode 100644 index 0000000000..c61dceac07 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/rotex5.php @@ -0,0 +1,25 @@ +SetMargin(30,90,30,30); +$graph->SetScale("textlin"); + +$graph->img->SetAngle(-30); +$graph->img->SetCenter(30,170-30); + +$line = new LinePlot($ydata); +$line->SetLegend('2002'); +$line->SetColor('darkred'); +$line->SetWeight(2); +$graph->Add($line); + +// Output graph +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/saab_95.jpg b/html/includes/jpgraph/src/Examples/saab_95.jpg new file mode 100644 index 0000000000000000000000000000000000000000..189b0d48f8349a9fb2ac706c028e89a645f8c0c5 GIT binary patch literal 2664 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 +$graph->SetScale("linlin"); + +//$graph->img->SetMargin(40,40,40,40); + +$graph->title->Set("Scatter plot with Image Map"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Client side image map targets +$targ=array("pie_csimex1.php#1","pie_csimex1.php#2","pie_csimex1.php#3", +"pie_csimex1.php#4","pie_csimex1.php#5","pie_csimex1.php#6", +"pie_csimex1.php#7","pie_csimex1.php#8","pie_csimex1.php#9" ); + +// Strings to put as "alts" (and "title" value) +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); + +// Create a new scatter plot +$sp1 = new ScatterPlot($datay,$datax); + +// Use diamonds as markerss +$sp1->mark->SetType(MARK_DIAMOND); +$sp1->mark->SetWidth(10); + +// Set the scatter plot image map targets +$sp1->SetCSIMTargets($targ,$alts); + +// Add the plot +$graph->Add($sp1); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/scatterex1.php b/html/includes/jpgraph/src/Examples/scatterex1.php new file mode 100644 index 0000000000..ed47006af3 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterex1.php @@ -0,0 +1,22 @@ +SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A simple scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/scatterex2.php b/html/includes/jpgraph/src/Examples/scatterex2.php new file mode 100644 index 0000000000..c68414c3a8 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterex2.php @@ -0,0 +1,25 @@ +SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A simple scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(8); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/scatterlinkex1.php b/html/includes/jpgraph/src/Examples/scatterlinkex1.php new file mode 100644 index 0000000000..4ad155be0e --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterlinkex1.php @@ -0,0 +1,26 @@ +img->SetMargin(40,40,40,40); +$graph->img->SetAntiAliasing(); +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->title->Set("Linked Scatter plot ex1"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->SetLinkPoints(true,"red",2); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("navy"); +$sp1->mark->SetWidth(3); + +$graph->Add($sp1); +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/scatterlinkex2.php b/html/includes/jpgraph/src/Examples/scatterlinkex2.php new file mode 100644 index 0000000000..98615a070c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterlinkex2.php @@ -0,0 +1,43 @@ +SetScale("linlin"); + +$graph->img->SetMargin(40,40,40,40); + +$graph->SetShadow(); +$graph->title->Set("Linked scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); + +//$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); +$sp1->SetLinkPoints(); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/scatterlinkex3.php b/html/includes/jpgraph/src/Examples/scatterlinkex3.php new file mode 100644 index 0000000000..1909a93195 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterlinkex3.php @@ -0,0 +1,46 @@ +SetScale("linlin"); +$graph->SetShadow(); +$graph->SetAxisStyle(AXSTYLE_BOXOUT); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set("Linked scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXOUT Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); + +//$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); +$sp1->SetLinkPoints(); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/scatterlinkex4.php b/html/includes/jpgraph/src/Examples/scatterlinkex4.php new file mode 100644 index 0000000000..1c9071207d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterlinkex4.php @@ -0,0 +1,45 @@ +SetScale("linlin"); +$graph->SetShadow(); +$graph->SetAxisStyle(AXSTYLE_BOXIN); + +$graph->img->SetMargin(50,50,60,40); + +$graph->title->Set("Linked scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->subtitle->Set("(BOXIN Axis style)"); +$graph->subtitle->SetFont(FF_FONT1,FS_NORMAL); + + +// 10% top and bottom grace +$graph->yscale->SetGrace(5,5); +$graph->xscale->SetGrace(1,1); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->SetColor("blue"); + +//$sp1->SetWeight(3); +$sp1->mark->SetWidth(4); +$sp1->SetLinkPoints(); + +$graph->Add($sp1); + +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/scatterrotex1.php b/html/includes/jpgraph/src/Examples/scatterrotex1.php new file mode 100644 index 0000000000..9061e21ca1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/scatterrotex1.php @@ -0,0 +1,35 @@ +SetScale("linlin"); + +$graph->Set90AndMargin(40,40,40,40); +$graph->SetShadow(); + +$graph->title->Set("A 90 degrees rotated scatter plot"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Adjust the label align for X-axis so they look good rotated +$graph->xaxis->SetLabelAlign('right','center','right'); + +// Adjust the label align for Y-axis so they look good rotated +$graph->yaxis->SetLabelAlign('center','bottom'); + +$graph->xaxis->SetTitle('X-Axis title','low'); +$graph->xaxis->title->SetAngle(90); +$graph->xaxis->title->SetMargin(15); + +$sp1 = new ScatterPlot($datay,$datax); +$sp1->mark->SetType(MARK_FILLEDCIRCLE); +$sp1->mark->SetFillColor("red"); +$sp1->mark->SetWidth(5); + +$graph->Add($sp1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/show-example.php b/html/includes/jpgraph/src/Examples/show-example.php new file mode 100644 index 0000000000..0907ce452d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/show-example.php @@ -0,0 +1,24 @@ + + + + + Test suite for JpGraph - <?php echo $target; ?> + + + + "; + else + echo ""; + ?> + + + diff --git a/html/includes/jpgraph/src/Examples/show-image.php b/html/includes/jpgraph/src/Examples/show-image.php new file mode 100644 index 0000000000..95766aef13 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/show-image.php @@ -0,0 +1,10 @@ + + + + + Image <?php echo basename($target); ?> + + +<?php echo basename($target); ?> + + diff --git a/html/includes/jpgraph/src/Examples/show-source.php b/html/includes/jpgraph/src/Examples/show-source.php new file mode 100644 index 0000000000..7c3c232260 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/show-source.php @@ -0,0 +1 @@ + diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex1.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex1.php new file mode 100644 index 0000000000..206a67e2aa --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex1.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_RDIAG,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_RDIAG'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex10.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex10.php new file mode 100644 index 0000000000..15d294a47f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex10.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_DIAGCROSS'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex11.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex11.php new file mode 100644 index 0000000000..15d294a47f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex11.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_DIAGCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_DIAGCROSS'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex2.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex2.php new file mode 100644 index 0000000000..f2cb9a9641 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex2.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_LDIAG,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_LDIAG'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex3.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex3.php new file mode 100644 index 0000000000..f2ebdce572 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex3.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_SOLID,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_SOLID'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex4.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex4.php new file mode 100644 index 0000000000..36ddcf58a7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex4.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->SetDensity(60); +$band->ShowFrame(true); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE, Density=60'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex5.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex5.php new file mode 100644 index 0000000000..f42456f1a6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex5.php @@ -0,0 +1,42 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4'); +$band->ShowFrame(true); +$band->SetOrder(DEPTH_FRONT); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HVCROSS, In front'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex6.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex6.php new file mode 100644 index 0000000000..71c4beddcf --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex6.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_VLINE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_VLINE'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex7.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex7.php new file mode 100644 index 0000000000..d7a5cc8094 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex7.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HLINE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HLINE'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex8.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex8.php new file mode 100644 index 0000000000..0c98d1f5fd --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex8.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_3DPLANE,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_3DPLANE'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/smallstaticbandsex9.php b/html/includes/jpgraph/src/Examples/smallstaticbandsex9.php new file mode 100644 index 0000000000..f2ad14d016 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/smallstaticbandsex9.php @@ -0,0 +1,41 @@ +SetScale("textlin"); +$graph->SetMargin(25,10,20,20); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("lightblue"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +$graph->ygrid->Show(false); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$band = new PlotBand(HORIZONTAL,BAND_HVCROSS,15,35,'khaki4'); +$band->ShowFrame(false); +$graph->AddBand($band); + +// Set title +$graph->title->SetFont(FF_ARIAL,FS_BOLD,10); +$graph->title->SetColor('darkred'); +$graph->title->Set('BAND_HVCROSS'); + + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/splineex1.php b/html/includes/jpgraph/src/Examples/splineex1.php new file mode 100644 index 0000000000..4130b79e2c --- /dev/null +++ b/html/includes/jpgraph/src/Examples/splineex1.php @@ -0,0 +1,56 @@ +Get(50); + +// Create the graph +$g = new Graph(300,200); +$g->SetMargin(30,20,40,30); +$g->title->Set("Natural cubic splines"); +$g->title->SetFont(FF_ARIAL,FS_NORMAL,12); +$g->subtitle->Set('(Control points shown in red)'); +$g->subtitle->SetColor('darkred'); +$g->SetMarginColor('lightblue'); + +//$g->img->SetAntiAliasing(); + +// We need a linlin scale since we provide both +// x and y coordinates for the data points. +$g->SetScale('linlin'); + +// We want 1 decimal for the X-label +$g->xaxis->SetLabelFormat('%1.1f'); + +// We use a scatterplot to illustrate the original +// contro points. +$splot = new ScatterPlot($ydata,$xdata); + +// +$splot->mark->SetFillColor('red@0.3'); +$splot->mark->SetColor('red@0.5'); + +// And a line plot to stroke the smooth curve we got +// from the original control points +$lplot = new LinePlot($newy,$newx); +$lplot->SetColor('navy'); + +// Add the plots to the graph and stroke +$g->Add($lplot); +$g->Add($splot); +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex1.php b/html/includes/jpgraph/src/Examples/staticbandbarex1.php new file mode 100644 index 0000000000..6d3c7bea9b --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex1.php @@ -0,0 +1,52 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$graph->AddBand(new PlotBand(HORIZONTAL,BAND_HLINE,0,10)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex2.php b/html/includes/jpgraph/src/Examples/staticbandbarex2.php new file mode 100644 index 0000000000..7364ae14b1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex2.php @@ -0,0 +1,52 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add band +$graph->AddBand(new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","red",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex3.php b/html/includes/jpgraph/src/Examples/staticbandbarex3.php new file mode 100644 index 0000000000..2832f353f6 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex3.php @@ -0,0 +1,58 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green"); +$uband->ShowFrame(false); +$lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red"); +$lband->ShowFrame(false); + +$graph->AddBand($uband); +$graph->AddBand($lband); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex4.php b/html/includes/jpgraph/src/Examples/staticbandbarex4.php new file mode 100644 index 0000000000..abf5fa5990 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex4.php @@ -0,0 +1,60 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$uband=new PlotBand(HORIZONTAL,BAND_RDIAG,0,"max","green"); +$uband->ShowFrame(false); +$uband->SetDensity(50); // 50% line density +$lband=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",0,"red"); +$lband->ShowFrame(false); +$lband->SetDensity(20); // 20% line density + +$graph->AddBand($uband); +$graph->AddBand($lband); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex5.php b/html/includes/jpgraph/src/Examples/staticbandbarex5.php new file mode 100644 index 0000000000..85d2eef4ef --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex5.php @@ -0,0 +1,63 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_RDIAG,10,20,"green"); +$band[0]->ShowFrame(false); +$band[0]->SetDensity(30); +$band[1]=new PlotBand(HORIZONTAL,BAND_LDIAG,-20,-10,"red"); +$band[1]->ShowFrame(false); +$band[1]->SetDensity(40); +$band[2]=new PlotBand(HORIZONTAL,BAND_LDIAG,"min",-20,"red"); +$band[2]->ShowFrame(false); +$band[2]->SetDensity(80); + +// We can also add band in an array +$graph->AddBand($band); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex6.php b/html/includes/jpgraph/src/Examples/staticbandbarex6.php new file mode 100644 index 0000000000..8c618b395a --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex6.php @@ -0,0 +1,72 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("Shows some possible patterns for bands"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_RDIAG,10,20,"green"); +$band[0]->ShowFrame(false); +$band[1]=new PlotBand(HORIZONTAL,BAND_LDIAG,-20,-10,"red"); +$band[1]->ShowFrame(false); +$band[1]->SetDensity(20); +$band[2]=new PlotBand(HORIZONTAL,BAND_DIAGCROSS,"min",-20,"red"); +$band[2]->ShowFrame(false); +$band[2]->SetDensity(40); +$band[3]=new PlotBand(VERTICAL,BAND_HLINE,0,1,"darkgray"); +$band[3]->ShowFrame(false); +$band[3]->SetOrder(DEPTH_FRONT); +$band[4]=new PlotBand(VERTICAL,BAND_HVCROSS,5,"max","darkgray"); +$band[4]->ShowFrame(false); +$band[4]->SetOrder(DEPTH_FRONT); +$band[5]=new PlotBand(HORIZONTAL,BAND_SOLID,20,"max","lightgreen"); +$band[6]=new PlotBand(HORIZONTAL,BAND_3DPLANE,-10,0,"blue"); +$band[6]->SetDensity(70); +$graph->AddBand($band); + +$graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticbandbarex7.php b/html/includes/jpgraph/src/Examples/staticbandbarex7.php new file mode 100644 index 0000000000..87eb20b9e1 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticbandbarex7.php @@ -0,0 +1,61 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("Use of static line, 3D and solid band"); + +// Turn off Y-grid (it's on by default) +$graph->ygrid->Show(false); + +// Add 10% grace ("space") at top of Y-scale. +$graph->yscale->SetGrace(10); +$graph->yscale->SetAutoMin(-20); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow("darkblue"); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(true); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add upper and lower band and use no frames +$band[0]=new PlotBand(HORIZONTAL,BAND_3DPLANE,"min",0,"blue"); +$band[0]->ShowFrame(false); +$band[0]->SetDensity(20); +$band[1]=new PlotBand(HORIZONTAL,BAND_SOLID,0,"max","steelblue"); +$band[1]->ShowFrame(false); +$graph->Add($band); + +$graph->Add(new PlotLine(HORIZONTAL,0,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/staticlinebarex1.php b/html/includes/jpgraph/src/Examples/staticlinebarex1.php new file mode 100644 index 0000000000..67a9829bcb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/staticlinebarex1.php @@ -0,0 +1,54 @@ +img->SetMargin(60,30,50,40); +$graph->SetScale("textlin"); +$graph->SetShadow(); + +$graph->title->SetFont(FF_ARIAL,FS_BOLD,15); +$graph->title->Set("Cash flow "); +$graph->subtitle->Set("(Department X)"); + +// Show both X and Y grid +$graph->xgrid->Show(true,false); + +// Add 10% grace ("space") at top and botton of Y-scale. +$graph->yscale->SetGrace(10,10); + +// Turn the tick mark out from the plot area +$graph->xaxis->SetTickSide(SIDE_DOWN); +$graph->yaxis->SetTickSide(SIDE_LEFT); + +// Create a bar pot +$bplot = new BarPlot($datay); +$bplot->SetFillColor("orange"); +$bplot->SetShadow(); + +// Show the actual value for each bar on top/bottom +$bplot->value->Show(); +$bplot->value->SetFormat("%02d kr"); + +// Position the X-axis at the bottom of the plotare +$graph->xaxis->SetPos("min"); + +// .. and add the plot to the graph +$graph->Add($bplot); + +// Add mark graph with static lines +$graph->AddLine(new PlotLine(HORIZONTAL,0,"black",2)); +$graph->AddLine(new PlotLine(VERTICAL,3,"black",2)); + +//$graph->title->Set("Test of bar gradient fill"); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); +$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD,11); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/stockex1.php b/html/includes/jpgraph/src/Examples/stockex1.php new file mode 100644 index 0000000000..78dfcfb85d --- /dev/null +++ b/html/includes/jpgraph/src/Examples/stockex1.php @@ -0,0 +1,33 @@ +SetScale("textlin"); +$graph->SetMarginColor('lightblue'); +$graph->title->Set('Stockchart example'); + +// Create a new stock plot +$p1 = new StockPlot($datay); + +// Width of the bars (in pixels) +$p1->SetWidth(9); + +// Uncomment the following line to hide the horizontal end lines +//$p1->HideEndLines(); + +// Add the plot to the graph and send it back to the browser +$graph->Add($p1); +$graph->Stroke(); + +?> diff --git a/html/includes/jpgraph/src/Examples/stockex2.php b/html/includes/jpgraph/src/Examples/stockex2.php new file mode 100644 index 0000000000..ae17cfa80f --- /dev/null +++ b/html/includes/jpgraph/src/Examples/stockex2.php @@ -0,0 +1,39 @@ +SetScale("textlin"); +$graph->SetMarginColor('white'); +$graph->SetFrame(false); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->SetBox(); + +$graph->tabtitle->Set(' Week 34 '); +$graph->tabtitle->SetFont(FF_ARIAL,FS_NORMAL,12); + +// Get week days in curent locale +$days = $gDateLocale->GetShortDay(); +array_shift($days); // Start on monday +$graph->xaxis->SetTickLabels($days); + +// Create stock plot +$p1 = new StockPlot($datay); + +// Indent plot so first and last bar isn't on the edges +$p1->SetCenter(); + +// Add and stroke +$graph->Add($p1); +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/stship.jpg b/html/includes/jpgraph/src/Examples/stship.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f3bae62d72c3815b419e494df122cad9cb4a3b9 GIT binary patch literal 17200 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 NiId%5l`1SK|JmE|Ts!~( literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/Examples/tabtitleex1.php b/html/includes/jpgraph/src/Examples/tabtitleex1.php new file mode 100644 index 0000000000..babf212f78 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/tabtitleex1.php @@ -0,0 +1,51 @@ +SetMarginColor('white'); +$graph->SetScale("textlin"); +$graph->SetFrame(false); +$graph->SetMargin(30,50,30,30); + +$graph->tabtitle->Set(' Year 2003 ' ); +$graph->tabtitle->SetFont(FF_ARIAL,FS_BOLD,13); + + +$graph->yaxis->HideZeroLabel(); +$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5'); +$graph->xgrid->Show(); + +$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth()); + +// Create the first line +$p1 = new LinePlot($datay1); +$p1->SetColor("navy"); +$p1->SetLegend('Line 1'); +$graph->Add($p1); + +// Create the second line +$p2 = new LinePlot($datay2); +$p2->SetColor("red"); +$p2->SetLegend('Line 2'); +$graph->Add($p2); + +// Create the third line +$p3 = new LinePlot($datay3); +$p3->SetColor("orange"); +$p3->SetLegend('Line 3'); +$graph->Add($p3); + +$graph->legend->SetShadow('gray@0.4',5); +$graph->legend->SetPos(0.1,0.1,'right','top'); +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/testsuit.php b/html/includes/jpgraph/src/Examples/testsuit.php new file mode 100644 index 0000000000..60a54b1864 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/testsuit.php @@ -0,0 +1,107 @@ +iType = $aType; + if( $aDir == '' ) { + $aDir = getcwd(); + } + if( !chdir($aDir) ) { + die("PANIC: Can't access directory : $aDir"); + } + $this->iDir = $aDir; + } + + function GetFiles() { + $d = dir($this->iDir); + $a = array(); + while( $entry=$d->Read() ) { + if( strstr($entry,".php") && strstr($entry,"x") && !strstr($entry,"show") && !strstr($entry,"csim") ) { + $a[] = $entry; + } + } + $d->Close(); + if( count($a) == 0 ) { + die("PANIC: Apache/PHP does not have enough permission to read the scripts in directory: $this->iDir"); + } + sort($a); + return $a; + } + + function GetCSIMFiles() { + $d = dir($this->iDir); + $a = array(); + while( $entry=$d->Read() ) { + if( strstr($entry,".php") && strstr($entry,"csim") ) { + $a[] = $entry; + } + } + $d->Close(); + if( count($a) == 0 ) { + die("PANIC: Apache/PHP does not have enough permission to read the CSIM scripts in directory: $this->iDir"); + } + sort($a); + return $a; + } + + + function Run() { + switch( $this->iType ) { + case 1: + $files = $this->GetFiles(); + break; + case 2: + $files = $this->GetCSIMFiles(); + break; + default: + die('Panic: Unknown type of test'); + break; + } + $n = count($files); + echo "

    Visual test suit for JpGraph

    "; + echo "Testtype: " . ($this->iType==1 ? ' Standard images ':' Image map tests '); + echo "
    Number of tests: $n

    "; + echo "

      "; + + for( $i=0; $i<$n; ++$i ) { + if( $this->iType ==1 ) { + echo '

    1. Filename: '.basename($files[$i])."\n"; + } + else { + echo '
    2. '.$files[$i]."\n"; + } + } + echo "
    "; + + echo "

    Done.

    "; + } +} + +$type=@$HTTP_GET_VARS['t']; +if( empty($type) ) { + $type=1; +} + +$driver = new TestDriver($type); +$driver->Run(); + +?> diff --git a/html/includes/jpgraph/src/Examples/text-example1.php b/html/includes/jpgraph/src/Examples/text-example1.php new file mode 100644 index 0000000000..a8ac965259 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/text-example1.php @@ -0,0 +1,18 @@ +Pos(0.05,0.5); +$t1->SetOrientation("h"); +$t1->SetFont(FF_FONT1,FS_NORMAL); +$t1->SetBox("white","black",'gray'); +$t1->SetColor("black"); +$graph->AddText($t1); + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/text-example2.php b/html/includes/jpgraph/src/Examples/text-example2.php new file mode 100644 index 0000000000..4bfa9616f7 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/text-example2.php @@ -0,0 +1,18 @@ +Pos(0.05,100); +$t1->SetFont(FF_FONT1,FS_NORMAL); +$t1->SetBox("white","black",true); +$t1->ParagraphAlign("right"); +$t1->SetColor("black"); +$graph->AddText($t1); + +$graph->Stroke(); + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/Examples/textalignex1.php b/html/includes/jpgraph/src/Examples/textalignex1.php new file mode 100644 index 0000000000..84d9b3c537 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/textalignex1.php @@ -0,0 +1,77 @@ +img; +$aImg->SetFont(FF_ARIAL,FS_NORMAL,16); +$tw=$aImg->GetBBoxWidth($txt,$angle); +$th=$aImg->GetBBoxHeight($txt,$angle); + +$aImg->SetFont(FF_ARIAL,FS_NORMAL,11); +$ch=$aImg->GetBBoxHeight($caption); + +// Calculate needed height for the image +$h = 3*$th+2*$ym + $ch; +$g = new CanvasGraph($w,$h); +$aImg = $g->img; + +$prof = array('left','top', + 'center','top', + 'right','top', + 'left','center', + 'center','center', + 'right','center', + 'left','bottom', + 'center','bottom', + 'right','bottom'); +$n = count($prof)/2; + +for( $i=0,$r=0,$c=0; $i < $n; ++$i ) { + $x = $c*($tw+$xm)+$xm/2; + $y = $r*($th+$ym)+$ym/2-10; + $aImg->SetColor('blue'); + $aImg->SetTextAlign($prof[$i*2],$prof[$i*2+1]); + $aImg->SetFont(FF_ARIAL,FS_NORMAL,16); + $aImg->StrokeText($x,$y,$txt,$angle,"left",true); + + $aImg->SetColor('black'); + $aImg->SetFont(FF_FONT1,FS_BOLD); + $aImg->SetTextAlign('center','top'); + $align = sprintf('("%s","%s")',$prof[$i*2],$prof[$i*2+1]); + $aImg->StrokeText($c*($tw/2+$xm)+$xm/2+$tw/2,$r*($th/2+$ym)+$th+$ym/2-4,$align); + $c++; + if( $c==3 ) { + $c=0;$r++; + } +} + +$aImg->SetTextAlign('center','bottom'); +$aImg->SetFont(FF_ARIAL,FS_ITALIC,11); +$aImg->StrokeText($w/2,$h-10,$caption,0,'left'); + +$aImg->SetColor('navy'); +$aImg->Rectangle(0,0,$w-1,$h-1); + +$g->Stroke(); + +?> + diff --git a/html/includes/jpgraph/src/Examples/tiger_bkg.gif b/html/includes/jpgraph/src/Examples/tiger_bkg.gif new file mode 100644 index 0000000000000000000000000000000000000000..3faaa174dcf1cb1d07fadff28c88f134fe42cc1e GIT binary patch literal 19662 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/Examples/tiger_bkg.png b/html/includes/jpgraph/src/Examples/tiger_bkg.png new file mode 100644 index 0000000000000000000000000000000000000000..78d8e25b0c44e565c7aacb811f5df5dec7c9667f GIT binary patch literal 19213 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/Examples/timestampex01.php b/html/includes/jpgraph/src/Examples/timestampex01.php new file mode 100644 index 0000000000..62142a98ab --- /dev/null +++ b/html/includes/jpgraph/src/Examples/timestampex01.php @@ -0,0 +1,59 @@ +SetMargin(40,20,30,50); + +// Now specify the X-scale explicit but let the Y-scale be auto-scaled +$graph->SetScale("intlin",0,0,$adjstart,$adjend); +$graph->title->Set("Example on TimeStamp Callback"); + +// Setup the callback and adjust the angle of the labels +$graph->xaxis->SetLabelFormatCallback('TimeCallback'); +$graph->xaxis->SetLabelAngle(90); + +// Set the labels every 5min (i.e. 300seconds) and minor ticks every minute +$graph->xaxis->scale->ticks->Set(300,60); + +$line = new LinePlot($data,$xdata); +$line->SetColor('lightblue'); +$graph->Add($line); + +$graph->Stroke(); +?> diff --git a/html/includes/jpgraph/src/Examples/titlecsimex01.php b/html/includes/jpgraph/src/Examples/titlecsimex01.php new file mode 100644 index 0000000000..e384a4aaeb --- /dev/null +++ b/html/includes/jpgraph/src/Examples/titlecsimex01.php @@ -0,0 +1,62 @@ +SetScale("textlin"); +$graph->SetMargin(50,80,20,40); +$graph->yaxis->SetTitleMargin(30); +$graph->yaxis->scale->SetGrace(30); +$graph->SetShadow(); + + +// Create a bar pot +$bplot = new BarPlot($datay); + +// Create targets for the bars image maps. One for each column +$targ=array("bar_clsmex1.php#1","bar_clsmex1.php#2","bar_clsmex1.php#3","bar_clsmex1.php#4","bar_clsmex1.php#5","bar_clsmex1.php#6"); +$alts=array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d"); +$bplot->SetCSIMTargets($targ,$alts); +$bplot->SetFillColor("orange"); +$bplot->SetLegend('Year 2001 %%','#kalle ','%s'); + +// Display the values on top of each bar +$bplot->SetShadow(); +$bplot->value->SetFormat(" $ %2.1f",70); +$bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9); +$bplot->value->SetColor("blue"); +$bplot->value->Show(); + +$graph->Add($bplot); + +// Create a big "button" that has an image map action +$txt1 = new Text("A simple text with\ntwo rows"); +$txt1->SetFont(FF_ARIAL); +$txt1->SetBox('lightblue','black','white@1',5); +$txt1->SetParagraphAlign('center'); +$txt1->SetPos(40,50); +$txt1->SetCSIMTarget('#88','Text element'); +$graph->Add($txt1); + +// Add image map to the graph title as well (you can do this to the +// sub- and subsub-title as well) +$graph->title->Set("Image maps barex1"); +$graph->title->SetFont(FF_FONT1,FS_BOLD); +$graph->title->SetCSIMTarget('#45','Title for Bar'); +$graph->xaxis->title->Set("X-title"); +$graph->yaxis->title->Set("Y-title"); + +// Setup the axis title image map and font style +$graph->yaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->yaxis->title->SetCSIMTarget('#55','Y-axis title'); +$graph->xaxis->title->SetFont(FF_FONT2,FS_BOLD); +$graph->xaxis->title->SetCSIMTarget('#55','X-axis title'); + +// Send back the HTML page which will call this script again +// to retrieve the image. +$graph->StrokeCSIM(); + +?> diff --git a/html/includes/jpgraph/src/Examples/topxaxisex1.php b/html/includes/jpgraph/src/Examples/topxaxisex1.php new file mode 100644 index 0000000000..956fcbf7a0 --- /dev/null +++ b/html/includes/jpgraph/src/Examples/topxaxisex1.php @@ -0,0 +1,49 @@ +img->SetMargin(40,40,40,20); + +$graph->SetScale("linlin"); +$graph->SetShadow(); +$graph->title->Set("Top X-axis"); + +// Start at 0 +$graph->yscale->SetAutoMin(0); + +// Add some air around the Y-scale +$graph->yscale->SetGrace(100); + +// Use built in font +$graph->title->SetFont(FF_FONT1,FS_BOLD); + +// Adjust the X-axis +$graph->xaxis->SetPos("max"); +$graph->xaxis->SetLabelSide(SIDE_UP); +$graph->xaxis->SetTickSide(SIDE_DOWN); + +// Create the line plot +$p1 = new LinePlot($datay); +$p1->SetColor("blue"); + +// Specify marks for the line plots +$p1->mark->SetType(MARK_FILLEDCIRCLE); +$p1->mark->SetFillColor("red"); +$p1->mark->SetWidth(4); + +// Show values +$p1->value->Show(); + +// Add lineplot to graph +$graph->Add($p1); + +// Output line +$graph->Stroke(); + +?> + + diff --git a/html/includes/jpgraph/src/Examples/worldmap1.jpg b/html/includes/jpgraph/src/Examples/worldmap1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..caa7c140457ac20219fdf0a4b64f429e37197cbe GIT binary patch literal 65693 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

    rlhwN{NEyW9v=^n_WZ|4(a=i zDw-JUP6wJOQYw*8TpAM7mY5Y^2&1McSN&VmNI_HB{r&qgs0cR_R zj4si;k_Vvls-?vg z{FW-YJQ2=1{i?P(SV*kAvK)$O{#?dL+dJDXxXWWbtId6)!E~Bujh1`Y(RKPZVS(kY zcHNb?k0XusI4zNZg-I}wxfmxO*b0kuzy4ns5*Zai8;{h}G>t_8RlJR+OcBT@9DAQ? zlXE4p)ISXo#0-Fujzea+{SPUa*`M6l5J$Ve=(qKljznH7D`R!tK(VuHsl2r%a57Fa zR~EK*wt#18axhuXG?})tRdy`9hstnrN9k4bc~@8ODGp1YkP+Bds_GqL3`l{Bp7Lse zUT!RTXK@dJ`c)>VOI?`vY>qFK1MA+J3`+k1 z%8W^Y$=FXdz2Wk(5=&2~{Ui))cI9cJxL+)13WRb;Lr}E=Z#;%KTp=8=9D`N%a%(5& ziWF2G2_NrLQah80E@v&1mdPCc)k{9|$7pd69%pBLEFYq646ES!aH_7X9wccH7FA*! z6$=?2hGP35-Nkusel?_3AXL`>$Em4v1;k&IK6A4(@uGt!A1M6ThCXQ`qBU0Wu@ zob;=08b2~+1#$xq?@*$NcIS-y8lR`i&^A}N{VLXSvr6k5FSmXTcu9O8;44isJ1x3} z#7jN&g#c+JVVn{>0e}WhGh3}XJ@Lk+po(J0J4^^y1&eJ-c)cf;2L`P_aB%AQFM zU71*+
    vt!=zHC9Q${CPT8HnngfQImTNR;4(EFhwC?SWO8 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 xC>J-$FpbyBjQ2 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/flags.dat b/html/includes/jpgraph/src/flags.dat new file mode 100644 index 0000000000000000000000000000000000000000..1cd2e72345fa62b81201376256dc29a708c54347 GIT binary patch literal 982587 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

    2fZ$(t&%nTh%}5F1t;O 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 _Yb*gsl{o9p$1}jcUynruV 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�hp%Nk=wmT?cw_8z>vR^_KK;-#96XjYxcb0l=! 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�s3oglwE3h5pEoocJpb6vxt%#yk_I#7(2)f`FJVt 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

    wm!N5E2&q>)N~D!GCKdK>uMSkP^G4 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

    RxKQC~I%ln)3 zAx;(09vqN=#FdXbJP}K>SUBt(tOfMp?=~w5Kau4H^xNpWFFJzIVR}3F3;i{K4z82s zDXWivsD*JX{KO*8GK89GFX|Un)o@aPK=a+&1`lYZ+abJnQLdJJ98|JWr1McY z{>*XWtPDi5e>8#yyTOle)_9HFR0_w75i;VaGE-v(pjN{hiWaH?f5wNzv-5F?eFN~H zQBVXhH}UmHs^BeR0TK-noblnv$A~3E8bVneBbp;_HR6HfvZczqKs~!Vf&>_t79m>f z&o4Fn%zif(xOUtg`5KAy90(MBL!z2el|EXs1KD0LyxIaLc9cregK^l%*NoKG&F?>r1HJ^#+z!NCf?lM4W2%S_S7DfdE zXlb;(6p0AFS(yt54*@>TZbxv!aW!D0fLLZetY%1L1soZT;r(G|}R`5kUPppvXAi%2$^ znHCptCqR68<7d-@R2o;;zb_B8J9X{9lJR#{#-TP-BLsfXdkZ2ijfl;*5`&Rig#N}n zg2Lxky^O^&5s>)C0KpcF18wIfNV;hG7SnV?c4(QarLa5IDi9P zvp%bTx^FN5!~pIQy@+`+&$zRVgDxmg)+?iTyrBZPp!0%|9aiuY>RrGZjqurOwcir z#H%Kmw0Ao6JbuC@kyNct6W#Mf_5;(CfZ{ItICtJ&u$==) z0|JPFrtzkHS#i9L8!%MaFeFMajXQkk8&~NZU0M`cxMS*Cz7-3FyFY{y22a!Po9igjn1$?KRNXM=}fFMM*_F8k5TE z2-6xqIGj-LTd;3$GnE=(QU`D{)#9!ZVDtRW1zIeHP*V13CZxc_XHH5zJzA9hF0cqt zICvLz8wZV7UvRU5-QE1B6}x|_NCk}_@o}W18crhcXf!F_#Z@AX@sct?;XvI8v1}g7 z*G?_#t*ZVx*z}rzaH|?!o?(v}^QTn_T!{|6To7k>{;=wVzt%(?HUFLDu&JO6;_qv1 z5an^MKXSrDG9v?Iq| z3>`^};(z?hUG+88|0IzeMR$H{3P=`aMBY{)-EvaJ2?fgHDm!sj7Op#3sN%TQJ^YB5 zeQXFBzDH`u00T&v$!-isI_g0?C}j;rjTE}tOo?pFB45CkSpf16zfP9dGh_+KQOE6B^U|nfL);EBJB@Vf&-M z{t`2#m+@txhK$$W%VlLMo>wt-&$3DA*MBAP&$?^G#RNQId5y%t57T;#@xh;EI#yRs zH^tlj#t&T?k&C}6$-MiSZUV1Wrn71NTk$F1_A%wz#(4v1E+zu^Xd>y`_4v8Tjhlrl zzW8Z})R924l8C6f=p|A>j6$U6XB1Qnc-08`eXYjx7J)^DWZKD54z%NEAg#>R4^(fk zG^_No%7sZX><;+tgFfh+V^SGXK0t=+m`CWq(D)9^YcjxD$KmoC+GzZx_*=8GuC7Q& z97tAllW!{c9TZi(x-}yDOME+m1n>!N3S>!1<4~G9-}I2^Uk#+?0lZo9%Q8RW2u<8l ztfEz@_7h;(T2 z!mK&&B5`YMRwU=804}t1p*Nex6bDe74zV^L4p6q8_n#dcT4Xl`s@5a9=WeNNAnUZ72`K}%p!68 zx1%CeSKhX1wylgrXA?OLlXP`E_8OGf@!j{C<(Bpz??)$R@AdlHFj%8y+GCAL%z;{I0J>7R6M+FGCw9>1Bt57TCdc1kWM1^mv;& zkDyZassGWhpw|^7b#_m{pF?{aT7Tch<%^^{1j;yCXi^P@Boe_FH}JDd{qm!v&{Qrg zX1qA(2X7Ft5k{DEi;y_}FSH8(zs<#3K;qpmESZD;qR!^R z&{bRa|F7G!u{1^fYcB;ZF8UAMmI%1|pY~FI{$)hn?9BBAfd8r6!u}2Yodh!{i9xy0 z@fH0S0s?@qz%?M~w}olF76KO4*UO35%Ype?;`wsO6{e;Dmqr@wkE z#PJ}JCK4GLtQi>$E;%E;;E`UiNH4xfFV0A3rbuT9$g2qs)(m!rgFTsGkVO-$>*WQ` z$SX#TGoP0;h^gW80)Z=_5Da`*7XYa=&enX+)|}2L$Q5|l8D;IPYwZj&X#NJ&fZP|5 zQNwqIsnO-M)`WnJ8W3KCverdeBSGOC3I#*y!cn^5k`oka=~|<}H^5%eUw|68t|lKy zr_lsuX1b`qlvXfJB%dazkwP+Qf(&DnGZH+DE()oOL~80HH8qi%;0hcm&jjL)<#nw= zp_9C({FRVO9xg8rla~k8WB^<@7_RFD*L8+#f-?$^w1y*f;a7(t;qu@N_PIbh4HFy& z0Rc5IO)r?HGfW-{9t^^3V0-|dW+We|r9)ctAyIttURPZ*c~GSWuIuuF)Ec-Z9}LdN z32-7KIpw`L<*hm8QJipVPB^&KhLAVvlNmE?a-6Ae5w06;GP&t9Us1&hwL_Ozvr zL79N6Fp6iXsw@u$>95TN+b#ul5*m4z=sYNtZqOrHDP-&<<*X(%jnfMJKqXv2XbqWJ zR&Ak?WSU@9cq>8)dk`ovtDr>9^(vLRk()=9g5Y=L<@85XN>}U&{=o&!z0s3Xp#}AY zKL-Q--}JILvzrf}6X4(z071C^ayaeTfT0E;#0xOd0pz3r;eW8XKbxQ!%m03OU1FU4 znQXa4Q+{3mKT{J!`9FH2Bd@Lc}O7bg=OE?$F#zh7}@uPKDnJ=7xA|U4!#TO`WxZ)AofSuF)5UMK{VNyXq2a) z#ezB$*7wVfi4Ve9$%Q$H#;_kj!P}d%P<;CRrb5=HhA=PAhT<@Z^V!=nJAJy0n}87JH`XK1ZSK)n1iy&q&5Xw&eI^lVuM%n%W5+VGevjX#@%T5ikl0p{|Nz z`Wps;GGm;k?POJ>+?{I1Hrf}{1>3B5-C$e+QK zc-`^wuYHH$*GrOHPJ}mQpRY;3$RjoJSk$SaYD^Cx(Wo}V%n%j^(NT6L3D=WIyooF`{DWT^zd zL_d!;FuwFaqk3N6c7XXDsR1g2j-~2~DGrfBR8xI5v017to%om;Dx3>Q_D`Qpbza)Y z$7jEV*=CQc25+*iNDYz{?PW>32)EW`1jnK7HXt`d7(1o)UbfFN{JAbmOVYGc(~Wsn zsr4d?|8z~kbb`J7DdmH&Vjt8i^!P zpvd<#{n~{R%Q0iiJoAb@H_c28l`x|C>@0rFjuB;g!PEars zU)0)ME*dxfYtBmOPLEO0!$-;VVXXnz9cDESkWLty` z475!**CMwc7yN8J?fY5iSgaAlf+$;cdY9rT+?xDaGO2C9>{-LJ?{WUR@un+7htalT z$AyKfow?|xdg{HcO@+IorGK~A~UUdmn)P$@E&sTg2?{Pmk3WX1L4gF zvan2bp6V5G@p$fq#?y7y+^r~!4K~|({)OvFi?NvS-`Z}{8ESMnD?ra7L2+Xiwd>*U zw3OKB7ZD-|guz%%s=IHmuO*&aPCTsVHLt?w#B%Lpj%;q>7gjxqeNA_w5lhQ&UP?2J z&AsFOJ$k=vzAj`rcu()>qa&4m4A0zth@Iklo8u{J{EKH-21&u$F=pmhN|(Czi#?`GDX9ixH*(+*SN9V6xH<-e*DUS^n2X% z4$8cX0~!g#`BIL5N)AYI>S*4OEZ8htZ@gDDKD=l{y3>%7dWhWhYy01 z>^0Y=tIJk|q9Sxv+LNjJ7jm%?cRcq?H~kKy4tYl~wOi|axN1XWm&lynh{tNw{gQ=T zf*flyWevsfA@iG!N^V_QnwtCSPM@+>e80EMWemvr8+p8u>3?-WzFU>qWn9$+yc|_u z&K<6Qr}do^1A!p}&TO6?x@<0- zu0x_FX}|rEQ)U^#i0f1Dzd9l;H>w+`__r-LMt-&rTe&^*XODbZo&vPE$SK}DSX2Y; z>qHT`tNEr@yxB$qUUt6R-W8{B_fnS<(*~BG6y+V?Umhei3S!6zI}#!@PJYHaq8kQl z&X-zv-Mg}1m6&nEWUF4tr!_C7oHdHsXwdSeXLX8pcpbq*69uSHf0jTh?i3U+wz-JO zawt&hc{wX93maSQf-YQJJN!h-GpESB0Cn&6)AvT^dCzyBSqpGZxA)xiVo$F{P+dZFZskxVOX<514ATdcOx{!3%T0QqQWpZ>thaY>YbXa97?%LQ2 z2n@asP@5*_715j7LGS(EoN%&RO|abP7_+Lco~TCVB`xQsRAz*hy?XHTtTua;juW~n zZ>Fr|wB|g)Zr5_SArpr2Hmx~mIe2Cj9c6|ElJ=O)fM(N(Jm&L)G)d97ec{crm$%(Xvp$s~UflcD-zIq1 z_$Gb8hp!3!p+~SW`K5e!dWW>O&=P z5C51uo53n{yz1qvDPcE^c#~|u0spgkIrT|>efil z*t_ra^tR+3&y-K?%vt;XcEczrYS#FcURXCj6(rVqMLRqlzt4Jj#;~;GJ033fjU~X| zIoiG~IV5^}-=tJv(M6K3^4G1h(aql*_c9*%CVo`3!D?67*G0ebwF||ryXglm*xj8r zwp>q8tFoEHNAKZK2uwb9OrD>Y7Vd2E5nI6AB}ktLL4P{Ev~X|AD|LEyx{YBcC~hlH z`J*W&={)p!b7lUy{mHP@zEN+$h_)uHr}8FaL+ye_`=Mt;&q#y*6Fj36QIQ(Gj5zke zlP-JrM~_kjst0se#7IC(f0UE8U=9jEM&pj}??A7`WgK0M6b2kH8gEZ-LNo3O+4i&@ zem9*?`7`&GOBR|Ldp<#oo*T0Y8lixHcu6D?xxHS~kW+M7TClPZ)~jVOxoPg4(=aIh z*2u&C_`HC5UTF06XTgICg1U`UIosM73(}jb4QG$d2{pdLS<_*YnGf$Z%@3TIOrzg!$>XE9(a z85uUbT#|6+fAIaQKO=*>f9n?g-p85WX|tVsfy~BEH^wcvci*#=HkC^MTYu=9mYgBZb3|6ZTojM6;}__f2pb5mH6ktFSzz!yG26(2rvPw0AOtd^tiRm zA77DI|CdvI)(cti);a#;)(xp#1)BgJ(RiT`00|CWjt+q6Tu%-^Z19^FKU#NocXC6f z5lljnZ2>d{fpIe65cj`jwTUP_E6=NJ<=Pw$7-aGiC}sqH5%|Bt`EOcXGH73uZk%fL zRXPSg@4xxOjE?zTaAsAlN0ntf^{2kSR8yh{R~lart^ z@^4q9v%LI{7YI!zhBGl~a&o4_;m(|#NC+gDi3vtbJkQAq0*nhF5Nl%MVDKf34@63@ zBjtNIAy*GzOKmM55U?ga3TyL=s zwuWN|twA^A&Sd&vtyeIL3H0k7mtR>K*K1+Ux=hC{e1qvsC?qk+jsDxvxZZ+{w7&8* z2BV03;{Rc51l^3z)|&G@UOnZy*h$U#@~b-EP74#Z2Q+^|KncXopypsXtfznv1ai03 z#+MfagY`n}PC8gW1Koe1jzS&|V2@h{dm=%zCs+;yLEXBVOyvc-*d1%^j^_Lze6WQR z6jYQKfR#c%><%2e!?!cfIX?)V1l-7%4pu8`fx*ER7-%(w0U#vBt6USrqkttad21M| z010>I(=9-1rpqJaLDn)TY>?;Fl z7FL;@V}m$(4VL+9TMGSA&|#?atjGK zvc?eOGOs|=d3v@9V|kbr|3D=r0z~_n2=8(w2io0#;p&+FJcRpa^il;$O#Z=-u%Wtp zs4%8n$N|T;1oP+o1?Qt^$9xtw`Dmt# zx%0@+RhqU(<`Okj9NGG3=prc6SM?8C=8)?5>fBU_?{-!N>N1yNoJ^_zU6~K z^&yThH~Ien7t?#uq8EMNWRiW$PI?nBP0XN3gxEPs#m}i4s*GSbM=AMztiFj!*=&or zfqgcTb-u;t!&7*UQb4dz|3UZ0`rStN5_!pE4MLLlq4zF$r~MpUb8(^)E{oct`LI=^ z(Ge{>o0sz7r(?QevD0X!KHnc33s{Qb=o{Fo;po(hli>xL`ZPgrS`4b!4}($a@byL~ z4f~04`5dL?K>0883J|xBR#f~B@S@AVe|q`*EEL@vibbQNV|}(Z>}P)-`-INaeBVDA z66dFy?3E!78I2~ujtoOZ|4f7E=vQm+doQA25H5K|mw{}kt!31JAIC-2L3HLN({!}z z>gkfgX3|I(f4y(N!=20@>r)D-UB4EqvHDRcKh|O+`t^m!usg}7Ck~VS%i8YlGIJN* zj6o&8gZGDs(`AHLLY9;arnd(nd4@7UP-66Pzo;#5e-0|u*8K#NqEd%RRr}87ZHmLr zcV69b%Vg0xLoGomE@0Ks(mr!|rJu^yJuwG=#7RCJQb~QYunYP)#D(k+tTpupDW6e2N0hIQrs&I!! zyW(ubENHhYNRmBofalvvbiz4ZOwcbu&JRQ0PcTZo2;noBF;wpi7m1wub(k0nZIs|1 z*p0R`7Mla*As3`RsX=WdXL(Cdl8fZ3Xg;4LG8SO_*^6kYMVjyf1Ty9Ty-#}aOcJY% z$y-MVUod@)=Ja8cyiCjz4wm6CBQckUHa_1aA64pgw|)J5$=T#=WFPw4S8b*@{4!1t zpB*p4dh8-vTKnSwZgOoPSqRVQlx1e%7cQxKl3CQj``+#7=Sku;XCr&i02$gRN3h(s zvz)LxUZbo43H#^IKYqVqQ6=r)y7+3@m$H5Vs}SnxFoTzd3dtOeHi72-MBKiZu8MxX z`ut)zuJmF;?Tz)=uU>XeJ^+2tPm92ra!-)jZ(l*YwJo@*d39l-zPD$3g|_kh7K$SX z3ZfqkSbO-c@nkwWvi_Ku$9|z|sN7i{7j>P`fB)D7wU8cavDFA^60pI2&<=(Bfd^$k(ot&e--U=J|qSMqcjC8UDJD4O16J*s79Q%Gf`Y9+XUAm-u0Az zz#JZ7Fh@_R_O)$4vIY>ebxw>>Zb{ou=!dTCB5Ssx?wF8YGBi~mJglvngO2o*lJ72` z@{n|7O$Ka9yEe!8L%$a-d)|qF(%NJ6btL(`mp|$rwoiowzwEx3wz;)sTN_anNB$whre5*doQBwDT8rFQ7e&DI|= zOrzYdt=LvH$zIkbj!bZP_k0sdwL2Mp!+7srQy$;_F6N70gM*J`$7i0e=bW@8^SP?1 zNE)iQOqOaNFKa6;(ntS%Qa@E1QdHZLbtEeL#=?`0W{l?-Q=(2Crw_&K#2ndb0M^uA zD+h|kdP;4Tc3`m9FIstTok%&|m{i>pk-Yzb#zTN(Er#{mnAoq45OXPyV`HlM6|cp4 z`q3L4<@tfU1w7E}9wAo5@CmkIKquEZG~nPEyL|h7%i+uB^O8U;QuItr17E)+#3QIv zr#VpDo#03Px^S;|^F3deItrNa$Hh4cKOK%XnMrIq;1_F=E?ISLS6T5z$ z`7b4?BU(N;#4?eyES_5tNFMrlCvI+T7vJ;Tnx?)neth_}y2XRe#mHCVhWryp$inM( z#&b(;=c;N{#APKR=FbZ$zSSwC9+PogLbg@(gLR^vqxugeAFOR{r6+US!?NecrhtrK z8Bw^rgEtv%ZBlbq{QBMDi8Zgrymx7P%5AzN(8%_x`Xvqzi zvKLiC5k|NR92!xwT!&NBtyd)`HVXGye*Mv!n@6=2Cv(k{pZ8%B!$R(Z>04~2iX#=w z1KFxSMvj@453T4OeMR?tSbI(7_Q+HK1Gn0mn&y_4@Cg#D+Qy25>%7Q(^-jq*Zx=0( zV_xKFHgG)gsOL^RVk|^Qo7@pC9nCx-R;lqz2xfZWs?P?gZJ;NH?&4lD-tf4FM%dp% zZ*yb*c&uFzvu=>}P1AgCaF*x|)_FJ*-Ok}idh1IAtH2ER=XdQMUXA*Z)*CNNBwjyL zQVM(Am^R{Z?}%QNfRXPaldC4OF9Ywy)`2J}dayh06<*%k!Y`0EjEeolETvr9iEumW zyO&o^we>9l{>-0(d~_;$oEwRf4^1hG#bEo#JT&L>Z+pi+6znp;?DZJjTvW)bxYkAO z!zn}y6|tFxYY4my=z@fnG)({guB&a8dPFc?V_CP(^pJ<7tl#o0pYk?OZkUH3(L1Ge z>6^1s>=_ZfPg^O`H$9bLW86__bJJ5L1b)Ke-nf%Qf8Z`$z`3=qqF(E}HLkh4Bz4p3 zZQ(V#PHK(YDJIzqv$804b%QYEVPesRRB)zb`FXbiHJW|F@$Lge^WNzv)^aCGKTTHy8~j)gmV`7-T5(I+0{QDA0!r0{L%fMa$#Tr{!jg@ z7>dAz;J=-*b6>SHd5%W^8i&?+F^@9n`VURGxVn-*A52Pj>NI`6orh`ix?|i>KEM^j zr4o0mkS9itvDQ7}QsdK?M4iRTycyQ02a(^r_N7)n)39{5xPIKZehp(v?Ivf$DX{16 zqE+`vyYFLljvs-4HoN}Wt7}RZ5`G=EuF9zRawCqk15h0TpO=ya)kH?*Lr#wz{ zUyi!G9w@VrBYy9;SyM+@8w-8Rqm`!zxV;$_a-9KtQNP7(u0NNV3e+rK(|<0eLJ%*5 z&K!Kh=z}LBkz4#ZB}@GE^20o-DwqsfP&e%8U6e35_K0hEjMCCZo~#veIEl_J`CQ0dV4st8LmI+zI?n)bY`G_w|%e3 zo`-tD4j+AL#y?s+`}#ihGx~3F&3aEdpSmw`G^{^tx99htR!GM(y-SbxwZ|jH-jOi- z@2;v!e#;9=rKl$p%X;ffJfG+ag+7I&O^9g8MJn&f!7T=7 z*@f;wt5CSouheX>uHeF-uZ}I@w@zsVF#?q1!rJXtI7)+`)~h2UP*pF74qx6sk!b$H zQ-a^)+&ZU_-nR6NtglIF?c*pa8?gZ2Y%MDYYSVXlNxHh=ta3uo$b2FG)#>TP##!hp z-x*&2gBR?(n<~mU)vr9o5+*Pu_(>63L$Cfwx|nDrS+0DSx)!bxjpyKS`JJ}hDXNBS z4cnIPV=zz|SXlZ-E#p`7^wOTz7`t7@?A(hrw=BsyNWy{o%d-w@57?LFW^afzW!l5U zqJn(0qI}G8bt8YvoKKC*%$V1G;56EK#?XsRERGC4^@-KizvsK&k(Raf=HBtpWn4B* ztdQzrO-JT@RFsTlc6a04c4(m)n)%z~L2jGq@z12UI9=pDFc^h}3h!PbYHTs*v0Cl* z#Sq-IJff3R&wMV?Cv=<-j~4P#HFNRa_6zj%DZ?v)+l(v5Z=4rpJ;{Gu+}Gh}@OM%( zjpa^YFlEOn=i)weaXUlW>EI(S#+fLUgCQNrD9x9<1@A{n&3kYRhk; z-8;)t*k;a3Vs!8mDA`N4WynX^>bf1N>0Tow8Jn8R=^k_ROq|oLSMRnO*ZovRjC$(z zt?HM%o^GQP#3!XM{GlQDu;eSRS5@;1UJo`*tL(lsm|shqd+LNs+wcI1kUScBkO|v^ zrnYw49UaR~Q72gTjBf(faNKT>j}&dnS@wAkBsMjTxHLkWs90?Yj{T~Mht20NAN(39 z5g|Qh7{U8Wz$QTP&B}Yp-&H)*Esr939!h)mxDsoKeYTDaZd2qqx)=;gD zU^*P{_NM*0c@_RX>1Z!Ij1qYbrG(HudRI;dQMgq2olJT@g9My6aSuZ{s-I68MLL*1 zpFDFTqon5Ied3&=#cjS>^$8WvJ?0G?FC^+Xn7N*B9~%clFg}oJzbAEp263ZE#r_kj zT2uqzk&{uZJgXTIAYGImd2x6^PWVTCt*O1v76k#HRhuMuP<}x zrEa!e(h-9ZSG?kfldwF*wWD_x5L&KFg)K&^{rT3w9}{bmWqQ@NOXmwQF^pd*4VNQR zM4W#zE=Gnf8xwOco^@Yr7!$@A)DzAWCEcMzP$?j2H)d~GJ%?pqJvU`hbhKCJnk2og zmHPigb$xDdyaiX z{h$=x#mL8KJJU+0U8q%?vcOnna$vm|#5*mPtUuB4Y>F03=xIQ{HIh~ES#SN#hV|$J zJ~llZd-JfIwqiQ{1$D&o@|F}&VWD9BSM`X)(b%+kn>_6G z3pXmCsoJ}rlFSklehY}CI0=h9`I$7I`tDAm{Hg(O!t$G`y3?f-UNTQjf8XbyZYxO+ zGDTfJn^tPOzRGk;Rb>Fu9$omapUJSPem=9lW80)teWwN z_H(A7Kv+1QoZs8~*V|6~?%fmgW<_TC*iA*n#)j=ZQ57+5PDfdo>+2? z5oVE}Vu|lBtz))@ywi3ejKoh8jd2$dc?dWDS`M_8K^M*Q&4-5%o)7ofgl~%UCklM$ z-nwzONnJ_XoU#x~c9ds;;|rop1J!dM$vAzgjMQ!;9;=j&Ho;4yYMZg+tqB>$Ql+|! za6^umFG`-lr-ubU^gUDNisp5r%&nlN^8X0K=K1yKu;^xo z)(b1*i^YQwhj(wsihj*)7lwa5mpQ94MttJ;iwwj<{?v*o&(ca)@YKJP@o1W}s^u3h zb|^_q$5(p&vR+J@iwkct@2H`6oI8cvvf)76Cfem(6}yESk@tzLelILo2D-eads@>3 z#sMjtvG^6(S6{X=f4m1ZZmT&Be#H>TGr`VSQ7A%U3rF_2q7%v> z@>qsz$FP0-n4>$r?@bFud^kN7$=}=4cz7EtI9WUpAwg&1jBL1NMP!dNyD9cDP51sp z`i<;DKaamsilXuVa-UCNRiA6{vB)(Q`8#)i@@3q4P5`9fCp1U9gi< zyC}O`?lMO;IlHGeMuhh>TpS0kIbMdYJupov&?F`H%?)CxIqmux51X-T(*@^oDZKcT8~HbJJA15e5YRM(4kgjmQ1cFQ`H^*HM5 zCT32(3YrKgc5ThyJ9`$c-XFSo<0m4-W@aX5WH)Do4I?vZ&jDWS7+N0P>+fSzvBidi zU2?O7DS9}43iiopN8@$y^d{QZte<999)${BkXrW_Kx|~42gL`l+B0HVO{ zg>PhdL$s#UO+UuTKelfBaVb~}MW z8!)e_&|y&h3vovy%g}m_+Yfh!nulB#&c}Vrgo6H5oQlmYkA`Ho+9{)lEw!9PhKVLf z-WM5lEx95tn5w{nDD^2-i}mNDcHp`P?`DPcGft}Hl6@Ft3FQj=9ghyP&4!C8bNUUW zu9>=|f7+4}ZoD3W)t?D$xJ&0ld~%q5Jk)N`@&^;{Y8K+#Ki!*oNqinQFItPJxb~@$ zZbSW9&@XXsbAHc&PXQFK@H3-@lCJB9CcetIPean5rChj}?1?Ne$P#X6Lhom($QCSc z=rpKz!iMh}=fn+D4YgjxJ+6dOoptU*orYfAfA+oXrz=69Uea=d-uONT71Oqv#L3MC z##86L6~ykt@XQcQ0S07tZU-6S59!}C{E9I=yX|kExI~zzei8meGT;)jg%tuztO|Zi zV2f!+GuDYV?qfe?TF8w!)=JUHQ;BGzmj*V2d+SCD%1Ikyk@uL5{Zh1U+4^G(C@`;Q z@Y=4kUWjb-Ah9m^0bpULF2)&1@ci-{E2;aWo?NC$rC**^{(Leb+u{myggpGJm{lf(D z81LerMm`~-ip=V!%qn})Qw{vIwl2$MG^cN~J;JxU4s^B}zH*~d6D(zgeLXUzlwN&= z`aI~F>|R?udNBC$I@M;x`jzodejsbFT=O{%+l{` zRR&kf%QIea4-uVAeYnrDGO>0+YMT+>sG!~>sLv#PxY8rlhg>s*qG24wO2BhoXze)R@t<|cNfLs9kfxJR?n(r3>)4~|+NL>gP zFeFImajiKz(epi{FvrEHH_ScdA{Tu0=uFpdybj*4s^72KG}POt@#azWXRA63rtc&| zaY^x-EMHQh5nJbx`Se#Xa&(nB4I*J$^wYdG7h z`EBotzulH>K)1`J(>(1t%z1XGcoml z(MD=uRL!3ko+yRh(*5G{sM;6STKKRf;}cR@%*>8>I4LoVS^c;Jadv9dhlMzhg@8&jf$7#WkrpVU2WHwAr&h-ujBh}C0vn_B0z>pKE1 z6K}`W#B-{)4Q;hK?xt#1$1_XIVzr&X6b=uI)Fa@cP8O|2fNok_BEYT|P+i&%I^&0q zBp3;7UW-pQi4u7G@K?Np>USUZY<2wgEg^%vyg4&AJ+JE=C!4U}VlikxNtunNvLgst zZnSgHTNh!@0>R2uhi^aa3u9@~Ni=8T!84&c!>@wSUXGW-B|@|vh|gBiaj~r*c|)PT zyZG$c_KzD|T9<`bKDbHi?1RPVbr zVJay~bjRYXv&;*Rdd^^9iIxq)-%XD)cURVF9ZAg-{2r;ZjxsWA3{bK#SG$&toh7a0 zx7urK6Iaik7qNyaIAmy|+!!bd#PRU>?awx#D>aLIMJp+-F(EH2!dPahl(k3-+mgTO zglg?y+=05aZn}iXy!%rZ^5+_&A(fW&lJ=%2PY!dEg>}9;BqIWGX0<@)=tZf279Q_u z!Qo_4^-&RBLDtOqVlj(e&CfZRqF#10Bl|=>U4rs{$LY}Usm;K4&q-eNnrYf4k(*|Z z$vG}vT!p|JRubg}$h6~~7n~=~$SkenvClpa7sE%`@8wLVc`)blh)cA*P%3okVe@fu z?bM!A)Z_IL_QDd~(R}(Tcs$^97<(=}gXQZ_svPkUe~pRSGxStD7sK7Qrdt7T)X%QH znX4p@|0098F(4e66aj7N$gBv+&+fM*(>}GS4+N|p6~#rC|DgG~w)lj;r2`YPDk6)$ zc1KQzHVgv~dmArE0LHwn8BdMGJuTBtzaP^1+r;yhk^@4Sk@7P|e!t>ZsijsPkJi8= z+Ynzi8Dq}HZ&r7x&9%GPeB|2Z7`5=lrmS+#Mr}f}1!MAK6wqPe=MJ8XN&ODUXFo}b z#1)($95%(vl)vK95$)3*WJ$v83CE8ImqVOcPt7Dl-nN^2KVX0JybU%C7-jfL=48>l zv=5C+tDh&&9kMWm2ds=c1vPn|FiXe1Yh7@7tc+?6itszQzPwLrS@)_QGr1!GI}w(hB?Y6mzyRYbE|FyB!V z)qD~4=0`#BNZQL+Z`%x2EhvV~X=dt+D)uJm0vChM7ASjzCX&~8vzl;Q7Nw#{oF}4Y z76cNw&9R0pCDPxW%4+YdvPr&`+|YmTxvP3t7Qq>{LH35)UZzC2Y#09C%$DK#&35BD z$eDInr;*U=+O)H8O0tCV@rwoZpW9St7CLNqdKZ?>-}W4&AEi!STYE>j=&ZDyd^y^F z>jsXkI#2Dp!{m)Fd6r@E_1S{~f`o*%AmdX|TH%>UHJT=WNFv`>!2jhG&hAm&ha|g& z*<4AKc@F86n^gEpreVBitT%lj%<^S|SNZ02qF_;CSSP{<4}B5vYK*FF?Y^~s#?Gr> zw}aZBuTkghB&4k*w^9V&(@zyZTl$V@PL>w4@8>!yF8waqkBmUJBPzcit$AB^%C_*i zq+64GbYBSN8D0jMai@5*7V``c=T10rDKd?9o*X`RU+#Pv(k6UPUb1`_UXU&Sp}07n zpD=z_W+w~#8|T#+5%k;XB~S5~+-k>gCtpds(t`APaAu$Cf(2~0b98Di@J>nd3;QAd zFYXdfg@;9njLo{w_dd%tT+ps3H zkukETND);E0MTtRaSv==g9d^lQDrz#AQqoF1qHo`h+g`qd z{Lq>Tn-mvy<&4^?KDcRZCHa0lkSr$8j@|=tu{4yGyoxC|iTG&0O+3_eGR6Om`l7-B zuH}es?}$jElKUv#j9vS>AHhha)mqioyl?mb^3FPFGcEAg*6&Nj(`6a4`}ztf=a#0b zTXOuwfrU|dTX0QdcHf*>6*WJ;5Au{z6~_-Xe%|`ZPou>vz|T(!^~jO;^~9D6wgiT? zcU*)mX-xZ}hgCiFGMOB(HU9JCZW$KL7Q_quS#DF}q7&jeqN3cdo|5PiwCco754*gY zrhm@^^QjH#x8|4=z{m=GyMDSaPT4xmp~LE(^D);OYb^*ZzU{YXxW-T9tMBQ7U?ob} z?drg*__KLoV5hxZPuEK&it%p9ThT)K_@LsNN^+JgRITM>lT4paP)AYItc4ogSm!Pj z+~VS|Sn_skl2NfA4495Gx~$cqWc7G{NpFa#!PffypgLvD#NR2hTwDuE5R_wmrJu6s zCU9{(BlV)4md*heGyCY1=l7_)Su!hjGWzc9XKhap&EKc4iaecg6}2iyvWxwGWPBEL z{t@kPXVPoeSbZpt8x+ni27FZ@y2ZcXkGOH5%`S5vDE}#!S5J3!Rd?0t)91Xe(7I}2o6Q)>ls%E!6u)}Y z=fvqxBMyR zIzhuisP$E_t{brssyLnq&Ii79Ax?A3VY6CGPe<>g;tey|udn4}pJ^A;XrC(BUVc#z z_SaXNLp(7b?mRu|@HM(yafC?pUGA^&>wB!Yv|@`FQ{8#(syv9&SI~B7PWimN2fKNG2Z$-_gAe8_?gFaQzgG7xIJ3v zM|EY32Cj}rHeJPPXEc@F4exvy*pp~Ie(kTIkOi0?-_DTwZZauaOPlC64}bfVEpom* zI%6B)x(tqli+C;kS@6WRZ9WK3i^%tUGpn=Uh1Fv8owQR!XDvZAMZ$P+aFWt4>B<~2 zRLsUN*1$AlG34zrGZ~GcANMnCz~E-B(m-(k@N-i1^;=5c8j5Fxt7F4$r-EDii#(pw zdi(R+Eq~^~>c}9AK2@zH)wh~_Q`%imH?+6UGLV;w=$gD%qF&XUpV%Z| z&1hK9&toji>nnc3{pGiJh1*=@(&cESorlNF(l|`@V#4pnj_Nvi;83I1r`==llg<7e zTYzu58@1EI@munP#Jgr2!R5@PM83C!zdbjGTMF|`dp}U`WZv99oB(&8r7Ug;uc>p33;owKmL=1v&x@|vzj3dQziHrqcvE?2J3|w4 z7>q|FEc@EHp57I_2@#k$fEzrYuz2p~3`#tl&-}%D#yo$^sl>#Bj___lS_dD&(%A{-NQTIdFF28I zHIwFQrr%Aq-Me|mo^VpdhYuib+gn>j6!#t;b5Gmdbbp|J^r&!@WGx6PSz8m`SNzmqKL#x5YtfJ%A!|VvRVK~Eu(sW_ga<$cSW9VwUwMo`@B$ir8 zV??WJxxWtWOti`KjHb;eO3iIjUvA*DkNTje`DpuBE_2^Wwc#2`*G5J$@4gl?!?6ec zxlBo-8eWr;P4Vrmd$Wb_{>)cf&wh9VRWutV-V5$@nxVFopTp(LdDdXvbT=Y2Iq@eY z>67)8ZdM2C*67Dt*vr;4qw`LY9_vDegaOm*pS}c_cm9zxm+hl9tX?9_DntBoS&9X_ zK4yxxr>^i0r_F)7x<^8Z!^C^7stReIqt@IuCn7&S-Ry_%S?g9C2U3~t+jpN$i=NbC z(1{PF)mo=CnqppOCZ3wkwJD0Sg`Lg0#!U&Gxx%iUh68RPZ})paH~Hu$4hNzsr?#Ij z23_}jI5_S0qB8vuZI1cO98g-lPbT`Q%!{Gf=7WhgV%}B`HNxq;KQ3=%)OR)c%tvBB zvUUgW5l`~`dD+3QSNGyA!pC)Ce7ZUH%tvyo_vfWBo%FQnB)un3#lub6mT?-Nt$u;k z^d^|jMu^ipwq%VO`E-n&O>;_Y=2fhV*W{%+#OLH38OcF!;$q_yXOph5h3yl6r?wc* z{5h^`a@wrWVwR6RI=tHZO1UWDd3xi!@f|-gAOhtQr^VIAHiP@>!dPTn?2slPlWyc? zn$up~3n^}!&-2uS6N%ZYUiK{F2KxHdclBXmC}Wt<)W{3qqfWi0ghnmvE}qD{y&j$( z{^w3Nh-hD?aJY2m7~rWz`~po z%N}c;d=p(gBKE!W2)v$PO*p)jOxPdg?7zBj4N|pCd3T#6vpjp}eOk6z-uyxJJMe>c zseWfMB9I(ATf|{_V^D4NjxPsWp%>fRjAg7LZGWR3OfT5MJmSr4Gc)oCyDQ-Z%|i7W z=}xq8P+=I#@^Obpam``p%76jkrSM?;l=C&}SHB2heW!|D1BB@J*)vMY<(Fuq5^v{7 z7g^_sXT-1#&i?d~W*Dx9h^EC^qFfH{p5hjm{!T3zMO(^5DS2}<@^Qz>vg;t}#xf>_ z?Bph~w!mY{Sx+^(ygq^+^ydhuYbS1a+gjI;Nz#_Z9?XNEO+TRI9U zMV=(4!op{Z2`$K0lpG^nPiA{iE3kR7nYpBabLy2nzS4)9dsM0&5EICRBb>t{*(BIMC>?plc%$z>cQYA!rBZ8^=(}khCtYg$2<-_q z>95y2GBqrhpf!hG?L?Dg{Z%2$Nws(cQocc7LvO>S2ZNcZ15m|NKV zpSi>Z`2P;!z|Akf|8L#P5y&HT{>{BykWcFM{mS104yGYU|kbnwEeitOL8xqFN1h~gDxc4bGxko0D2auow0!RP=B%KN}QXjb>GDzJtIggIiS7`C~rez#sTT&NVGU00!bhf0eD6rXWftyxPi8W@`{P2O_YLr$Q<**YJ^-Kt|8NhE)Si=v2HCu|5z#D%WtD^J zuKl5FJZHX^=1#{42x#BvpOM&$MOMwzDLck~YsXW{D#z0_l8+dj&mSTz2HJ3%S}|cy zm-R!`7SW*P9(aoL;W2%|K#mqE)_g4;;u{%OdMyirnZ}u>NrNH61|$`Ji$c`6UJES5 zqAMybf6xOFMYTjRqg8yTM=(=74A!mIKyaYZ5jE012a2`!A!rX|3HQ~p8a0>@&LF8$ zx?9XLCt0BQIRq_HfElsn5|sFjLk4v#(K*7Wk5L8<${r(0(hq|ty?6>+FA1Wm zk>Uf%vA`c_(Uk()oDP=O{zKqcm9dM#w)yQCN#ywmJF`FxJE7gETPkCLV0t2AIB&O73uYKL?CH9`7cny( zf*GqZ$@emz0A9D{c!y9e%mZ@piQ;qWfUvI*C~{WgNwb`oJ4KqmBtx@wCOC+Qx*`A- z`iM%RuhGaB32KzlKs5o|Hx`hgBhP(m-^j?xh{ixTMIHa%E14KxM+FOZG}4BvVC{c@ zhOvRBB)mfx%wr-BFqRw{K1W{1Gu=4+7hqWtlUQ!TPsmCl4iebD6K1{m47o#?fNEFU18!mx)SzVV!gzgQ#Eg~;mP_$Bh9@q>q#DSKL^{_Ge<4u6)YDr`S9=!3^s~J-f7Sc-xojIMY+1&VY(v6LFqd*0u0POR z>3suUT!F&BU0+0A1z&-qfSgOTTkKo^7r^+5z?t0{SQPZFLL5{I@!TJA1YZ*%3+70*u)GN2XD77to)2{pwsLll>hox@Waa(R3!my^ zjcK6W+1o|fBWr=(B(zeBSTBKhu?za5G4O{pzLRML^sq{nVlUa@2E=MNmXVua-kEtF z20fsjqlsVczVvarBoiH?NPjl*SPGRFhKMr@Y#Aqnj#W6=#ae*Q_@~;RY_}jD^TU~7 zSz4vnx#XE>bv_PzA1pw-+o!iobXjz!(tWC+cLX$O=d4-o?B=3_lAzrmd&ZxZWI&Pf zOWvpYoq8{&_SQ-fiLLaW`k0OQJlN~Sh|8ZE;@vYspw%x+oS=VzZpOzMV$b2(df%d936$LdHx778q95jZh;Y z6mLKOLZp!(tKd9qU7yN(z}|0P@pB-;h3HoNGH)3U7nZ)vGr990Irmr;xAvXzBF{P# z2+;$LLw`A;rh)YtWixZX6YdM{(0P9_d4bRllFek(B&ecz=v`yoN)OeHDR~e3lU{D!|QbI4g6$*_(_=qMIm$1fdo= zkRCAxa?u;&8(v`>OLUe*?Q$x(gAS^`-q62FnE)4jzg3AR%KAzhpA!!#2qqN<08dx% zpI#2bpnZOEWl$;2*#N5qH>i^C&m~z-2;yna%OPcWXO90azl<$NnU-JVWvnV(_{))N z?K(jg*DvdID)2WayiK-FJ;-dHCQ1%vb3zGgwWAuSy~}e{HzS_w-%8&VD)Dk z#xc3zhx6~M2Jk^vA51u01=tL^;g^~l(TGRdidT8qAr3>`XvJXrp>A9ja0Z4fE&p#~ zsL{kMxhHCo+!^MNy)Zq{5%6m*dK8>U$N2GM4LdBwx#w2s&5KUdUfuLsIzvAresob( zDeph|ed~G%3P(;Pd?uLd*O2r>*tTP(1eZ2o_|u?8F-O&n8Q1)Nrua*A9+E!%-8)N5 zGe@(((oFL{`6tErlmD9(Fjj{_LM=3cryk}7VXWD1)RCUp{Bux6} z762GPS}EE-Is65;-Y{baMqAcIpn`Y(ntQc=^PV&(81x$`rq#O z*Bubza1A#N&3PKPx8)AD_ho+ZHQ;vJ-)4{3B(i05?C&8QZ8WPgoJ#$SEG=aw%SgBNK>#BDLwB|iO5s{GI;M_qt27IN?@~b*1P0aORh)`B2lkvmN4-C7` z1b_a8TuFO+EXd7^z1M8X46x%unZ+GVwp_$m935u`YCya1pSIXQM|K#+vztXv_V9IS zxSG8*l23sUdbxk?cjlPbD*`g@^S=VC1o=F>p7WF&G=2?lrSX;vQqUrV2bF1&!h<3% zG~q*Iig=<&`ZLDKP%g8OCx%_|h*BIs%t>$$jytCfx%K^4F;sMGf@q#&RFq3=l4zdw zwq`UgdIXLZ7n5Nt#TNv}5x6f}PzO~CrBH?n{QMJUNHpC`9#mAGJlPKjc+hbl!Mz}Y z2i5fvL%;mOZzv+}BOS{Wc_?|fjt%jKNgfhGWL3WjS0xq50&C%i@t6?r(KsG0EVO7k z%P^$S8bEXQ9zD;Y`U#$(eV^GMP4pC;Oi7UU3O)ekR1Z^PLg0idvm$UXl{t|)B~I9z zEz*r3ZA*N35UK?sSG#Htokg}XKyH=)8m_i4g!h}$f;5`PIpn=IDr&@CyipbbCTJWW zFL^G76f&~#Efn$+33>PsbS?a82<9^Gl^`lw7tX;eE$&$GLvzJe{yIAdHcT=ff=#v= zl$^r>*M$qC&Le;I;cA`d#-bEpG6OdFb2!;ZhY*6z88yJ@*~K@{w^x3#h@$0PjYZEN z*xyhC=%_sHY-z`kol&ENY#c`=V(62usWB2~$o)`ya5RZ!$r{B9f9>y}1#?IX!aGE7Tp5S%KkC$GPLOIr$cCYF_=8g!Ttz0 zk%71x9bwcioHi!OnMR0g@NzfPqRtX-I%;$_Wh-je9p*^?m|r2H4|{K652ye)zccXI zTcXwg#hC2Tc2e4bzD6x}bbdh#Alx%BoCPP79}Eq)@W1>5cP5m8Vjb4(`7kp6_Hf)8W0$IFCkYXoWiNA3$X z(8Vkc?T&rW=+v{^+s_5P^H(W>iirYWWv%3Jh5z`l5vO%Pcvf(V=?+R-FGRHjpPv+??e=Z&Xg8-fG%aPrkxOqdwKH|*tYnE*l1x=h3Xq5VP9*_S)cZ^#1Ucx;$h zj#@gx?;4_lJWz-V8{)c8h1qa<(Vy!LxG(D2BXF{ZdKMhG^RkR)M>Nq=JEC#97D*KV zhq=!akwWGJQpg4Y8D5q(uYrs4H)+WAArj=7(%g~aqX1~V7eS5`?{UF`hbCPGgq<%) zrLCcGpR#16U`s((sy7-FDPo@@Md}IRnD_D-|C^V9VtbhuG2CZJ3%_$JO5_Zc%XRDX zN8oVnOF2?}tw)OP1jLKIH*87Dz{LSQ^4c?`K+6NZcF*%YsQC?=?uXRB%q@S{9xR=W ztp75 zn=cS$9_x61JM&5$A2GZSytuEI8@m1V2eW$XH^j6KsQUz+qPH!ZyF!8PUR^Z*@2YKx zgLvF3K>WWwNG7V%XfD#bFr!=M8=w!~&*b{w?*88t?mGbF2ngJv{8wvKL4|hl8vV#j z3JP+I54j*Nf(&jEg#H~A0=AxD{lJ6)Me9S?2fqQJXpjrbzFRzU1QS3fhBM;Nx4+aziT6ZYSh<5IKHg`%|9~>R&;F+e6Zlss(|;jc z*u1-2yt}KvyL)?gPrFclcb0y4hK%&jM*;=>oqypz@E`aa3xoDO3&SFEK~gZV+%1yb zEg~&xz!{QH8mT)X(>?hD6v@A^$MR1-5~)hw^H?wT07(9YzX6~E_X_1b^8ykB6&Rs| z_G}_U@9TTY1=<$>M!fJ3B8E0PXdBtzbxkDoG7`I>oD7;j5}!X3fh5UBQZA&Ac&5jD zA{iNw_PTU3XgV1r9+@IM|EY}LGcq7ed1R1#QilK1N|BTd$UGF{R4;#T+^d&=TQ2by z3b|KO@AXsQUPH}ix#wk2q0?5mH~MKqA=(fK5;Nid&{>hlqXJ080?0kA=znRhNX$?q z2muQqfP^uKfc#C1h1?T0AWel3B%T347JxMDArtVgN^Bj;18e}mXa0vB@6LCwhrG9Y zq9A-17YCwY$qLuwtpUm>7<%N2G$))jhe@YSvbv(DhOKAH^~`No3#u=c-VtL`aIrgXpZq0y22ory*8VbiTUsh1Zr3p%6)vs?T;7-`q0wchl-;Fhm4Ohq zX?Cck^3r%W>^>ymGCD;2Pr8<{lLwbagJcqL7c9ViYZ3&0A^pSiDwq>b>&~fG$s9Od z@?uX{pW52(!T}f60*mf_9Qlh2v*B;nog%?oXPG`8=zg%N>2d#ko}guej~Iw)$)v!T z3H26klshXNc*ot2%ZhHo_Q%D=L9+L>fgpsi^NBDxTj|Lf#^ zAh%;7^v|3#Xu7YDT{+F*wNRkx`bLg+J$t3JW;T)u)hZAuD)HJhFA7F4RV|-g6pbJs zW2QtrE?qJbInIZdNImDbA@ANBShPYSm^OxB~HV{qp}x6%iHJQWjh8$ugkxh)K+x#8WM)t-r-$I<%- zhg;M8Qz=#I}t$E^J%1DYO=3RkbblB}E&6^A$)GvdZ5SLZaWVH!Ec09lX4 zIz>=9|LCAPPWxBce@^ksV@o>-;L2tM;E?uS=+>S-<-@+vSt7V}sMi}8)AyiEXy;kjM!58_5g0KPvqzN-oj@k>terG@3L){xt2L?jR*t67mQZYToj4s!Ca#MuY3rYg|LHu6H>eLwB5a^S92JU4Q z@OlHQ9FSPCHSfV!0Ks2pu0gMz0}-&Kz}Cmu?}JRcJjf)#KnKl3Hw&e3gvJ|jC5pBs z%_u2mplCanuq-&S58{}D77}szuBEK^ArY|7GcB1m!$_w&AR+qjJCCsl%{&UMBADjY zezab+w~%-d@27F!r;?Qr4j@|C`75ShJr5YpJl(P-o}6&Ts{up@zbZH#6Cww}zLjPD zR%m5w0ULfS?D50W~clJs^6~qH7kNZT0=kNjG4)M*n45pmKuQIK($K02z)qElt6N8Tn zFyK*(W%NiE^1L4!a32nl<%`4uj7MCokjL#Jl9DbI*P52>LjzRWf14hK7h`Hdr5NaC ziL%X{B{RZv(2)ZNYgzELbd>#P+5iQ|2m8d?MNf5%GN4-^*oL6~{8bk*SWSz8zH_@y zg}>no#q%u8&bjnXPm8&eu@r*Ieu2JiHJ#lco-jBmB7yU(ca89({bsh&8?oF zuqnnnoJNqwC0&Sj3a)|OUVo~w)G5P9#egSZUhw!rHF@6W zo#waL6!@hBprX9iHclD}VMx_C(b(|_AlmNLN2e2AL-JuT5F7kKeam_rA1iS#>39SO zfbY4AtI=+I?ARa4bHWaEDV>xEVC~VOax0RNV{bjP{bpI z_j7rc7p=c<=|jyBps=q5Mg2Y5QI%zF1C2kilrV%Kwz7XYQCE;7JC`OvYHG{+ih;fW zu-FjPl|*!l2gELJUsQVzkN~riG$X1lZqVom08heUHZSv~2`+NvW}A`RBQsTv*3z0# z*KvN+MFosYVt_m>01$I-N&74Av>p&(d{+|*yB~!nut`B_((;koR+-p9VleYhT^6oB zz`sUTnuu&4gh*~!a>?X8QmL{|RT_Ue+Qh66Kt+zf;*y|_QG&VZJ6gBPbJ@fIS#SUO z4P6!@wg)O>&Uj7C9{}jlo0c=j2&iW1B%17Kh5SwEV1}M92%0|tK z6_(;Q*a#IzkDW^jd;QhYWq=de{nOt)`#4HN=?x|NSWiNmm@`1pm&_imXa0;R7D|cp z%8769hX~Z;1sZga7?4?_tlTn}mK?dgn~O+*3w zq^;JG^m+`Tidw)6e?Jgq|J9f3yq{eb^dzPJQyUZu1GuhNq?(fnm}j*3Df;Pa9Zp+d zeUuofw;TC&S=tMUa|}eo=-c++^kJ|A+2=aKMss1zgujpQcj#!zy`$Y2^2aHcpg*ZP z*{`2U>e|RK(FH%kO0AB(5$=BqT%)75h0C)Z^Tk(pRM^^#=vrr757d*azX{+}G+gj1|7Ki{|aMzJ($vKT3U`qTW z@ofXit6_5By*HocoQwh!CwMwdUFSJzs7M9S_r}`PGb!5}(RN+Z{6pV| z3IzMUc_Qgb*S1b2C9IwMv)urSyn!9u8LvcN2sk)^U^Fe6I~hquT%5pp4W5#4CjZc) z5yShrfW&#W-zIvmfu^qFqVi9cx}=}cfQxA-(ciW4C}D-7jb&fgmYu)|!%P(4$|pS$ z?aA+*qhF~}#xz%;&thB+?-+HG^1X>oGJKa;*MOJnY!v53Xh*A2zNHuCL*eXe9J9zS z-U>ud?Nzmmu!1u9>$*_JeDcS0m}y=CRi8#xIMM>lyC(#v)q^; zM~Gc|iC3|(-85@-F$>_lcBFk4BXMeArscP^m=fT((TdP2pZHx@+s)54fBgK`n7~b= zbMZH?b5Ev=e)e5AY2p+C)=5PYWy4qWWp(%|J}Dh3(<5{(_Gx-rDg;k<>-P86;{c?sV>V_F68mI-2?FkP>nCmX;fvAWF^3)t%Do4rDkgNUK^GmHbki zqnceE_l2;qLbEs+rYoi}DEg4C^bt#a;*2!s3M#x2kv3A$@rXuNr6TXB@Wv2WRxN1p zEj&0PeZnFuTc>Fw7$`NHqzFJxn-qq#ZUhAiuc!Y{Hq2@xms|P3uHsr$+wO}I*|1m&P zZ}uZfe=i#ap_r1`<)NCae=;-kdw35 zUyjZy7K+~mL|x+#sNA`-9xCo9PsTEKNF0)9vjqIfI82Pn%@)SF?`Gz8=7?+&p`pw zjs&&I?|zxXlVaC*%0u?{JF$^G^gP7fyz8PgUXmTN?B>9E{I88I2iDST+D@U^Q&aTQ znS#emz)y@1)cL;rLKsQ(#jz;b9hyY;Ap$m zT_^7ek6JV5)ti@5PXV}W%Bvc@g&?0=9X_Dddl9-DS4plW7~1m&1(xo@SneI)V)l-6 zQLo@N1XvWE!CbZMUCq{p0N+F>YJTb5H#Qp(;Y}ol{6`?#{!X&DeB_9FnYXVMPG_=r z-IS)V=(IbaC`LW*W3%uev`5T)$%?46wDwSATTh6k_tGH3^&{H;#?F(Sm!)wQ_P94@ z4I_Zt>9i>3FizdaRfQQAM8he|w9wU6wHvsU4#B^KGo5yChoHFz-U7?BKgCTSR&)-6 z5x-T(ejMy&$k71~+~s#D)hCy>cJfq>|IRFCWM*#h7i%>?*OPy^huvrYqgm`<-NXLN zECvn+UWvo?m6dFa480xfBmEE`W1`Emv)ZbwhCg>MjE^l4V~-MH6+j_gIOulR=$~L@ z5mY2T6vQTEM2#Fw>1>Q29zQA*=5u0Z$Pj#5A^+U}8E?Dx>o{4dTurrF3sWs#p5WIi zNpFnZ)l>>y92)}PhngCvI6L;|X4m0khT&p-CcsL50O_J5FQOq!r6zSCCoW-U@?&|_ zEW#fn@H9*AxeMQuDy`S%PoD%zOD3qRzI!g2Z)Q^O>ZBtf{#He~*#Et!u~Ac8Y`CLC z+Izp!*qD}_?7^C94m!HKJLG5Hy``n4(b3V4j*iO8%FN8nsHmuW+q=Cz(g0>?XsD#5 z1c$@9xVT_27!>;7xT4*6#s74oVstkE0P@Cvn8iFbe#jApD0UvXdA*<^a@^qi<1i_) z4s4+y<5EM{v0cF74c9l-YiVtPrkX|E(a^;m=?=b;M7 z=9#s}-RGaIQBu^eRs)n8#=WgdNjl>|RG%<6O*3b70zUO|#-Hog@)0^a`685xCS_Mi z?Ph7TL%8aITP`4G>5+`y@8hB^ewLS-ML~H|iW7;Lhw)StSXDlUoA3>JcH$P1-ZI7g=<9s4xHwbxS(DrS} zclrB@RiE)^iz+f}|M11{QTooNKz})ZO-0aysmMIL@KF3%I!-ASn*e(`3fL#O%emzD zFmu*HG(K#VDSEXQ;wDnoWlsjesd9{d9?+HUHh_bH?@US3xreTFd?Q$LZ1HWb0JY`X z%=v}IW*J|BDW1saOMQSV_n~)aGs}tW_S#E5ri~%+xgIco7m>3Xt}G$+{VP4;p5Scw zw4MZ+l<8P*KQ`)eZ*$V~VbCH)51%i0edAH#QnChUf&-BpU z#!Iay4JJ4%_JJq3Rvd&Fjynh=D8Wf|IPKjN-m8|_%e_Ej^Gk~@LEa(<$M4~?=eWIx z>(oMuKRElIlRf_Y6W07gbr1d9WLU z(fIdbrFXeCzJcAOo^?ck-xnmhdc|@P;9gs3oy61Hkyhtz^9f1R6HZywg_7mS&=`Tr zFyLuZ{2xXXneB`|iurmd`Lyd^Hw{M51&pjLgAlWxhvjOe4Jl}a)?!Y3k~w6Y(NR{U<`F0&d4=wLxrhF_!dS@>;uqcmrm zWsAT6zST(>7mR6rh&ij|DfV(GkQ1HX#cw5M?eP|EMx=v!FD|1W?+s;=mwy=u9(6X$ z#m!BLlKG5H_iY3_;;F<+#7+SqZ7@FUEP}XM*bMlM&TMv?=DQVRFs)0Zdp%fp8_NTI zIXtWV+zeC}()E0lX`HH)8b_(!=xy+|CZHV=k`XyI5Yt8^ZO?4Uk15VIZdYk3}gjt=~> zG#F%)yx`*>8v@Exb@T|dD%gW<$AYFH z{zzrMxh7O<-KoyZmaI~9R%!|qwCBqHJ*ie~C`Ec`6ddntYn0b;4ZlXTAnz4aMB1U| z+j#OM`wGUaM`V(Mtc5N`nTZA|ya@%%q@PsumVYP9Cl@(IQ(0P3AAPF_Xi%~uG4jMw z81QvdM%^zaDF#~9uk9Zv6iFkL4xNiHGY~yyIbB{>YnaG;TNzk|O>qTP*E;YZ_^n^; zv|VgVEN>)MeOUe0bYWL<@K!{(sA7P%T*ev$or&@RAC{m9l%(@3;QCNQml=1nW0i|c z5pm+BWl+^z!BVFLC-_-00LrRoiy!ko8DgBtUozoJG2Fa6p{i?!+SZwXgaHIDS+fWQ zpHdlyF?b8B|2b*humGo7e?*Ri+Vjtx%u9jWT9#QK`wSmG*l)(Qrl93ABo z6&+o^f1%p95OQS%)NTvZD*InHy$7{PVqog2bjs!?AfE}qzQ?`NS!73VHAT@uo(6~x zt8RZMd7_zz2f$t$#mCDuKRvpj@bKcwO#TFz<;ZHS_VP4ZI*Cc`TtvmZ(lGmCMsON= zCidh@$QNG-U|HaCj92&b+vaW>yvOIuZ-^!eEM6!~?@#X+dgUbN1jdCama>!p%I}r= z%pl0Iv(%b6P#_R_A}%G2zju~07n6-v1?~(?B9jaxsPE2_RvoL06U707J0%YKzXB5v zrlKe2fD?+acCTo(DjdZ2U5_mVCBAzV)5@vsuy&Rw=4A3{Lb50r@p%EVP80jQmHR=) z5^p`AE(0GUYu$hW$fEuxXas$t_u_Pm+ct*-OJ^ZLatiX`7(RQ>M(JLoG z5#r%a+ zgMlTVh*ChE%H>Va6$9xJ3G8JW1eRA_495U7Xxwyc7M+utEreURjLr73p$)#JOSe&@ z{SNHJumuIjq$bZT1j8qb4dDqeoCxf5na1Z-$YQKE$)Z%Rqh9Q<*O<1aKvb+9qjSu1 z;{)kLhZM`PnlbEu4&v`;%b#b&7$mwacaPDF$r{djZ;MCZGNu%_tcTJ#lF8i-fRjOE z8d<@l%_{6A3Gxl1xEd*ce3|@GuCJP@q_WFecx+yOh#MpQic?XC#)T4{mD#AVWR?Ko zL@oJUOeHX1Y3}6fA<@+EMPNTn*IY+et-N;klBQ4D7^DV#AqkQrU-uRzj&c1!mvRXo zUh5yC#5$KCC!T#KqJ8bMu{wEhz?&u$Z2wzr_U+>6ff0pvHX0XN)l7w4y?|P)=CqRY zgauceN16HbGt+_q@fB;nMn^ZV5$bNrKz|B_Qu9w5qu0!WAtfuXb9Hg~6Uyq(*br8z zMU>IFag197^72naCZH-BJTAlY*p1JW2nbkx=VmC|BgVbaM9V8IECu*8m8ui;;{I63 zHY&TKssSOD$}n&bhvjR@ECO9p{|YTd*YKy3kSs#Rk4;bQBU>1L!w|;1ifD#aT)C>a z2oi^0Sd_Tc(j0;u0Z%1&72vZnae$Crv>kk-x8txOusXGVhYQKz?_OA9X`2jxMFZqQRpN2o zRWUTqjh466(=o+F8-R9oK0}SzXD$xHmTB}MAo}wHUshW39m9hx1FSY#L8d9Uu{Tkb3{;h~i7`E< z4}i8bc8ZeMp;m};QL2zkM`tIaD_g_YV?+ocE3zNW3E}3(T|aV&NYtemS@j0ES<7ll z9s3eqOgyEeX>(S$vHo+)yOj_q&Z!Y;HNHXbCHtZ3$#|m!I|BK+tkUWG@zzHy-rw@| zIw0A{_!5O0*n4Y0YG5e0~Z(-hSC!Q8CamlsOE3JM;0f@(EKv8Da78 zx49Ss@tu16eNgVIvJhq-Nhc8;M`>`(e{V9?8pAvm|Kl$S|Ev;(mi&`9Kg)z%%y)8_ zv@J!vP2ljsdWm(PUxj#%+rg>mDZdQTy*i&|C%`iZkX|4G`%hU7fAgd3>A(aRB*6p815OsuA6u=FGFml8PxK@iPz#fC*eusqX%=jVkrmLRY4 z0*1gP1&x5N$So2+ONCk+C;DY?qo{g0i56!|m3Di*y~utqxwLcH()VV7(hS1_eOul7 zd_ZTo`ROjv>?dkcn|cp^@$gF@Yu=U=bhjRXH1*M?m8Y^Pp=qr0v@UVmI9S+OP?X1* zO}HBF=|hrSGTs~tB8mOf8;RtfNZ@sNMF^rCLn^Dy!C%=d0q!eI4nAlN;yC-PiOscJ>4X4f z*Mz;)={q|@<-u@!^sT@;<2%K+y2UpNfq2R`qg4(!Jw(~D;&eE=1?CE1_pWh z*6YJ6$WKo4RHvv^fgq|=FP6(G5>xD~_^%mGFj&&_jbO&6Xqhp~sU*d9)&x2Ca1MgZ z4=IT3cN<-)J!+EdtQC2S+nq5)P24Rwys^X>BkgEa0PI*PNN0sF;{C^H*Z4Upyv4L1 zN_s4Wgjy--n;#r(GMb9~RJ1EB%HF*YeG$eQ&+J=WtcF2L9APLlKcVf0RBM2&*Pemm zq@!FTyMl$h#7WF^JNZv^as!$Ds@o=rvfy;$3zKO*E#YB<-DZYvEE7kPg#F?@+_s*t zO-MSyz;@^^Rf3B_n+4Z_6XWM5f#`iN@kH$ERDn4ik`yfUpy4O)oE-dboRmCg9`sdz zkX;Mh&b91s2$W$*paFI&L=B5pPre(f9aKB8MUB^tFg+yU@2i@4kf+LZvM-v;-|?J< z48>4V-s-6RE3VLs+wI_iy@KUCQ|IWon=s6dv(!A z%Z~EQq;jan-2iD zAR$ErL8#e5VCRPNRB>7bQb|NGVzF0xz7G>iG9g>LW84xI%*KDyxMBUi_eJk{3a|6n z$B$$mk4Wa7!S<^;BI=~DwxD+}b?ZE9xqnB`;JJW)X*!pmuTy!4m*Zp9{LI}270 zuC94cVsO+HvqW6|P0BYSk(v!t#H3(|TJBOsH-5TFVI}ToGDQQgj_cucYzhGPYpQ@i z{IBG+Ak}L7<~n2_FHczvT0ivoV73gPn@R8x(xZ-Th^bvd3{7AC+B&Y@G#T5Uw?@oS z>}mmcKo+$CO=r z$A=fy$$MVO+J{$5zTY;tSN;v7UnpNJxbVu*v&9RBeUpEo&DkE^3D#5*FD#|$7~9}2 zN7bKxHAGyt_}Jjv5vK$n6uy~9x-kB|EOTdDy^RcusXi$>S+%<6=`i~&0k)wsO{qB# z_2c%W`f&cw@!Ns5C4|8n*V8`!u9&#P`$ny5s@*@#=Vl*OQdjUcc%>$yRWai=#~;h( zI;vT?VfJ==1Z$!{jiYy2;9`R>%T&vmDPfydN7uRF+_C9ps1mTVH|{9izj`{M@`gCh z<@xcs51Lf53?+ua-MD*RO9CVLwtV&LRE8lPz52-i6-qC=)7Le3xBD>@M~g7~VjKQU zRveHYEY!eb2oxf(ihSy{HbTfZ-1CA8DH4sr@6crK0|j#xZegMNl|(vMoW{F zV1~_@ALXIWk+Czj;d2J(yk1HTv2lptsG#$F+o>_;&#TTl?oaJG#gfAPX@#N23Xck3 za)_+veajP=ZQ?KhgLqDDn+fOK7yUwRo$I-$8{QI7kaU(P$eJEP>TR(;mQ7af$?h$C z=qxph95He|A>QlWAX^2iYbuZ?+dgop4(o0WEZbb%-rYe_{PXSVJ8E9{Eh5!B_f!>> zWoL5A$Hxr>+04$8&Zztfh|2PMt>6_r&4*NY!4I>B0h^|y3?NuIZ~!^ z$sDY@X=aZ8&7ku`go4+D^0G-_{;^A!y9#smwH^(*(C{in+rkT~C8`(8Lj8;E<=sP? z-yujA1tmw0^lwyOPju~$Dg6EQqBH?Tj4?+keEcW2!pYUp8(-7r@6m+~*EBX5p-bhN zPSAEvMCMEj8GeK1=+cDQ=%S{1T)P~`%5XX{ewA}F+CDWfmLi;*#b;UQk?C*kuQjH{ z$P)dzfHu$qHI?D;%3JK=OJ0!Cy4|Y=cWIVH(V)|~(Irx9x)bmOL;c+*B_^8k(Gp#k$m6{OUJ zmZ?$nvEYm5?j;#aSP;WPqg9%LA@NJQCSJ*gkb3h?>0nLsL3!{eY5d9&Oq$Z;-LZF; z*%l_=aEX?!%({?Z+AZjURDK%!C&MY}Oyb&4CrD-j+vTQAP057WQibQeP8pfe&9i4t z;~(ADJ~$3NrWQDyq=vDr>@m1Djl$ZtcC3F91IlM zjD@!_OS#?55ej+d%{(y-v{CN8SpOXXTijl$Lq1#Y^ILB{L38lYNs7P!3oV=bAa?*t z3mE31ashrTj@K4+3pZv)_ll6*K_Rr6-nsZp-vh?<9mS_6D>t6$(g%)umb?EMrb92y zg_ws!4~|)jxMRay-~qyqUhkz!-!`=9aE7Sq>JuvDGix0#N>{fB$q1gw`9NqkbQ^%) z&Ce=^rHjvaS9(W(?+`P;vGhouAs54+Qr6v6t|t6vFqhE$(f`uq{f6ot1hf68i%*V4 zDvW#bTo8Q3L(PQZM`O7{)X<7mBL_L^!kDeX_eSrwjImdL-sj3wFI*YM)~?po zo^TK&XHOZg_1^7;ZeIgNct7m+3{el3)dhK|>~!07G4!?&Gk^#Gf78oqGf+Gudz!|a zlF9vJ!%D!%Q{XczkPQgx!9mqH zs44%83OLpe^6tvE=H@^)Aelh;!v-Xg$_NCKtE;cE@f?v@=ITnZu%PJc=SWJ{pim$W z5R`b=AP_h>oCIpjLDe}ZCzpg%X zh~Oe5je;Utz&pqw8xL7SKz0z3AT6*42ds?M%=MQM?Ga;SB*ho#AOiYW`MC}ftqd{O zPazZZJ94l!M1-#~Kmt1?0dpOMxh9ZBh?=Xxj^)5t%HUXeU}dgjt^-FK^QDlmV>QNG z9mXIhaHUCqr3pJ$CZ9tyHZ1W?*f>?pG!6XZc!U=3N4)`427LDZ0dF$%C!1JIfP z3fZ`$3{?GF5OMOfe)+L7&@%%h2X@qy5s3tl7D%q4*mu;pjx`zAlo2R7pgsVc)vw6` zd|go#GQ6ftpOS+m65t>z5R5h;lL;Li6fzm>>kB6k(e|!zUz|LVZAQ4f!BEmig>r0k* zB_mwR0C|g=jxj)=2-w$9%4&#YioCHeLK2I_x}q#d2xAgpQHHf3$Xn!q0jmTMMM>!Z zeEU!=U#gXh?3C8whl>FadKw}G>q@+F? zjgv>(W97j}18f;F#}$S4Me7?QB|$is+Ly12}IiHoz%<%kd|M@h@?+R(|6!%fMV!^YPA_@x7YBmC@&XuUL+ztrf(F{AN_VdRBqEU5De| zR=k-0A?bqN`Pe48(LJuZi|3|`=CU4tiBqxGfdqZztS13yiw=G$K&Xg%ZlD5xkirf) z!c*xgvJO(X06jR8t|Iavg%=Qmr$Q_84pQjwG{aq=4;*r^gs?wzPp4|LuE4$kFCA#N zA+`-EUnB4wcAc!9GA7k`9>g z5|?1-APy-9{J=xFAEZTjj|-5~&Z5I?4rape9AQL=L-xTGAg7gp!Y`JFLV+W21!w|g z(-4YL31a~yHfi78`Uf>7foJfZBXX3b%wOzeZZMe81)BPBGhVD(r&!Jr0EFN@P&wA6 zc)ds7IvYXA$;Tqc1o&bdm9bh3cp}G3h^@sCdzkDo(%yEMtlj$JnPOxkEuab z0Ucrd{6;`%P5S<%)+?b2UPuBY3^Yk_-J4XMaN2Q49ySTqAE7B_Ic+>P)(1pB=6`==uza3u93whM=j>Cs>c)|LO0l8i5Tb;3efi7z`^QSQ9q8do-0*&kk zyo{Q70lX?X=$3fsDHpA*B*H8n$?u2^H-;r>gfT-?Uu|l`n9SaL z;{m9VOtZO4~Pd z+eY+eXjP|j#*MoIvThF$*KLOJ-<0C|u5!#f_lqZ*B#7a|rbp*quC*pbxfn-skZ-ew z8C6|GWK6p$k!`137yFe2O=D1~Q6=U+&s&zv4p5Pk)-Ty?#gl<1#}8Yx#!%(BN3fPV z1+QPD?j;y(?<$XVXu5hc5?ya`VP5F16qru`UHGwYWGSTMr|`IK}&(VLp(fg z0k!XWm~`omQ;>p0qMW|20T9Lisoips6+L`+HGRqr`cb$A>sn}Zq~(QyGxgopvX}d= zSdd4g0S*ZS{ZhI1{31YpmdL&<`w)0xuT`x*5rCmSO0_Q=-r+ZftOis)nYx=^T+O2o zE6?Vme`sFzsmY*gTZsD_@KUzqSpLldBYScA$bI&?x}zg=OVEpt7P~GppIKy4fH-&9 zSDx{Pb-qx-*F1b@;U3W8IOBX0;D{96bUGJ20P{k9%8I~E_nF3HTetQ*TJ6=B&!i6u?S|2L#^y6s%*!Wyz_pEnq__kpve!28bNx!ma|7JSi zKu_bTURgW=yV-cgCM3!tRE7iCIVj=d`4V(4k`WKRYre2>E|A2Tz$Tm=r~gdo*)yT@ zsxRZNEYy8PC2dz-UMaPOR>%PaYS2!o2+*I@Ym-Rz$4*#1dYK%N;`I$iJ%%|E$?pFe z7I*B%_qd?`KtFwbbXH7gV=A5z?<~!)4LV0(c*&p8;R2jk%Kc?5hKSZ3yiP9$=&t+p zepwMz4_p>x)S3bWm%iqI?=Z!7+1cJ;xeTN|)YHRO3QcTHHY$Ya0Q?WGeA`{PB-|_p z%mObQBz{O)TMK=hYV0`+BwC>mXP;T0`L=N}9pF^dEBO8IizO#Wh)^s#6hiB2qc>^|^C-!$LxH9sbz# zEN!++etksZ$}1;mMQX#D>wpoQ%~0&(@ljoAC%069le^K=8TNs*jXS z=mleuRedsMAU?#8RN9{RGET*@I?sfo=v_5PtPi2FzrrS&ZTytn$)Y*HZ6yddan>cY zCr_uD3?%r2S8BG#q7Tn?Jq2FD zs73&T{4Vd{ufXZ&#i)CeEY`(ADbTy&lPnM}Ojv`1F-x=r@Ni~IN)7s}!DyYb65y|} zZv-w%2!N@qecFLB%9k$yotE8gl|=%|JXdgB%Q>ze@}YHA$AjgupQod^dh2Z!Ib5E zL%p{RFBcC-PC(>JcDbeEZD4*d^9Ez8{Rt>3Jt^xcEwX+-aJ(Iz8FJQd_KT53ZDEy- zj4m)g6bb?E-bZ16|4#DTcqBZV`@Av*hT-3w`lg%v`jl_`E5@)jz~pqA+sxY+N-EZ& zt&o?uL-o(hkd71OrQ0=$e|jMB3N)~ykr*OxG9o4I!j!sf#?9C-_G+&k#OcJ<^i|K?f4wl2lUdc*aH4@sW=^417v;BX$YXFZZ>%x(Bayf?gZ z=92C6yy-*B(X0fo1k6ai%e1{f$&S_&&R3AvY2ydQ_FlO8G8p#z@$ zYLwE?GT}bT(+_VrodRGUZsy+mtT4sl47{PUXP!xk2=mG{KsZ;JTmBNCCUjbUxPfr{ z?7(Byn)v!iLdk*4cxk6I*tI6_cc8!MKK#noC;bJ{!m`1;wa!m@?lDd2+THL>8x)-VbX&Fs3}Cu`RO|Yhmm04fJ0|ylZ|uXjv#_;?-xQ=w-g-5p01s4a z0o0F-;Rwd>Ow688{d?EwG35t*GgwC!u^)263AH#07fWcaH@WTaV|4jMW5G_RmD@?FdZ2(}*8wnb!#Lr(RCp zJaeCPiy!V67j2|%H0H17Id%J81nbD|hew{M0NQ#=gpr~~bCFeLKx>b{bot@*&4QXp zOErIB{afeatqe&~Ti8U3X7NpCZsn2p3jsgXL;ZT^imu`WG`8z|_H_rEaK|GLy>1_- zjAfnzb{Czt&kl2Q{GeaOnYQP$!uL^qKI4mU6y-u02!JQ_K~(zvQ%w znIj>72xi3jOr$1Pnl=m7-M=Y=t^A#MWoN%&&H|D4tiq@M=*#7=>gJ++_>et5%^o#+ z*g0`$BLF{9cxN#vW?%9hXX#k17q>GCsBYR91@#7hfCghX0$rFeBbX&o-tP^JgWhBS2n89ZJdzogn7 zQR=IT1894{bq*For?uAj*sJ1N_h>;c9Dk~=UXVC@6|H&6-!J$Mu(>$JW<{mZZ3b68 zrR%y!825fIoS`7=qym1?&>t(Ni(@r5i4|Oa2B9`#wBTR) zQ{)qafl?QK@N?mBN&>s_fpgQ-)j!WkTr@a8t#nXxhp$-Ta7*}3;>$VyR@L}t%PJ7L z$4rSilZa5P^|7=5g>&B|-G4L2 zxxE(#S2QWkt@8}G9T)#8;$3l3AlUf4ouSRM_ai#W!X{&`yvplO0Y7G7Ju`1~T+F~I zee^VM1lMwKlKa?7SUajFF#Zf=y=&+R?pAfZ?Be}v%!;1NX%4?pZ%;OZ`~SGBHR(i$ zn~T0iUHTov6NKHVGJ{qS4a2OH`yff&0Jwj&RZD_l$fVVKmVSBX!AFPO&0P-CDjMht=5pb}=+GB)9q+3Dpl*2&uEe0*7ofFa zLFkkHx-@u=q3)nhKeC55GB3>_hh6@>elX^NhL$NUNn?^zo?pz`*fmvoEwOOn7fnHr zApo0%|0pujyT>kpApZCq{+6F=glNxDP4QFSdK_aN;vv;0L;|;hmgcBIPY!#rXT)W2 zI3886x)c(r^0#vTj^+~Kj-A5U`PPCepQ>A!o zHoM<+ZtpKTaF0jRAwEU7eR)-ITNIDXFU;flbgI4XWNfSMM9as|XI{pT_HOo6U1?@7 zHX<}W>1=%|)`A5@^8^Po+-^az*_t^vHdYbyTr4st+(Rb2Lnf698h~%H@n3z{E zhXX~g0??n%o6s_NGH=AH_lXAjVeO@Mm>iy|-5Gkp1`mUZjO8Dj@a~@UkKww~#g z8Vocg&@Fnd@01=dh9%c2eZ%egt&}A6Z$0%oh*+;(BF48a#cgD$^$F}LES6!UfMY3! zzoG?tSDtko2g0?uPXxy5{?sWqyyLGD9UuCVT!+voMa$+h<(EC@bl+@l^3*j=FkW}^ zqq!DjsqF-H@RUFwH)p}TBsSVaKsSgisoBoP`X3S`Aka0tlU;YBfB#*j=^xMXYg{Y5 z#nyDi!42=t***-kze_Lb2-V>p^~h};#_Cgzs0u6jgRf1G4AP1C(LZzNjr#6$)orc3 zYE2l(Z3VIR?~M zmd>%n>du-(E%S7X?mQoomf^kL7k_4_Bz%pXYs3IP&mo?Wi!}r>Kq#7J6W2K(E;G%vk z{sP+(dJ&1xXhz!?4^MwhE9f#R%wl>g65njVGGawJYyLnw%GbmN7B(HK;?8-ZIm?PD z*mm>!OK7sizDE&roZJg;eD&8y%(vO`R|nIBE_q2CS)G1=m;B-fKJ+KIxRf^JDJD=h zPn`F70(n14OsluQOWsWN+vz=Fwo|%U_s{IF;`T!Vr36uG{LaZv!?_u8j_mk6h1P>O zeL<{1eGq5WuGXoBgmS{)zEuc)XL!5%vqRrY31qhnb^Y=8;f zY_&(f(C?o~~8t zyJptXneT4-U7jc14QWjGTVFy5RpBley%}Kf%f9tX&mxJ7)_N$D!VqUZnaAV#cSmk|+Ec-gL4EHfqhd+dl|n;{T|Yp?9_5 z0%@#LsuwAnVgNL}yVyCbRQlWCitWg04G`xX*z;4e?X^0$*7M$^-Oy9K>{5^TKR!{U zdE;_!IK%Q@e+}EGpH|4ZeRf0hR64-&g1sojiaYc0@{{BS963?@C3qM7TDg{iNvrcC z*6RZU{gY!EB?t@F_D4-O46AyFm;3m+4973C(Kt%qU!!HeWduHE8Q6uvAw{O^rB#tp zcAo^7V8Ttw-zpgS)sa$4KaF6fiK|mCDOnJaT~2;qAHfgDpK(-~(~H>M(-AbJ&L{H= zEoIz@oW5Sb>~&d&-qz=M*n?Dhsi!C1o@&3zLkEYHpZ7`7=(`(ur0-R!-UWxFc+`xY z87Cw#=0}nmCq-X{E-aGF&KmJJdcrSWw`M|vQ_r{U_4t+eI$gI7TvH~^LNEQrTP8r! z_EJ*E4F+pB_eaNp!RkjM5=A;^6)r4_Ct^*Xd9{R682yNMR z8?zs^J!Gz|^aKS!BIB_8UM)^;8y{kG;JprSbNUSJK4gAGl?+|INi-4> z`RzxG?Fquw`tTW__fx+sEm}N6s75#OO!_MMLi%xi^bgh_>N)TMJ{H++45mdl4@AiG zlaHMVY>%^qvX@Su*61lbZXT?A&&9iEqxE~wFQ%Q#f$z7~LSBz*;gUoGnb=t$B2LLf z*z9sv~338La1k0t*;M9L(`ZeS=wGP@%;bBB8CIG)K-tGkFtLDq0wnjWqWNtU6UN5n4do*DnX6a_#x1sL{@uXhJl5*zP*0Yn(iowZH~{9s|N_@IZs>4O6_i~l3N zzVduvIrZMM%f{X6#O5W}b#&{wM>=<+ZgfwrsZQ@7y;Y+knQ$9w#N9}rqp0Q19sHuM zd;EvH%T|=p6jtJwQZ#2JesI|zT~Awx?jf$^pVJZp3`#`uO*n(gW2~IED%ETCdX!i1 z>GVurPZV{|rynFA=!oHAv5BudcFqkMxpJ$I@ffP|VNbosE_%1IQhqT!fBxn8W`P3a zM2w$`NwSBZTSfvQv58Nyv|;f|$SE!=ELJZpRWaB!#We4fjRAktS(29aPdf$3<^1mY z3ld1-H!+x69khFtwy7Z`Q+XT$#Yl9L>!4>Uc8{QbCN6cUhc#;tP| zBbq02xMTQUDM(d}@?H;p9s7*q1g=CTo&mci{@`e6G~uX6saJM{!08d^Nj+v2i;C`s zSf2mKs{$wABpdX;A3ZF5KdQX()`WJOedEYTOy7r5nUGz5y6EwXgDXd zm+9#5SLH*yEZlU3|;kcQxW%AlR%5%!V=~VjVy()SzCP{nYolnx9>h&>GioYN&CgSlkL`R zU}03PfopHq&t<>S!2_B&_>GIFh8e&hu*VeZV7fR0Fs*GjxXde=o zx#8h!bHU3c%12-^nJoS-@?>T3jR)FcWg@NarA&g~Gk>8fPb=qkOs%wqk1&@lhc4uP zaaXwn>xE6fPd^#v(%@Z1xfD0qOPG4o_dex?@Y-ZW`JJIl-E|VP6_m|OSGxDakmchF zt4Q@~d5_QCvFx5i%k9WD$^`BlvV3u8XSlv93|T(3p}(Y9soqK2u1x&izu&bO_s!|2 zq(?z|!(53dQBmr z!d>>%)}GfR)sacIt+KCqrs>nKds0-H>%AWB)l|IGjqq`zQy%G^>1aPgQZ0XY)noW` zn~TPFLi2s2W$e=ZoG6XbXQq~YII=t1F_yUS@*r?&kr&-{_(M%)KY z`}X+KtIO44_!;F9Zt^c?<^ANaq>y0ZxZ>0G&yV+CwU*i(%)D2Ax*fAL;$e1Wzby8i zq|41p)!QBg0v~%rpZncR=?Gz={>bQH(KupT%0vE?D-*=FVjk4;$?<;Y^ch{5n53sc zgwNAlzU%7xe1RHSaHnElh3w97e(58DZ#`Y+dOMQlZfItp-?68})a8t}>P1CbR;?Lm zwq?)VxcRxa^EKKlLYqK5G=YHXCj>uYaZN`oY z?tF>elWR~h6rOzZEpEgxp1V_CVY(&QdE@8xwx(6s&J)S4TdxX3OD@mf8Ib&?V!5mx z)BLf@Vjs~eg!UEAUs$sC4JtQ(Dmz3{c~lgxiaJ&sMDYTb4d8u3T8 zX>6;hqra(Xtf{7>sRk6a{Yg1x6k=J9ZyDLXjEpWLp~^s4#WD(oQbVDTDLEuiC_*7gQi$>t;vZ#54y7Z9 zQkIiL$szwy(&Ug`b4WQkMEx8h8pNdJ$fL=B5{XPAl1T(I$raR)kO?R<8cQPQkp5Kr zl8CM(f(40yCgCJWz6g>poa76TumGsXAQH)c3>papA^}JAl_#Q&iD-QSu?(Ce;4BEP z@&tPTRMddWa0CJl2Tr~?oGZ@P7w2n%b4B6okvMwZ4utuqa}^yk;W)MpVY7Kiq^Nl>RX`o z!GuQrF@}^!=t}}vQa{!gRItc{CXt{`BvxJ?D-TLZK;;O4CiSCzk!WMkG!l(QA>_$` zyggF>kJbe#4<_VaF6bSSM8qF2bYDQy0wJl7l+;H^q9rBKD9}|>5&@uyk|+Wi^$(|X zlm&poB2bb53QV9Tga9g*I*`7g4h4=x|1q9K5WpjaL*QINl?%cZKv)0>c{r$^g6jit zEC7eY0pAY5w+wJ?0$gkUx*s!~tC0Z!R>yzdZ+S)v&ImEA2KPNwJD;`Td`T=dEce@T zmT7{;keW`gz54~j#0X9{MQffW4hit zRV8v4jT$7>Bun+A`4?33J~%V8i*wvOTpS;MdN1RiW9K;U#;nK6_t`yg_UT~dATdTh zjktHH)?@{eqv=`npjr6(Z9u|S1_Cf4FL43%mv6HI^enf90QxTubO1fkfeTqcG6!tVd4+-6#_%e$=e*Q2KuUN*Il=Y= zFd;#5_yEbmgv~SIe`9>++3?V)90q{t#FLwVM1s+MXck6co)xSFLn)a~JPrZwdMG|v zr#IUvn$Imi=oJR&OP!bj!3aOlteCrtd>Z0qbHVfd5e$UF2b$FTf!|!*U8xTMBaF=v zIt;{}4*^!*HUcY24BRGc4Fz?k%%1$JXoc9beIPhuEO!qt1mchXBtCO4}Y@Q zkicWLokvf-D&fZs_Vz9B2v~F=fyIhEuw$ccu;W`V=rBwsa^bqn)V3;{7TY5+$M8?; zo>TGNFt4>yS=Z17lAE;ZD;!bK0FdI{@T9BDFy}qH%N_Mw{3%feFo5=Ve@i7Q~Q@5yKlpAvoKDfnvb zf++qR1Zf>m|7bLROr}6%kzF~ENd3-HDQ}iktmyM@pY12x4l9H3lW_>sX7l9%S02n0 zYQ}izMpB?56|3xQ9Vfr|tNXD~b_$vB$*D*{Xb^or3jc|5{5$4`j7ITX%qRKY4gMoW zC*+hX1ASJm`^>-c{t>u-E7fuEu*&0Dovf6pzZC9A%SI6Gs@d)i93C5L5c2aQ>-nZ; zStaWt7vLy#x~Z{iVQi%_A@N}IsA;@aXL=QyE1nYCseL{?UYR!AAti&ZW`9^{Sp*cI zQrQ&gBoM`!NmCthqGzfUcvStyYX+7ra1L8XdUksZlHA6-)t|D|Ss#Aw$W5IOGoZs$ z=cbtUF>H$i<4GHu_N6oxUt0La=uf@L+~pk0!}(X)LbfyCJvF(0qnF3g8a_LQ+J{}` zwTcQFKAmq8G@k^m(|zO-Im5855d<^|;8qj9yzvZLS*9z`31PYb6?qSgvWhadnuW3R zceXmjEq`7-7WR(wA|Qc`aFEsqLEtfdA>GHN59~u<0C!;0L+1YdZz(d9@GPw?F1*>9 zx}fimWdx2ue;|IqY|m`$R_;o%KsY&^8AKK@Ti-M_Qoj`54uPyQmC`xT%oyJ+<{d_x zWwt0Z>)}tsz6sGL=GC#gp^<@~vo{*9)9(qRUKP zORHbxuw{l^2OP!+eVLy`!}6$@(qifJ*=;>!Z3HHr>Ij@O9SsV$Il1k2YbUVWN*j@t zNfposBJ&zf*)ZM+wGpw+yFpW%6T!c7x240M&6WE7#P@pL@3x@Z?y9Q{*_EycOg#0~ zX4cs~$HCq`F36s6PaHfKOoj39KRcwWlesj2Ru6U`?D_()a~&Fr~%&cV}aAD z_M>$^3$mXAZ$8BdaNDx{sx!9Mn3)jF(#1d#KUH#P3+h<__quEL?@sO+R+f*c2H(1; zl_vdl+_8f9<#`OW*fjmj>7cwDowZ5_j&HVm{JKZa4~ja;ew8I_c-KAC1=OLO6UlWM zbol!<#^!In)NT1^bj~>XdR}SyouwQR^y&SY2|)(JXlwYzIxiEAnmxS!v?#NflJY9| z*Sqbo%L>r?6K?UbgT-l8xt$-1-}V~6+2*emBNH*7=bi7Z#qU?7O5KMi5HaNi#|sC1 zba^3(96y-66zWmSTJS9P&Z436;R9v>;C zW!zb?N$_U6A&ehz^!?NB6CzyINX@_qFN;G2cwsS zsq|5sWmalx1n`W}*PO{as@+@`FFYG9g26$~j)=)X{nmwN8>FGv3QsQ{1D5@2O)R+8 zfr&ZkOE32WBYHzzUWl^4a~oJ-D&E@(dSfD8^HqqNcwnhG^UiBXw&TfO>etQOo-2SV zt)Cm%f3Ax6+Lwwl);N-L@XK%Dtx$&$1Ap1M4)m&(OFl_<)OotHk(Hm&SgfZp?Qxucwt z*%5dddby)oF4%#I&6`q8>s(?+Oultq?&4QG#p|wT;TnR_%i8zz&R_Q#rfZM!z4e-< z+545$6?P2C=Gw`IqhZ@X@y+thAO#gw`VGS;8SkpxApo`VQPuO3-A6pka*VK;LVwPz zogPJin&JFriCEeg=AHQ=05x;KUQc0ynX3v+uO>fl3b`*&+phDCm#sB-dnN?;9J?$O zpmR-wp1r>PT;!#i*+CJB_qr2Z2m7eC^nnoB9~RjZ1^AL`WzX}cfK&|9kpCd9`5mbXeM1zA|)8X z*zL@193q$us%t85QYP-xpGqa0KOc*gJKM3L8fZ~_N`>dqnE}^|h=-4WwcSo5L$6v3 zUo@O*mdQA4^GNl*fzWK`3c;R!m=;YlduSv!Rat1YY9$zEH4e>%m&rx%faEW2T2B6W~hX@J?(GmGLo zy*{fParbV;WRcFX2?qDweQqREc<%Uys#c@dPrDdqCed@hbsi*JTdcapR8`+Ad}6LT zDw{fCas@II2Ar;1WK88V9uI}8ti**@=`_HyS;Xw?O|4T&x6Wk+?B$sH=;ImGuNEks zmHk#sxA3+!UXu~Xt8{tOZoP1qJOJQ%Z97ScoBjfE@DZpiRinU}s=-xeow4~2aS^Zz z($=LFbA0<%%1_ksc;1hH9>Itt^e-nlH-7!BbtElNKxvYCOCTt4p(yGS6f-FxS$~YZ zv@K6`nj$jod3)GoIkG`>Vj^^zgudMMe(L_n_!<6amd5n$LID8EgoX3Xw~>V3vpg8e^&+j&zA#y8<-D?}L(ABgcYLR;>ZNzaAYT%% z6}zJwHhMyaa$O&8F1g*xz2JqOZwQ^BGoZ~`Sk$yKp|ho-vXQ_ZyFeKL;?X7OsfUf{Pf~YO zOK4qJ;a-OwooR=|EVsTwY-x{QuuSYfdqq3d$afuV`%wZ)JbUTU;e;{>%1z5DveE~Mr=i~$S zOq23}xlp&=r=CeVu(LF-Uc;cO6Z}A&W*a9XxHLrqpfw)$orD6LMGBLU;?NvMR{T`m z5aGz#xPj1924?uFy9dvQ2r%k~jei5Uxouob6UfaXwOc@OC@UibKNTOx!iGO^ZKVR= z>M~fEz?EOI!0`t^+iU?@JK6^Y1U2SW=8STO2ym8m=L-NdU)F4Pe@21CrH4cht6D;< zZFl)Re!J0weRS{uXAgf|2?cimw+o%v&el8tZdP#G0R0&nfUH#%gY9lFxc7!9)FH(* zhaP5dLozSl2W)8tzIMUd#j3HSxhx@R%^> zvVt9)qkxC+y9HF4zR&aC1*nV(`0`=d!ylvcymIv2e{QDBMCPwJ27#Lz1VhY{d@|CbXH zc-!tjo|c^bSMZWNSp1((#lInF|1b2$3OH^wMjIR3>hAytd$yWtwrXm&$|zeD$_gcC zC5OC1CasW&D@4Ky0k?wlT|pt{aISN%_H*_Ya~8&P7W#Ag*f}I(OdmU@j~+wIkD(>U zBvE6MNRZhEp4GpBZD_<_91RKH~6+N=eGoxaw+vgNnCgL6ZfUIn>5<_YdtLdcFoCt!jR10^ofRN zb>0`csnMA#XDHPjFnj1gQ2RgBqdCrSA!-jk;{>y3VnGgDbt-ct-)=KbVrtr$N?@t< zk`%d|W>d{@Mi1o4UEGdhdHOpU@AB|)^;qW*GX&=0qB%$<`%)72b5ZGVw|D7bJh#(W!2d{*?>L@CQsFYjIRnSO{$9Zd;Onu= z0~B6<^nyHK*yKL}x8*H6auI~gskuPEshqfyhNsHhaY>{vj2fGymJ0}&9YF^Jdt0f#?7{4TWedX%LU zM%XQ2ubvAKHR3`nU>+XH5*Io3?SyuXGZTD+PT}jLe7sSp_QU&KM==lYck_Um5ijBn z&+URPUPN8|SnvQY?Ptsbe4cF#i~lX~;Q8B&ia0v|R$qDjMqCftAj5a3Ss$}6`b|vx z^f$&-$4F1@OGqZT5}!qrF;!7J^S%5djOT1;%7`^~}n}BCbv7 zcj5XJhaa2_kXtD%){`iaw~gh`(N~~QzO*SZk)VUxt&st!Cd9${VKzP$wK7-)c>`@w zW@ikdhh>n^AQ*2Ms$5e-)tUBx+%U`o--n@>1kgh?>hHpi#WjY zlM*#O$Nwtbw^99lwpFtqZdZt>?vhz;R{i$^dMSv%L5PJs?qd9Ysr`D|sjZL?#rLl6 z9jlu7AcxMM@cq>r_34&ScIav?)4|l8imi8?8+7U0oA3CSL_fC}vVVBAIXc(3tzi;R zIiY#rd~BrcJ1Dh1&+ECiCLA_2IT~2)6rkO8t~O(zMdv)VJ0?c+7UC2%qqh1kYh%|o zM`kbc8=CDjyGXBu&glyJ@xAvwgkVhO8jhtd5*VUKHxSM!|!unJ7Jq9 z{3eu-9-6;O!g+q0X3pEZ(i(~e-|6uz|H$q^^JfYBEeR*H&Yi`zZ=|3u0XvUHt$`hm zljazIzghKJOWn74dyT^vCzv94){d>67B!$AqJ=|mCBhPf?{UHu#jQf_J!C$6T$7*W zXjg);&=IC@s+0Y>Y>nV@rH63m5E0Eg;Ab~Pah}(US}Sa@3)bJh4`%K+Kr-DzA;O6M zSGHj}K6>A*>+}RZSd+&Op4TAHK4##|i}hlW5 zWAMlwh_EBL`@&Z-zHOQ|nlAva8O`w6&S=A1sQo|R{Qr3m6L8DJ@89lW6qOX^{=SL% zQ~VzbheAjOJ6(Bs9uK@FV6Zbh^IZh12DlnL-+g_a?>93g9m=w zOOk_Z0N@4d_deU44Eqg-CCt4XNJ*rcljvGRpo^b3RygbVNOWEUB9MT z@W*M@$mtwc7A0T zgheD2j?pv1>h7r)k7+kGvp$2Juh&qpg$QvD z;>-J{I&r`*+=R9DqVQPj>33Rp-sha)Atx=A!^2#oZ1GvOBCrSfqDx#`Z*$7)CYlPL zKtk!6Vf9XfO?{>poCF_Y$|jEsRV7*X9S|V4(iQkRD8pElQ|7C~>mgSr0VCJ~=gvKs z_lwW%0py0_wiHIcZ?J6rtbgBCKmz(g)W3%zDl7X6U@NUWSp;Z{`1W|5V+79I+M!?T zbZMOig+;GOn zv!VjZD<{Hu76AN7HsXX*|F^>{{o+^hnel=TSY?@s2rUtJ$K0>1fc<0t2O{_azn=L( zEa=?%9-B z`5svFIMvqeMZLJdTY#~xmMyPg4kR1vgie*kRqq{72wS5Ag~ zI09)&p+|;U-tAnx5^#M$5rL_dF4n?5x`T>c;?%kx4v_=Tl%ShAxFIK584^S*B9??c zgzs3-%yZ$^0IC^(L+sKAhLrpj&yW=K{JU-Nz^$nsPq6ZwfT+jgcIFJYkuzWFpdH|c>IjjF_3bgw z)TkE%TeV(P;&RDME$j7!0rb!c>`Sy4c3p0Y?8gm!ddM1y=@ZVM(f`7=+|)~+rI+hV0y3wQMt#rApwe0EF458e8~n>3$OgXleNAD zK*reC71-6IUAn(%NX4>ct@4P#Ct{}-8w*E-oB;f;^-=blJPs?4ge-M{e>eH@=QV^j zwS*QJRZ&~w3n_XP_nDavaqnmfvU@R06t+M;UBinEtF$Wk2E{CBmx%Iy_FzGHLKXsR z(iy^%fCSOgPhvF-1;XGiZYmR-QTI|$8v>YQp-)&~nq z*ORA@ocX4A!*NCTycY|`jT{~NfSOa71pT-YU23QXUtU**Qfa0!+q_fFY5qwJqFo8* z2Z#F8yD&DY>(N7lX>7kiYWajx;z-ERZ}X3!&O$V-ka*Z}@d%C|7woGl951n8a<{ic zsQqk?=!bLMSD%Hz@v{NRuVkg0mD}mbO@(Go5j=@WV-3Mpb~iUz>EH#=Q9}*P{prO< z{0wgf1vN`k{Y{;*qeOyj?9%ab2NATq!&T_`o2Gf!Ec~R-XQnj78yrLj97HX$)00W@a&h^BNqU1oJrm zk3Rbw;YMRn0CNvG?zt*h7xJ;R-}_?FcDSu4L_Q(*QRe`3!y5vG`LM)Md|a0Da48$t z7w4_3=?CXrZ&lM908fJ>BSK!Z8CjlQZza69sPa;=w?7=$n9eOQt%E-o!~bG2B5KM< z9D%0s(3A=`Z}J^Lirr?wH-gscQAQzOpMy9!<(!5x zZ&nSd-?*n4%MW~SJbp>mP7vpqW%)$afpc80dg&X&wBI4-7Q43gUE29~RXkRq$CLoV zqZF^-OV?~vE_cGW;J*gO*WH4h?yY_1DjBM@c_GG+jGVbk-T(EX4=5gCppLw8A9&;b zC}Yz*9KRd)e%)=)sH&*CG-R)i?oaud7w(UvZu;`ZPX>%^NRss+pR}XA^OY z!*p`UmpM}gZ`u`X)Xu&n!(GT3QraATqqLw&EF`atoY7R9ZRzHs7yI3+(*M%Trh_?Q zbmg3L*;)?)D!0IQ+u1_P0n>au`Am0xl=DSyt*kUbTH@;nXdW%`f%}oKThQ{Sk4=Ax zya`uil|c-Yi$;3^eWj|3?MIc4YO=8uX)u|JL9V=8g+N9w=0?9rwxJH$z#cm`zvn0< ze;7R{CH_L$2GH%cON#i_U}q zp@-hPG(~!E30Oc-Ku|<#q)YE0H3%Zo5s=b9`gGFAI7``yP zr^$@=l1xu1&wQfqW#eG8uFB-GO@9&jGYC7YgoZLmTJKof{AdQJwyV+wce*>~9&-?; z%{cSE8-$?htuu^wRtg`J%xrf>`+hME*4tz*XWX<>oc9{Su-qPX0WyD&Imxi1koZXB zQxP9Y*VHTOg0ViH1+<^SaeK`{OlaieFy6PU6?LJRcqm_SdpN4!e%9#H8AM_{neG}19sfjVwbvDKV3Mm<{u#>jgQ}rj(Ej;*-c=jU6OHM zKZNyWBGSEUxOK`oQbX&plcZPDUNd?&*YbDL#A#$}VR%_=9PT-5f0Ajm0Ol84|c z$Ai$r0ZXl^xMf|UUXw|V!cB1er+`5z|C15of zO=M8C`xPL)ozecaMq&TdK_SL1M?6f8A`Y+n@h@=oXB0qMOb(Il3b0eRoLNT1(>YC& zqDlRl93elT(?rK1#m5ffk6XQ4M+Ou(?)AtNpLgJ$z(%M?(ya)ps2gb)--naF;Hqbx zz?)sJ3vi6(dYVFe7!Va(yf&U0b{3=tafZ0Va`d5Mk=4N;2CfkU8q&6qUJm@`05sLj zgCeL~?=yAT8+XO+hRDD}RY!*5p_>rHCwIiH;v&gogXu#)oW})aP?LL$SM2IED84w* z8kZn?yNoFF_}20H@Q^n+lKC0sVy-y3uPFC~KF#@wy}S74)#*hFos1V!dol0?kJiNm z(qX)n@;R5exF8C1$rq~5{G4WzAzzp+l-@$~GM;OTD|D8Ogr_RX-#g$3w6^;5)APb# zPj8Ugoxb+sznptR=r0Qlsm9)r4&SR8z|lVcgt$f2BljXvV-AxngB%6%`cu@P*^54T z=Oam)uTHZb!GnnW1%X$+V6p!9gWfUuIIQ}|tDNs&U2{#YkKzD^xaluZIbKbsgvnlx ztNHBjFxk-yJ5aQcYwdG`4FkL*;^lSK8+){3motE7BmC{p>T7L6T*p&tT2f4`$~z1% zppwg_3r)XJE?o+{M+)Zw(iU6VNO$k!373r<}MMoKB_uCwb=HYiL-6rUOvEv4= z^?x&9@fZ?XCvDbrAhr4oZrC>Q{AD+H8-E*|3izf!!RmA4 zvYVV&;{b|50D4>55tsR=irSi z;q2WLNG8KJ<2|i*@2TLWG zN6g?D;6``ZP-5MQ)93sl6+o*crQu01Mk5^<8AklfQ8~3td8N}%1duFf+q*Fe)XV!~ zTvh`yIzGT~e1z1?=yuFSs^}0l)}=e;xM|wcj`<`7=z1qMP!V7nDKW`-I3Z2;tFy1h z<(x<$s9H5)my&)tMg|Cqqlvp-u(2U71rI>~&T2voG*wJH*k;WF<;ZV6KW`;sU%{p^ z1-v^vHQf@BK55&;XL~)9)1DsF6cc+6gxHq$CGmsluLn0t*__D3?g6wje*L*a6;btI z6_`tjf~W_dq#Fb{IbB*cIy=tL;sMl{-4nbHToRnM@d41HfZN)-z{=-w0O?YqRGPy4 zrbg0POAXkHTs5Mefgc#=0K zz2BGDAhv|A0*7c8|0$aheHgGA@T{vK*)?JR86{xYCV67g)!YAlw)=q_Am&M8#G%#n zsQd=~^@{><=7PM9tx*o;UH*BbKsl7CrC&~Yj0Mf0 zFmYEjTGWYk&E8@8(`^);dqM%8dr^45oHSNYeq-;M+b_hOq;p4YQmm<7*sXn5fO%}q z_)L!T?phubK5c?-l^BQB23vBe6C+d$XG0c?n8O%J-J1zS^v z{ZSLgB0Fr{6#6G&_AfPYE$Cmdp1%S;f26@xq1X^loE8)t<@qbV<5CRRV4EKB@4=nF zB0JL9iH(2L@c!Gx1~!}WuYe960E7OQD9HcQiU(~m8~}hX{r4!zme-H_RQJpa#vkx; z-IR1uqcSy-rOG<-uXk2P-B@)#PMZIHBpBIZH%Y{d6bo6GB~U%Q+E|k%=+r}O@f}8- z!Yjy2CD4IvRQez>SY#S%e3Xm<`qc;^30h=B;enl~h8eygpz2^NHYhGARf(OKa9$XO z5(SB64%Gn+nrlh`iIoc<3NNmX0)bO+K$Ho3stOrKahrp!5HVWVVak7oWh(&_Zz}V! zLsXv-W`dXtaCaXz5sG8S1j>MZmgOLdQ8XU6+wy4cZ5Q+qqLy`5m+e@pa}ah zt!%xIb2^Yab+ISlAJE`pzs>^s1P{Kr`XS- z(TF>YV!Z}ip@~4C7bLC?lb4^O1`=SfF+{S-L5Ag|4>^dP#Ef1F-nH5Xg<59Dt`SJF z$_55OAfiHjF6+czcxzzAh^SDv24+EBgXo8mqhi`oKqi+&}b8g39{}3YY&8S<&r(`o{GisSL zG>l!LHREcj>>W*!1z1`2;&6)OlnqyI}OSEuTR6DpeCuTo9n+Hd_W%1zQZsF z5yC`a8iwad3~;$6VF`F5P}f9})?b}oWOGonec)1fiQOr&*qZxMqwbds`N7h&EJ!!K z6|vnpy)I@d_`A!M?xy`r6zb^KvE-=N!wg@ygFq<2J3fRDX z*WBu|Qhu_vYC{AwhK1V0XBi~EE14^3 zz8#!^4PO(>v5)8Zq!$tAZ}jhzTPQQJ`_~X?6{U;2y9DC^d1aZR2p_Jy?Aac#Cj9JoWfHO70bJ$%VT=u zM=9iQ2%aPh$_JXk^NM%NP@{5mwACwA62}i47l|nIIE+2<9vBrMvN20Ro(-q#Ry(Dk z@Pi)$ZoMs1d!GHY>58vuw}#g-QtTsz49%Y?MDt`?>V}M84NAoUX;EC;JnaRx+O~~z zQp+wQr3&za!IsrQfyv4g*ukeu|Jb@6;vXw5ItFQ9;h1FE2D9hoNwDuJCN+$2by#R= zCRcOgwP$594D291S{nw3L89@iHVf0JuJGEVxr4rz)n)OJOvH0xW zeYM&Wq8j%EyppzDwKXFCq-9C&q-Emz5;fWsL*?3x+Eov{$x8~)z2E5F{iA>dS}91d z@e2w%zjqqQQ*oVuJqq;o)gC$e8g~~4TQr$rCG!B?Tr*Zs7zAH0(8`3(-$WiBF~*=D zqu0AMIs}_B-L(X|Cm8j+j@S)X9RFTF@0HP@ug%M-(bsRvsL<{VvYq4E-Y|QVBzL7EC?iEL4+0y5^GqHvBZMHJ>jB8F-pyeqAT$# z5f1<}9JH_fLdj^Mg~PWq#@6wiB3wY7$3v0ozKg9@fayg-+uPo#=6kwQG{|JkjS(}y zM%+}ZDaTt#tQ`Dg@4)Rvf%zwBtL_$JtOw7vZc$H~3wFM9(HGmjw>RV12OT2j*ArFLZ)O3`-3J5I>2n;R`7(r1e)kl;04WGzmn}+*$9g zvUkWafuew~+o@U>b`%3xAd=fu736Y9g?xQc+SguC?5y=WxP69q!f0QUH4j^giG8NJ zo-^lm6aE-=|3~Eh)+cvQma-!O6~bYa6h=RJJhBHmS2^QejB>bEpGchG8QBlZ1aAL0 zg7YC28NhzVPjuD&mj|@2vVn+(2g6&vqPXiiPEtg6eDlo0B(;kvc0_Xz=-a`155cp8 z^JY~TBB(IIr2h5Etl|^!@o00=ah(Wr0&2z~fl9$xfFT~$6qs1IcCqo1V%MDljtcv2 zO0oMM>IuKL=1^@n(t5#d!tfSsL|8(V83Va&rmGRSTIRx)TPR{G-g&JW>TV!uqKWGK z{<{CGtDb<9or3;-5W`E$^^$}e(`(-2M+2@@nXUZ2l2oM}+~A4vP$EKI7-c}1q=h+E zDexm%>IRk2LC5OP-{_2xN-81F$hKoeHtz>Co%^wMu|wkPJOZ?AELv5p!@M;fqlYiU za}RwKK8`tbZoaI#6|}$l)<6&;$88&>D3g)QXxJh{x%9xUBr4z9<2-fta{Xzz2eqfK zrngf9S)bN3wxvyFPv57lYBUL%j9Y|EP*@@Padflca>QnRFZH^c_;_@={1U^0u$?5h zT}{8ZXY)9&=0uihaDKU0OR$X4RqjLPvtMZ$4YqbK8ZS}{XLNwJUjj$FBZnE18P z&-#l+JD>c-nrE~`WcJD@<1Cl^_Ai)dj15RG3C<*$2%;O%ez5m*vhQvaFR(gJ5-DM; z$4fXr`TNs!%ky?Qa-nyF-@l4CHynO<`?%zEHzZ1$Ic1>3^To%`8Bv{m*fsq!ia=LB)SjcD%iR4Nd@`xBH(B*dus zP5tEFpH4{eq-|FdP!S*~qnH>#$c8qV*GXe=Za^gbA_p(8eBmPXy>9rKuPIrKfIPIk z9sVi9P;@lkaW1JH8a-!oy@k87P?p&vPe$C<3b!J&#CIs{Qi`|@w&eI}~gYMR^0D*nLxA*e|gkIJ!#vY+P3^QSWpwV!Uj zg!JHOq-TLyI2D~W1I)Nj`|0`T6{w8G{O7+Z2h!}mdA)4V`-|Qa6#JSofcNNJX>sY4 zZC;qYAd0k$sCn+KHxnH4Ga-DF?#0h;FPH;FZoL=h3ehok?$H8~qf6!x74!SvNq(BK z`w+DnW3ysS87=bkiCyB6AEN@HF1_0-qh$kTp#p`${a<|{{U5xHC%y&1E5=XfY2hs< z*{uJ?FA|gCuzlg`{trHpn27M-lWatU|CvVwp#LpX7}J^mpE8BxVAxC+Xp@Uela0-P z-`P?1pF9wuk|fXa1^Q)qzEFw)199qc}J3eE>*zEQy zd=~2!Y4QML1b`bDk@o*fx9u_dNZf14?IL{EJ8fb;4Qs|G1Y5nAsSe~({tMlpY}AFr zVeC2H$96=@)_3h`EMOe6Dw!? ze>j-Jq7r|XO8C?Lr-$=DrcC|i;Pw+z4AHZX@Cl7eDNHFp`uWUY&cbHV&1?0|yN$Sn zU)i7c+uG0O7k0|4j=qgv?(SmC-v5WVS#VC=iBDi6zwp0gV)(BYUDvUBQKN9v!8aVfR`T+(_^z?6Z!DQxJLBs;@Jpm`Tf|Wo6 zNYZ?ig=2&sLbMhkm`R`df_#`bG7&pM&<9*iFIVgD16K!8mS`Lj_k+3T=}&RdqAD<< zZu%hTyakLCi4awxK=re!q36wEJg5(fnW%tXHf?}6@CnG&mTp2#8@Exe9!_758aQA* zSyQ4x(ffY_Mow{XOFJ{T0m*BA5PA=v02v9t54c^@gV9SGFceFRA>eyy0b<6GPD~9) z`bXVEbosaM`d~3s4+{au^ktD4!YovzKk1Z98#6|Z0Xvo>)Z?D(rR1qEs3i4{4qS1M zI!M~=i1KbrkfJ3?%e!Ag!xlnO`>bUaLV?FxcSUQJ{Di;Ir<&F>%@C{a{fvHzhi_1G zBc+vP>Cu@*X@?ho4*ld1t~gE&;DhG}+9l?IM2kYng-Yp{p(u;!8%UF@iK_rK?nC-Z z(;3A`N};{`y=;$xn}H8Ofw783sJ-!;9J&P`{Ck9%K38Uh^WktU;N|5jFmg$Q62<5r z2P~cjLWH_9H~`seV$l2^J`@=>CxBA8W|qL(!o!UPT2d?!cwvFw1PfeRSP+-N0{=}c zfGMyb0>;8^h=bb3r33pJp*2olh#!GuAeXCuutebVI82CmAbooRM{+CIewfq1JX6=o zx`pHGwcv-MQpg6bDPjfT**FJ0{l+e>FvN>?SH!5%&q2>59-l52JEZHgFg$&O_cODSWd09F?EE5%|O6 zyZ|if`}}QE^Ow$t#*=2BOZY`c6ONNMY;Fx4b`)EjZ<>fk_I*oPvv5SaD*syfb`_ZW zmnBZ=p;maePRimeknqGeLudh1x*`g2$HSge^q-(~W5ll^LZTrQLMZxA1ZeYU9%QLV z2o<82?FqWQFYuz`1(B|(0!9;5qT%tIESMi9a{UmLxyM6@h=8jDc9$=}o=Y0ogd6`z zVEyzC#IcK&9VO@20-XM3(*nit-p(F${gjLj;(D3ejq7^3W`%`kyjT$J#;!XE!Ganu z79?Sfw{w6{Bgwtaf2}UVu8}1FxX>gGdA%$xfS=kFl%6* zxbF)48*O)0E~58YXyExt>@KBoPYkC5Wid}XO#BPHPJaVBY2mnY%{B?WQ%}n0ydW~ z!H!Eq6abTdG_ZPV3eoJ!U~5ET-~&Y2J}Z5>Y`g@AJ>DH+S9wG|q+(LlUWNw}U3UibE0e?fw! z)>^T%UwKN3CD>XjCs`^aS~5Z|CgWhqw&pb-&mEr3Z6D389n7`T%~eui>9=MT@BECx z!IE%Ii-=9t(M{dp{)>%k{2gSRn)Z7L1D2L+w3L1{n;IKMA9iLQ+Bq0n-y53V9%|tn zDq`vN!0oBI(UZ;6!@}M}$JT|*)b4=$^~;SmH!id#cgx03%g|a&vtUa$Z?gqnBROjW z4}Sv#Z#{^-&IqsKDSqiKc**i+$=8LFM%j`SkuRJgUzml9AL18*$a3#OKNZMj$tY&= z%V%-RX0b|V%&unCD`(V9XS|oo0Ffq_DSr^sj1SC?6}%VAq4b^#{vJdUZ5t9bwHQ^a z9aZ=}D)fHv!>7S;t>7D~Z$QMT(OFcrF)CvS^;#2qG4qwt@Z{0<01-J3{&1|cc6{IC z`0BZhk+scZ3!9tz)*wP;_c*fL9huyN4E~CAGBvVvH4-&9;x{woG%*CAnqNmWs|Gbo zUu$|bX*&9ATG?qDzS6`lg0@%!`+Kr3cZA)P06av~AfhA^k===~uR$O^5D0`6+(#lX zPD0FAT+~+_z!j?P5h_j=a<36GDHD1Ya9ismZ+JSdL@=-D8(sjyR^Gu@n8T)1$fgm- z7@x-|9f>VsgcY~K^2=bVIk5ZjBf0aQ8gsuXbf0+<&7 z#(98lE})eIsAU89vH*pQKj-!T1`De%A{hXPX#XAqi}2QdMvoq9YBwqm{I137j4k1*u;ts(IJ;qy?a;imst|V*^3U=29ph>E1HLp= zxVY4h`ggm)lUF}iianU}{?gp?Hh1Vss;TbeYQ|;uASO3@ja;+);3gPK2;kuYfnby( z2%U*_ivS^BfQ|~lsu}#ttGkFog0glp#Zm>>?uO8wv#7Q`1~+~Qxk4>+;bbd3C}WN1 zB0Eg`!oouUjg@a_?vu_`!E!A#mUyhNgnM_V6RwRB;$vUZKGY)Gvz$9g)P?5@i)@=n zkn@7dj^*Svz{4I5da0aj_emdjZs-Y{u|Q*=+!x(2f_k<;by5;^3zg!MJh+93oOU-| z^s{z6uzGW&0>{t!ZlB2fL1`$tN9>j4fEG`PydiJQcmMqh!W!@*$KG;dN9d#yZEgKq zPZRsO=nr3OHA2rG^yS!QU74txL^lO>4{NyE)KbrXVYTM@I9GrdT6x87xa@QLU8IeK z$kC_cC+acxaQ0APVq}#Kaf=SCq-}*L*bC6$;r(~AMfmCk0}=2v<_q`xeQUYZ9EYp! z+1?C$(N>au-{~`0&y(y4a=}#Jtml=r?;dtGQtM2MNR0T`ismN_Yp6d;dSn0TC}T$} z*@119_CdqX_7l}E2* zc~C~hY~N;ke!WTNTFB96{x+E|s6-eOPQPc>CbT7-#ED zgAGg4h)e;igRPI_=_9X&e$oYP?~EU^WtupvVh1AOI))Y%jORTc+OmP9#8(x{FbRU< z^YOWgwfAXV=Utr^eBXl$3v0wbJj+O>*sNB#Ip#X>Eos1fMOI)mW_iJ{f?lL>=t1lJ z^YOSC*kQ%(0AiT7kD!n=u>KB?X7)@Wqd>tI;g7iI^-?rx_yujKHVfY1#8FT@A}Re5XVK#`SsOY&XvnatiRkZbWu7|8 z*o!1T+Ypw3*^8*kzl;p2ZunP> zF%fEVaT3^&7=9(uAsrWS7$}c%)K+KLM$~`yTGPqS{&W>Kk`ezMs`RS#OXHWK(2)en zclZ)tYM6Al@HqbZx?j9cgRhI|NA?_NtkIqqJy+{(8LvHPePMHRT}g=7_IBZ|k}qE@ zz|AR>N7;ezZlBl-F|Q}3eI<})!Ob%n)C!w&m29d06deN&s;^J8B}NjQ`hBk|xL~zu z@L#jEhN!|%dM_`J4By>dWFJ+uj%%Un&j(tDSTLNQ^eYn9e_cj8bu!?rr|f*Qd1^Tb zrCopcJuIQG;LFuE0XNd`IwGtE-W(=9Jk7!Ck*2AR+unn)zic3w_8*b^{wk3q=*Z{N zp@Meoyfs;s^O_+?&?lx^zH_sc)Jw7Uq4DfdFXI7Ci`fyfuhT8)tJ?zs+`M!PJLeZ2 z=DfW|GvUXkzBf{387kCsFN#RUm6JcGWMuna?}qdt@XEcM`CkapqKQN&3Y# zoxU@C*01NdlI3#`as-+Ot%N&-yxVLGp5!0`et2I077?=odS9~WA9$@ zab@`3LD9N?=V?}rp@-u{ld(*?ComC2)XF$uvm|;)SszM1a~<8Nr1r6U0X2QE`}j^v zd80X=EB@B+>r*^|grGWVwrQO=T~T8d6SJ((SEN+mL3GXYcB%zpHi{>Xw%Wi z@fN%3C86d-<-oisPGK<6#$*4zDY*UT@K6P@0a0not$@peH>vTD5n2E06>~}FfYj5R z(dgp&%Z>^NE>%ATD1hQ7gpil%U%J%JyNU_bvf=#mi}HOX5IS$<2f^-q#!cSTsv=O4 ze4t;d`DqI|n-Y9b#E~Cy+-Jj$(0Ycc+Yw|U3W401Hcs8cv-RA+W*g|WG#%EcU}7SI zcE7sds#FPp9**+kcY)- z(}I8^(87nZ0li8)p@6hE)?5kkdeR^kt81wR(H+}D;VvL{{hcOH5WAl~TQhF0t*F#J zA{aHHun>A7a-4FRG|eF2~K21kkC zTD58T;xE9wb3STL9bwd&D*Ml}b}$mVf=GAchgzXj^CaSr?#yBA=8b_gdqPG$LfZMG z0?Hi!>$DCKcs=N4CKAMd%{hGHr=QA(ip;AIP{NhsxE_Qd8F)2OqKi8)P!aWe!*nHx zidHxIo<}Gk6BGX64HUNWS$N&sh+3T-VJZ6*vx!?9@7s6+zs z=&E8^@;OwU5^de8AkJb!dSe<>T~Jc5a-EpWe)1!NHstWS!jqBQ7ghGjQjK3u5m|WCLcvyLePBVc2 zmoDMIbXNa&e>@KXaIZh;sYa91Vbc}wA5Z;1*G}47I{)KcsIb)EIW4ihe|`@N{=@&^ z7;JEeeIWjuVk$Q0jV|cVPDUCg^RN%rfAhzGW>I6g9qzR9_fXj4X)lr&7c}e~*aw=C zB=~NPjP;ZK+2ntEL9r$_(|U=1Onu_CZjShDmNLG67Cr3i?tsa;GpS-L|ADF8Qfvh5Qp922JTY< z5_JEfc|nOUtpR{a?(a7;TOU)4NP`t0JKYLx!i3F$A3z6-j<;Ilf5e|CPq^M^9>8G_ z`kIKzziWQ&kq5~Eg8olzM?Qd4LUZ8UhzscM=~k|Hi)9P#E;hwu_wiyGaf?q3IseYQ zgJs_w>*ULfzBy?>PnFD_`JKq6;`?>f=*_yPG_tKr(v~Fh#boft!8Rk0&va(NxA;5b zqI|{2zzIL?lvjV-T~iLcrMB4Et(HBu7g`;^>Bxf`pwsW0ewn|I>`d0SI<}hGN^14i z(e%(UJU&Qv+%`F35!@OG$9Hq=nWFn7(z@qzwOS}sYx3)q{fp5O%?!ajzub3TeUS@2 z7BPabcx5$_V!VE031rB}0h)*YKFzlEAKnrbuOxPi{dmDKquShyYBZ{R^1gpLU~Y@K z{yQ$ougB$6%AN>QjqDPuVcIa)#?VxwY~5O`LHFO^GEHT~CMqiOevq_Ov&j~!WiiTD zW{W$ZMicO)@^yatT*;=K>4Sb*5qR!v6)mlg1mZQ&dN=DW%MHK&X37_oLu_$zyvB3J zubeP|)Brx$`ly}C(G9I-TjU9SsQF5>x&AtV>5O@MbtQ-gBt?h1G+4h8XoBg6`gExZRPzWU)0pT3&qMO%&f0Ql>2x=H0#+Iw5Z? z%U?tu!&E21q_Qa2;A5uyB)(A1I>w#o=}QoWsQ~T8G{rs}Fb2Kze9qt{l*aQ*#}j=C zi=NxjIRDht+~|j=N;0U z2A^h%L00&*-w2I`>ZFNd(=$Tf=-knHWRYYY_@2BIXY-Mlw>frFs>tg81Vk4yZ&q&N ztv{=0Q1|P+ItZI&hb+-xnyWXl<2|)>x-BrVUjd$i51$$0mNL(KvZ-^>oPBhURF*$> z#NCdxJ8}oXvYrZQBWQIZw=Iht9aOuu0b9*$Zv3o^Ly}~%JkaM0i6*J3(MWkJsi9g8jA>vB`fD&jvzs_xrNs74WT*j;wJb%#zP0vD10>~|M^ zVG9YGVu&I7^2n&@eW(}44)5*b#Ta`7lPyZE>1Vg!K2J&vMIwc%E4+?JNTY^UrmO5N z@PJ#HVs^)T-Z>RS6E7b1zCC?$8{d94>k4&!cvHWqy7x1NhNNU_lA04g?k9Y!D2sW* zwYyi|>5HPHy7)`JVka{RB0secJn)s0+oV6I##lsFx9XiKJw7klfncv=d})g=zH`FZJ<*dr05!E z=%8CYyt1Y4cy>__Isxsjvs<{zaFNps7qBe6!ME8qg)2q}Mwp>c=7S4lCmmd&$wmOu zpKcDTYhv*`GF;x+-rahTkV{K;zBW?wItr|5(!&BmQ17$?x2QVk(;K*FcwFnUsCp7B z93Ppk>)O%{*t|`_^WT2~B2;K{vwLFdfs5Rak@cGp1!Z2Kc+x|&?jMrv`U%mpGV)q7 zgfjEUkp5ySOZBdt=#Y%5()eK$3E^lm-#Y1ljjAk9{d!viFts)pbNawhBX1Z;or_uY zTeHAc z82r`#FCU{{Np_Zgln+zeg9)#sNpK&s{^mBzyn)5uDuf%~wL!(|p`M5x%$*~8JX|cFopzcr zC3b1!yghb45)aO8jG0a?d~CeS|G0j2ig)?vi4VKJEIu=fUUTV&z1`=?Z%+axirx6Q zr>W6Rbs-l35;ViO7NdG%RH#&5DT(pz7gzrM)Enx+>FTI75Og!}TduhH?`@K>y_Y^e zFqA-MMBlZk+40;ygwj<5|6tHxJ)nk!&3cRZp6nURZRUmH+vmqWuLoa}dysY?R`I1K zi}>GlAnz=ZaP~eOq@#9ctEK!H-iEX;gI}1ax!gT|Knv8Ya{PwC@JC-z?^ugZK3-#zX#AQLg(-5U~cX<2RcAX`XkOfv)mb<8Nyq zY)UKToHcy74M(>(hX(~o4xcj}XOqSze`(^xL;9Ar<5xRs#v-hrigeAEH6_|m;cnN*A7cZA3 z5@AiL?hoB>6KMW2JF|{SdLz|gBh@an=dfAdIWhKm70hO?%u8a&XYmC;$R7`2e zGy_y_OtEl|zT?N;61fRTYK?ObJeb4ZbRCvV64{A;Rte5qIyMy2zPAKi&q1Pfkl#tw z=Z$1t6tzEN?j}-w9~Ex2shs%O{LI5hi7uS4g1qm>jdZ)6K%!?5l3ig9WwJ5tn%(AjQZj+0nuJUKF+- zy_rkgMtUlabjFS-lRm8F8r44qR;J#*BP51bRkbg>UVsQBhr zISF-yFXappH`as_i?&gOYCSvsK_0Tcl+yE#KX%!^UwICSbjmjVA<%dMLs;|C!u!vX zIL*&Ezid@i-LR~>E@WI&bB?opNO_JihEOp@387F^!jwvT18^48=5pC%0fq=VG(qf1V}hca~Zj$dx5GMzFXIlS?C3M@~g zq(I{H05SM`)&h7wJgoa@;!{woKqnlBt(=D-)@AT5D>(Dj%gQN4jwC;8R8J{l#FQGn zKR`>1PK&?82-q)n!I=>Pua?S;(#?cxyJ!4dEeM}$;UhoRLSzTC$=H1=qdL3gpaQ;U zq^NVh2jOe9@*=5NO)w3R*KXx1=sR^y+kLs?gm&4(*AlkWXF)|D6`p?9X5Y$_un60~ zjlbL4t!bZZrQ`ODM=OZ&8Ptaq#n-jpoaF8~{7VxL>2=$NRL%o`oPHomj1wSU?pnO^ zhi0aIHNyY)y3Rr6mkY2wl`uXbuKc`CbE!Sr?iKq^%{n#H;Yh+8lhjO zM_s|e=rdRpe)NRC!^XzhWn`LG>e#)useo^kZ)SHPZ9b0_8XqewYunul3_W7L6QO=+ z%b<%pZ~bcp0|J_VIll*EcbYZ|O%==kNGvwk-p>m3_O+>!sR~n%M!!ny80B$61%^D*5veJ} zvI=ZzzILnBFePGp8I>FkdSNzre97Ie#*@}23EP3_6Y3WI3O(ErwnWsBvK{F*Kk&^DNk3tn$kuj z|M>XQuqr_CPC}2OZG!Y*Y3}!wMR4+V7C@Gp=o->tR7}ck|a~DZ@ zVaabD%m}0pCv}l_Q%%r2gL?N&B_pIll#Y#c?=+yn1Prjx5!!h;<2b1IFeMB zr>?#A;j`fR!0t*$bI|;H^JM1K!>hpfvu32dZQu^>@Ps(uo(L*ZUnCxZuaA25W~rfO z#lQ4B!J`D7I+c0i%MFEXx0dDcKbhS5OK=O0{T>N_P9joN354|@d zvghrq5}(`O2@jcVrjh+|M13q2Za$Z_a};^m;eaHLQ)|&+O)K^q+G#75>1Z&T5v?iA z2aXMTJU9?8H^ym|V}lsU$0AbLW_#pRyJ~LPko0%qh~y8<8{~tR@g_@@XC`U|YKoS2 zv$ioaHJaD6&&hkL_iPV2NY8(}Fn`Xy@p|PbW!7yOjwArKcQh56$6`3czc`I8)RVI@ zcm$JGZ$8fpsOjG>mCtb~0&2kM`1KB#N)-SJ{Rwr-xTY1+dD1Jdx zmJr!kAqo7K)pnFT0wVRl$BAat`^xwG>Si%MA+XghKJ=}E_dgZTRl1=0Iu_nN`TnwQ zc{cJe-pwP|UG?7ih+Ed}b0Fa4fb^n%EpXU4iBa~22M&7sBiZh?zyK>jUw1a?vl%IK z_xksF2Qa$kT0Vt*F7X9#(qC$mtobXMFQ4Y*=bMI7k+%H8{qZa$XDmw4fE5>6;$+wm zmlwL-rfl;zVdAm!bZ~&aw|MGr8m%{FLHU;f_up*esx0ifEs0cf$gbRS)Ryt=-9wZs_!3XBa~2GTE3h1t;uk+t(0v0cv+* ziz;nQY{?$7UdO5Z;nZ~%cUdl;M;WW{i3=b`XjjI< zTYdk)gHk`PH_B%Rr|lFEeYb0|K4`T(?|a?ZQK&SAP|duRll0^~V@cbx^D)`PWZCEF zEM5=o>8bpzv&#kClPO`$;!O7%UuX3A;?M$*lFH;%+LsHbf+Mm`?X}=euAvMQ3BCY- z$tD56DWqUBD|PGb%kYSn!dB|nYI;?sGp;o!J@2n>_qZMUU0F>;3|t(o37p)OKk1Ug zkn;gA{=aR$(m;*IDdqt-dq5kLKz?chv_F>%-dFgf@Wt7#dNq36Ei-2z_v$^)CPBkRx3atk$XmCjjHfH|>D zyz6V6<|}vKQ;7&zZTrm``5SS(4p#u5`q#osTfZf;w1JGA6K3HOKtYWVp^MdG_HLMSt=KCApF+N8h!3Uc zEq-t%oUe#$WA5`0D!Ek7&K%OJ_5uMC4u0g1=OeKeE!$+0cekXEQ2STUeQ?V_zDK51${7-8N3UBfbZ*uXja`7&<@vgG*E;hBv`BPTylA~vn zqh*?^rI)H|nyRXos-zmHq>5GeiIY~vws2`_Z)rXoVd)@Yc0FM_JwByyKIw3FVQ+Rm zZ+0kF1t*A3*qe^e8%E~>qqBkXc|+-3pjbXVC^ijQ?_Z45{%tqsnYyn zenWc>ue+Y4nrD`yf!g5_KNZ_a0f__mx8STJiN+q53zIPZNg>y_9wL1ZWcasRZ3e!! zt!;8+{&_4*(lRv#IXr5QJF95eY~0MkV`pTO48g;n?J^WXuYXpTnA6UHp-ObbC2sdqi_@U;=Z|`40h>Ih@R6Wv>upenleO=|O=kEUvVE;|b~y*f=Y?-zfaDTA#w7VDUgl`89uzL^Ful;l9V`@RD;2zZ37T*MrXn zmklMPWQxY+WxUgrMd~@Wr0BaFeI9jAs<`vN=@0?U2e4dU9sMvz($5A|SR-wBU9w(k zIlRvaw8*&mTrzqlN2rl>%fp*p-il2_gt24l_qgE-X_me!lbB1I}tKN zJy}adAz~KN=V_U`rw`q46(M-EAiS0~L@giH-jT^lTleMG5HuDw{vK4N)XCB|x(n?q zQ7wnuTk%kMZw9{(BT1Y??cbHMd@e^4Swv0t5+h4$T4unleHMRXTZ)H=BlWpx*6JP{ zMcfr1{0rBt=B`hyy4^gP0pFTATTe44f+P_)@763le_$DwZYon3d^jX%YNB-KAY8+q z<-YOklhMXExNWcO>Nxs7r@xW^U^XM4);-@K|6D(eo?1}?NrT+vx@*~5((IF-!1{=- zbLna97o{PR@-f;iQ1dCWg!d;~g*r-72+!pkj9ff!SYOrkQ)mvE@Gdb|lVX`8ja|(5 z?ht}|!u{F;1RZMKJuHH_PBlT`!lA#>iN1n7XLUfj6QeZP>+ zM&$aRN4NdJ`*4fb#5KtZ-9{jp^<=@O zy~M&92?8&*!$1nv_5A=L?QAl5N48m-Douo$J+bbR=vGA5IZ{MMCDvMrz?E&xHafzr zInvhC&VJKt${loG8%`##oPS<)>=mZYKs-bC`c?D?;@K4JuV>f|p+hLtMHfO#?H0NW zlRF`&%YnzmB-|n=`t5xhf1$#4OH*@B zo%`2!@BA9Ns;la)x4OEgYU+LJeYCmvB=1%zcBYi|v^U*t4m;0Gk+Rl~7M_Q{2~-s$ z$$MDtuyxYUGH`SDO67yWEu&9u`>Mru@Rw2|-1{FA=q;~b(;_tzgx#^CyU#ClCZn49 zYoUR0sP3Fs?HC{Kyu3spZqC@~yjZB0r@1`!8UM=1spkg2ha)v3bd-iQ77}D4D(6eE z&T`c;TW?m2c^?kr!-Tq4@hWN3w3b6zq=}5$-R9zliwrCfFJp05~_Im`R{7P`VB4A&YdK=0pKEJeL5I{j`siqGJJR&0bccUUZ+l}c3jt~2zsjg%!ut9EfYk?ON>mA-Wu ztn?n1%J)rml@PPi4QNz%%LmWJ6}PuW*h>`?_CS=yqgxv6c_(^Xv-$&JmXR7-YgGcD z?(%E9x5QlY0rTlSyS3#`C9>M&D!FP|!21>2Y&PPAU?|fPrd6iew zW^no)zqX|q!AvLM14?pR&f+c41P$Cn$2ZUC={OA?!BUMP+VAw)?U1+t!$CqdA1Y)z z-V14cMG^&mJ`n`L$I7Y2XigxcPKgu1p316Q~`eeLfm$6Ixwwd;v%};+y)C!-TE%`?NBhHb<*|q51mO$|pLGqeEW$ z_ZtDu7ieyaKIn6)7i~s&;YYNTl{EIB?_7m8--N|oZy13GTk=bn zHf0gg)WoTgy`wX^s)4~Xn559$X_N4}IwUjzZ|al#RHt?m9AnRWQi`g|Fg6E|uuGmz z9$_~~Q@y_VRG{tK`h_ybEFhtQ+8)|4UT-)vBHD#lhjR@kba|+E=R0&$FkG7Xi0YxI1!+!lWM-=MmoA)^#GQUi|8XuHo4!7I?Bv2gw^G+n`&e3!UK= zJ{h)JDY1l*x_9zNjr@3vcb8vjZrW;dT~^J!c=@>|FJ6>$Yjb01mgJ(*vji8TP+FbJ zzNCp=(#@*ZM?~6=#-DJ}wkvWjz1h9br9?EQIzDUGT+=nH^er9zW>$Hn|7MCyCOL+l zO*TMERqMShhk*CyxZ8zxM;VbfL^dnBTJoVz!RFtMTBO+|b_AbG+q7Lnhw*}@Ror+{ zAZ^#}ah)6UyxOG>mCJ5811?19zwPl9x438Fcs;$c-DL0;-KAqg> z7x(Mz3$js{05KlsH3>w@jfa&Xgg2*QqjrHSH-rwB9&JCm#j07zaYwguiqtBIVsk?3 z0wqCVQ5F}rYuV69q*jkQ?6F|zf2AKiZ%iz-ZUl}hRyVed6TI7_j~-DE`Szw!MQ2?W zY*%P|{vIiv>}ZaTzFxKeknj*jat+CGAaC=cD2D3ENeXE(wo(dl-1blo(+0%J0?NRa zRWs(O*FB8Q1;tX4^CCBnimR_QQPHU|C70Lg-P4zsjk6DT(xd28Lw4_-`80VU;%>64 zj*oJ)!G`0*+dQ^UEMG1b8JRA3!jh0^E4mo|RL84I^nBv4$NZPLxi8r|_1{#;d{)dh zZ141#^MenwL+{P?kq!wC5nFmYTPHLwEw)?jnuVt3_9yNtJG`o+z(Dh@(nQ&Je9|vz zg9$PGE+5kD@GFH!Y?nQUgP~`j+V9mXP$@FokY8grXTPX2-=m?n9bbD{LQ^M@v}dRx z_DgkXWH`^n6CaDc#S7RzWeuU}ClvQ`;V-R=YNRywRNk;t`eix+pI@)K8zU0SF6Sk^ z+f8u%((fTop?v9gM#L*#ul8-~xBDhKy6sJ`H};zx3c+WEk1kXJu<%#<_q(5jN_JnO zX8zpAKWrMmMLNEgtrsDj(!7@Q?q9^m{7~ z+rz`CGV6??;fRb%P@@={hdj9I_HB1qhsz`0NyUmX$Xta@=ZNE;IeaLBQQ$C_G9b_@ zw=t}xT^~OrbYtO*>XnR~1;hpWbM(4>a^mECP{%FQrLJVRXI)Mct=fQJzi|8l-n%Md zC~>=whw)wslgU}$Y(t4=*D_@<*OY~N<%_XQ(%p3O%&%aPuZMOAX`h9B6s^|Jm|wc| zY+<+ZBx(C^diAF%MxS^otYlJqdhWWy&+LDDVqGQ3&RAd4>R#@jtXh)kbW^qD7AcaO znvIh&TPE3C=~a~S&inVg!9THwiv?22Y?k-jP6l%+VT>NA%NT_UKEI~Mb7ySNA4YqM7$O#XTmeyEnKkE-V^W{%#JPK$u*K zzr3~ETXp*Gt=)hwlPc{@*-wcAUgcS3k0`uZFdBP(3WX8mn>$67O{QhoZgCrztvS7W zuTneUCI*Frx|es=E6~9hZ=b?L38&9@)Jh+i;dJD?x5E;k;goaL zuC4ny4lx-Q(>m@ElZ%E(cYW6bqUDE_4oKa0qXPFETxuyn5cXd8Y}u*d#o;7>xt;W| za}U3i4N1D_Rl2h2S{PIo3{xStDTY2$B>!kG!B`}#BHKqNi8j}9nn;ti!pn^>Rtz&*%E$Sy>;cA z{D((}dy43vLld4?W!R`_ln#B+nw!|A9N;x*_G)M2?YSU08&5Z}TiL$lDKx>+rGID= z#@{R6Az(BwE;0n`4o;8_rNC)RysjW7Z1AV6J1ZJ{mv=3tsay>=d#xO|$4hHFykh4Z;HQU`N41yF7!)4+GU?=@2a-nU&E9+D*vXJRC6<#5NSaG&;>%AA zI9xdD)ETGueb8!052#aE6wE@5Zc8>5R@?EX#uZ+ho>dpJ6LqnoB(-!6FQ%{f)^ihR zM_Z*yd6;H-BpP~j`*uf!4m*ux^71WW;uQ8%_6#^pUXMX5b$=#pLG8dg`BJ)V;!wm?LYRc zQK0HUPi13kikyWy^i!+n@JbWHq4dOddy7pI4WFcP{rj%vE&6=l1*(s7uw)C(y&GX= z8TDGKDXSIqy&hF_S8uFiMMKFYUD&pLN8>wGuYc3reEOp0TQ*bSHTqqXvbm4i4y-7C~JYIMi^L~mnAa;>!RTh@?hOEuz zO^Pf0W#^15@2Fj;m4-zW?T}rh$NAtRp6Li^=9({=o{GpduVm+x+T5YdSh@D_DEmq8 zs62i*tkd(#xt4pp#sklv2R4)J3%#n%NquCx|3+Aita9a{)-Ox;telTexvBTR=YVl8 zW9cK82f#=QL1iG97EcwXZpxQ&UCvca{8wPe>Zt-g60728ieFWO*(>J|A>zgvFVEtI z916xc=$LOgzJEg`Wg||w)RM0!#W4`bXA!$ZS~Q-hv7z>uB*R{WeQ$%ZqxAvJNHh~3 zJl=_4xyC?{%mLTt5Ry~^ct-^oRU5ej>sip|4`=-^NhAnK&XgJs4E{Sq&D&?tRof~#$KNyj zJ2hC6WvI}zbx^U;_Wxbe{@aStv-1Ba_&=@>x`&XLV4aQDuYQj$#m8H||Ca?%$Z0{S zr|aJrJEas){k6&RIQV~p{rnG3BX`QcP7Z3V7_346lTm9Cs71(!q&523fh6QN5;_#o z(?SqY7J3x0LTi@)ll8(x>*Y$wsU!Jc*w3WUXQzP{c2@m^LEr$9xZGjm6S@8pk$Z1s zoNLIn%2ikLMu!?n@h%HBni4oeWC$P`iLZbt3_vHGU*CpC`izw*@Of8` zp$&(bCqyB`ODMnfR%*6h6a9d!b{*&6OzKv*#Xak-tOO?_W7;{2#4xL8;YA$0;svVY zC1OCE`fNF7Qc5M|K|n0CiPzU@DFZWz4|cxer38}N+q6E93IcX zD?0leH%x8Hyl#&9LP}1VI8q0uB#^;KTPD2*^*8WSUzj*3FDs4IfN|0u3cY=QFzUF^AD2 zO?^@x<2R)+m=lZ=uyZgHB>nLPOWNdCw>Vy8QKTF%W(6q$GlIn-h5O2o&DUiu3o1+B zNqECr9?8ZVl&jx_>rfVrVYFdyzwJ_<(laJ# z#V~U43OdMN#JnaYr^pseafthjD0-1ckNJpEfu$jbCuB;)U=EUXJYn9 zIcvmWiZB`E-3eJLh7{(?TsER%3SkQN({Yix5Ahrb29@gI>TD8V@3dXa)Hu{L)M(#B~=J8nbIycH@ zlNd&ui+8_}C;E7P;*7DN!xh+-fr(bP`;mi^6yId3BVTKy1+!k9r%;%pFO8%_)I!xf z#UEwP4nAXnw)L6bRx885m;S~?ZB{L!6OJssY=~3b&%-hgxqIZ=z$+tWY_gF#zT_9` zQF`t(GL!HE~}YM#Kr0JFU1lMuez%ibfm) z;Znv??3aSae?gjhK&NClxoo06Zn`&Q&z_wbog#DO`uZigGes243OTQ)4DIr%>tT=H zBi*3vKDcnVMST-a6TV=rk%8ZOgojj|bx- zXcu?5m0|UP_H#F~pQR+vUO{UL69}t9UUK#>=Fk#%c#NAPHuguk4^Coyp$Dx|*()!? zq4zlQo+P5?Tli_se(HH<$&t(@e$n^)d#XdkZiNrwZ(Ob=%A-suS-IX9w!PrL zy@xp}cDw{L{<`=^>)K^CGAT+{v7zqUU9wU0Xur5@WHMvP{madYwJq6o>izI*U4b$+ zUzKk~#_3OBoS@h1{zOo!&e;6A$qD~ciDrbbm}jNGPMUhResvm<;8#RmozWj@Aj^FcX*7i~ zg>AWRzg6?)3CU{6u2j!~4OBfe>biN`8m4%&3}!w zoWehyK|{g+(YXFMBj)HRaTIbExwbRVxzkd!1CeAx5y&@mPR_ASGd^N*XL>ORV#qwE z$DCdpn1H~QG^ea{v8)9^Zlj9_ zl5+;)Abmo&t{`v25t;C}Q1%d%WhMjP%i@hA#4 zeb9f!$V!ME7jbkBO0kv@7U&@Hm}patX+phr(FY!b)5~<17Z{d9TzTlAd01rE6~_iW zQgBYs4~t0SMdAgEvU?vxEXL>bpzSFe^#~X`f${u!3GbihY?nXJFXR6_7Zkw?QU=nM z!NU|M;e`xvEN5;8k#iSdD1;tM>v)3W;%sGR;El%3r^#m0P?a5KI)a>k6rjwYhYCn# zY-KP4bLhM(EQQ}b0O!XGOi7N*SNar_4dposbELol<1p3}cuc%MnsGYgDnAUvF%H+E zV?~5u9uv-IT#G(H6>YxQnpe@I{X^7K_#X0dLLFNcCfr0?a5DB~%IN8gDKJE%ZmB1d+k273 zPX0J&fbhhhIbZo5MzE6nk@fk5-Yek#Ay`@z#Dbp8RCtG^{iPZaL_Dh(&uCzo_{P&gHJnda`n?>vRU3^UA%-j0O1-gELvQ& zNZZIY4m4)j4`EHFiufr!)z6Ph;$K7zD;!JhyVu(Zc2Tf%dWQFUbzm>CLsR*bl%Cl0 z;|NHlVELzpVnye{9|{{nk1d2+h5C%y|8Pn1klaVP4$T@vJqoQ!My9 z$C+*3k`hkZo}+%fm%2skj>4B$RzY>r00J#5%=?7WF2 zB;fYvpLjFT;wfW(%F8tv0HA?}URqn!h0*7IIB9SSTTsWJF5xz4VhZZxL`0U6SF%_k z5zHErqUy(8w$|Kp=I(JXww_JNaDibEReV$cn=KLmrurhb_k-Bti6tD_+CK&USOR~DanB#;trzt0Z{n?*C>`j%4f99t2iX`<;+0xz zDlgV@@sZ-u5F!P{J6L{)T1hyXj2;Gr1n}TP89j(6oH#Ck9fA{br=LYdpQQyXvAyz7 znPC1;>Xv9?_`z4T?T|Z&n;_e(PMGWF2*doIuPYAx?G!GO(RrK+a(RxSfRo14jynr+5`1R(I|j5CMFa zJ_?^CpjMSm1z7G(e-$E!*w^C`kd9I}AuYOun86CyQw31&K(y3`U0#~yyf?`N!z%{4 zIud1;Er94Wt-lK~C;z7v1tIOQDyshy7L3g>;(7M--F%1%AS%e2xaGV&GYIfW?!3gh z=pW_vVzAjc>K>;RH7>B?2WcmdoSi@X@Nh+q7Jt3#yw!f|Vc#!hIX1lCe)QHywR@L@ zftvhq+IHO$+j$cIV9v;M+xZm7rNI6K9Dis8ajn;agJym6qC;Jna?GI^Ow#>@=nApq z4CF$3-IQ2fcHQNOD(3w)h;Gtvea~BEdxq2>wr>M3pv@&5Sp(Y%;&N+QH1z#^b%IE{oG+*d z)V9@Lygm8|n#YI-1*i9`faprJS>YkuUp4;K;J<1*R{cLH^k;G%)G`hd{GkZRaW;(j z`18>tQjn;`FH+m8daU=~rFaTK-Kh8-;18`lp?_pW0CJ{n8VGgpOH)XSZaOn?B;Lul zkr>aq3&*SwNmg2)$3stz(4Wte8AvqTc8E6c1SW$bgrlOnkc=lHFzDgC{TaHoRlL;D z^CRR4iL<={-R?z0da%-p3xot{(?beMq@kg#PhFrVCW#Mv4DX}>Fs7#S4oX+(fb#P& zk>M}fl5OWd5d`g=X)lRqv;pQvcKo5cmm(Om*D{3a(D(%KXSO8dQHdK&ceV)s-R#ld zH8A9Fvqu>@*}pt*$w8||H%!jzQd6)~KxL`*^|VZn@ovx`_&22Y$CE!+6vUkVC+Yoh zjsNDOL_NO+C9VErt}_VnbwZ@~6_IGk6L``Sb2B8|o$mUBgyPhS z{~MR1KxH`XVvg$1Tb9L!$14Blz1faI!QOxC3E5Nff9*d%4*t8o_;;-L(474r#P`HM ziSPenz2AW-@Bc(778kEU;XkMK$;UJMwTOsgz@nEI)PsxG){CYFiv|Y&KrTW74aI3i z#s7d`Wc??8u@lYO0-+dNMr)FD{zNgBX_!Jl#$q8w2+R1NfsFBGe_glo75{-#M0){j(EpuK#e%&LVE~}{d zQ+zsfsl2MoGqq`Kv(E|4AJbQ zD(vBzumQ31y4`5XFIP-60gJdIw$TWz`7SZ#}=FMh-H1 zLlNvEaCLBXKX-Kah<@rQ4fy{eBsvVNmudjsmFP2L#4Ty_7YqQXR&ulY>S6$>CGu6O z(e1a|zQ|Z&1c2+cGyQ8nEkvCv+*lgS9EI^z6Mwax+J}|oA@Csx`@v`|R?t`Tr2v#x zSA2*h-G_NBa^afv)NuzC!Cr}{Fk_V9=j25fV&w2q(8I&QuL@pdJ7oAAzStQCl(2m$ z?j;$%=rAMuaHeGYPIFE)U?oicqMH;)+jgn$Q==Nq5K1JtlPlWhYj(XyGL?sIlM}5# z(in5uMPpV?neO#%sBzILt4}g!8zLySC1AUx{W-U5Zx>Y3!CvEY!S42inD~AGt1@z* z2M8gGAwPTdF1jyC@b!lu!%Az0Uaw?beS{*wUwb9aKFiTszh_ClRPKeUhwX;dJYXq2 z-07L_rW;cWyi!(M1t#nd1ls%)O+dld)o7+r0E=}@oYfRYPucnD5=bz< zL`@Z6Vw>W4)B{hPNzooyk(7Bwi|379_UpNUW{>Tmhe6DEHlLz9-H5BO)txts>g8Z; zt~@W@I0j&Fk`FQUGqHFk{9=ptwp!-Gw%T3Y!fKLFcM3cQV;9w<*y32@A6%-Xf@?u{ z;YOz8@6>A!Hh(4+WPR0VY~=8#^>s>h!`A`V zui-y4)UVd7)xopFX@0Mko2<0HoFbW6Bk|vwjbTQjqGa7nDJtlI&JYdVL7tWgH_uSx z=qb?Re{aP8piXVOT%^)}b^As(M9oLKaOZ~;6(L%%|8fNjRonQiyaM<*;|t~B#fTTS_qf>)h=BlqOD z6k<HLC9_}^F2SV0+V0g0YiMOjw&qca5$o*sIb88SbS%e+7a zRC6N_(C^E+8emrsi-ll%!GKnC!-Z?1+<^HOMak*oiDWevnf5S`X%uf9{&`$034abuE2fexJpX!I7(|EM)aJ{m`Rp<>+P!e;r09wCkjfOrsez1m( zP5fT(s;Aie@)LVoS_nk+u8Q#w#8PJ@jfkK=t$0Dd-6Ka3oXycpq|XzT4}`J{UaQ7^ zCt;N=@mv19NQ4Z#7QeqHv)~GInl-S^8WZ2E(!J9wh(RAEp8GaAH%C1`eeKjyPeqFF zJ`G#ETUCYnskQgcfld8y$9peqOB9%h3lQ5n%x|hF^l4srTvt#%7Uo}Z*(kg=@TK=K z$GeqiJ>O4Fib)T88Dc5;q+_`P8C+4OSCrJ#+{rt(eV#Gy51MXg`O;5Z4PVATH+AYe zSQ6=m!R3DovP9`bIhbsjyL7DCXe=LmO4olS;G4<@ z<|

    DHtwzpJ6;>>5hC-S?GPKqu;e(C?(OAo~V<7Hy!Bx3YBT=g~f$Ij$Dam74e1( zu}sRzaCGkNitz7Vh}My>D_od~*&^zPkv0~0Xh-UO>LT6gx9#VZTbuSj!XB)&8jcas zpX_CI`oCW~g{{BCvwLyx1UEYU1u0f@#UM!5{_)n09@dww64miWZ5GV?B8K~0+bJTB z3_2z}Gjn_58%)aAdKOp*CC0vfEE!|GzwhkL5LRv7KgAH(TL~LKvL9U`%6Y2k_Dbi( zKGP9B7$2FEmySJT*#6z|{zO1Nh}888c_{*o3aW~`R~3vWh*H(jFV7FF=7=@w>zL?q zUxu7E=h)-uY|WBAMsJgPACOIP;hn8A-(51ds9E=UG=4=&Z28v4()a3&lfjo)*Vb}s z>BAH0UPoH8c&oJH=ZQ@!+kRhlF|Dxe`FU&9?bV}c;LopCdV?vWS;pqz#+Hqp;bgA| zam{c)*F{?WsJ*O(nOdFu){n?B?oWYHFzvMhM@8|U{ybK{X0o3;Ux)#~Fyv8SouaO> z>C+@77ny-p{*~zFi(~fQN}e*I`gW5M4VbAdO?ve&zFdeSkt>d4L~3i%QORy|pQK+i z9rtExFtEt9Ael(+@URC?#H{wF`qxLCX<>tz0%R|_zy0JUaI9WcArmnFrrz#L?oHiL zuf0PucY;f9KxL|8bBl3bqGx+1^u%5ArpM)LY*$epi!3Hzie8Ayl1;V~oA&Ngt08*#GRWC&s@bM!EXR01IQT0!RGG8i4)Xq)W!zC6=aV%+2jirBvE z3bA|ANeX@HzTF%(AE%{TND{D#R&SJU7?7Im-mg?!x$ZmYAU-ds+2x?&&tjW`_2jy5 z)y{_;;fg(&(d7jRN)Hdu{N6`$e(i}bNT!n%H5^YN5#J{t3;{y>tqDFfod<^xZ&$6J zN9PC_*R||>1?_*C^_TP)?X$fV?M1z8pDFWgtvb(29G`xevD|&6$@NVcvvYfJAWdNM zDEIp%lsYQ6ggxrVASOMH#8(X@>|RYLUQRvi|Glq$(o@w#3ga+SFjscEt~dNEvc^IIuCMu^6lw+M z)c0uuA3%P&eTZu!`wcGySfTL{!ws^EDOdoa2~^uMqPtH?Mc7h;McR1cA<3>L|EBoBWYJPh z+)5SSPO&%w|26e<#}FoIpKG7;g7U>UjOtS#9fz#swg+jU)Zm-vKHTDl>ieJd9}@@R z;!XT{hNaVjvQv*})KY)X(UE1gc_T(68~rhgD}EN&8)H;;39>Alwv;CGg*P_j<{sU7HEeU|m=q!OYM1 zJJiAnJfCm1Inqth$rhG^^&ZL{!uUh}AV#2C=&yPA<*RHsfiM1!oX_0vOXngE8G-nm z*jY}Nj~x%)7@-KZYOL*gv*N911*}D2y?ZT5QGIpUsPsm*p)jzG?Hi|(V@^+XIq~)0 zmds&8F>n$64)#iII*CPhsX@raJFbVX0}S?93Op$Y{5_|Gr~^plIuz19X4%i;!f#_1BtQR5#s>2Mqg!XXT-)Lw9V|?W_3&&d&1T&_Dt(L|*0xaj#PmW zbM{wyiN*17g1QIR8DQ^gDZQ_O#rm@rtDl2;@D;u_k+pT@6SDRdeOf7Zi%+zH^Vw~6 z-ikx~7v`3?dxg`)jCOb;65D77ZW{UyRTq#u{%14D=5?1gAS2ut12IMo$YGB!Y?Nz`*d$Rf4hZqu=Fext~^m|PJg7e~RJUf~OU zLhP;OZb?yiT0a_*6*JU(!zpBaQadsETfBFBxG(dgc7O{)O?`KfWvAJLwvJ=+?%Byv z^;PD+_LseXMgV=%X#3OFq7-qJG>Ye{>;sm1H7UhGU8gjH+c)Vnfq}<5%B~;x+7kR{ zs*A|z0)tx)e?*f;+WNB0(YT$?dQK$v&D3aw3oy)C9e$ zp@t?|0ePGEi%rzzYPpxY$rM3pJy8VS;CcO_P$8SU0h>Z91?KcO%)w&lS%7d{YV_0hMOxji8eL_#u2$R^@>F7PL6s){7QR~`%TIQPLc*~rgh6;uR z+`m9VbS~C@9X@K_z|%B;5|dK*Y3}@{vK5J?DVUX8lIW>8i#U8~)_-2WodmO4x@N=0^ zCY(^38mkg$Q{Di_%cn0amUPIUPRh)Yz@LzQx2wXH;lImzS~Aw2f3P4!1O$DGOAVo0W1vgURUuEvVbi$_$FXo92}4_ZJ57OfCOoBr z5ubegU4q0o3jsDmSoi-&(odM6>oX#WBiEa%*9Is0{=4NS=PRzxe_L*X$o&3kHim-# zZn^1it^ogOHr}ZzJ2nzSyI#x6*088WEc)0gEcAyl_}E0eHh{$rU|BmycRB~wj_tu% zp<_#MCuAI+E)$X}6A~(B70RiZ&Jj{fFB?sV)_saclZ7FMnMMd1c%=_` zK_+1#YiQNT**e`izSBCs#X6$JTFBX2$l6rO%K$PAd({{~0U<99sUSt?8bzrHDeE#J z=#YvRf;PSy6thByR5Ds42d$Wc(kMo0Y>$ zO467(#dvMJcxvpMLDM@iA5TiJ)1;KHLS=@Pgw$zbA-~jVz3z@$@kPBwVjgaEhgiwk zw=t?j=pAi(VuPm@z~65DdNRSO88l9QIeG2k3nZE|x=jULHi;_ek(lH;*UJKPIR|Gx zV!<)<&CXuHFQE9k2Xa6}4E<-fv%qS9F>I2@w6ht%Og~#IDv$*49)3qV88_Un0z3Qq z$&5*?w<-0#nUcS74V+Qn7izVhP9AoE}rJiS)& z9jF+03!(tA@l6QuC2HHlTmqa=BuvA*kK*XH3R;0ZTv-6cuLZ2G+-T8^L6G}Xs5(q& zvBto!lKX43Ym|T|vxnk4>gi|dAxViSsAlv-)H)x*$4YG;g(JVhUYXN4!>`=)gj7W$LjJ$Abt(k+<#21qYZ(T8+f z)#t;T#D?-R;Nm$JPVqA0(&PnS>zGnt_FncyUY*w$0eoY6PB6jO{C6pF`G5Ljzr7uS8+?66s4ZY2cy!n08~jH~bqzXsS3*KCpoQh|ADB3uU6Oq`;B?NV5V4 zFZFz(IQ%!#GJRJ3Hxm7W{Kp$^z*nE34GjD#vq1C3aFQ(0<(2M`1P#lxj*Pg>mtl$K zP`8TjApF}z2pO|sU)C5TDc5%pjcS-)as0|k*;o2?O6bN3i^m{f&kQjd_^&cCXxJ4) zj5cA*BDg_7vknyVp?Puc{`@K8_!q(wF_&RA zSp@*5C1+2=ge~|=pN=JD6pV5#m?FlK@*AEQ)B)YxL2?Ru2Z_AE!AxJ+ZHhXhbUwmG zvoJ-oOi;O9Qc0W0%wO<|o>2g5pN|orpfS$X=BXj$tf9$Uju+Y#B~K9v6d1#d^a3;3 zh zhQ%{gz*$GGqg4U+n9bif+ZQIFH2JI83YV}UVMr*+^BROBv%ljbo&{4XJe5A`KxNbP z5~mtmU?DG{NQuIcHj0&r_@TlB7Sd(kj34)aP8 zWtcXyL<-)~MHj;RS6p=a4w4uP1diyDB{y5OU~i8!jebd-!QZ=;S8_kf5q=OA?fOeX zAJVXd*A`Afxlig!03BFj>vco?@8+(^Z_=~$l3EAEIBmSA zaKuMhzzj8KE#XAGAjcjU%X* zqsA-b?;)-8`1+9xO zgo<;WgKk9WQREE_p~L=n(<^K|q)Qx%X}0{Z;ZC6k91>oLASXQkF&B@*9qlO+6C@SZD|2Htsz=%B<`hLp8DOdC3jS3fxa&H(>cf+L+Gw8+&NnrV2m$hXjkJ&f}i;XuY09 zEPu1KUkxI8>=JHrJZ}CM1DvnZ-~B(!%E}jpL})liXjn&}Q9;%KLg{&-QOC0~gCOhTWb2${Ytsm8QvkvB ztQAeI(I{&a${;=2AUWBi+Gt9bFOf;eEZucken*?CoJn6gRiN?#C6lzK6Y( zZoimx_+aiP3Aj*U;Y@U6(gCxo+gDaTPLi>J6CQx?fh5eo0G3Q;v3(rnc`k{BqFW8L z7XcZ&Nv_d4$&dv}lhoM?BvSmI`;CS~mIQw(#dc zel3_~_>Go}q7}E8q4A?ZVmVDQnyv%rTrlb)iw6VP{NKR#EoSt0LqKkK7`5Ge61@M24-v81ND6);L4-EzBy zI&Z6m$y*5y#Hcr4oJPtoWY*e&Ujcpl8L{U)9Q@j3IZ|M_8|kE^UP$+6BR8z9!(fd2 z?~<;|@f?bpJD##Iu)2*O7UrY=zzL8_I#r|M`0U#@3kmx47WcEB7mMlwDQa0xpi{`+ zpwmQ=_<-Eo=Fv<|NlwBwB$^U`m(<#~BX$3>I~)_pFIkejC;!5pEd^ z@Sxc}leo$WMLJ|lscog%g zNIyvAWznmT(U$PHEquI?G-S$UM9MqD#f$_49LXpn&IE23v^F-@dt|I{m<;Hldy+_M z{XXXL51ZL@IDh`3D*o%Y)aOhm*Du%-^+CEPrnvC7yY3FP0H*}VM?9X^Q=>GOG8{`> zQy|9+Q&-;|JYSosEEiFJMqc@FpKmB9Dld?^(fmBXTmYWBcy8*={+goa$hezN&aMR| zWJ<(!my6W4Ih?w)tUa?BQ5By_>{=Mm_^8X1Ek;Bc)8nr3KpCGcMAn}a(~5r7 z>GGlWfQuz8?5h|thAxQtQ)mY_(IDg@kOn42F|Q^*nSM?jqBdK-Bv*hZXKe*ezP#Qa z`xATOl6fgHl#pf~4K+-UItzU!W;VMP&J}YaW(N>UN3=YCsPeVEvCgR;#_U_wp)$ba zC*hle>CdaX?UNBFmoBK>w~@OUW86jWL8hAg(!0qt*^dA8gQs8IK!Fa)R7+|b#n!wM zZ7vmOOh8XAxi=YY($KBgi$2p`=PnH+QZ`VKf5lJL)w2p_v~bCjXG-U?2n3p_Q(QwU zjn^LplRTlo@BlgXZ{c3gw_1|!7ruDAdVv)$XGLfJZm4OzZ@VNI) z`TL!P7o^Ne?Z~6uM&IOzmpkk{yXf(g`as#RY8(i@BM{`Dv6P?HP4x9>4$I`QQWd!z z`s?vpdAGbjDa=I;p6*ew%(e9PQgoR5;3-xa6-u9pDCJsj5_dXWC@{Gq%0=)OQ^2qN zC@%apv@(83d3XuOhWx(MbJBfDO$P8)#a#5Kg1k~In2EUfDzB4GRtL0WDeCWFj zJ_kV3*@Qop-nw@4vh8_86O-PE-2gYR~_#U`AxkD|=?PVDNB9{qwmws5eTJwj!l;sI?pRip17 zmY6(d10(>+{;h)MR5oKIQKQ`-}v|0>iM)djfV=JX3^m zWC{mJhy0<5?4vE0`lj$F;N7&i7}AF-qLQ2q%WAf7%{?vxij%BUZYp1TGN0L!xaY%O z!l1fSmK}R$Y*Gw?C}8x!J-$wP*ZyO-0N@8#XM|)+Ekj#I^iPtWKG5#!_#trAXS1sF zwsy=oEsz3F4W5urdXXTThCM=@qFe}9w`Al3h%V(*r4v6mIUXDugj|Gbm>t2d9c9}2 zRJU=6zHM_Pp=~VF>8R3i6ML_tB~T7nVg6nP%qt(Oy>9);d~!nnnD)+RIMezq8U+$??|LZ?kUPPlMl8nd~G@ZPT*3($D+nQJ}`Q;VwyDD?r{XzB@Rrx!~@L8BiV;d!A-Ww&6(`NiC0%!nKgZvP; zG}Q);S}A-Mj`_?SuqK?~*gbz_t)>I>htGb*r=32MbP2gEA8QVBfR+a!dY4$vwW?gljElpLg2(T`6^oFl@&X#K1X#@NlS~@*Q1y7@I|+!!{G<8xoH7 zr^K;>+4s2eUk+xk9&U%RDWFG38*ax7aNlP@I3!q+w7kpndnPtRR`|{-e*J1ftGpu^ zlO0-~%~-p>ZWM*$Mqtq3bBjE_VUbdi{zu|>BUaG8;Y!cAef1*h4swK_2B$-9^6A$j zjM>s#QFmP@1cniJjfigfc(MF;ufTW|&`=97y!KJMh93>CZY?x%E&Tk^)hh4x!+Dl} zD|s}ahwb*!mUyW15pSt%Dwv(9BPP8i5`V8t&~m9BK4%W!+bpblLA*VYSvPZY`HUd` z3yYFkyW3)GBVVZD(T2@KFxzLLwi4I8XX@bU1S4=&^qotM;O1bU0!PhltufVAzw|z^ zl`w+7LAM;jK$S#1Ge0|_-)nY+x+0RCOmdmMUaVex1Grg}#3C_dgr75RnRpLaH%zjP z9W4g*!R)EfbCuk|q!>Cv@+F7Gca`G6&6I>5fuRPI+3M8IjY5xv^nu$sl85df5Z0eV z+CB()Ni2_iAEUbI@Ml2&U?%Bj6pkNQW(!eIW_-A-1*(c*R`3)m2RAp8VFZSa@aEQ9 z#dC%<3wf4mh(MM-#h+Y{8bVWyP2K3`xks%}x}I=Um*`4?Q^hAd_%ulB0)>EOeUcr< z?}x#v{b{f&hcO4jK-8lQrV9dT0aBMR{-C_V%Vlu+fji$v9xfm{84)+d<25~*)=U(E z6;zPAP~zzD318gDj4Hp3S8kHv-qIC3CH+i^V*&~hJ7S>^e*fBj5qrc08!{!KKorp6 zud$n8K?vA*-+ST4B%6xbZXYrq7_3Oc-Th2R4T9{H2qLF`rf+VrvwAIf%dt86oEVgfE8Hv?4;0o0Wbm_ zT;&0A1J^OA5M)RxS_&3`0pX+cdrY%>`ep_g0jvEq!HV2%Tnu`l$axRHzJ2W5?Blw| z16VD^p-aB3q}+GCNWi9M`91CywhG)40D|L|>LopeA2&d(T-04hi&@`3-QysZbgN*1 z7+}Mp#Q;bFI-J2ZZwMwN1}%=$VlEfxC$0G9>q+nikU^7@L-s?GLI>QDnu7E|_&|A7 zu=Y;hdMg^F3{*`HAehE;*RS9hXImS{?O$+KF(GJx8qV`>Vnhk#N9d>71q~!1ZwRd% zRSLCzb3^!%rVZM%DF?K#6F{F5UjuI)0SFcuz-i@n$tnj}Ij&+~3C7E!wtw}&8Pq0& z>;MqenAgZ3xvbqPD0u0W)LCX4~TJFT(`fBpGl28FkORoWMU2@Rx<|R<0OC)y4aNfcklp!D*08aF9pu$1;0*}T zA;JRgF@A7SV08?52ZG=Neh$c!sDKGzHPgQ4`S*SX38+Hr!vefOfSMb@NCyazwjOUM z70Wr@4Iy|4#C_k4#&J_KIE-+5H<9z`7mq>E@*Da>tSe5E01x z2uQI24g7i0fD{+Non8aSsHUicvKn zj{)*~4&s1#@c}UoqInSlI~c$^zdLqc5V4$dH46SW&?5?vi4-*k2}T0UL2|=r8aqNy zkXnGA-<>ERcJ}K_NFG`>5#WeT`vZhSjT{TDMf|_m9#H{Na*VjfZ3^b<%7%BsAa$mXNLnArEXtGAI6rl1VOF<1xx-Q>HwK z1Kx&#w^I-Z1a#Xj2m}H$1PHhRt>RA?0Mh~B zX&wA&9mJ@)i~wUD9-bcV86NKG8SZHr?#Uj8u?@q>h6~7sZNbAP2m{u1PY*JgpwxP6Uere$u?oj*5S#P!Os=}Qc_?kP-qG? zAO-4@5}}e3A(9f{k`iE&62O)cK$hZZo8n@UVylv(!j_^!hS=-clbvjGt)*%8o!h=0K|BETiW(>B6WC&E)E!o?-Rg)G8WC&C0Ap(7Ka z!xN!G7a_wIAwm`*f*$})34lTa5W$5lz*Z)}mMp*)?1^Y1AluV3!V?i(Y&~6cJQ3zT z7ZFbr8BY_ir;doH4&W&Q_T&M3(g7}rU}EB8!scQ^=3)YN(NS@c5pj`07zN2(c*tx$ z18i+&Y*heT9m^Oy?-Rk=@LECT) zH7%l-sQY~omHMwIo5ejs_+`GdGX(d41`OcGB@ z&?)R+KD#;*q8a1we|{tKt{invN01W)GR+Vz*hL>PA=<8#z5Z8YF7KG&U&Xv*Ld2m; zV}%P*=8$#7@b8d*#PRQtdi0;n#6tRiXYnKtj+l!h$lRtxne_JviE!2R{|SbvZvO9p zCIR^;v*4Si87^uiM2=c|XGoOV(E$ zpfJgZZbk9$M07IachdsPD{-pR5IZ31O+cLlN!IN>VD2WLDnUq-Lw!$!18_bnV?-Fs zp1ErJ^|(!QYMu7xpT=wGJ|K!ZD|(DJ0zNWHM=`F%4xTIx(_VD@krfp^(vSmzm^4Z{ z5$-EBMjhD8OyiK>e&&Kfry*WIRFKEkXux4CCrK&AQ#^Tg*p<%3m=P*J;b|@$kh9_G zI#k-Yxp zsQ0kV0#sm$L3$ml#2(((b9=D;oWf0->B>K$iy*%LYg-u7^LV&68s2uz6cjNI44OS` zGXZN8ZDNz2Kes#AT6Od|%U*I|Te^)xR(~DFUox!cpXIyV0lAHT=jMB<@lmKy@^nG> ze6&yJ&mc;JGsm9-N@1OjyA( zL9kZM``l#`vnxqFx7fgjXYW;%Ei5eb>r7ec?(cmJjcXa$f0o6Kj!lGnZ|bjKFoG|{ zOG7LJMXPUiEpxPY`7BpU5wt`?$eU~FL#>36J# z*B%I>B@$!)q%Gy$bdLv%D>24ep^5vz`G)QX?sBCv(7su|);_xotBobV9Rb8@z^Q z!QI&a@E?rl*reyxuZqP_0MuE9!5w3dgY;H6%|!g<@fI)(hd3? z_K!6cQ*2E2x7zN|sA^8u50k7(tp}bspnOcJ&M4*)PGv=}$j$&BIh?E^PYy$Gv!fUX z$m2N*WHeMI!W8fF;XHKay5(wpezQ7o(8>LNKmjGkIapVN2la}uXQ%JH`mbs?E8mEt zL^R&^*5YaHX1yMcMU0R+>G;+P1HY&L)n(^76xp|;5`u^FHuxy4X zp0g5~&H4Ns86q7~hW??)J68@FjeFUR-n<37wgxAx?_0X05=R#g+Nd^6i4yGQk>wy6zd@X~}-zIjf@6 z%;Wa_~N9IT-wd$m@lBaAYu3v-oB1Af7%ylo}9H(O7Hnu`_-6 z)kwSf_i^3D9H7f*;GrGq=1!rj)2w^w8U+_+I}8=bgtPiZ-<7mF+17Ow{HU)dOE*k2 zG|*nwmQbhSmjqZ{S4<6kkG?6uA~C14*%UW316*=Lf)7W^f;QexukiH{S7ZxhqGOl) zC^F50>~2S@-7wE+966HW#;a%S+EP_)=?zaw%1=|9FPZXQ3%&7g`007aIVKLurB!qN^}i!Pn$vXM;O>w8uxhg4o)ByY zk3SIxqOgew@Tl3BPa{cgclm;Xk?=*z?LCd#=}R6}GCdSelj?OOQOd!FWU01*Rh|WF z-T1L{H(zJSiuC5L)KExs@ulIH&rzY<M2$*hmB!!=DtVCY5%^{S|KZ7aya?D-b#vUf=D;mD8n$c z*gs_A?(o!+`8~WGS*!fb_V^k6$+ug|k@xGWl?~Vv^@ARAB%u^PMM8+Jit~?*edWD< zcI>`g2729|%e5YUl%8wHJq39MrVwgibasBc^1Ayq&f#K1fw!;fz|kwZ6o6S}$a}4z znW(5$u`Hb92dX2@B$>gtxAh7N3&_Pt1HT5zE8jsR&_vCE7RKPLjQ5Ye!65vn_5ge1 z7taKVKFO!Oyx&clm({D!T+5t0Auci#5I<ppCHk~m88Pjr z{A^D7-c7Gam3VD(Y+*nvzVXSoq$1yxl_-NryjUqI-{Tv5e!TWa*5*_l(m)c{7A!WM zSv=JGFt4yzXm@S%_z-h^cTVoV@)cpCpHLB0M|c97!4LP8CTqQ7>`OzTV)CP>&6tf` z@>kBeR4zgvkr50OF1i(}7}EynQZ$&Mb|^Qwj8P#q4BsF4N8{SOAuJ1$$RCSZHEqx3 zk(m}h+!$@eo&-7l!A*YM)rxweT2I!h6I!9=D)-YR;8#Je6EZ+WK+Wg$t<5Z&YZ6}% zfd6tc54yJrDtb2VU$O3#Yx|iUZA1|;K_YyC)D0>vU@7pRn^+0it#)R^>$C&owcn08 znAmt4*f}}Lo*9%`F2hEpev9?5w&YpcYu3Q-4OreT_HTzV7uhGxf0sN*!R==)q{ZH) zl3R?Yz=9WE9hiH*$^&faUt$PnRN0u;r7=so;;I}hpnhjiBi{B?_dY(XM_ct+!MidW zevWhwhMa`1;5DVy%}-SB$!I|*f z{GFV-1>L#MD^q|cZ%EWt`!vcYx(*|AC(=KfT(cGkdjUKHA%Bg1T!5SMl)&AciytVj zqj|XOJ@MQbkAi(pQ=*?=E$$T82QFt5dcDSz3A$urf)}ss7f!3+_1g8swTmNJ{YkT- zHZsa`8ue-SB(Bcm*o&=fk9?d(L*30Go3y3f`@hVHV)(%)09hn|#91Y2=}A7iV%%?<*}Gr!vnf73#aT5Jp>&GC^#b zgZOS6%zQMItKBvCZa+9E&4=neX7pvIp@vM`oRu=yZ=yQB&D3EUzy{9Td#dL`?LSkT z-V~E4J1P@%U)pQ4);U}8j@W`NPn7+`~qK!;(7v~E-<8e17M$+ z7CQnxk62^O7Gjwbo|&A76WWmlAiFmHpnA2h!z-;`~pV`IHR<@S?aX30MR#q`yWjl9`com-`QO=Pd894b+LiU$zlBcV; zbJ~wC@uRBwzE7;QIFm~j+}3Sv6W+wK*O(~J*f^Kqy1JDoA|~(8`d}L?!3*U!sD`BI zoOQ8l77sRak&e`m6GiY#s^+I-6x)z_q{?^mUu7^m{R?xpUU(0*#QSE@jF@v_tMl%g zo|4zVJbk@)K1|IpX-Jd>dei+4A>qWl8|~E!^0>vet-J-=LCYu0wI>FBXYPCn>ZvY` zZ$H0t<8~+&!Tp)SVxk%XiTkfMBoC4o3f+YFyr%W0&KdAxGV48gtpC1d+y4Tv2tkEs`tc~ z^{YX#a|k&Py)$PjHHyBk51lLS;}_2#9#I@WT?ZeEp8*eBls|B|Dl}qrLeV4CnE*5O zT~q568AtnggQtot95UiI334Q2-*Pr1nStpT4V?Dkt)x3jrB zg{^(lTCSA&q_PMfw4RiT{)GLHCA=TLYwl-ujv^K9qsb$D7M$WUB~f5gb|H&S`^(SV zR0~Zt=xlk0lrwIzAO%LFL8XjzgFha;tPWKA?J)OsSD&d##)xR936BjRz0r_k;r%YU zhJk55`FGK9N<+7pEqIKJ?xue6k88-NIEa=P+|1S^=U2M@T1q~_ciJIzzaA)&Qc-!= zwR0-}1t~h(TJJKJUQXOltQu(oRCGS!_*xa;NK2RU*Pv_2?+1YPp|Lj6Zg-xv^buEk zZ6+XEGBjO=!7oGPplo`^5zlcA@?xHE8C#F>$D0ZIdH3`;&}l<{U-bUo^Mi=GEOaZR zmtr6L(yAmXI{Qe5L^od-6#TMJD+se#BDxS=P`>@7J|!S}BHDTzxJ_19_{2Cxa%1Y~ zL@x8gQFZa1=p&kTSjLwEMgDJ!R)|HzE3LSZc8HO+D~r3yZ79!$EMJ>Il#&wPYSW~i zh2XC&^~u{=#cu+(8dBbF>q^y(+Hz>5 z@`RiAETm~>SAm2jYm7cw5eEUbGtj!pK|Wxat|Qy01TRD2z-fD85BEiW+qBnr2E2DN z#QLMfKSDTl!qqnlU#gA#x%-AQq@mn0(3E|+EmZUgdyumkq*%A<5GmL*Ll{U{5(KRve<$s=-3n0!yI;Qoxc4Z}i>TKQhsynFVCQ$J77 z<~Jel%I#1cG9!X$HlPj%;J@NPBD!T&OXINHrz+e8V+c~e68U8)o%;8eRa!na@l=P) zlasFg&tATS`g*@=IxRRlN=L)HYtm1^DdExMRPJ=FF5{gfP22|}<`IZvhM(H-fFYay z6vhm9&W_OUp{P>?u!vwGYzG;hSt9M>Yp>>cy%myp1T+TX-LAs)ak_9huSw=+O0cu! zNz;H)%_yyJkf859F#Y(H+B5sTXmuc9scW=;+QcmX3)Qe%5$6@5tWn3w_poo$?K1A{ z-#@Pj8_sl^=887d*61Jh__(0(h6`51xwan@ZMbRAcCK!=V_f2YY8 zKsiUpo`7L7s!8h^{YrbR%)=+Q4_8^j-EHc<$lEl;0H$rvJ;y?W!%*mzKz?U8Pt$^k zhf&s_t3MW6T7Fb^>Gj!8!#Z#8Bn#&9Y__+JWA2!2zY;N${|M8kp4=$clEEAX&y;nD zQ=#P^_u6_aQcRh~M`Ffw(aJ#9ynQcEtrQ?Ppo35LDk?W7k=~H{f z+6!`Atn)cMFOodHtRHI*+U(YcNt8*#J44;1N_!h+5`#kE$(sY|WhV`2-F>up(hrLX zY0jL3hVtI7_C2dL)w*liBQGYs&4p2QoV#-^2;_q7iTo4?e~oCp;;aKjUFs9(uZu3Y zyfqXe(@6R9y1V1Aja9XbtL(~G zV$=x`Hjj~WI1G1cCQiD$2bZG=I^&`Hk9~MHzdTQBl`la%lk!(xJyt(ocit(Lu<~7A z^jGrr5CmhqNYr3LnS;3Bp8FD#r@2A|hcxLdjN+iP-mu$e?sQdmk_P@^h^k$ukcdIe zSb%d-JM7D|$!`&89qGGZox+&+d!Gn%FF(`tx+Ti;ddgRrq2|$6!dOUt(W_*z5g&5j z;Yx6mip%ZAq~N$2Z)E1o_7#v~Wjj6&P*G9I24Ek1*Z&H`iK14+SfH{KH2pZJO|P)K zKpuc<%!tIHKPeTYUOn;mMTA~(wv~GOPizt2VS&d>ff{P`6IDj&E_9uSoFpBg?uwSDlB=hFjMy z+x+>y?yGTpD4D(EF>Tp0R@3*6gtJ)<8DQ<2j4%@1>?)s@(Ps&iw(!e-hQT&w#bv*= z^lqRc2WkL6v!kEOeQuU}`+=YV1%Y+AHg2QUV2H|dC{EuFhnqW)NggV5dfvP(bfL2vl0W$Ncx8T!qfkfsoQ zkCP!~innVevsBN{Ng*e-D}f0b)%B&X)l0QI10e~dL3Rr1}<$1QAH6-g# zZ<7G%PZ?^|CEuRDApDnET(_FAfp#;_pJ}%#LyA&oJu-=5q1;yGPHMf2>W}a7;8$@l zw66P%l{wnkwu}ze04&IaPdNSUt;+pKjPX3i1vh{{Ve!|trY4p~_JrdBljsMDEq1xs ziwvi+3U$md6y}b?=%}j<*LpzT^XFn4yUYg{8}xfl>cmpstZZ5kjAo8!6#!aJTAjiaNg=?;mujjF#CoLf-k3``GOQtGN@Jg+et)gTzlvtM4PtWU!zLkiOz@#I z;Y%*&G_#>LlS~R*mLr=!3Eo8!Hv$u$>;A?@OPAFe)l0e1d`bb&KW|SLGN#Rl(5#{|jmtv$X^i_Om?&lbaJyq#+M3XIU79CrO)KN_t3hLUx{JSINB zEs6-2)(^0T(x5c`#Iv<~7DvPfJ)m(VIeFg*dohZ%B8{ZCMghCi- zp5xnJ{3)+|N20qL=UipI!I=!$FVZAUzQy0bwxBKWmNiubSfkrw_te5BhT1n1@B|Qg zvROwmrK9>zFG0R^{89$C&cxW>7nswUHnlx26ieelEd3<`XjGA?i<4+nU(ggLa8a-} zF9wP=g`arTsH5);1mx8`M48ci@7P;UF!T zpEnfdm5-ncw~WwPW7CxKz!6v9e`=atG1_Gbq3zfe>iXkVi6qM-{Sj4e^_y?ca?{qN zo!`T?HA-F!G3v{RoG(S;jQqadK;Bg1F%jw?EqX6A)U8f`v7CKUn33qcf-BBYvrN-B zGUO=H%!zq5TfVtiuz*) zrRY2N>y&ABwh@Nk$G%Ez6GzcJ)u$OLKVM1h`pvZ!XmxNXisZis0!_}ZY0LC}`MdC< zcI6mQ4(9qy8W4Y5KeMB`XvQ#dp)Rre5R2~s87o|@FB+_6hWUU`Riix^Ri=--+>I5z zO38Br09R9|DYX3H$f1Mhs_!HP6ywcT8hi$7uId_9G3b;@{ABt)^quYhk}fqg&_J9N znx0VGYe(bgV2Z*}%`@oG><|M$a{L0%#PYEvH)kd8hn>^znXC)u>Npft*FE_IFBzu$TCE3_db>FGgd?%{;J7`2#|Pw}I5`Nt2o?8KslH@RVuHfU}wIqk#P=8)Y!M{+{ zJ}Q8I--ns$plMuGskcS1>}%Ltn6AMrSYGML$x&)| zWj>hDY}sy@yG;b&CPLivG8g`U>WJ}^-`CuwiOoCV`yZ%o7wQa*VB$o4^Q~Rgdaa%H zd1)-A*h-+&A!%5LeA4sx*)|K*r3GsD31)Mz$r!z`uyL{PgVhN&9G#BgBf@mmix&J70nvzt^) zx4j$tV?CQ6F?YkIKQ`nx3=M7$@kPn_I53~wb9tc(!%q8)Q>PAYp0%`n1OSB^NitTk zzQDnWHMe!KH2BWz>zAc7J$vHKdodQydJ4@qD>3?1<}FlQ-rx5kimVhv*ApBXSKI@t z>#AN>SThAgo=y*A$I)%R0&28MHn|TvAAV{b$fzHjTEIt247;VruGfP;MPD{uO`H*z zRFVbA@KN7s*Efve_y!&CuT$Z0L}p-Y#b^el7vQEYg4*>4hj7{y2%IWXGwugVcOiS_ zL|LX36h~eN-PcqzQ*q3JUURS_RCiQXu{-Cu_iZ`vj(|PO-hQ2=3Q#ilwI+hY%vzN> zEX!K_Mc92IEr@rs?vo;6ssi`5rbukVk2jKoSIV8@hmoCw&4OrVI9@(W zzpi`V`M)v!MD+M&tmITu2#Csl%PRDNn6BosMl7wmXSI0dA(mKu%fZDXxZk8>chPpH zKuNC#SpXJ~&6}0` z<#PgvLVYuby!L21lkkTC-wR($a*KzXAE%#8vc7yc9bmayQG0&eHg_LH!yYWt>z#E^ z86#DI_45gODMIUB#b!sPNq6^=LH%IS|Pk^x9__8GjA~=j|1m#*9Y9 zt`)YZhrVR}OJem}J^17{^6N&YhF47X870lvFT;lEjYL+i9lB3FGUjz1uCrFN*)d6j zWQKAMJLDr+)`R;fk5w$6L3CS&+NgJ8dN<Gb!#=q#VaF+NOW^-FQg_!&TYUQ4SqGl4c>4N>bB?11bzHH7aT{7|oY?HQuCf@t z;(Ul@Fz#qr5-_!KvB2mi@%c;VW;QbZQA6QstEJ}@7+h3j$G&vx8Jwv5tj#HaDU8l$ z;VF7}WuKuY=(J7aOUVq&TEFJ#Z479lXD8Fx`lmov@1^86i-c8K&{;o5On(qi{)82y zg#fXePfYEfLyT3FX2qyWvyx3;lAX!Q$=~zH+JrPLE(isi$16Fd6OR=Ju;&+rptX7U zhm_kI$}7w0>$jGzB&)7#tJME$7|^9R!jHIj()y*Ge7HBHap?CJ1g=@Ij|g*Ovb&yR zZ=wRs@#-LVH-c{3b5BxZapzq4@m zCd75g3o`d?;X_WEBuEc@B+z7Ej&iU2KW#m$H#BG}q)uUeS1wI0T5IRuL3V%es^(=8 z-_rSt!!jM}G3`mYjhr!baR$KNqi#Uc!BNC~mbR}Fg7YsiL& z&8XKK+y!5Hnz~Hx7X@^IQi|G*Hbx@}wn<09G4uxY2LFJTj}O;j!Ok&>VH3=|J9U2z zfAQai+9hmipEpS_f{0j~d@ngWbPG`53)H4)74A5qZUGrab8@L{aXgxZ-8Q z#iFdc8LN3b7;NH?3%YR=+;)5G0P+L_N}ITZ3quZ*v7{GpKC<#EzWH)RGE-n!{aklu z!F0_H&wAq7!Tpz?JVl`S;@AGh?g(8%tCn5q=c(nQ6Y=AtB_g>W&wEV1yHV8)*suiV z*J*u!Kn7%!L~Ey7#d7D|f9fU+=T5&1O7Cs>N|B8Ha%WfqkcqT`#|`%LeC^^kvU%%} z#HitPyz+uRVelL;%sc5Ju!7v~3}rBCD6nf>%4Ba!ggzSHfd8v`UstBUl=a5O{{F_LZO#%^%MYZt ztYp7`IG>VDJxOY#@W(oc@|-9B#j3sVCA$9n75W4>mx&zQF4N3p=pv#S3K7{rrPQ$b zNM#RuPWI3NhSTvJ9q;E{hW2A4kN#*_da{tc1*h*Np@nJHmv5_8az)*rE?Jkz2D3%j z%@?SB4%)fsIh31ex9XkY$m5Snq*u8eia5>6)>9t-+ehAxL%w7F>(=XIP*vP7d4}bp zh*MrCaW271lcRi~UFZHo0g7a4H1JGpxa29TH@MONlB3Km=(v>Xc|li7r^2fe$&zgk zTx;UpCMs|2?)%lR>eg4DW)&fYy5p(!n9Vwcu8}d^${P8yN3DO&P7NdDO2O?hd$i1} z3p5GXR*#>N6y@%rgy5olcJ6%b2aG1j{Nv8~Cif9a4+ z$E>y_pTeU_b80;l*a^MCLn~Fd^mJ>k`1yp3POc{t@MD{=cP{|Im&Cn9r_)>}F9=r~ zL#wSAd@_ihLwFGV3VP$Vf0UL+!kKp%b7qZO*NBbvmXmTjha7Dcc^5YuRQH_t(E@*_ zrh~glbb!W^VKgvsw_{24@0mhFJ&5GH?R3?RUCF;%Jm>g@!@fx9s+h z;&N`W)!-g6OU`^j^;Rw?ntcqev%8>o0)SK@q2qrZi;8cF(enrb^}hfkE67bNT}F%(#D z*1OUi!;Y>Pq{OmZfgETs+w^@&O6uoY!R4G(-uv=YgS7Wu=!!OeKFvZ5q-d{+At$}? zPF7g4f8pEBG{gB^R_I~LZ_!~Y5024zp((>+Gk9qU&wyCYP)zjIh= zYnpV&UED&Qq`*vTlb+kQZO~EoB#9j9sre-SKl!ZxIS-Z{H;lTmwoTH=6LNqJyWdpe=-XvzXl2ynrDx02j$av4xM_0a7WLX46b9NNBuVw2*%KS0WqZG01~cDn60$9`=31B#Q_@PDC$_BL zkre}v2CPU9Hf(6C=^)jv9nF=m$sJ!kZE`dQY|Nc&QnLfKR3?|nIyMDuWC7kwG z;PtSjnM&M=CG(!kS3?TK+x{Uxi-~&56nsmsIg>M;_OKJ}@qUY1Hk8NOc=7wGJD`Ox zhUH;CGv8A6ZKEi@23{yYn-42yZDqQMAWN~DHTfGeni-9H`tgtKz{t%8kG#C^Nt24y zqgyClxh-^-ys!j8_SWv3bfEUZ#+@<=m>)L$^%?2Q#+^1pf9Bb?%+Ri*NLJVBtoMd* zkF*rlAuH8!24sN>55A>0$zP3PB|tx1ZS~--Z=&+3G)Dv$cojcKA#=vA!Lbd^G8R%F zTi{0hR#FP}ZwJ^X=(W$$3f}_?=WVaC;VtAx3ueMb4mEhG?x}!TcO;Ww@>B@7xv0kR z_`3R7!kt!iULuL7bq7o9Bu9+=8UDTt1jL*HM(t5_YpaX*c-St!!HpP3GhbW65>?kdn6UHy!Y*oA5a*a zn1ApBIW~70t-xwO!$E{>%bK?+0GWJhgC~YNn$tYH>e@gUZG!@Sci}kh)=mNj^Ie+555I1E?ooL-|+Zx00+~DQ0FV? zUxVm2fl|i-am*0Kv2Y~r{dK&*i%O=})RU-=B(<}{s1jtr9DYb%sl+!KV8YUT@=HzA zVWlb_ij=``8dh@>N@;5gG!PTwy!Q9XsMXZ0)Qz22sfd6ozc*0H{1my)q9AZXa{6M4 zg%_P)ACTdzpYav_D~B$4^D!^V=X$s-ZfA^N9>Mee6q#L02n+0vAs!IQ&Mvx|8BGED zYHv(ENCd81=jJ{)Y^sSU>w>I0;HKEX>Su0iNQ5urw=mDIq=L%#JL7Hz~$1{Uy zkMCb6GykhmGLG`E$eaRQik0ihxUd5F+by}zPl2d70*XaKH03Gngs34YLq{DyE4BBWn@HV10#-9&Q{8kQAWMIoKE!#akJ!A-In*VM1b<4nr zU{0a^FBhMAX?0m`BKa{x^y>DEYFrAU1S<&W2?0?dx^vPNlw3nxax1bgUhdrxyN`*3 z(<15UxFa<>IvSdnpN}jpD~lc$8HtO6gF^+Tpb*99=l7!hKUUb;7%j`)Xe>(?C?(|Q zzj(^a&;7d6+Iv~E9MXGP_3Ekj68(RBqdVb?KION6Z$vyCA|oT0srfH-FZ#j{`Z#zI ztzG^9m+QX^9xt1Veg%BFBc;oeKW6#&WB$*b_s-hue}rh_5fl*qZ!U+3xszj3CL~*fGq%lYV`k^{}>_T|1oHVP(J|xs`r0`I6Cw%7A1;cl1NbbmS?4XaQf{iCkXEA z*KUA?^kf^k{ioSCL4c9bg~`Ps1T}STWp0OY;avU#nINx|xJdKLhy_ChaN-8EAagI= zyR|=QQ~m&mw_ZwS&xYqba|AiBKgd!nT7liCthjJW6Hw}%wWw#m3Lvd3Yy5Ufh%M7#xig5^dP6Jk}OY z++Ocmv{MIQTA5imFNL5mL5%+vJj<7mLW#=$D*5{cX|`IJ^)4LBDV1%Mk09UcR8~~n zX9!r;4K+xJ))@+?a8Mp+9EX^vgq#LbC!m4}mts~i@crSpe5l|{F< zRBpi~%anxrP)+&gskqKa>OFHcN$=v@QNWhOkFU5a z`aTK`hC%u3%T<%k@U*mZaIQ^MvRm(4nbz;ncWlxgkY}|xw;O9(A1U2I7G{OidpN64 zpqOCF9YUsCbgxi}@n1B*D$&K{xt~CP?xjcc?mKSKZ*tuH!c2%05<>uTgcPA~WMj>h z!>P+(4t$qJj|_qEJGP(TX)W}leeZ#(u9zyU^GrnGznDRxJ?XjfL96>rX?}i)PCS9J2!U~h7kV(Js|}6 zJcbI^O9{d3layi}mbH37CVBtffS{0clC!Vg)py!t64eiv`wVXfbWD@?eiZ4L2EXXT zFiIPDWqv6C&4)`Rw^Bv_757JEe!M=s8rVQk*{3m6;+tSGr6ooaRJXic zI46H=1jCF%ia5ig#l-J%F;6SRz;A^O45a4_jXod~{p%ij?{c?LVp@~p@JD1NIE2w~ zpdVKX4tSRzBkK|*hqTjfkZ%4uZ1s561(if5DR^qsB(sFj2C844Q=yy_;!X(#{d;CQ z?$Ey%On*gh{~1MVq7qILVQ0pQL(wM*!5)*$vqJO{w`x-8LgmMik7g-&B&}ugcA!bw zFKm#ZptffnMC}eS!Lbj>efST^TW5HV5Mo;HccrD#FBASfGJ)ta-cm?Lm&Lk;hxmTn_ zl1cuJ(*N@uW&7UU<9}FS@bU5gH@EnI$^X|mYWqKP6m9Oi1w^a=eU5@7U<8-p*TeAR z9{6z!{1^t`&W3M8;mZN=Wf%Ce34B@wJ}d(t7J(15!H3D<|M8he;4uFq={;Uv{?DW~ zy!~%d>shX8`4?gTXn3dpukPMEu8FSQ_nt&b=s{3GI?|#b1Q3Y`fuJA}0kP3r6c9wv zP?P|P(o}+=V52L72!0v7U9}*fZ-CV;IgZ(+G`ofqW?0mSlp7rL@1W*qt_+lp z4duv(HwC*7WM#IAH7lb1W4ZEt}|i@M8#oftow zXTZd#bocVF$Tap}m8vIcNsAqd8#Rlw?9-o&X;~MSHv=}y$X7>MRXoay3bB`MSKZcU zjh`%<;2^zy`T@C5>gO6EqxPV>3t`+RL4zd{jE6Ka7m_B)jj`YCc$9nBnrol?FPpB{ zKwEnwsc5Eu!Xm2_>X~&}^3~`*%=(#N3&`YmmqncHrBPLsQ2OYXtP7qimABM4>^O{n zhwOKU{-gv=Mp`@MNOGjguf06Y46o)Q<@FXN#ta>}|`M6DVFmxEWt`Xphr`9NuyUhk?L)A(y0Oj5V+2XiSOo{cxU za(JKrb~D}gLLx=2P+aFROLk+or5^ef{Bc5f_j8+CX`*lO{1bbw^{Wtxk2CpBMGlA8 z7o8p+gltCO2!e-y6%WQ8gfwLqZ$($+%V;o1ElF3-9o&<0oN;l&)S&R;9n#TNn_w9W zDE9j-)K`1EBTfnOShxWl)9oI6jO(NmkR?3fTzu84ZsuNHjG=j-(^g^kN)J2 zckkJ3qOjO#z)h|RwsY}GY-n=e(MAw?AroP>#LM@qN0-CSVA0niy|X+Qh_2i7OhAT5 znW@DWlCNc&@foE=YTf&V{}QCK5>SU=7#hwk{3=pqwsLd=KS7~F{IFI6?lpFX_* zvDMNs#lyQkKwF17_y2n0zd?Ol+X@8i?xUDRh6uQBy%>OY4}7iIZF^7D!JtwkNbU9o zO_Eyrvz6TiMIrnvJPYgzMUIe?yw)+E&f@llxTqHUM@lm3aose&K&@`JYH}pW@Zs++_K>2goeAnkTnOD5TOOW}5`5vBOP77!G>vObCgeV%t zM#H~8`r+u+GQYN0RKBv?cSu{8T#`0r6ZzVC29 z_WAR!pk#^zW1DRsbnao~m17(Xh2w0mMtS4cCGPOZ$jNNW$Hfa9oG|!trz4^a zSbs05ymQ6Pr8w`RsWweXR!)XC9H#QtVsy(W8`jwxb52-msVj6=X8+i91~1EFb4ua& zyo|g-?w3lAMAVz$)fe&xJw7m_fZXRv@2Uh4kOJ6Gk!$3kDC7M{1l<`jz*djV1J{fHsX!vBp1x3JZ2^jS|G!*bVG1^u?47QuKq1 zJSC20r_@?a@yfHyOPI~k^gk)Cm#px0?(zLFCuD~&`V@?~C1@FB2MstB{i&lRnzW{1 zFmF0K{2_)k%h`09$qF7x`T`r!|LA_UA{V9ld%sLY;Cp79m2V!K@Mk5|q;J*iG1P8= z<74eL242D7-~_&QR%IG0Rc$t!H}frZPH-Apc_wb;*|NKf$eLfQfk@}A$2JIG_lIQP zj#W`VNTOP1@ab=HGawpS`%HWED`Cj*K`HRzt?2i*#v$vT@PN7B{Bu}J!5o&mqE&m` z9;gA6zAzs|o^2bUs@nF!E(?Uld>&Sbvse`kh774kJ`{A^O;!vX_`ww}(TE9Kbc%+o zwn!NokTlP8$mnp!@uiXp?|Z>mTUSHittYV)7efqa9v5%5Vl(` zfEpnz@J6Coq~*-U!f!W(9zMkXPS=mk zqY)|JTHX^8bf$7>`bSpSM(V0?3-xLkP_fYR0KEsoUN+jtfwzVVgeW+3pRQM}xG79H zka>6gMXha{bGqJgH&z86#)T5gMXUCUo40^nLx|kP$o_P&w19;(joh;MH3J#<)cf4vqTcDi{*qOpU8?F+N!jj#Q|o`f?Ne4jGSrU7;4 zx|!j8bg8%3Wwu_N&(Xl3)5l0JpZmq}x*X!SsY=i9Cj2E%2i5|P-96Sd|MkPE(sNt2 zj#>2sr`!oEQt;gcQAeI~$&nih1!`kIpBK-bGf{HM67_8GdapBr2WMt|)#= zEN7@@jQy0Xo1^XznE6PbP=jx5N!07-!ud&nw)M4Gc;_5Mc$rP7rBC5A268TC&O@8P zbzVVCpKw-|n6?hFh8X%t zYtrzKRhqlSY47u*Z}eVdzpmJ|ZfpAE!Pn@)^bGCM;~KNQ2OWIIR;nahhkc^pdkZq+ zKh99ekNR2{74vThs=T|=ZSkbR;OhN$o6yJ*6Dc+wm*j*aOJ(BXQcyvbNZZ=>59Z8w zb~Thowf>`BkOyjVG7{cOH{Fkk#6`cDPmC$$8kCG!NIZXhK5^^mgaN5MO|=7$4V0)R!x?&#%XFeoyB0w+)`KLJ31GdKc=0ivMr z{a?NN|0iYV!dwLCyEglWU*He0$Y5}5u;^{(lCqF?NnK^(gRZW}-m|TaESAaHZr**a z%}@NKA!$qOk1TYKm%hDvY}ZBY)WfygJlBpxWEsC7CNU_P}q5h#QVHU);TCTk=LeE)%o|d z`+R-O?Q4+hHfE8_HnQLc6xbTb7!57MV0;3<{C^15?IK*>WM|uZIguA^NJ~tP#EZ}{ zGw?_y2rQRsSOQ|*uGxUbt9QPT+nlTWEshXh+wH&>q7-nh|!HpTrx&CCb+;|M4yAZ2oHh@F*r6})%(qw~PC!3c zqAr64GGb@R2TQK^(1r=5*nxC=0~nuJs|m&c7A)RsYz%(q3K;lt6(_l1U%A9u4b1_u zR*WSuEP{^{uG76N_JP}Z%T=QRI#BcMemS6#5Lpct;dj8|&V5o#ypz*5f0(5pJRnei zkYqRwgS}vWlbnAu!dt=?zL_gfJr%IuQV9OjAd(|pN#?+Syb;ZV8+5sAe2&T?SrUyR zgF5#ZLxt${L+E{u>KOu1@`Zg)sIhxns1w45ExcxG29!q-jZ}OCk zp$&(`Je#o~>tsODNOgegncH0-qf?^Xu)|`uO;&YUMrlD7H%AKgz%}2+7o8xpAK&#w z+_uiv;M~H3=DcaX&?@wsbp6vy)4Mq#E>C$KzRJoJHI}_VnM0vsiQ|eg!P_-!U;3eF z$R&@+4AL{%`N4ch9<)JQfGe1tEj0nfBV#lN)u!dwm9zf}o(_RjFYZ|&^*+lb6;8R| zpThjwKi`tSD-`;ngI5W1c;or_{`An3q2F)9vK#l7$uOJ8A5QRZR5W~j!B}mk$2%(h zD$D$$g!aMFkX}=HYvg|38OpthseM^V_(r|b4Ett3!lvZj+Edmw>Gj`o*$+bePlwtf z38t}(65Mj)fwj=ef?H>{q^ia$)loTP_}@ME-n&R<5Ep8=x5qup*NS(q>`Gc+E#5b~ zzwLvCKxNeG$W-sT{<&C+JbK$h>Pzc4FCfT7#Ak6)`p(eTk-%#A0He;MHK`2V<0f@o z(a~rZ_yK5YP4!K_#?E!Yv>u*3mh%L=M9tW5C7DAc#w%GB=U9fk+(8mUe*Y%E6p2=& zDf#ulg$pb~HR6PPZ!*i)E?twef_|`2#DK*i4JdyHSeFCq`jgNDzt3U{Nk13JZB7O+ zNDgz`!d8kThVWT==S1l|q8K|gXCZ;$^L~OSd)2&!hyr_hEbpJ<7BuI3IO9W{Li$l1 z!l#v|vZsKJhx;9X4M7DP1Ao8odf)9%6p?WH%$M@qcQ+QL7FGA3u4AI4i7t=W;-qiw zX46u#54{!1qa%mj$GfL9PFj+KdqDSV-)sIxaQ)#(m`A7#+7mo?L$!X0_}0}(pWXzQ zUk(Bb?+ZLK=$~)lmh8VXEXqjt8P=VuW26xDUO!lN15$u~+Cv1sWW@CL*i%<(q-zWA zaq0lw|je&xueGk}`IvtpTa*Tu{2cYxoxj>n{tNQREDf-@`m=^=@7 zVc(B=b|T-QuA$W?8dh}J-3^Ge8~E=_pE1C>D2zo;c3VJ^v{nlf?Sl& zAUO3qWo+3WL1%0^mJu_y{*%o_ouE3mo2(d0M>|66F7;n^D13m+)qgV6Q5yf~P+;vp z>`-EVA{=jgp*w=Y&i{zQPl1xW?SFts)Exp+0(pmV^vA^7AsYR~kOXZiIM4?Jn)>Gd z#OJ3#EF>YTmClSRJn-$6gKl7UHRS)Y1^eqJ?WasQ%2TTa#33~uD=X!IQ>Ym|Dh7CsPmvHA z>zM+NfuM77H<5FF`ad`htNgndUG7DnVGD#8RkKXMLg1jtmHl-~R)h{>nVl|79Kx^j z$n5O@>%%7wVdgFS)n#Rdl?aZxy+|wD%KvbTXc2dR^}tW6 z{c{pmVYfbjS9a3hCo!ni3~D@6Kw)bt6;$KSOh{Pk>q`y?wVg4bX7dy%H;uzhB_t%+ z+D?HCFa)SKZG{vS#Uqgka5xeGyZ`_X0N|wthY$_-!g43zV32j-^$3`l>)Ba@SnSdc&l z?nMAtEFd`()ZhlZ@IW{jXrF?&Pl1x(Uda?BJ{)|DvGszr(-XYHVbpdU#ul)}%Z6uS zke~oG4vVpsO{U@DvOsbZ8Po*_AqZXxcuEtE+Sg8NYNF52ZU#v)(RJ%&`zJqq_yM86p(ZaQp^AV6op2~!entMOoAu^1f);_ zQ8EVGj>5JhG3|H)8Hoa+wc(<&G?-`;0H^J&!catI!vR<(0BeGa(!j3*0KN)t{Qv+< z{l`Ua>!NtGSkq!m;Tz1G=ZJ{Ku+JmW@J?~m-Q*`&70Lyyxy~~PZ3Hx zT+GV~a#QddOzLbQ+z1H0S)&w@KAAind^9)3;gj49baU25L3-9>Wj)>Z?EL+d~Kj>I$u>c63Xa9euc#G|*F zF4BM7l0ZmepO1L(#eQW;ZRQm9lWwnP>7*VAq^r4M)){?j=5VTrT}uCv8}9Biqr^(} zTqi(R;1bJi)<{j8(r=&If9`?4rOrMIb7NNJ%$Cx;b@gF?GwvXy(yZ64@ zw7Qa~8u)D>Xkn60%-d=7*;U4gq3*(Ar83I)W~`Iju)AmJm#0OKtNP=>Cg&@*BK(p- zQM{jNeZ`-*&V0{vFPLfykkRP7DDIu-Mdy+1bqXEsTM9iYYg0^*aJj~vYO|L*JhPNU*vIo#Am@}*B(M%Nloi8{~$H-f)^#Bt$1^bGYJ)vlZ3F&hiN_; zC`ql_s{PI9lUH=5=WsKkqbI7nO}J|61a$AlxTRL=l~vZHIiYnN>2gOFv94+aPB>9>yTt-ce7PA<^F;dl4+==V9eF#ly)iY^bYpUPZpfHYLcc>VXkYG55}y$dOjA`Iaok)V zA5QyHx&3P7V)%^kB219bY@T>aRy_A z?p~;|)@2pFl@3r532OW~9b?yLjkmx)Z@JW7b8=8(v{W4@HZ+*3yEsuKT$6Bh&i+ed zs%}X;me&gF`21F2kf-O6m*-E~o3*?Ftcz;>LgkG0-IMo5nB%3>)f5hz%gRLv;`*(z z#VyRr1uH|fyi_Sf8M6EZB0cb$&-q;4Wvd##VXKujd&Z~XX?pUHhjH$)WWBlIGdYw*>NTP}>NNoBps zC8=1guRn|L`Bj;fl>~k$S9?c3b$|lVt6}yPJN1vUv(O!^|;I8 zbWZz8vIpkO4T~?j2jwV%k33#AWq9W)|GrRsa`*FTCy(+e*7?oRigzpK3FMciZDKxS zw^-Stw5&U+sdw!8+w6tqLNx5>A6lA@KTm%>5wNasT6wT1S|XV)p?KxkuI1%19_hVS zcQ%8*xhxwh{7||Up8EZkMA3^HsS`h2CY)A2cFv?dTiGWxHGNvNU^MZ?YtGSiOWHzm zmdm?NO`}*0XJkz(WyMOCX0$&tRV-+qhukaoG{1{#Q7ckOz8`du#uhEcmie`3sh&O1Dj0V?=(EJy!k1IVpDt9ByOsoMzNe@9nIa1N^~7sDTXR#-1eqXl z9RbyWnqTOd;at<~`&lkHOAC&&L=7k8$qwRUp9QTxuJ){EvRH8BH2do|#OMNdYK!D^ zjdimwp5z$z<#(?hDtSguM;sDb4=@kWSxsxU$>$RbcAMT%BHT`iZ?HT4{I}SPsWeK- zZ~!4J_Dgg<<+h$~A-OZUT+8S5s`1mr(uU{Ab?}l_&URS6a!7;=^Bn1gG*I)qu9hxx z+3Q2XARBEgVlv(F0Jh_<&8go(!rRvZvDvFuK2}{p#?@38QtDlM4y`VS0wuYqtTLGL zM*Y)r$B&)GbP+lH=VQMw%)D1A(il@6nOJ!jpw%9))Q2)PT7G12c(Y`C*(F`MtW!;I zWZPV!!nbFOsK5BQ?95Euh{+kvglFg5x$>(|2mSDSw!b>>edRB2d8;PMCNm7-ExkOa z12eahTAQQFt+ZvnO7kc?6*-cBJ)rE=m~n1>OUjisFZpfZ&6T+l?$i{%3 z+NtcfQ}i82dwm++TS8-DPJa32Qpi!$K*LL8O}x|ZCs|jYw(GU?^|P1)%in&_JS?Cr zSeZ<}-@~w%)$t-%jzlO;U%w;ue@O8< zOprOJ&-C=N_j%Dg{b?iUQX+j-L38LDV-%&2UV9pe?697BF-p%bu&w-<>1`wXFO5+b zZ`XesPiiAIwf>I#>{S1yF-ijMPvDO+8uR81nAiQkNHSn*K5LD&2F@UT7xeQ_v8I4O z0A7IA*T?E>2R#;lR)hK9EYMEf8GeFG+S}LKo7Q&NyiI@Od1=%&Ds_!QSpy>iAbAGN z76Xn&Sl*k7aOo%}yAx1A>1PL*w^iZ=bp1#AKn+`-W_ zxKI1en7WB7+eDH5D?yM3Zb6l$QDmv~OlluECsQd1Y9<2A8l*H${mF}`Q!){meP9OR zP7+}zjh>l_%uGfmw}aV);h=S!{8x@)GAcO%mC!^;p!6jqpvX=CGttnCOz9(M_K_1X zWHKh4<`quEg=hAKld<98+i>h(Ifw)>!#>=K5RS!Dt?&u$_=KG-MSQpwo?!J?ZlV_j z;}zcIMX>cESm7ub9JvWcu*KnR|4LZ2r66rHQMQ@L9T!13&6cp^D6qxjY`t(+nMg35 z(JE8cia@jS!eKLI|H^9w-3VY~ST7pZ%L|LcV{u-fR{?{=V{l%mzq1}iQ3*S_k0@I_ zICepTNs!<;1oV61K<5M49sy}ZL0W;VoIjx%D+&UvV<`wM8G#L#B?F-4F1yoexa>}o z;b7{d=#IaFEQ%q+v6*lTI48it`d|5#m`oTZ8HNEH105P*OPK)Z);HQi3csx$17>EOaaN$2d*7EP1+;-+EdM?yQ##{*wFc2LhU@L5!+mUcsH?c zJpGb@%Nl^xit0#GUmtr_tYOOlu(a`T{DPg@rS4km~nei=*MpBfGvz^Nb-37$W%` z@4&5%N(>pq-ETpV+|B!8`7(@Mr$b#K)h9lzH$%b>Mah%Z%B}Z+j z9$RyNKvb!_`D`;S^ub-QW?i?QR#7Af1vlJp_zq3}EySa~`@3EF)Rg(jAF=GyQ4uV) z&c&U|#%kF>FM6*toQz-nf{A+(7gmR~sl~U|Q zbd4T;K7NtZybC=!rLi2#7P| zqVIx}otZkkE?a(fA}fF}sxub~grB3XsrIU3AKIqr1o3~1J-7X|nSSIMaN+&+wz$Ih zpWHH618?V-J1I&pnr~W4_%=B?I+&^NPVYN?^LKRQ67_Rit<2HJ0=v*(BFEkL4l&W9 z#BhHL8@jdrMqem<_8Rs<+#5c=`T)KnP5QYEnbgWV6iqLjMe%saP6Rhk=UhUHs^Y@HxXydGJid+&`^om z#|7cPIbIudsNM>2P~%syfooQL2`D_LDiU3hEUy?9x_n&|THLwHv(UAsh~4y2+cjT1 zVMnsM5f^gV3gp;0^^n(di;dFuSk_YPmhqt8+^=>1CCQ|9LZSWgj96r7XdaT3=}_tV(`Ie0&!j0i5Ppzodb<^!o|CH*x6gRQR1L z1g<1U;r-?dU4_$%_}Cmi6R43IQ|tVdY^rBw3FTz_s7QFu>ouISHeV8YXd+P3TZ{InW$In3j`^>#7zlAPns}k+ zy41S#`oi@i+jREM7)ci`Y`bsHn-eZp%7>?#jW3%?lr-%*OXOeMT52NJrV;0%)0G;D zrb)!p`C0Ko>~O0|qt^zHjcX3N@BxZGj3XD-%$n28Ns(F!E!7SN zgE0#PN#FX?@N-K?^QKaVEV6AS>v^4NE%Vo?Ap?0qs!04Gz~phNk!VAw0NZyRu`nsJy9hu z3oV*tGwsCN0Oq~;^|L(bx;(5qu0Cvm+%0dQ7wS(j*;@wT zXTvYOFj~_O{moj%JC7<{%Fp*kX|#YmK0_XM_GrKmxbQW<%-5jLzzy{ z^(}av`hhuad`lzDIf}O5?en{D@4R_iDz0VmInlXt-P;ys+q{x?14Eq zrp=tz<*f%s+b;_-=ceRg6jR5a*(%W{&>*;Q>q z?(|{S19aWMY(6K~kJvWJEa@V8>5RBz>)uSc z;sBKEib)IWKsbx~W1S#ar~E)~F)KF`cjouL0DShA$}z_2h?tB4Hd@V>Mb_2PQ%t>J z=+UZ-mc4<~Y#%;baK|AuZA2BGN#@h*>xqIlSqc{G1c_Zoe=aoC>T=w)yX)Ho%oNsV z^W`TWIIP{aTalQn`>HmA6`1;a-hbcF0Ri}-p_Sn+ndD-2<+Yh-_#r{W@;H$$u32Vy*2jAnK*y@ewCE!M4*^dCZ<)w4a{ zC|tLX5BtdbsHZpKW9_!g+c(cK@eZq>v@ZqLYv|IUi$t@>A!z8d#iLc_FKe7;Jj0ou z=bmk9jfE2B8M0NU8oY1vUnJ$6H}k7fKu#f84@^3gVJ%8;y9K`07Tk#sg)-4MQyJ@f z#~gB=e!i~+DfKQ)EVZVJ5;>qH$x34{NALrT0VAfumZkXkJ=!CsqG{~yMW-fH)=>x% zz42OjZ2jTc4b8(!6e%{}SDxin?$`wvk}lJ-vDkv~hJE_6WLZnFt-EV}Sl(9UCB)dV zgt3+PrmWMxUwf38CD3fzX~^~dxw4;TcJLc!Lru=*{GSv3g>4uj!Q&PPgH!vA>=g3v zVdrdYjM|JLl|5gdl(oG*q^;1bIxsUMPCN=Z+Q{Q;o>6RQ|F|9X`nX4> zKcpV7n+v}C{2_Ka3eq`4_`dtW;B~&A>%3&}+MW`uwkU?k7sfuu+GgvZyU0NU>H{M z@GuZ;1Bm|K2l2PcUN`F%zfBM5psSP3O(=F9 z>4Ein7@pO!O7F?9W{1~_q8~L~v9QQ$^JJ|HDYekhUNK7T3%UWe_uV@ErllB17G~7i zxtPMxWcaHp>9~&ryUCKG-qW92l^O+jLmNJ)83jCD@=}hs=$uI^U;9Kb-dIy5)%2t} zV&C5%x^arUC2N_RX}Gjm+93rK(w`3BruGRf)(Yw~4cSD4pr;fyBa|L{Qt0Qv(NLx` zUz)(z`3YAjQv@_)A$If{muJLLDESxHloU!S`_&#(VG8=HfSTp{(ZgNgxh(GcgAXmY zrEgxn#dDD)7)5@$uMyEfUN(21w#WxB)U$2AEAID*03>qA>b~lyY+gMj5z2-YYL+!& zk6Eb&O~BeaZp~3w7uVG4#(qtky-$sj;#V~pu#2^wjZcLpxSI%7*MQf}t2ddFUW{F^ zPW+ottH8824kHXbgx@P5(92vZNr#=7y}7iuS=5Xs0VB;MSDyz@^(~RQEA6N6Pd3sedZzhWU47{JKdP=Be6yCxnY(FpA#l!dwAp2B-U%S2 z#((VRcwMmX@m#v4XpT<%lgsp(uU*F(M>a07)EetY%YX+aW@2Do@nb38`mm>aB3?}_ z8rC(i2LNj_N`I=lKd zS!Yk)q1l`8x??2%qo(QSh|it<1q8tZK23?=vQ5;R$TB}fJN!Bj^Xz!OniJ!-?Z^g9 zT~@2gJJ0t6JQip_@2bDgw`Codyl9%ulpXK508rGm*$8du ztNtdaABK^OwX6OE>&1HvE^hm6*Iif>u~u z_P1A2gL{A)@C4-~4$MY84Gx7$TyK(|TeIj)Sys=0!VhVmFl9*&%tR-L9)e1QDe0+X zNZ{G4XuD$tqtQnoj*Aqg#=t^yc{FPM_wKQ~zMWj{)IN2l^;u#nv>H0alwPRr8)`z6 z`UBnAJdE6$*|4>>Dx+*uOeSScQ@$=Y+IeNlE5I!H9T)K&WT-ly8hJ4kYBS<~oYeT? zTWwwLW(IfXcdvkiNrCiGmco;Or`g=T>-Y2fFVf4ozezLm)QFJKiD*_rJBo7glOvj7{ZUC&gPKYiGVV+Ow-WEi|QdmptbnDlgLFry^&9&o^3^Uv%o-q5%IofG z9fz3p?CQf~hDs;n`&e`{i zuQ-oEhJy2{Ph6_nRL19RNEtr$5f%~*E+xI{tQZ&_7d!$Y-*xOFM_; z`v|kEuUt%~)yyo&Ms?u{ND-26;g87})$rxE^kFZ@1tl(nI@U2C#&ahxNkd5ac&%x5 z?>2#ci^m3N01x_lJpa+>(hON}O&aa`(S0785lFEtisF86EIRe=^xt(`^XDVOI*L}^;a)H1co#Yu@oGBj3#)(e(6pR{$Q3T;8QW#t{C7hC2&Rx|!HSjyP&w3*c1*o(y{( zqRjEK>9mQns?!J#FAL5qRxF!Y9vD63*&)7XLZ zOA^kiBFtM1cJHbIY&I^C(Iyb*T*9|&?+$6Fm_Uj&>VJujvlOpFip1ISeaN+vE+9pe z#XNT8OZV}+P2KWKgs%eyNIb%eYq05@bWSU?MnOUppH3)r=fDM`IsC)_iD zUMe2Tn^#+NW$2xNLtq!yIP)!%hP!;$MPv>(uWQ0ap_jnRP1>5;;ZtAjfP$|Zje7Lj z9_D}Hv&BOoenR>AL|1>@T zy8Qt#Ca?xhVA%)Evq0}Y7%G^brvvjS*c7-Jp_7>G&+ zQ$BV)^g9pOPl0$EF!_Xzg3*xx9RZ`u0w8d{uZh-&g!Li743nuHu6!Rj_q9_g?Np%M z7SoP|{XxuwEO`(#-_%5-?GWXuzz$TN9NvVHZ9>7D5U?f$&?F18;Ob8Auidb^!E$5cFV9&<<}tJUoFwNWkM0@LmZx+XPz>Fpo^YfHNWiC7Xa0 zO+dgCU;r81HX)o$26^)U8ILF9Y{|ALvK5wWg&|`BG7?12!^mJ}swkM@18%g#rT;^k z$Aw#A!?DOefO*+)q-Z#pWrTo-%fi8=B|`WPXr4g86YzL~trY=G7D6EiNLhlcC;{9+ z7Phlu=g$l81>kWwJPLtF0(eUD$Q__OfD{D~;43%*fGjwP0-_*Q{*M$D94-on z18^7sgTrAvFFTn+;1uE#^$q~IAN?I4_~LU{cnZ?IXeisP6W)y}@18A^nMi*lt~^lb zyXu5J>74Fe$DYFMDxZqp{{mwlq||Tc3m=V0c%_Scyb3ojIPe)F{s0q{(0Fg(=!G|8 z1*eu=6D*IuutBJrr48E5y9Lexsxp8QU?Pb0Av5f z1zTOMs5+z|1|kFui>X6N`vIN*%0dXRP}* z)U8cZ9IfTe{<+1BXw5ydynegjY1{83Q0|qQKRf0^R-?sXO(mLT1-XNLoW z=c~}ZZ^7gOiAa+5h>cwc^7e@&0 z_h;-00my0KZEKbJ=xYXuG;d~=2hPt*4l^wgHH&^}q_5SvQ6wqQpdD&w3I?FtYi=&l zhY#nLPn~0-#dY(~`@=h-bvZOAQPHs#wd4?)?^EBzcd@Ps)AO&$q_Z2~dL<-A%eOui zn-*O_72b4nT{!Zwmm{dfA3pv3Se2GT{t-1 zbnoe0M54O`q$s zgRV>546WS7ZE^Ja?p6r-jrjDW^uyo4sb&t2UV*R+U$9dokG|+fuhiM-M?&Baz?djq)2i&vBOTPjZZ%E9yHMWvGff9@sgfuJs9!I%BGlh|Ev%~~Qq3!9{U%H1DJsyt0e??0Z}4cumE zs=AHZAlV0SkZjt6pNH&mw%X|rbeKL;9`}$GU-b;r`W9%FRh8ZIyE3*xF+D z@RTZ~(oEibc|)B*;^d1m#eDc!SJAOS%SzX=adpC>8QSKJAj6=1^@Y);U$Sgc5GmDD zK`%6E@B}~Uw);OnxlKi}_uJJBaTBS5nBNy`DuE}7DNi86FE3@Z72l4Z-9FuXJ%jT| zyJXUr<$Uvuev?N)Hp1q7=o|D0$h&LXIqpd#l)6;AAg{|`AAf=|4g|$$TL8f?-EIK7 z?OezG-3J480~OnH)drdRxkEbF1m^ArFK?dY4$`+caCpM)X&Q@`eapFT&3kEi?#lf4 z=w=qZ;O)*nXrxD7hbVR)}rDwlVD{z7lFab^rM85!>y_d#-aM=e#Dp zXv9uTeyqGd#1$t2nK#f(dNf}~uXsi{+?yjcKf?9i&gMz;vq~UiZtaP#kYR3b&`sNg z4!bG5+Aix50sj~M#!ni62tjDpNSWQe#wBqzV_T)v4%Q6_O}j{#Lo}qSOJ$9DLU(hd zX>S2bY2(U(VSbEC1jJZB@YB}p}0I);8;Z^V3FEHYrJ}Z2+-=9{Ss+@Ou-W~1lYc==E{J<`@abRF@zO?FWX)(yY zO7@1JKS@UAR6qK8XxMs7rfR7u_>o_&+U3oLRB^ssO|IHkjZ!DQN!L>eLYx@K$~}G{ z((EX4I;FiZd!_Fphqln3v-_Nvx17FNYU$Zy)s`>yKWHu64$EwJ@z}q%eclln!&1t*_|(gh_@VMW_hZrth(q^_ z9O6V-zp(G#f63H2uNEF)B_VU2vk6^QygNTF^Ik@JjMy!I%7DkY+zaCsF=*c|@S@WT z;h-BGe$O%Xel|wZOsdXTzp}=v%Esa2Xv`I#5QG#iXBTfW|I=~hLnSxX4vsSvc<|i| z%nP(I7PL&{08F)(yNEvV`!oG19y6>hoH-}y>snLw z@lBbk%C&m!Zm0~`Cl{b-izBP`sf<(>r@`($k-*8Ck~is0rcxJ&%)QJtj^LK39D}VL zwJCm(lSA8QDK-HTPV)LwHS_${DHA!NjKS05q*t?RW^4fiTU@b(EZ3g?ON_%%xX|tR z{R<6s9eed2G|0djoX4e4n?#Qgl~RCriyrgw2d)LFIWLTyGzrV-SXqXi9NNe=DAm!I z3=a6f?>D&R*Uc-V;4AGIbobkB{8&+L|AH4x=6=IR8RfOu(Cm&HmdjD7{EztQ)D)H{ zwD>CFg%l?<5D3#k4$y%t_;8p3#~Mjoq*-23NSz=c u@n2bRk-S0sW&PMLMd1E_Lvw;aGT_|Fb514(cGfS$$mQ@) z$VnU~CnE+2jSUR|0N^CVg%!T6(bvTU1^RU-RXsTY03dfIgawpbS1;1Ftu#%shCip@ ze$x{S*Y5q4IW3adE0XA5vN;o-w}Mq}$Y5jPOw~I#=sCC~`xOuy+ajD!27*km3mT}m zYiI!GEN@N~WE1&dSYer8WSK%HlO;PmC1Eu@>^wExFT%A7193aaf%oj9uij+DcU1hu zeRan>o$KI(xf0)y`rVorpIE0ZUQ*ZITC)uto-4B*7c>AI(^~Np4+4|;oPt-P!MKrM zQw8SV4TU}=06@5{OAbY#=gaHf`SP+M|2>#00^mO%s4VzPV&SYn9Dnm{c(=LBMH@9m zVo_}wi7~gtrR4oH?%>7j4@IS(jmCae94lNktg9JQUC7`RV*tPQjfQ^Q=1YF;KwET` z!0KC0Hr|2wy$TOrMWN=;siMsM zGCR+p*v9Z!Lnr*pwB7Jt-eG}2Q~WnMq{Tk6jMt>_{A-s7qqX7%klOyTRG%*{XSGf6lbDl4ra z-+H!NeVGj}v*}=cG zW*r=@`GXPPnG0TZ_cbh!wOI+7oUV8FI4H4P(u#BU_T76F=jo~i-)>)EoY+sP;&yBc z|L^$8x537QU#P`NLF$rb(fPLO_^-~TD@o78QqfmQ@ZJt&w}44+Q^Q}zZBW$-)zk7R zr#_ztiL+i;DfpZM#K#7#*O`OIvPrz1XW$&0OZZy`>3*hI83AiaK^rlXPA(N}_R*as z)^wG&Q)r5HEce@Bj2Ahw8EtFVu@WA3ogrc}Mr}f7K_N9bl7q5C|Va1hf^KX$101uQ#JllI=!lst#Mu zA>B*<8g$57<3p>U0R`=P`5vw}e;tMtHiK0CLNZxhJPdz6;(RKpFh+0UPJf62bKo@3 zfE8|Ckgc?-Uie|7mo#VNV@IkvYUhd{7tdst? zr{q}9od?h%F-@V(Oe|nC&?{Y68o;1zsw^yrHm5^o+@*&F6X%hfoKa|Ldx6j9d==qg zMim80C8>TAN)Z7#T;5epc_RXI7U40G24NgQc%(C`p;^cS1h-YBG%~hZS+Gmq%@1mQ z=v3Ms6=`Q^r&hR@cHl{jrp@Azwj;O4iNhC30#vL}KoNT{gC+>!D=Rx{RtMpMl{S>M zPJFX3UE?rE%HI(4SYGf==xDocRv#kn>VBrRY$ty_rz4*+q@NqiN(L`}z!biS5dzUX zD&dR?8+UMqu$<2BRAJ7Js+0*hG^OxP*OM?dy$4*K@Gsncx7f$vSw$38Nf2dka zda~NnE?=MGSk{-TPOXj~EQqB2&BbkQpCsUZYTp4K40mt+qHA7Dn%%}wRdN!H6DiY; zF*NU6O^~MD%%*h|8>>>)BJ98YXp3aQp4CvV_3SJwv-GO16;j-CeXs2INY>?Rz8g%C zEwyn%k=F&^P=c322Q(R%ofd9p0bLjCHcJnd6&=ntrt#A{T3CK&R*O=1q+WWznq5xx zbs0%w2fKb${!ZC+HK=MWr$dHi7~M7wimOlc$^}8x+WI5c{kB}qngq^$aN;3@he!YS zy)PPn98}Rk_VM^RquM*i>uRB1PHThKCEP!@Nftt!__^p7kAu1g`)Y|5nHjroO*xM+ zc)N_Y*yOn{Bw(1Ws&xNjbj`_2=i@Evt;`!1^f${HswsNQ$}qGBs)(`}$anr=<~y`D z1OTi!;^Z=fZkOYG?`lvmc&f*;RCk*rt_JSzp({3!6N)IR_&dpQQ2(_2BAn%r2Ts?+ zdeP-dJRShwTpEkWF7(GSSN~qBpdzFwno)=ez-pN2DXO`w2 zpEou~sGJz*{_POEY?{k_gd% zl8DCrB3=Lh+T&j&B2yxgL^aL#^Rp9!K6zrKk*dC~>9Xvyj1H%L?cy6w4CA<;h&XT0 zAS8*5Z>*>TpdbxKP^*OqUfcnv_j}Y~k1-1}=npvjm_FeV6YxPx+KEE8L>*s4$HtoV1f5KfD`wryvK%e@k;!9yENkqEH=Q+B$d3pB|N5uf&pIfi zP(&zrZFCSMWMU9}NeVz<4?IVx;h^vmCeSFV_kU(^;nbgCe)?3Q&W7M|fQH7r{)282 zN#rzUgY`*HGSdQlfBMTX7qgZx@ywIt^i#G)2_4q`#bx&19%)y#Z1(=F=ymIA;&5>f zaOm{%=<4=Rpmg3HjWEsL>I<39Lx6YUHbw&YlU?&1x^cr7YDP*Xp@Q`3&l->_-fkwd zTF`;gHRh?}v{D?b^sk2QFmyEUxV?d<=zV4s9&6OmHDQTFYO}1Yg;&~HXN^UUN}*uv zp$4D;@PIo8$pj^=xvtypX{h353+%|;40dZpM6&>?>ejg{tNjgmlj$*_txz+js!21% znuy{pgQR+yw#oCwi%txquNpbsQMx!_58{BPXF+_|wLue1KA(hEvR4gxNKXQZe6`Ff zxlACrJRE48MwaDsa`^eF($th(k(l|}V&Ejizq?3z_OAZf{AtL8h7D7OmDRvkTnvBd z=ySU8cg6N&z?qLA0A#Z|YQ4K;a*e*Bt*_MTx5tSEUA2H|N_}0t2!cv#kbRr`-&M^w z8zw3aX}+x+fsxW`ud?R@40!)0w_R4Wo}6PTO<4}F(-MspsW=nhj7w=YC{$g;V!UaY?wl@e|a6+dEF&iGI1U9R!G$yKK z%rN>coejUdXzvSA=V~M4Er~!8Pvmm~Q1MCd^W^-(33xC;(C$n&HxE1yu+1%dkcnSMH+P7qPguUs+ZTDg_->TvL%Z0*xrHzJFGN)iMM`f0$`*==X56 zMX#jVOW*`7B`&E8$I1JPErf=KN~A;gTF>iYQ-9u9TC`^2ztdg#5JCng>fRyL^%Z$xJnt*kP@wE`INONw1}=4P9fJ`Zj)y@t%AfK8%>HNbze}R{F6}N*DO~q9U0Gn?Y4IJoX!*7HE+iq>&k_bE7cFi7+s; zYq`CS6*jB%_t5Rr2mm>1em!kmI9YpFl+*t;b$zH)#3~9faed&d0-ijsKcGX%j{MDX zZ6SX8K!xf<+gV@8q3PF~L;Qsdcv_y?()qbKYVr^pM?<7{vHrM$^H9lU5>GW8|6O)m z7nr9@z4l>jr>fMQ(?8xlR&7xV?#(nCel%5PHY%*h`gax*jvqijyd!52QLrs}l8Z4- z2SF`sBc3LLs6P4?hUoO%DoZIY&ZjS$JJKMsvs-bh6;BRInhleAu^uw!cv4)YH|dLO z(JjZXbYB1FDaPR3;T`<=Cikpxp3R_vBc-XCYkd1^;BZn~Wp1omGHUaU{wMd#yGr5a z-wk@x{y2$5P{IvePbLz6eo8l{s=TDUatcSRR; zRS24ZroIYeA^-rXM9Gc?v%h{yYG!pHNDoW;oo(K zx8mu*VR3YS$(_z|@+KP^kkeLdx`{+&T;9`1ef~GpcPPh1SXzkOc=v*CDMx&`UUZzG zuA{3fS+R`yrZ`QlHnK^>A27Zw;t~hQfw^W6qNRBX-}7UC6cBj(Ll_3{FU!9ZhOS1Y z@k6)d$kmec+So4Oyha+BdHlL-HOG&qhtPo(iw%7MPc%CgQhra-n#CtC4F zc}Nzs0IGQ&p`?8iQO?Yo_8fJJE7>n2(g;F$d-;luO!W!Pi_H=)sLQ5~+tblNnc5Tq zs9c>Md_b0zF$`8;CA%sT>=fm$a3U4l?+`Hh)zvHMlsj^4G+b)+ksiv% zM4fOH?pcaOsuw~@y6)!XcJ$wwwCqJNtjY8kz+Midhv3{f_cA5^Kn9tR{No&yM)!Ob z+d!yJf$LgDW{1YUAsc!L#rm1CA*J9tz@hAw)t0uc%>;@-XF6B=YAW3k`;&*T-OP=R zZA0==`ELSBX;^u49_E80$*oN*^3qifOl~*#!&WgN%|(!3XML*|rC@BXcJ_N|jQ1U$Y#5}LTRo-E>tm;E;2KWIzCt^8El{ewOE9kqAu3tUO6j)!vEh{L-MmmH+`GSJ z72ZdjEIB55U#&K|ux~HkRk(?|E7Sz?-@Xf-)-JBTxhU zC3`JhETi|;J@2Z?H6P02L!SKx_&@?FXu-b?Cpi6g?AFHI@ZTjeMrKx)f3e$t!2if@ zx&O&-3A97g0Dx~u|HW=KZE-|Uho{faU%jO~CC-0_<*%=n$VgHbig=ktETj;}Qb2tl zSmxgitM-jO#^9HmwYSceq%N2vhW;j*hs%%OS^paY2Zn;814tbG=ZaNVjJ?_rqfv z7OsJEed$?E0O{_$)?n4du4&lu>R9du&4=l(|dCc;j_#zd;J z7gH@3zlgaoa$-pXuNMbjPRbKg?qGCJA%K(G*poo_PVY4v&ldGpJ%{-w?C@RuG2HC* zG#AQ8jmtxeOOGydx3N>__VSmvNl_1~Hw6~nb?VCs-KULK><$NG(+~G*WGL`Da-B;v zr+F*HVcvqerid7dp!4^Pk6NYbIdcrUE$w#g@y)79Z%3ETdAi5bUOA)F=e4sK0_E{> zTrh{VdMKi#C|w}|Stg!Z)x1NO#&uQ0;&Z=f;T_BFD@W^-q#i;-48Q=gP_CU_`#TBe z&q@mDl!i8Q^#!MU_rrS(T1TrRah!M^OPAw)~dyVp&;vr>=1dc~TntecOt% zoAKcjrULnXey%vI1Tp|1&sTj&fGuE^?#!7hTU2|(&GJLFoSI(=zz?WHj<*~5g{u?y zf`=DtbSw+zWpc$(qown@-@9AWW-T||^Wj|%5^dfhl>Pcj-=ZisR}AQ>n{YS87_Sl{ zhcV<}btgu|`UYrk|F~(^#l&fb*q5vi`w+JGz=f8PgV>PJVqARM!cN)<*pVa5;JLhU zMaZIQ9$rovF&Ko~evj4d(D`i}Ur!qjCX7{B<|2 zpMn|{zFG6(eJ%jTRL5fx2S7NT4g=-;*F&sH==Z+&rdm56*C+gN4>v+#uejCY{GjU%>sD9$Ohdij)G#0g%)^LYA3GnmEYf({yh-AC z@~EoS?fjHKqZeJx(4U*S}y#UY3H7co0bioK*T4NcOA`_ zP8`z7H698un7~IBL{|y3#rd?g5P`hx(hck` z<4WRcoz!r)er5$1M zA&giG%bPQXM~BG*YK5{#v{K}=Y;{d^ZAT-ER4FhfjWPL-Kl53pl|w zA^+RY4lpf@zLu{7SW4WlS>OCK2~>;QBGBa#71h7mf} z_gXWS0MR+KN4KkuY9Dc5=a@j6;-~4jO|Peq!}hhO%WXf~P8R(^`?GZpit&Q8nNC6j zMThOICt2L*dwW7m6mVgF%;>zc_tr(`&zout{op&`@aKVOx1%P{0>@8YY z07P^12iCV;e0n|lZ@Wx!%%qFQj-b9{aKE{*LlGiH0GT+zu?{ivPPLydC+}8LGz)E? z3H-lGHJql9qd)<6@R3;LrYqTRMP3{8yb`Ekgoid3o^L+se5;n4jdQiXI^BjG6AP+X zi%GDuwK)u5-YE};Eqt2uZ|hN(iF1EKK|KRZwCP9zf+WI5;^65bkN`#sLeO6%!l%D> z0@hQY9GTJ&++t+hTPb`_I;B^y35gK{Tb^X*eY)4`T(Yefp@)a^HjO0E`_VbrVXGpVsF z#UVhuhUo_eAgk-x=ik5n)iLHIAZvMx`nyWjnUNp>U^s>P=AfN=iT>+6#+xFMz=D#m zr1|A4-r9Pl{gX}|Uvfj^9W5RS36N6J^#}!0FQtMW1(*#`c`F3oJa_sP@)gO@Fm~(B zF*w#w@SSOSqNfaiC#?V8a|kz*1Hc8Y~_{xl$A0h}A8q_P?dY zQ6iZ8T<;)ugz}TuE2}Fpyc9mXz(Chc%tvTTmFO)YqBZEQq|Qhs5~YJjRavL|GtRkz6D2FTAMGhRqO(*5jruRpl9i({~!R z&-yN8=NhadY+_Qv=P}JMZR}C|Pu<=Api~qV8>$~8@rB@I<(00@ zx`Oj?TUbD9@mrOBwB8+DG;PoLQnu9 zz>sq`C|%RXC#52W!th*bbV7*O@CH+9p;x%vsZ5o{9{mA{U($v@=KF;{VXxjttP|NFj_E`y{l~(AaRXja1oK z$fdr;Y~oUf5<*o44-9T2Q-=Jbg$}OGN=SmT>|~;EU<`1g1u3GW$C$i8mfk=I z4`ci`_Ly}wx=?tpF>)`&_Tuu=J2o%Z^`1;8(8kY2f)2&-O>X7#VUYyo z7uQy~xtK>NF|jJefyo<`=82x`rr*-u||o_FfAwjGn}S5Ljw#1&Cup%UUJihdC%F8pRi4&hO<>K^@IsPw{6}mFVdU zBooaXQd5?$>7a9aRK?Vu_@zM%VB=ybYI^>*E~JIzt)-Pst)PWncu+C2VkX^?xQob> zUu>z85H~RxQu$sp&WG$fHK`)RUbMU0wtLYFvsh3TVANLg3p?JI*;Pu7=LX&Z)9XI864 z*hYWcWi^U$tmrq^)Fd>iyRQ0|8<5mUw|U$!MyDyq?+i{&j1GrSI9Fx?BgDsn#N(4w zp86Y^rmB40R3hKAxGz>T<|Kllga=v^f7@twP1LrIFnN$ECT=c*``0c#j-*B!3B&q$ zx4yQ^ej8W|maM0`yT|y5BV&BbMMI4@5#BX9n#jJa-9JQ}m2T!^T`_}x$#A)Puv)`! zvx_UIf(Av*rARM2ghiCjoR@ad90t0a*#9u^7&c>&BN}Ol*nRh}(9^=-Ckt|v$T_Q^!4)+D0u0I6~*ffG0a@z7cus_dE5?)D6kl!OaSqN z8X&P;U1j}XbV^)>(7m~u)@oV*=?y$B_{D|^Ob-Ll*yG~ZY>wF(&%{3Javp&i#*c8W z4jcaB!93}jIOVgH~xw_U*f)RUZMFD`<; zFgKPsp4}EelhDh@qcfD&11`%@e(7cgeS^!6F*~N8` zDbNi=s(|G%v_H%p>sESp;qrsL>dCc$Qai$ku&L{&qG_wz6XXW-GhjxcYT%WlD%`QG zldJn!Q&y(LD!2uTWP8 zvojaGQV7jLUP zmL47tK3en`99+&wHx@p7V!v_`?byyk${O_DKUfss5?J39L43^FpoIi>MH+Dw85*GB z_t`yoIzk-Ei)1VDB`iNCnnfS{v9=W!Q*7_<+!>ON8AgE)LUm{x#=s-Rmy``72IJ|; zV#_bljDKXioe} zsVYzt#g5>wQM+F4?VsA;kNX|+J=7PmKNv^;>P+&P0ZAMgw=Mpu{>K>;EnFGZaowIS zddlI?Q-B`})OD-g%C@+>78*-X%ri88&)$>a*C8r81hv(kKd?L7q%XlYIbXxX@g#NIx!!Rku_@VBAE zEks1;wOrVKU;uydL4hoiZtebB>@!fYQZ>}tcg-hO#(FAGy+~@oCTJnml~8O){WT6* z%-;a(7v>--#Y*pHHMaljqsZ8m2Ax|Qja%{CQ}pP@WPTBih8`xD$$8`zXkP2#U2=l0 zeATpz3^5W7B}vQu5Vrii_~Rgv;edq-d78b+czo^_M5)D_DOzsCVu86Uy%>;W^@1`2 zeJqVmxWf86>GPzlnsoqk7xA%AL+*Vt*)Twg8U=*hvdnGJe?0}70Pg^J8bfLK8tGyw zaYpX5prO&uw319O;Z37!$JvLpXoiU7i>a8UF)lB(UxO6@RKrcKsQrUaZHr_RU;`Zi zJ7VO7DE|{#6}2`-JDmi}p{`%m;wte1T6sCPD31^T2+yNrZ~j5b$Jx(o+_87DH~d7< zifRT2f-{i@>kn)XO{@2r`BOpah=p{VXrDs)8TSjKFb0mFolIBi=mkb5o@cVjv-Io* zu1KBvj3>9!n0!+71+tn3;Co#-zG%5TxS<1*8jYBN#dsoq1Q&?Pe7uCZ+@Nh-w2ljS ze$f;YjC(#THkHOSH0)dhqCUB5I{Tc{uHctd5lMp$`8uG2&o7it!3CX6SIk;JhL;65 zOT}FA*_T$bCLX83=1n*<)?UDW^(@muheM5QsExszWzxN66NSp{Zr-|mYGH}(WASkK zN_+e#1At#oe2fF^moPXuOCXkW*v2bP*H)K{)ti_pdu5jL{r<#nqtLqX6ZZqnCh}~v zmCj|&x*tl~LYXM?$Gd~CKCkPFb^WcmcALzW(BATY1e&f!NPYT@bc2&96uIqQ9c9Ug zM{SyE--bHPPW4{%Hl;EFARb3Sh_Q0M(e<%e*^X~qLi{D2hi(t5Z_O8+^8#$YA}fb6 zN!l~3Qo4;j?3HzmQaDF{UlO+ebv8HlH~KIn9YGC)kjZ*Px4jzOcPyyXI9YGlWcg9O ziE=))aPwPc{;kWFxIeTf^jKiS!7*9qooEf?=~$R-0$|8fC>5g^NwOw zjQ8Ev@G=~*1SeHY62-OLsd-H==8xr_>OgY}BMOf5DGat1l}fXf_HM|P2Li84N;;Eo%DW zz3S-jP+r68nkA_$=)8#j9yS&qO^o4TC+LgnTvRsAeR8*WJ*`w{oAcN8Eh5;u-o}mY z&11dYMz3&<-TJ7z-cA_*x(&SFRQS$h?UCQ%=%VZufN(q=TuM+!(0wEEMN?3DUPg+F zO&+A#^b$GPD+oT1D|(p^q^mnGx~IXxL$94W6mU?n5Et25KKGXo3fs#eh|gFJo#Q|5 zEaS{upK6iy#>zW4nl6@o&W8ehhJZXHcCkjOH7?FF^?b2*=c3BHyW5GFG8`W8{Ll+FB&yd&MCb{|o3LgPEMQyT|V_+JXm7yKV7G>9_)QfM;F9Z^-C zhp#-8JC$5ir37(S|LD)qNtt07-1w`Y`$gVhLLA~A8F8n@j@m~jjN(okaXWtjB9tT7 z^KJdwUbb@DuR6eC!cxr$kN|$rdTbK@Q|XN|o$}K|AsC{W;5M{~b=gJb2c4~_v$xCk zE8WHYp1QGY6TWi}<$8>fn;! ziDJ0u!s97Ukc)s$XAS7Z{XSr0m{s$wyU5@%t44;H!MxEDqQaTDld6fu)n5}j$Msul z@9D+460q$$`hNfB$*03eD$62e>kWx)i|`6-?hYDtBq zs&^5K7p5&gFTwiR#r1)M{Tt=-mUqxbmG%-d74OG|q2vrrXBK>pO`9fY$C-ERIU_7% z_2{rAdhPVuCQqAqyS4f^?TB1_(y#6=S8G&GO+Ojhw|o7sW=p@#>i=j7$-LJxfdZlx zb6{;^rau|QEog)!nw9^w_1j&WS*lCiww-p%l(+10wdk5vxUk~1x^cYMQB~#0RW8$0 zWM*;Mw$;8ICdc5!WOghpZoKsr<}wgT=Ha5C)Kw5$Ya1)X-!&c0f3o1fQAlVVa(9)b zXXpamHe*V=UWS^oqQqo%9%Y>mN4>+4#N{Oup@(MADBb90&(JJo8_pW2s$~TS^jvEJ z{NF*688d>c39u0G%xP&QK1R!;P7bI$ARl3*MO78^IW6(K4U&q?y3&s@&?m<-*cWH) z?|horDAb@CSZa>Nd0m8df)6Mqe#1{+x=aSUCz8-nXH=IRLPMA8AOLJ){>*q9jz1x<93aXa>B%0ern;)BWTGDGh6X z^1c3XZFw|sGhYo}>;_h~oRqB`an7Ifx`<}QjjAeJLPsoccbAws>ntt2ZNNJt(hEZ^ zI$ZrNqA9zpbGd3y7X1;f<7C37`;b?ZGeaPaUu|aA`f!97)i_MAUMVB_eVobbf`DHT zmZ29#&@<2Ta6L=ct7Bh`IUk^RnK??m>`gI_X*5yS?bZn-zz%wT_BF=Rjtp0S7rgKL zR>f>;q=-R?tR7#X^6ASV!(lD?^FG(RpfQ}3nT(RVS)|C7s96swDpJAJNFl506TW!u z$UZ^}eUjFT?S_#!F+N&mt^4neTFeGd$q_k|aAf$La`gl(!u;#Bu*k8BsTO0hKtc4<3D%1A2|9ihoThwi>V$x{ zEi+#6*cMGtT;i2PurK5~G`^|)R9bQf-OT8P$Cg1W0)DyDhXVtNZ)JXN!Jb)9^g}eg zjB3}Dm*X0qzmAI};{b%aFEE(V9iO4+FQ$Kr_NnS>v6BZH$Z|pG@q;AJXPsKLDz)-? z7FW|#^8$5}RgZoU)D98xS^L@vk~?DwX%eC&K@QlcMRG-v?^_;#S02&;)R!1DMv3b1 z&$8;JquO^O###5I_`#fV+NJD2!?kLckQjOn{DdqyMyxd`0N<-B=NF-qRXCKwJqAH^ zIZ<`|>Jd;tqA`>!@~dVZt}rB6r#ryRRnCy=MqLD0Vd3eZqUIXQA+@6rkOg8p(*S|T zJp=`y5c&=xaSq17#L9LX#cqfatP4j9-V=%Q|BVYNGR;Wg1z3G+!5wejLX~yPZq$f!^lj^Mx*4gTRtvHy5?i9 zrdCX+PPeWIUsf-d%t#eK4U9TiKtQRaf%<*7C5aA`17y{3vcQfC&EfnT*K5%T6dved z-tF}GdYd=?Es$Xc>9m0bvS!QEW7xzAeiKYVvg@kG-Sc)Nr$+V)3Xz-`9b*z2X6MjY zIt#bgase8x_@`@&GOAcQ(mCJfrEg&fsn=L|H*V4o;+I>}QJkfH3VhThd)w+Yy_&1F z3k!1+*!;;UlVqB9TW8s@z+S8|Y6H_^Rys1_Ts?sAsUt;rG(De7_6G!@#f_tEj4CZ^ z#pQbLCc&C5BS9ZuqC1pOBA*Q6yxr-%1&S!1#K&j&b*Y+K0of3WU*PgS`|qMmjF`bn zoC>)LDrq*fndlr-*;? z=I37eustZzfQd`z<5RndOw^xiNgE6M3c=!eTFO~eRL-+g_ou60tk@gULk%78(#GTI zk||d|7rft%GFH~52()X1VX%D`$`gSW_UA84GS#x!<-&fU*ilSBXnBRFOA~1T#|>qX z3oT9KPafw#lAh1`foP)Yk1wkQEOl&t93{W z+j_fgHH`$8y_i2BOZ#zk?}AlKgF2a{(u49S?H-(T`s{1gC?Zl7>^|JJ(HRUeXEZTI zJ)+t6z8-#B$%TR2AS&ap)DF3{IqBu^L*q z-nCwBxt?7ogrETsC4uPr<1+aOq=o)pi7wiM=gLd1S}u~dsl(w2?Y$|;hL0lbC z3nIX9i%wPX2gt&~;oO|@k@9ygcwH>tFc84Y_c1uh@43Kc^*r7m}D{a;y#T1sK5a�Z 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'? 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�yxY)DVKxbkk#%+3*nxp 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 ctAL%sQ3vwLqDf=7~T7M;5yg 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

    _J93d;bMn1G!D2i?sDBKbrS7UggA&mBkFo*Jozl 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

    f6eV=uZFPd@Vp%AeAh^ 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štCY-#ld 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ν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 z

    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 z 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

  1. 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

    4vC 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/gd_image.inc.php b/html/includes/jpgraph/src/gd_image.inc.php new file mode 100644 index 0000000000..00ee97db04 --- /dev/null +++ b/html/includes/jpgraph/src/gd_image.inc.php @@ -0,0 +1,2161 @@ +img = &$aImg; + + // Conversion array between color names and RGB + $this->rgb_table = array( + "aqua"=> array(0,255,255), + "lime"=> array(0,255,0), + "teal"=> array(0,128,128), + "whitesmoke"=>array(245,245,245), + "gainsboro"=>array(220,220,220), + "oldlace"=>array(253,245,230), + "linen"=>array(250,240,230), + "antiquewhite"=>array(250,235,215), + "papayawhip"=>array(255,239,213), + "blanchedalmond"=>array(255,235,205), + "bisque"=>array(255,228,196), + "peachpuff"=>array(255,218,185), + "navajowhite"=>array(255,222,173), + "moccasin"=>array(255,228,181), + "cornsilk"=>array(255,248,220), + "ivory"=>array(255,255,240), + "lemonchiffon"=>array(255,250,205), + "seashell"=>array(255,245,238), + "mintcream"=>array(245,255,250), + "azure"=>array(240,255,255), + "aliceblue"=>array(240,248,255), + "lavender"=>array(230,230,250), + "lavenderblush"=>array(255,240,245), + "mistyrose"=>array(255,228,225), + "white"=>array(255,255,255), + "black"=>array(0,0,0), + "darkslategray"=>array(47,79,79), + "dimgray"=>array(105,105,105), + "slategray"=>array(112,128,144), + "lightslategray"=>array(119,136,153), + "gray"=>array(190,190,190), + "lightgray"=>array(211,211,211), + "midnightblue"=>array(25,25,112), + "navy"=>array(0,0,128), + "cornflowerblue"=>array(100,149,237), + "darkslateblue"=>array(72,61,139), + "slateblue"=>array(106,90,205), + "mediumslateblue"=>array(123,104,238), + "lightslateblue"=>array(132,112,255), + "mediumblue"=>array(0,0,205), + "royalblue"=>array(65,105,225), + "blue"=>array(0,0,255), + "dodgerblue"=>array(30,144,255), + "deepskyblue"=>array(0,191,255), + "skyblue"=>array(135,206,235), + "lightskyblue"=>array(135,206,250), + "steelblue"=>array(70,130,180), + "lightred"=>array(211,167,168), + "lightsteelblue"=>array(176,196,222), + "lightblue"=>array(173,216,230), + "powderblue"=>array(176,224,230), + "paleturquoise"=>array(175,238,238), + "darkturquoise"=>array(0,206,209), + "mediumturquoise"=>array(72,209,204), + "turquoise"=>array(64,224,208), + "cyan"=>array(0,255,255), + "lightcyan"=>array(224,255,255), + "cadetblue"=>array(95,158,160), + "mediumaquamarine"=>array(102,205,170), + "aquamarine"=>array(127,255,212), + "darkgreen"=>array(0,100,0), + "darkolivegreen"=>array(85,107,47), + "darkseagreen"=>array(143,188,143), + "seagreen"=>array(46,139,87), + "mediumseagreen"=>array(60,179,113), + "lightseagreen"=>array(32,178,170), + "palegreen"=>array(152,251,152), + "springgreen"=>array(0,255,127), + "lawngreen"=>array(124,252,0), + "green"=>array(0,255,0), + "chartreuse"=>array(127,255,0), + "mediumspringgreen"=>array(0,250,154), + "greenyellow"=>array(173,255,47), + "limegreen"=>array(50,205,50), + "yellowgreen"=>array(154,205,50), + "forestgreen"=>array(34,139,34), + "olivedrab"=>array(107,142,35), + "darkkhaki"=>array(189,183,107), + "khaki"=>array(240,230,140), + "palegoldenrod"=>array(238,232,170), + "lightgoldenrodyellow"=>array(250,250,210), + "lightyellow"=>array(255,255,200), + "yellow"=>array(255,255,0), + "gold"=>array(255,215,0), + "lightgoldenrod"=>array(238,221,130), + "goldenrod"=>array(218,165,32), + "darkgoldenrod"=>array(184,134,11), + "rosybrown"=>array(188,143,143), + "indianred"=>array(205,92,92), + "saddlebrown"=>array(139,69,19), + "sienna"=>array(160,82,45), + "peru"=>array(205,133,63), + "burlywood"=>array(222,184,135), + "beige"=>array(245,245,220), + "wheat"=>array(245,222,179), + "sandybrown"=>array(244,164,96), + "tan"=>array(210,180,140), + "chocolate"=>array(210,105,30), + "firebrick"=>array(178,34,34), + "brown"=>array(165,42,42), + "darksalmon"=>array(233,150,122), + "salmon"=>array(250,128,114), + "lightsalmon"=>array(255,160,122), + "orange"=>array(255,165,0), + "darkorange"=>array(255,140,0), + "coral"=>array(255,127,80), + "lightcoral"=>array(240,128,128), + "tomato"=>array(255,99,71), + "orangered"=>array(255,69,0), + "red"=>array(255,0,0), + "hotpink"=>array(255,105,180), + "deeppink"=>array(255,20,147), + "pink"=>array(255,192,203), + "lightpink"=>array(255,182,193), + "palevioletred"=>array(219,112,147), + "maroon"=>array(176,48,96), + "mediumvioletred"=>array(199,21,133), + "violetred"=>array(208,32,144), + "magenta"=>array(255,0,255), + "violet"=>array(238,130,238), + "plum"=>array(221,160,221), + "orchid"=>array(218,112,214), + "mediumorchid"=>array(186,85,211), + "darkorchid"=>array(153,50,204), + "darkviolet"=>array(148,0,211), + "blueviolet"=>array(138,43,226), + "purple"=>array(160,32,240), + "mediumpurple"=>array(147,112,219), + "thistle"=>array(216,191,216), + "snow1"=>array(255,250,250), + "snow2"=>array(238,233,233), + "snow3"=>array(205,201,201), + "snow4"=>array(139,137,137), + "seashell1"=>array(255,245,238), + "seashell2"=>array(238,229,222), + "seashell3"=>array(205,197,191), + "seashell4"=>array(139,134,130), + "AntiqueWhite1"=>array(255,239,219), + "AntiqueWhite2"=>array(238,223,204), + "AntiqueWhite3"=>array(205,192,176), + "AntiqueWhite4"=>array(139,131,120), + "bisque1"=>array(255,228,196), + "bisque2"=>array(238,213,183), + "bisque3"=>array(205,183,158), + "bisque4"=>array(139,125,107), + "peachPuff1"=>array(255,218,185), + "peachpuff2"=>array(238,203,173), + "peachpuff3"=>array(205,175,149), + "peachpuff4"=>array(139,119,101), + "navajowhite1"=>array(255,222,173), + "navajowhite2"=>array(238,207,161), + "navajowhite3"=>array(205,179,139), + "navajowhite4"=>array(139,121,94), + "lemonchiffon1"=>array(255,250,205), + "lemonchiffon2"=>array(238,233,191), + "lemonchiffon3"=>array(205,201,165), + "lemonchiffon4"=>array(139,137,112), + "ivory1"=>array(255,255,240), + "ivory2"=>array(238,238,224), + "ivory3"=>array(205,205,193), + "ivory4"=>array(139,139,131), + "honeydew"=>array(193,205,193), + "lavenderblush1"=>array(255,240,245), + "lavenderblush2"=>array(238,224,229), + "lavenderblush3"=>array(205,193,197), + "lavenderblush4"=>array(139,131,134), + "mistyrose1"=>array(255,228,225), + "mistyrose2"=>array(238,213,210), + "mistyrose3"=>array(205,183,181), + "mistyrose4"=>array(139,125,123), + "azure1"=>array(240,255,255), + "azure2"=>array(224,238,238), + "azure3"=>array(193,205,205), + "azure4"=>array(131,139,139), + "slateblue1"=>array(131,111,255), + "slateblue2"=>array(122,103,238), + "slateblue3"=>array(105,89,205), + "slateblue4"=>array(71,60,139), + "royalblue1"=>array(72,118,255), + "royalblue2"=>array(67,110,238), + "royalblue3"=>array(58,95,205), + "royalblue4"=>array(39,64,139), + "dodgerblue1"=>array(30,144,255), + "dodgerblue2"=>array(28,134,238), + "dodgerblue3"=>array(24,116,205), + "dodgerblue4"=>array(16,78,139), + "steelblue1"=>array(99,184,255), + "steelblue2"=>array(92,172,238), + "steelblue3"=>array(79,148,205), + "steelblue4"=>array(54,100,139), + "deepskyblue1"=>array(0,191,255), + "deepskyblue2"=>array(0,178,238), + "deepskyblue3"=>array(0,154,205), + "deepskyblue4"=>array(0,104,139), + "skyblue1"=>array(135,206,255), + "skyblue2"=>array(126,192,238), + "skyblue3"=>array(108,166,205), + "skyblue4"=>array(74,112,139), + "lightskyblue1"=>array(176,226,255), + "lightskyblue2"=>array(164,211,238), + "lightskyblue3"=>array(141,182,205), + "lightskyblue4"=>array(96,123,139), + "slategray1"=>array(198,226,255), + "slategray2"=>array(185,211,238), + "slategray3"=>array(159,182,205), + "slategray4"=>array(108,123,139), + "lightsteelblue1"=>array(202,225,255), + "lightsteelblue2"=>array(188,210,238), + "lightsteelblue3"=>array(162,181,205), + "lightsteelblue4"=>array(110,123,139), + "lightblue1"=>array(191,239,255), + "lightblue2"=>array(178,223,238), + "lightblue3"=>array(154,192,205), + "lightblue4"=>array(104,131,139), + "lightcyan1"=>array(224,255,255), + "lightcyan2"=>array(209,238,238), + "lightcyan3"=>array(180,205,205), + "lightcyan4"=>array(122,139,139), + "paleturquoise1"=>array(187,255,255), + "paleturquoise2"=>array(174,238,238), + "paleturquoise3"=>array(150,205,205), + "paleturquoise4"=>array(102,139,139), + "cadetblue1"=>array(152,245,255), + "cadetblue2"=>array(142,229,238), + "cadetblue3"=>array(122,197,205), + "cadetblue4"=>array(83,134,139), + "turquoise1"=>array(0,245,255), + "turquoise2"=>array(0,229,238), + "turquoise3"=>array(0,197,205), + "turquoise4"=>array(0,134,139), + "cyan1"=>array(0,255,255), + "cyan2"=>array(0,238,238), + "cyan3"=>array(0,205,205), + "cyan4"=>array(0,139,139), + "darkslategray1"=>array(151,255,255), + "darkslategray2"=>array(141,238,238), + "darkslategray3"=>array(121,205,205), + "darkslategray4"=>array(82,139,139), + "aquamarine1"=>array(127,255,212), + "aquamarine2"=>array(118,238,198), + "aquamarine3"=>array(102,205,170), + "aquamarine4"=>array(69,139,116), + "darkseagreen1"=>array(193,255,193), + "darkseagreen2"=>array(180,238,180), + "darkseagreen3"=>array(155,205,155), + "darkseagreen4"=>array(105,139,105), + "seagreen1"=>array(84,255,159), + "seagreen2"=>array(78,238,148), + "seagreen3"=>array(67,205,128), + "seagreen4"=>array(46,139,87), + "palegreen1"=>array(154,255,154), + "palegreen2"=>array(144,238,144), + "palegreen3"=>array(124,205,124), + "palegreen4"=>array(84,139,84), + "springgreen1"=>array(0,255,127), + "springgreen2"=>array(0,238,118), + "springgreen3"=>array(0,205,102), + "springgreen4"=>array(0,139,69), + "chartreuse1"=>array(127,255,0), + "chartreuse2"=>array(118,238,0), + "chartreuse3"=>array(102,205,0), + "chartreuse4"=>array(69,139,0), + "olivedrab1"=>array(192,255,62), + "olivedrab2"=>array(179,238,58), + "olivedrab3"=>array(154,205,50), + "olivedrab4"=>array(105,139,34), + "darkolivegreen1"=>array(202,255,112), + "darkolivegreen2"=>array(188,238,104), + "darkolivegreen3"=>array(162,205,90), + "darkolivegreen4"=>array(110,139,61), + "khaki1"=>array(255,246,143), + "khaki2"=>array(238,230,133), + "khaki3"=>array(205,198,115), + "khaki4"=>array(139,134,78), + "lightgoldenrod1"=>array(255,236,139), + "lightgoldenrod2"=>array(238,220,130), + "lightgoldenrod3"=>array(205,190,112), + "lightgoldenrod4"=>array(139,129,76), + "yellow1"=>array(255,255,0), + "yellow2"=>array(238,238,0), + "yellow3"=>array(205,205,0), + "yellow4"=>array(139,139,0), + "gold1"=>array(255,215,0), + "gold2"=>array(238,201,0), + "gold3"=>array(205,173,0), + "gold4"=>array(139,117,0), + "goldenrod1"=>array(255,193,37), + "goldenrod2"=>array(238,180,34), + "goldenrod3"=>array(205,155,29), + "goldenrod4"=>array(139,105,20), + "darkgoldenrod1"=>array(255,185,15), + "darkgoldenrod2"=>array(238,173,14), + "darkgoldenrod3"=>array(205,149,12), + "darkgoldenrod4"=>array(139,101,8), + "rosybrown1"=>array(255,193,193), + "rosybrown2"=>array(238,180,180), + "rosybrown3"=>array(205,155,155), + "rosybrown4"=>array(139,105,105), + "indianred1"=>array(255,106,106), + "indianred2"=>array(238,99,99), + "indianred3"=>array(205,85,85), + "indianred4"=>array(139,58,58), + "sienna1"=>array(255,130,71), + "sienna2"=>array(238,121,66), + "sienna3"=>array(205,104,57), + "sienna4"=>array(139,71,38), + "burlywood1"=>array(255,211,155), + "burlywood2"=>array(238,197,145), + "burlywood3"=>array(205,170,125), + "burlywood4"=>array(139,115,85), + "wheat1"=>array(255,231,186), + "wheat2"=>array(238,216,174), + "wheat3"=>array(205,186,150), + "wheat4"=>array(139,126,102), + "tan1"=>array(255,165,79), + "tan2"=>array(238,154,73), + "tan3"=>array(205,133,63), + "tan4"=>array(139,90,43), + "chocolate1"=>array(255,127,36), + "chocolate2"=>array(238,118,33), + "chocolate3"=>array(205,102,29), + "chocolate4"=>array(139,69,19), + "firebrick1"=>array(255,48,48), + "firebrick2"=>array(238,44,44), + "firebrick3"=>array(205,38,38), + "firebrick4"=>array(139,26,26), + "brown1"=>array(255,64,64), + "brown2"=>array(238,59,59), + "brown3"=>array(205,51,51), + "brown4"=>array(139,35,35), + "salmon1"=>array(255,140,105), + "salmon2"=>array(238,130,98), + "salmon3"=>array(205,112,84), + "salmon4"=>array(139,76,57), + "lightsalmon1"=>array(255,160,122), + "lightsalmon2"=>array(238,149,114), + "lightsalmon3"=>array(205,129,98), + "lightsalmon4"=>array(139,87,66), + "orange1"=>array(255,165,0), + "orange2"=>array(238,154,0), + "orange3"=>array(205,133,0), + "orange4"=>array(139,90,0), + "darkorange1"=>array(255,127,0), + "darkorange2"=>array(238,118,0), + "darkorange3"=>array(205,102,0), + "darkorange4"=>array(139,69,0), + "coral1"=>array(255,114,86), + "coral2"=>array(238,106,80), + "coral3"=>array(205,91,69), + "coral4"=>array(139,62,47), + "tomato1"=>array(255,99,71), + "tomato2"=>array(238,92,66), + "tomato3"=>array(205,79,57), + "tomato4"=>array(139,54,38), + "orangered1"=>array(255,69,0), + "orangered2"=>array(238,64,0), + "orangered3"=>array(205,55,0), + "orangered4"=>array(139,37,0), + "deeppink1"=>array(255,20,147), + "deeppink2"=>array(238,18,137), + "deeppink3"=>array(205,16,118), + "deeppink4"=>array(139,10,80), + "hotpink1"=>array(255,110,180), + "hotpink2"=>array(238,106,167), + "hotpink3"=>array(205,96,144), + "hotpink4"=>array(139,58,98), + "pink1"=>array(255,181,197), + "pink2"=>array(238,169,184), + "pink3"=>array(205,145,158), + "pink4"=>array(139,99,108), + "lightpink1"=>array(255,174,185), + "lightpink2"=>array(238,162,173), + "lightpink3"=>array(205,140,149), + "lightpink4"=>array(139,95,101), + "palevioletred1"=>array(255,130,171), + "palevioletred2"=>array(238,121,159), + "palevioletred3"=>array(205,104,137), + "palevioletred4"=>array(139,71,93), + "maroon1"=>array(255,52,179), + "maroon2"=>array(238,48,167), + "maroon3"=>array(205,41,144), + "maroon4"=>array(139,28,98), + "violetred1"=>array(255,62,150), + "violetred2"=>array(238,58,140), + "violetred3"=>array(205,50,120), + "violetred4"=>array(139,34,82), + "magenta1"=>array(255,0,255), + "magenta2"=>array(238,0,238), + "magenta3"=>array(205,0,205), + "magenta4"=>array(139,0,139), + "mediumred"=>array(140,34,34), + "orchid1"=>array(255,131,250), + "orchid2"=>array(238,122,233), + "orchid3"=>array(205,105,201), + "orchid4"=>array(139,71,137), + "plum1"=>array(255,187,255), + "plum2"=>array(238,174,238), + "plum3"=>array(205,150,205), + "plum4"=>array(139,102,139), + "mediumorchid1"=>array(224,102,255), + "mediumorchid2"=>array(209,95,238), + "mediumorchid3"=>array(180,82,205), + "mediumorchid4"=>array(122,55,139), + "darkorchid1"=>array(191,62,255), + "darkorchid2"=>array(178,58,238), + "darkorchid3"=>array(154,50,205), + "darkorchid4"=>array(104,34,139), + "purple1"=>array(155,48,255), + "purple2"=>array(145,44,238), + "purple3"=>array(125,38,205), + "purple4"=>array(85,26,139), + "mediumpurple1"=>array(171,130,255), + "mediumpurple2"=>array(159,121,238), + "mediumpurple3"=>array(137,104,205), + "mediumpurple4"=>array(93,71,139), + "thistle1"=>array(255,225,255), + "thistle2"=>array(238,210,238), + "thistle3"=>array(205,181,205), + "thistle4"=>array(139,123,139), + "gray1"=>array(10,10,10), + "gray2"=>array(40,40,30), + "gray3"=>array(70,70,70), + "gray4"=>array(100,100,100), + "gray5"=>array(130,130,130), + "gray6"=>array(160,160,160), + "gray7"=>array(190,190,190), + "gray8"=>array(210,210,210), + "gray9"=>array(240,240,240), + "darkgray"=>array(100,100,100), + "darkblue"=>array(0,0,139), + "darkcyan"=>array(0,139,139), + "darkmagenta"=>array(139,0,139), + "darkred"=>array(139,0,0), + "silver"=>array(192, 192, 192), + "eggplant"=>array(144,176,168), + "lightgreen"=>array(144,238,144)); + } +//---------------- +// PUBLIC METHODS + // Colors can be specified as either + // 1. #xxxxxx HTML style + // 2. "colorname" as a named color + // 3. array(r,g,b) RGB triple + // This function translates this to a native RGB format and returns an + // RGB triple. + function Color($aColor) { + if (is_string($aColor)) { + // Strip of any alpha factor + $pos = strpos($aColor,'@'); + if( $pos === false ) { + $alpha = 0; + } + else { + $pos2 = strpos($aColor,':'); + if( $pos2===false ) + $pos2 = $pos-1; // Sentinel + if( $pos > $pos2 ) { + $alpha = str_replace(',','.',substr($aColor,$pos+1)); + $aColor = substr($aColor,0,$pos); + } + else { + $alpha = substr($aColor,$pos+1,$pos2-$pos-1); + $aColor = substr($aColor,0,$pos).substr($aColor,$pos2); + } + } + + // Extract potential adjustment figure at end of color + // specification + $pos = strpos($aColor,":"); + if( $pos === false ) { + $adj = 1.0; + } + else { + $adj = 0.0 + str_replace(',','.',substr($aColor,$pos+1)); + $aColor = substr($aColor,0,$pos); + } + if( $adj < 0 ) + JpGraphError::RaiseL(25077);//('Adjustment factor for color must be > 0'); + + if (substr($aColor, 0, 1) == "#") { + $r = hexdec(substr($aColor, 1, 2)); + $g = hexdec(substr($aColor, 3, 2)); + $b = hexdec(substr($aColor, 5, 2)); + } else { + if(!isset($this->rgb_table[$aColor]) ) + JpGraphError::RaiseL(25078,$aColor);//(" Unknown color: $aColor"); + $tmp=$this->rgb_table[$aColor]; + $r = $tmp[0]; + $g = $tmp[1]; + $b = $tmp[2]; + } + // Scale adj so that an adj=2 always + // makes the color 100% white (i.e. 255,255,255. + // and adj=1 neutral and adj=0 black. + if( $adj > 1 ) { + $m = ($adj-1.0)*(255-min(255,min($r,min($g,$b)))); + return array(min(255,$r+$m), min(255,$g+$m), min(255,$b+$m),$alpha); + } + elseif( $adj < 1 ) { + $m = ($adj-1.0)*max(255,max($r,max($g,$b))); + return array(max(0,$r+$m), max(0,$g+$m), max(0,$b+$m),$alpha); + } + else { + return array($r,$g,$b,$alpha); + } + + } elseif( is_array($aColor) ) { + if( count($aColor)==3 ) { + $aColor[3]=0; + return $aColor; + } + else + return $aColor; + } + else + JpGraphError::RaiseL(25079,$aColor,count($aColor));//(" Unknown color specification: $aColor , size=".count($aColor)); + } + + // Compare two colors + // return true if equal + function Equal($aCol1,$aCol2) { + $c1 = $this->Color($aCol1); + $c2 = $this->Color($aCol2); + if( $c1[0]==$c2[0] && $c1[1]==$c2[1] && $c1[2]==$c2[2] ) + return true; + else + return false; + } + + // Allocate a new color in the current image + // Return new color index, -1 if no more colors could be allocated + function Allocate($aColor,$aAlpha=0.0) { + list ($r, $g, $b, $a) = $this->color($aColor); + // If alpha is specified in the color string then this + // takes precedence over the second argument + if( $a > 0 ) + $aAlpha = $a; + if( $aAlpha < 0 || $aAlpha > 1 ) { + JpGraphError::RaiseL(25080);//('Alpha parameter for color must be between 0.0 and 1.0'); + } + return imagecolorresolvealpha($this->img, $r, $g, $b, round($aAlpha * 127)); + } +} // Class + + +//=================================================== +// CLASS Image +// Description: Wrapper class with some goodies to form the +// Interface to low level image drawing routines. +//=================================================== +class Image { + var $img_format; + var $expired=true; + var $img=null; + var $left_margin=30,$right_margin=20,$top_margin=20,$bottom_margin=30; + var $plotwidth=0,$plotheight=0; + var $rgb=null; + var $current_color,$current_color_name; + var $lastx=0, $lasty=0; + var $width=0, $height=0; + var $line_weight=1; + var $line_style=1; // Default line style is solid + var $obs_list=array(); + var $font_size=12,$font_family=FF_FONT1, $font_style=FS_NORMAL; + var $font_file=''; + var $text_halign="left",$text_valign="bottom"; + var $ttf=null; + var $use_anti_aliasing=false; + var $quality=null; + var $colorstack=array(),$colorstackidx=0; + var $canvascolor = 'white' ; + var $langconv = null ; + + //--------------- + // CONSTRUCTOR + function Image($aWidth,$aHeight,$aFormat=DEFAULT_GFORMAT,$aSetAutoMargin=true) { + $this->CreateImgCanvas($aWidth,$aHeight); + if( $aSetAutoMargin ) + $this->SetAutoMargin(); + + if( !$this->SetImgFormat($aFormat) ) { + JpGraphError::RaiseL(25081,$aFormat);//("JpGraph: Selected graphic format is either not supported or unknown [$aFormat]"); + } + $this->ttf = new TTF(); + $this->langconv = new LanguageConv(); + } + + // Should we use anti-aliasing. Note: This really slows down graphics! + function SetAntiAliasing() { + $this->use_anti_aliasing=true; + } + + function CreateRawCanvas($aWidth=0,$aHeight=0) { + if( $aWidth <= 1 || $aHeight <= 1 ) { + JpGraphError::RaiseL(25082,$aWidth,$aHeight);//("Illegal sizes specified for width or height when creating an image, (width=$aWidth, height=$aHeight)"); + } + $this->img = @imagecreatetruecolor($aWidth, $aHeight); + if( $this->img < 1 ) { + JpGraphError::RaiseL(25126); + //die("Can't create truecolor image. Check that you really have GD2 library installed."); + } + $this->SetAlphaBlending(); + if( $this->rgb != null ) + $this->rgb->img = $this->img ; + else + $this->rgb = new RGB($this->img); + } + + function CloneCanvasH() { + $oldimage = $this->img; + $this->CreateRawCanvas($this->width,$this->height); + imagecopy($this->img,$oldimage,0,0,0,0,$this->width,$this->height); + return $oldimage; + } + + function CreateImgCanvas($aWidth=0,$aHeight=0) { + + $old = array($this->img,$this->width,$this->height); + + $aWidth = round($aWidth); + $aHeight = round($aHeight); + + $this->width=$aWidth; + $this->height=$aHeight; + + + if( $aWidth==0 || $aHeight==0 ) { + // We will set the final size later. + // Note: The size must be specified before any other + // img routines that stroke anything are called. + $this->img = null; + $this->rgb = null; + return $old; + } + + $this->CreateRawCanvas($aWidth,$aHeight); + + // Set canvas color (will also be the background color for a + // a pallett image + $this->SetColor($this->canvascolor); + $this->FilledRectangle(0,0,$aWidth,$aHeight); + + return $old ; + } + + function CopyCanvasH($aToHdl,$aFromHdl,$aToX,$aToY,$aFromX,$aFromY,$aWidth,$aHeight,$aw=-1,$ah=-1) { + if( $aw === -1 ) { + $aw = $aWidth; + $ah = $aHeight; + $f = 'imagecopyresized'; + } + else { + $f = 'imagecopyresampled' ; + } + $f($aToHdl,$aFromHdl, + $aToX,$aToY,$aFromX,$aFromY, $aWidth,$aHeight,$aw,$ah); + } + + function Copy($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1) { + $this->CopyCanvasH($this->img,$fromImg,$toX,$toY,$fromX,$fromY, + $toWidth,$toHeight,$fromWidth,$fromHeight); + } + + function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1,$aMix=100) { + if( $aMix == 100 ) { + $this->CopyCanvasH($this->img,$fromImg, + $toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth,$fromHeight); + } + else { + if( ($fromWidth != -1 && ($fromWidth != $toWidth)) || + ($fromHeight != -1 && ($fromHeight != $fromHeight)) ) { + // Create a new canvas that will hold the re-scaled original from image + if( $toWidth <= 1 || $toHeight <= 1 ) { + JpGraphError::RaiseL(25083);//('Illegal image size when copying image. Size for copied to image is 1 pixel or less.'); + } + $tmpimg = @imagecreatetruecolor($toWidth, $toHeight); + if( $tmpimg < 1 ) { + JpGraphError::RaiseL(25084);//('Failed to create temporary GD canvas. Out of memory ?'); + } + $this->CopyCanvasH($tmpimg,$fromImg,0,0,0,0, + $toWidth,$toHeight,$fromWidth,$fromHeight); + $fromImg = $tmpimg; + } + imagecopymerge($this->img,$fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$aMix); + } + } + + function GetWidth($aImg=null) { + if( $aImg === null ) + $aImg = $this->img; + return imagesx($aImg); + } + + function GetHeight($aImg=null) { + if( $aImg === null ) + $aImg = $this->img; + return imagesy($aImg); + } + + function CreateFromString($aStr) { + $img = @imagecreatefromstring($aStr); + if( $img === false ) { + JpGraphError::RaiseL(25085);//('An image can not be created from the supplied string. It is either in a format not supported or the string is representing an corrupt image.'); + } + return $img; + } + + function SetCanvasH($aHdl) { + $this->img = $aHdl; + $this->rgb->img = $aHdl; + } + + function SetCanvasColor($aColor) { + $this->canvascolor = $aColor ; + } + + function SetAlphaBlending($aFlg=true) { + ImageAlphaBlending($this->img,$aFlg); + } + + + function SetAutoMargin() { + GLOBAL $gJpgBrandTiming; + $min_bm=5; + /* + if( $gJpgBrandTiming ) + $min_bm=15; + */ + $lm = min(40,$this->width/7); + $rm = min(20,$this->width/10); + $tm = max(5,$this->height/7); + $bm = max($min_bm,$this->height/7); + + $this->SetMargin($lm,$rm,$tm,$bm); + } + + + //--------------- + // PUBLIC METHODS + + function SetFont($family,$style=FS_NORMAL,$size=10) { + $this->font_family=$family; + $this->font_style=$style; + $this->font_size=$size; + $this->font_file=''; + if( ($this->font_family==FF_FONT1 || $this->font_family==FF_FONT2) && $this->font_style==FS_BOLD ){ + ++$this->font_family; + } + if( $this->font_family > FF_FONT2+1 ) { // A TTF font so get the font file + + // Check that this PHP has support for TTF fonts + if( !function_exists('imagettfbbox') ) { + JpGraphError::RaiseL(25087);//('This PHP build has not been configured with TTF support. You need to recompile your PHP installation with FreeType support.'); + } + $this->font_file = $this->ttf->File($this->font_family,$this->font_style); + } + } + + // Get the specific height for a text string + function GetTextHeight($txt="",$angle=0) { + $tmp = split("\n",$txt); + $n = count($tmp); + $m=0; + for($i=0; $i< $n; ++$i) + $m = max($m,strlen($tmp[$i])); + + if( $this->font_family <= FF_FONT2+1 ) { + if( $angle==0 ) { + $h = imagefontheight($this->font_family); + if( $h === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + + return $n*$h; + } + else { + $w = @imagefontwidth($this->font_family); + if( $w === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + + return $m*$w; + } + } + else { + $bbox = $this->GetTTFBBox($txt,$angle); + return $bbox[1]-$bbox[5]; + } + } + + // Estimate font height + function GetFontHeight($angle=0) { + $txt = "XOMg"; + return $this->GetTextHeight($txt,$angle); + } + + // Approximate font width with width of letter "O" + function GetFontWidth($angle=0) { + $txt = 'O'; + return $this->GetTextWidth($txt,$angle); + } + + // Get actual width of text in absolute pixels + function GetTextWidth($txt,$angle=0) { + + $tmp = split("\n",$txt); + $n = count($tmp); + if( $this->font_family <= FF_FONT2+1 ) { + + $m=0; + for($i=0; $i < $n; ++$i) { + $l=strlen($tmp[$i]); + if( $l > $m ) { + $m = $l; + } + } + + if( $angle==0 ) { + $w = @imagefontwidth($this->font_family); + if( $w === false ) { + JpGraphError::RaiseL(25088);//('You have a misconfigured GD font support. The call to imagefontwidth() fails.'); + } + return $m*$w; + } + else { + // 90 degrees internal so height becomes width + $h = @imagefontheight($this->font_family); + if( $h === false ) { + JpGraphError::RaiseL(25089);//('You have a misconfigured GD font support. The call to imagefontheight() fails.'); + } + return $n*$h; + } + } + else { + // For TTF fonts we must walk through a lines and find the + // widest one which we use as the width of the multi-line + // paragraph + $m=0; + for( $i=0; $i < $n; ++$i ) { + $bbox = $this->GetTTFBBox($tmp[$i],$angle); + $mm = $bbox[2] - $bbox[0]; + if( $mm > $m ) + $m = $mm; + } + return $m; + } + } + + // Draw text with a box around it + function StrokeBoxedText($x,$y,$txt,$dir=0,$fcolor="white",$bcolor="black", + $shadowcolor=false,$paragraph_align="left", + $xmarg=6,$ymarg=4,$cornerradius=0,$dropwidth=3) { + + if( !is_numeric($dir) ) { + if( $dir=="h" ) $dir=0; + elseif( $dir=="v" ) $dir=90; + else JpGraphError::RaiseL(25090,$dir);//(" Unknown direction specified in call to StrokeBoxedText() [$dir]"); + } + + if( $this->font_family >= FF_FONT0 && $this->font_family <= FF_FONT2+1) { + $width=$this->GetTextWidth($txt,$dir) ; + $height=$this->GetTextHeight($txt,$dir) ; + } + else { + $width=$this->GetBBoxWidth($txt,$dir) ; + $height=$this->GetBBoxHeight($txt,$dir) ; + } + + $height += 2*$ymarg; + $width += 2*$xmarg; + + if( $this->text_halign=="right" ) $x -= $width; + elseif( $this->text_halign=="center" ) $x -= $width/2; + if( $this->text_valign=="bottom" ) $y -= $height; + elseif( $this->text_valign=="center" ) $y -= $height/2; + + $olda = $this->SetAngle(0); + + if( $shadowcolor ) { + $this->PushColor($shadowcolor); + $this->FilledRoundedRectangle($x-$xmarg+$dropwidth,$y-$ymarg+$dropwidth, + $x+$width+$dropwidth,$y+$height-$ymarg+$dropwidth, + $cornerradius); + $this->PopColor(); + $this->PushColor($fcolor); + $this->FilledRoundedRectangle($x-$xmarg,$y-$ymarg, + $x+$width,$y+$height-$ymarg, + $cornerradius); + $this->PopColor(); + $this->PushColor($bcolor); + $this->RoundedRectangle($x-$xmarg,$y-$ymarg, + $x+$width,$y+$height-$ymarg,$cornerradius); + $this->PopColor(); + } + else { + if( $fcolor ) { + $oc=$this->current_color; + $this->SetColor($fcolor); + $this->FilledRoundedRectangle($x-$xmarg,$y-$ymarg,$x+$width,$y+$height-$ymarg,$cornerradius); + $this->current_color=$oc; + } + if( $bcolor ) { + $oc=$this->current_color; + $this->SetColor($bcolor); + $this->RoundedRectangle($x-$xmarg,$y-$ymarg,$x+$width,$y+$height-$ymarg,$cornerradius); + $this->current_color=$oc; + } + } + + $h=$this->text_halign; + $v=$this->text_valign; + $this->SetTextAlign("left","top"); + $this->StrokeText($x, $y, $txt, $dir, $paragraph_align); + $bb = array($x-$xmarg,$y+$height-$ymarg,$x+$width,$y+$height-$ymarg, + $x+$width,$y-$ymarg,$x-$xmarg,$y-$ymarg); + $this->SetTextAlign($h,$v); + + $this->SetAngle($olda); + + return $bb; + } + + // Set text alignment + function SetTextAlign($halign,$valign="bottom") { + $this->text_halign=$halign; + $this->text_valign=$valign; + } + + + function _StrokeBuiltinFont($x,$y,$txt,$dir=0,$paragraph_align="left",&$aBoundingBox,$aDebug=false) { + + if( is_numeric($dir) && $dir!=90 && $dir!=0) + JpGraphError::RaiseL(25091);//(" Internal font does not support drawing text at arbitrary angle. Use TTF fonts instead."); + + $h=$this->GetTextHeight($txt); + $fh=$this->GetFontHeight(); + $w=$this->GetTextWidth($txt); + + if( $this->text_halign=="right") + $x -= $dir==0 ? $w : $h; + elseif( $this->text_halign=="center" ) { + // For center we subtract 1 pixel since this makes the middle + // be prefectly in the middle + $x -= $dir==0 ? $w/2-1 : $h/2; + } + if( $this->text_valign=="top" ) + $y += $dir==0 ? $h : $w; + elseif( $this->text_valign=="center" ) + $y += $dir==0 ? $h/2 : $w/2; + + if( $dir==90 ) { + imagestringup($this->img,$this->font_family,$x,$y,$txt,$this->current_color); + $aBoundingBox = array(round($x),round($y),round($x),round($y-$w),round($x+$h),round($y-$w),round($x+$h),round($y)); + if( $aDebug ) { + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($aBoundingBox,true); + $this->PopColor(); + } + } + else { + if( ereg("\n",$txt) ) { + $tmp = split("\n",$txt); + for($i=0; $i < count($tmp); ++$i) { + $w1 = $this->GetTextWidth($tmp[$i]); + if( $paragraph_align=="left" ) { + imagestring($this->img,$this->font_family,$x,$y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + elseif( $paragraph_align=="right" ) { + imagestring($this->img,$this->font_family,$x+($w-$w1), + $y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + else { + imagestring($this->img,$this->font_family,$x+$w/2-$w1/2, + $y-$h+1+$i*$fh,$tmp[$i],$this->current_color); + } + } + } + else { + //Put the text + imagestring($this->img,$this->font_family,$x,$y-$h+1,$txt,$this->current_color); + } + if( $aDebug ) { + // Draw the bounding rectangle and the bounding box + $p1 = array(round($x),round($y),round($x),round($y-$h),round($x+$w),round($y-$h),round($x+$w),round($y)); + + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($p1,true); + $this->PopColor(); + + } + $aBoundingBox=array(round($x),round($y),round($x),round($y-$h),round($x+$w),round($y-$h),round($x+$w),round($y)); + } + } + + function AddTxtCR($aTxt) { + // If the user has just specified a '\n' + // instead of '\n\t' we have to add '\r' since + // the width will be too muchy otherwise since when + // we print we stroke the individually lines by hand. + $e = explode("\n",$aTxt); + $n = count($e); + for($i=0; $i<$n; ++$i) { + $e[$i]=str_replace("\r","",$e[$i]); + } + return implode("\n\r",$e); + } + + function GetTTFBBox($aTxt,$aAngle=0) { + $bbox = @ImageTTFBBox($this->font_size,$aAngle,$this->font_file,$aTxt); + if( $bbox === false ) { + JpGraphError::RaiseL(25092,$this->font_file); +//("There is either a configuration problem with TrueType or a problem reading font file (".$this->font_file."). Make sure file exists and is in a readable place for the HTTP process. (If 'basedir' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try uppgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library."); + } + return $bbox; + } + + function GetBBoxTTF($aTxt,$aAngle=0) { + // Normalize the bounding box to become a minimum + // enscribing rectangle + + $aTxt = $this->AddTxtCR($aTxt); + + if( !is_readable($this->font_file) ) { + JpGraphError::RaiseL(25093,$this->font_file); +//('Can not read font file ('.$this->font_file.') in call to Image::GetBBoxTTF. Please make sure that you have set a font before calling this method and that the font is installed in the TTF directory.'); + } + $bbox = $this->GetTTFBBox($aTxt,$aAngle); + + if( $aAngle==0 ) + return $bbox; + if( $aAngle >= 0 ) { + if( $aAngle <= 90 ) { //<=0 + $bbox = array($bbox[6],$bbox[1],$bbox[2],$bbox[1], + $bbox[2],$bbox[5],$bbox[6],$bbox[5]); + } + elseif( $aAngle <= 180 ) { //<= 2 + $bbox = array($bbox[4],$bbox[7],$bbox[0],$bbox[7], + $bbox[0],$bbox[3],$bbox[4],$bbox[3]); + } + elseif( $aAngle <= 270 ) { //<= 3 + $bbox = array($bbox[2],$bbox[5],$bbox[6],$bbox[5], + $bbox[6],$bbox[1],$bbox[2],$bbox[1]); + } + else { + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + } + elseif( $aAngle < 0 ) { + if( $aAngle <= -270 ) { // <= -3 + $bbox = array($bbox[6],$bbox[1],$bbox[2],$bbox[1], + $bbox[2],$bbox[5],$bbox[6],$bbox[5]); + } + elseif( $aAngle <= -180 ) { // <= -2 + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + elseif( $aAngle <= -90 ) { // <= -1 + $bbox = array($bbox[2],$bbox[5],$bbox[6],$bbox[5], + $bbox[6],$bbox[1],$bbox[2],$bbox[1]); + } + else { + $bbox = array($bbox[0],$bbox[3],$bbox[4],$bbox[3], + $bbox[4],$bbox[7],$bbox[0],$bbox[7]); + } + } + return $bbox; + } + + function GetBBoxHeight($aTxt,$aAngle=0) { + $box = $this->GetBBoxTTF($aTxt,$aAngle); + return $box[1]-$box[7]+1; + } + + function GetBBoxWidth($aTxt,$aAngle=0) { + $box = $this->GetBBoxTTF($aTxt,$aAngle); + return $box[2]-$box[0]+1; + } + + function _StrokeTTF($x,$y,$txt,$dir=0,$paragraph_align="left",&$aBoundingBox,$debug=false) { + + // Setupo default inter line margin for paragraphs to + // 25% of the font height. + $ConstLineSpacing = 0.25 ; + + // Remember the anchor point before adjustment + if( $debug ) { + $ox=$x; + $oy=$y; + } + + if( !ereg("\n",$txt) || ($dir>0 && ereg("\n",$txt)) ) { + // Format a single line + + $txt = $this->AddTxtCR($txt); + + $bbox=$this->GetBBoxTTF($txt,$dir); + + // Align x,y ot lower left corner of bbox + $x -= $bbox[0]; + $y -= $bbox[1]; + + // Note to self: "topanchor" is deprecated after we changed the + // bopunding box stuff. + if( $this->text_halign=="right" || $this->text_halign=="topanchor" ) + $x -= $bbox[2]-$bbox[0]; + elseif( $this->text_halign=="center" ) $x -= ($bbox[2]-$bbox[0])/2; + + if( $this->text_valign=="top" ) $y += abs($bbox[5])+$bbox[1]; + elseif( $this->text_valign=="center" ) $y -= ($bbox[5]-$bbox[1])/2; + + ImageTTFText ($this->img, $this->font_size, $dir, $x, $y, + $this->current_color,$this->font_file,$txt); + + // Calculate and return the co-ordinates for the bounding box + $box=@ImageTTFBBox($this->font_size,$dir,$this->font_file,$txt); + $p1 = array(); + + + for($i=0; $i < 4; ++$i) { + $p1[] = round($box[$i*2]+$x); + $p1[] = round($box[$i*2+1]+$y); + } + $aBoundingBox = $p1; + + // Debugging code to highlight the bonding box and bounding rectangle + // For text at 0 degrees the bounding box and bounding rectangle are the + // same + if( $debug ) { + // Draw the bounding rectangle and the bounding box + $box=@ImageTTFBBox($this->font_size,$dir,$this->font_file,$txt); + $p = array(); + $p1 = array(); + for($i=0; $i < 4; ++$i) { + $p[] = $bbox[$i*2]+$x; + $p[] = $bbox[$i*2+1]+$y; + $p1[] = $box[$i*2]+$x; + $p1[] = $box[$i*2+1]+$y; + } + + // Draw bounding box + $this->PushColor('green'); + $this->Polygon($p1,true); + $this->PopColor(); + + // Draw bounding rectangle + $this->PushColor('darkgreen'); + $this->Polygon($p,true); + $this->PopColor(); + + // Draw a cross at the anchor point + $this->PushColor('red'); + $this->Line($ox-15,$oy,$ox+15,$oy); + $this->Line($ox,$oy-15,$ox,$oy+15); + $this->PopColor(); + } + } + else { + // Format a text paragraph + $fh=$this->GetFontHeight(); + + // Line margin is 25% of font height + $linemargin=round($fh*$ConstLineSpacing); + $fh += $linemargin; + $w=$this->GetTextWidth($txt); + + $y -= $linemargin/2; + $tmp = split("\n",$txt); + $nl = count($tmp); + $h = $nl * $fh; + + if( $this->text_halign=="right") + $x -= $dir==0 ? $w : $h; + elseif( $this->text_halign=="center" ) { + $x -= $dir==0 ? $w/2 : $h/2; + } + + if( $this->text_valign=="top" ) + $y += $dir==0 ? $h : $w; + elseif( $this->text_valign=="center" ) + $y += $dir==0 ? $h/2 : $w/2; + + // Here comes a tricky bit. + // Since we have to give the position for the string at the + // baseline this means thaht text will move slightly up + // and down depending on any of it's character descend below + // the baseline, for example a 'g'. To adjust the Y-position + // we therefore adjust the text with the baseline Y-offset + // as used for the current font and size. This will keep the + // baseline at a fixed positoned disregarding the actual + // characters in the string. + $standardbox = $this->GetTTFBBox('Gg',$dir); + $yadj = $standardbox[1]; + $xadj = $standardbox[0]; + $aBoundingBox = array(); + for($i=0; $i < $nl; ++$i) { + $wl = $this->GetTextWidth($tmp[$i]); + $bbox = $this->GetTTFBBox($tmp[$i],$dir); + if( $paragraph_align=="left" ) { + $xl = $x; + } + elseif( $paragraph_align=="right" ) { + $xl = $x + ($w-$wl); + } + else { + // Center + $xl = $x + $w/2 - $wl/2 ; + } + + $xl -= $bbox[0]; + $yl = $y - $yadj; + $xl = $xl - $xadj; + ImageTTFText ($this->img, $this->font_size, $dir, + $xl, $yl-($h-$fh)+$fh*$i, + $this->current_color,$this->font_file,$tmp[$i]); + + if( $debug ) { + // Draw the bounding rectangle around each line + $box=@ImageTTFBBox($this->font_size,$dir,$this->font_file,$tmp[$i]); + $p = array(); + for($j=0; $j < 4; ++$j) { + $p[] = $bbox[$j*2]+$xl; + $p[] = $bbox[$j*2+1]+$yl-($h-$fh)+$fh*$i; + } + + // Draw bounding rectangle + $this->PushColor('darkgreen'); + $this->Polygon($p,true); + $this->PopColor(); + } + } + + // Get the bounding box + $bbox = $this->GetBBoxTTF($txt,$dir); + for($j=0; $j < 4; ++$j) { + $bbox[$j*2]+= round($x); + $bbox[$j*2+1]+= round($y - ($h-$fh) - $yadj); + } + $aBoundingBox = $bbox; + + if( $debug ) { + // Draw a cross at the anchor point + $this->PushColor('red'); + $this->Line($ox-25,$oy,$ox+25,$oy); + $this->Line($ox,$oy-25,$ox,$oy+25); + $this->PopColor(); + } + + } + } + + function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=false) { + + $x = round($x); + $y = round($y); + + // Do special language encoding + $txt = $this->langconv->Convert($txt,$this->font_family); + + if( !is_numeric($dir) ) + JpGraphError::RaiseL(25094);//(" Direction for text most be given as an angle between 0 and 90."); + + if( $this->font_family >= FF_FONT0 && $this->font_family <= FF_FONT2+1) { + $this->_StrokeBuiltinFont($x,$y,$txt,$dir,$paragraph_align,$boundingbox,$debug); + } + elseif($this->font_family >= _FF_FIRST && $this->font_family <= _FF_LAST) { + $this->_StrokeTTF($x,$y,$txt,$dir,$paragraph_align,$boundingbox,$debug); + } + else + JpGraphError::RaiseL(25095);//(" Unknown font font family specification. "); + return $boundingbox; + } + + function SetMargin($lm,$rm,$tm,$bm) { + $this->left_margin=$lm; + $this->right_margin=$rm; + $this->top_margin=$tm; + $this->bottom_margin=$bm; + $this->plotwidth=$this->width - $this->left_margin-$this->right_margin ; + $this->plotheight=$this->height - $this->top_margin-$this->bottom_margin ; + if( $this->width > 0 && $this->height > 0 ) { + if( $this->plotwidth < 0 || $this->plotheight < 0 ) + JpGraphError::raise("Too small plot area. ($lm,$rm,$tm,$bm : $this->plotwidth x $this->plotheight). With the given image size and margins there is to little space left for the plot. Increase the plot size or reduce the margins."); + } + } + + function SetTransparent($color) { + imagecolortransparent ($this->img,$this->rgb->allocate($color)); + } + + function SetColor($color,$aAlpha=0) { + $this->current_color_name = $color; + $this->current_color=$this->rgb->allocate($color,$aAlpha); + if( $this->current_color == -1 ) { + JpGraphError::RaiseL(25096); +//("Can't allocate any more colors."); + } + return $this->current_color; + } + + function PushColor($color) { + if( $color != "" ) { + $this->colorstack[$this->colorstackidx]=$this->current_color_name; + $this->colorstack[$this->colorstackidx+1]=$this->current_color; + $this->colorstackidx+=2; + $this->SetColor($color); + } + else { + JpGraphError::RaiseL(25097);//("Color specified as empty string in PushColor()."); + } + } + + function PopColor() { + if($this->colorstackidx<1) + JpGraphError::RaiseL(25098);//(" Negative Color stack index. Unmatched call to PopColor()"); + $this->current_color=$this->colorstack[--$this->colorstackidx]; + $this->current_color_name=$this->colorstack[--$this->colorstackidx]; + } + + + function SetLineWeight($weight) { + $this->line_weight = $weight; + } + + function SetStartPoint($x,$y) { + $this->lastx=round($x); + $this->lasty=round($y); + } + + function Arc($cx,$cy,$w,$h,$s,$e) { + // GD Arc doesn't like negative angles + while( $s < 0) $s += 360; + while( $e < 0) $e += 360; + + imagearc($this->img,round($cx),round($cy),round($w),round($h), + $s,$e,$this->current_color); + } + + function FilledArc($xc,$yc,$w,$h,$s,$e,$style="") { + + while( $s < 0 ) $s += 360; + while( $e < 0 ) $e += 360; + if( $style=="" ) + $style=IMG_ARC_PIE; + + // Workaround for bug in 4.4.7 which will not draw a correct 360 + // degree slice with any other angles than 0,360 + if( 360-abs($s-$e) < 0.01 ) { + $s = 0; + $e = 360; + } + if( abs($s-$e) > 0.001 ) { + imagefilledarc($this->img,round($xc),round($yc),round($w),round($h), + round($s),round($e),$this->current_color,$style); + } + } + + function FilledCakeSlice($cx,$cy,$w,$h,$s,$e) { + $this->CakeSlice($cx,$cy,$w,$h,$s,$e,$this->current_color_name); + } + + function CakeSlice($xc,$yc,$w,$h,$s,$e,$fillcolor="",$arccolor="") { + $s = round($s); $e = round($e); + $w = round($w); $h = round($h); + $xc = round($xc); $yc = round($yc); + + if( $s==$e ) { + // A full circle. We draw this a plain circle + $this->PushColor($fillcolor); + imagefilledellipse($this->img,$xc,$yc,2*$w,2*$h,$this->current_color); + $this->PopColor(); + $this->PushColor($arccolor); + imageellipse($this->img,$xc,$yc,2*$w,2*$h,$this->current_color); + $this->Line($xc,$yc,cos($s*M_PI/180)*$w+$xc,$yc+sin($s*M_PI/180)*$h); + $this->PopColor(); + } + else { + $this->PushColor($fillcolor); + $this->FilledArc($xc,$yc,2*$w,2*$h,$s,$e); + $this->PopColor(); + if( $arccolor != "" ) { + $this->PushColor($arccolor); + // We add 2 pixels to make the Arc() better aligned with the filled arc. + imagefilledarc($this->img,$xc,$yc,2*$w,2*$h,$s,$e,$this->current_color,IMG_ARC_NOFILL | IMG_ARC_EDGED ) ; + + // Workaround for bug in 4.4.7 which will not draw a correct 360 + // degree slice with any other angles than 0,360. Unfortunately we cannot just + // adjust the angles since the interior ar edge is drawn correct but not the surrounding + // circle. This workaround can only be used with perfect circle shaped arcs + if( PHP_VERSION==='4.4.7' && (360-abs($s-$e) < 0.01 && $w==$h) ) { + $this->Circle($xc,$yc,$w); + } + $this->PopColor(); + } + } + } + + function Ellipse($xc,$yc,$w,$h) { + $this->Arc($xc,$yc,$w,$h,0,360); + } + + // Breseham circle gives visually better result then using GD + // built in arc(). It takes some more time but gives better + // accuracy. + function BresenhamCircle($xc,$yc,$r) { + $d = 3-2*$r; + $x = 0; + $y = $r; + while($x<=$y) { + $this->Point($xc+$x,$yc+$y); + $this->Point($xc+$x,$yc-$y); + $this->Point($xc-$x,$yc+$y); + $this->Point($xc-$x,$yc-$y); + + $this->Point($xc+$y,$yc+$x); + $this->Point($xc+$y,$yc-$x); + $this->Point($xc-$y,$yc+$x); + $this->Point($xc-$y,$yc-$x); + + if( $d<0 ) $d += 4*$x+6; + else { + $d += 4*($x-$y)+10; + --$y; + } + ++$x; + } + } + + function Circle($xc,$yc,$r) { + if( USE_BRESENHAM ) + $this->BresenhamCircle($xc,$yc,$r); + else { + + /* + // Some experimental code snippet to see if we can get a decent + // result doing a trig-circle + // Create an approximated circle with 0.05 rad resolution + $end = 2*M_PI; + $l = $r/10; + if( $l < 3 ) $l=3; + $step_size = 2*M_PI/(2*$r*M_PI/$l); + $pts = array(); + $pts[] = $r + $xc; + $pts[] = $yc; + for( $a=$step_size; $a <= $end; $a += $step_size ) { + $pts[] = round($xc + $r*cos($a)); + $pts[] = round($yc - $r*sin($a)); + } + imagepolygon($this->img,$pts,count($pts)/2,$this->current_color); + */ + + $this->Arc($xc,$yc,$r*2,$r*2,0,360); + + // For some reason imageellipse() isn't in GD 2.0.1, PHP 4.1.1 + //imageellipse($this->img,$xc,$yc,$r,$r,$this->current_color); + } + } + + function FilledCircle($xc,$yc,$r) { + imagefilledellipse($this->img,round($xc),round($yc),2*$r,2*$r,$this->current_color); + } + + // Linear Color InterPolation + function lip($f,$t,$p) { + $p = round($p,1); + $r = $f[0] + ($t[0]-$f[0])*$p; + $g = $f[1] + ($t[1]-$f[1])*$p; + $b = $f[2] + ($t[2]-$f[2])*$p; + return array($r,$g,$b); + } + + // Anti-aliased line. + // Note that this is roughly 8 times slower then a normal line! + function WuLine($x1,$y1,$x2,$y2) { + // Get foreground line color + $lc = imagecolorsforindex($this->img,$this->current_color); + $lc = array($lc["red"],$lc["green"],$lc["blue"]); + + $dx = $x2-$x1; + $dy = $y2-$y1; + + if( abs($dx) > abs($dy) ) { + if( $dx<0 ) { + $dx = -$dx;$dy = -$dy; + $tmp=$x2;$x2=$x1;$x1=$tmp; + $tmp=$y2;$y2=$y1;$y1=$tmp; + } + $x=$x1<<16; $y=$y1<<16; + $yinc = ($dy*65535)/$dx; + $first=true; + while( ($x >> 16) < $x2 ) { + + $bc = @imagecolorsforindex($this->img,imagecolorat($this->img,$x>>16,$y>>16)); + if( $bc <= 0 ) { + JpGraphError::RaiseL(25100);//('Problem with color palette and your GD setup. Please disable anti-aliasing or use GD2 with true-color. If you have GD2 library installed please make sure that you have set the USE_GD2 constant to true and that truecolor is enabled.'); + } + $bc=array($bc["red"],$bc["green"],$bc["blue"]); + + $this->SetColor($this->lip($lc,$bc,($y & 0xFFFF)/65535)); + imagesetpixel($this->img,$x>>16,$y>>16,$this->current_color); + $this->SetColor($this->lip($lc,$bc,(~$y & 0xFFFF)/65535)); + if( !$first ) + imagesetpixel($this->img,$x>>16,($y>>16)+1,$this->current_color); + $x += 65536; $y += $yinc; + $first=false; + } + } + else { + if( $dy<0 ) { + $dx = -$dx;$dy = -$dy; + $tmp=$x2;$x2=$x1;$x1=$tmp; + $tmp=$y2;$y2=$y1;$y1=$tmp; + } + $x=$x1<<16; $y=$y1<<16; + $xinc = ($dx*65535)/$dy; + $first = true; + while( ($y >> 16) < $y2 ) { + + $bc = @imagecolorsforindex($this->img,imagecolorat($this->img,$x>>16,$y>>16)); + if( $bc <= 0 ) { + JpGraphError::RaiseL(25100);//('Problem with color palette and your GD setup. Please disable anti-aliasing or use GD2 with true-color. If you have GD2 library installed please make sure that you have set the USE_GD2 constant to true and truecolor is enabled.'); + + } + + $bc=array($bc["red"],$bc["green"],$bc["blue"]); + + $this->SetColor($this->lip($lc,$bc,($x & 0xFFFF)/65535)); + imagesetpixel($this->img,$x>>16,$y>>16,$this->current_color); + $this->SetColor($this->lip($lc,$bc,(~$x & 0xFFFF)/65535)); + if( !$first ) + imagesetpixel($this->img,($x>>16)+1,$y>>16,$this->current_color); + $y += 65536; $x += $xinc; + $first = false; + } + } + $this->SetColor($lc); + //imagesetpixel($this->img,$x2,$y2,$this->current_color); + //imagesetpixel($this->img,$x1,$y1,$this->current_color); + } + + // Set line style dashed, dotted etc + function SetLineStyle($s) { + if( is_numeric($s) ) { + if( $s<1 || $s>4 ) + JpGraphError::RaiseL(25101,$s);//(" Illegal numeric argument to SetLineStyle(): ($s)"); + } + elseif( is_string($s) ) { + if( $s == "solid" ) $s=1; + elseif( $s == "dotted" ) $s=2; + elseif( $s == "dashed" ) $s=3; + elseif( $s == "longdashed" ) $s=4; + else JpGraphError::RaiseL(25102,$s);//(" Illegal string argument to SetLineStyle(): $s"); + } + else { + JpGraphError::RaiseL(25103,$s);//(" Illegal argument to SetLineStyle $s"); + } + $old = $this->line_style; + $this->line_style=$s; + return $old; + } + + // Same as Line but take the line_style into account + function StyleLine($x1,$y1,$x2,$y2) { + switch( $this->line_style ) { + case 1:// Solid + $this->Line($x1,$y1,$x2,$y2); + break; + case 2: // Dotted + $this->DashedLine($x1,$y1,$x2,$y2,1,6); + break; + case 3: // Dashed + $this->DashedLine($x1,$y1,$x2,$y2,2,4); + break; + case 4: // Longdashes + $this->DashedLine($x1,$y1,$x2,$y2,8,6); + break; + default: + JpGraphError::RaiseL(25104,$this->line_style);//(" Unknown line style: $this->line_style "); + break; + } + } + + function Line($x1,$y1,$x2,$y2) { + + $x1 = round($x1); + $x2 = round($x2); + $y1 = round($y1); + $y2 = round($y2); + + if( $this->line_weight==0 ) return; + if( $this->use_anti_aliasing ) { + $dx = $x2-$x1; + $dy = $y2-$y1; + // Vertical, Horizontal or 45 lines don't need anti-aliasing + if( $dx!=0 && $dy!=0 && $dx!=$dy ) { + $this->WuLine($x1,$y1,$x2,$y2); + return; + } + } + if( $this->line_weight==1 ) { + imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); + } + elseif( $x1==$x2 ) { // Special case for vertical lines + imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); + $w1=floor($this->line_weight/2); + $w2=floor(($this->line_weight-1)/2); + for($i=1; $i<=$w1; ++$i) + imageline($this->img,$x1+$i,$y1,$x2+$i,$y2,$this->current_color); + for($i=1; $i<=$w2; ++$i) + imageline($this->img,$x1-$i,$y1,$x2-$i,$y2,$this->current_color); + } + elseif( $y1==$y2 ) { // Special case for horizontal lines + imageline($this->img,$x1,$y1,$x2,$y2,$this->current_color); + $w1=floor($this->line_weight/2); + $w2=floor(($this->line_weight-1)/2); + for($i=1; $i<=$w1; ++$i) + imageline($this->img,$x1,$y1+$i,$x2,$y2+$i,$this->current_color); + for($i=1; $i<=$w2; ++$i) + imageline($this->img,$x1,$y1-$i,$x2,$y2-$i,$this->current_color); + } + else { // General case with a line at an angle + $a = atan2($y1-$y2,$x2-$x1); + // Now establish some offsets from the center. This gets a little + // bit involved since we are dealing with integer functions and we + // want the apperance to be as smooth as possible and never be thicker + // then the specified width. + + // We do the trig stuff to make sure that the endpoints of the line + // are perpendicular to the line itself. + $dx=(sin($a)*$this->line_weight/2); + $dy=(cos($a)*$this->line_weight/2); + + $pnts = array(round($x2+$dx),round($y2+$dy),round($x2-$dx),round($y2-$dy), + round($x1-$dx),round($y1-$dy),round($x1+$dx),round($y1+$dy)); + imagefilledpolygon($this->img,$pnts,count($pnts)/2,$this->current_color); + } + $this->lastx=$x2; $this->lasty=$y2; + } + + function Polygon($p,$closed=FALSE,$fast=FALSE) { + if( $this->line_weight==0 ) return; + $n=count($p); + $oldx = $p[0]; + $oldy = $p[1]; + if( $fast ) { + for( $i=2; $i < $n; $i+=2 ) { + imageline($this->img,$oldx,$oldy,$p[$i],$p[$i+1],$this->current_color); + $oldx = $p[$i]; + $oldy = $p[$i+1]; + } + if( $closed ) { + imageline($this->img,$p[$n*2-2],$p[$n*2-1],$p[0],$p[1],$this->current_color); + } + } + else { + for( $i=2; $i < $n; $i+=2 ) { + $this->StyleLine($oldx,$oldy,$p[$i],$p[$i+1]); + $oldx = $p[$i]; + $oldy = $p[$i+1]; + } + if( $closed ) + $this->Line($oldx,$oldy,$p[0],$p[1]); + } + } + + function FilledPolygon($pts) { + $n=count($pts); + if( $n == 0 ) { + JpGraphError::RaiseL(25105);//('NULL data specified for a filled polygon. Check that your data is not NULL.'); + } + for($i=0; $i < $n; ++$i) + $pts[$i] = round($pts[$i]); + imagefilledpolygon($this->img,$pts,count($pts)/2,$this->current_color); + } + + function Rectangle($xl,$yu,$xr,$yl) { + $this->Polygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl,$xl,$yu)); + } + + function FilledRectangle($xl,$yu,$xr,$yl) { + $this->FilledPolygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl)); + } + + function FilledRectangle2($xl,$yu,$xr,$yl,$color1,$color2,$style=1) { + // Fill a rectangle with lines of two colors + if( $style===1 ) { + // Horizontal stripe + if( $yl < $yu ) { + $t = $yl; $yl=$yu; $yu=$t; + } + for( $y=$yu; $y <= $yl; ++$y) { + $this->SetColor($color1); + $this->Line($xl,$y,$xr,$y); + ++$y; + $this->SetColor($color2); + $this->Line($xl,$y,$xr,$y); + } + } + else { + if( $xl < $xl ) { + $t = $xl; $xl=$xr; $xr=$t; + } + for( $x=$xl; $x <= $xr; ++$x) { + $this->SetColor($color1); + $this->Line($x,$yu,$x,$yl); + ++$x; + $this->SetColor($color2); + $this->Line($x,$yu,$x,$yl); + } + } + } + + function ShadowRectangle($xl,$yu,$xr,$yl,$fcolor=false,$shadow_width=3,$shadow_color=array(102,102,102)) { + // This is complicated by the fact that we must also handle the case where + // the reactangle has no fill color + $this->PushColor($shadow_color); + $this->FilledRectangle($xr-$shadow_width,$yu+$shadow_width,$xr,$yl-$shadow_width-1); + $this->FilledRectangle($xl+$shadow_width,$yl-$shadow_width,$xr,$yl); + //$this->FilledRectangle($xl+$shadow_width,$yu+$shadow_width,$xr,$yl); + $this->PopColor(); + if( $fcolor==false ) + $this->Rectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + else { + $this->PushColor($fcolor); + $this->FilledRectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + $this->PopColor(); + $this->Rectangle($xl,$yu,$xr-$shadow_width-1,$yl-$shadow_width-1); + } + } + + function FilledRoundedRectangle($xt,$yt,$xr,$yl,$r=5) { + if( $r==0 ) { + $this->FilledRectangle($xt,$yt,$xr,$yl); + return; + } + + // To avoid overlapping fillings (which will look strange + // when alphablending is enabled) we have no choice but + // to fill the five distinct areas one by one. + + // Center square + $this->FilledRectangle($xt+$r,$yt+$r,$xr-$r,$yl-$r); + // Top band + $this->FilledRectangle($xt+$r,$yt,$xr-$r,$yt+$r-1); + // Bottom band + $this->FilledRectangle($xt+$r,$yl-$r+1,$xr-$r,$yl); + // Left band + $this->FilledRectangle($xt,$yt+$r+1,$xt+$r-1,$yl-$r); + // Right band + $this->FilledRectangle($xr-$r+1,$yt+$r,$xr,$yl-$r); + + // Topleft & Topright arc + $this->FilledArc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->FilledArc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Bottomleft & Bottom right arc + $this->FilledArc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->FilledArc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + } + + function RoundedRectangle($xt,$yt,$xr,$yl,$r=5) { + + if( $r==0 ) { + $this->Rectangle($xt,$yt,$xr,$yl); + return; + } + + // Top & Bottom line + $this->Line($xt+$r,$yt,$xr-$r,$yt); + $this->Line($xt+$r,$yl,$xr-$r,$yl); + + // Left & Right line + $this->Line($xt,$yt+$r,$xt,$yl-$r); + $this->Line($xr,$yt+$r,$xr,$yl-$r); + + // Topleft & Topright arc + $this->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Bottomleft & Bottomright arc + $this->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + } + + function FilledBevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$color2='darkgray@0.4') { + $this->FilledRectangle($x1,$y1,$x2,$y2); + $this->Bevel($x1,$y1,$x2,$y2,$depth,$color1,$color2); + } + + function Bevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$color2='black@0.5') { + $this->PushColor($color1); + for( $i=0; $i < $depth; ++$i ) { + $this->Line($x1+$i,$y1+$i,$x1+$i,$y2-$i); + $this->Line($x1+$i,$y1+$i,$x2-$i,$y1+$i); + } + $this->PopColor(); + + $this->PushColor($color2); + for( $i=0; $i < $depth; ++$i ) { + $this->Line($x1+$i,$y2-$i,$x2-$i,$y2-$i); + $this->Line($x2-$i,$y1+$i,$x2-$i,$y2-$i-1); + } + $this->PopColor(); + } + + function StyleLineTo($x,$y) { + $this->StyleLine($this->lastx,$this->lasty,$x,$y); + $this->lastx=$x; + $this->lasty=$y; + } + + function LineTo($x,$y) { + $this->Line($this->lastx,$this->lasty,$x,$y); + $this->lastx=$x; + $this->lasty=$y; + } + + function Point($x,$y) { + imagesetpixel($this->img,round($x),round($y),$this->current_color); + } + + function Fill($x,$y) { + imagefill($this->img,round($x),round($y),$this->current_color); + } + + function FillToBorder($x,$y,$aBordColor) { + $bc = $this->rgb->allocate($aBordColor); + if( $bc == -1 ) { + JpGraphError::RaiseL(25106);//('Image::FillToBorder : Can not allocate more colors'); + } + imagefilltoborder($this->img,round($x),round($y),$bc,$this->current_color); + } + + function DashedLine($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) { + + $x1 = round($x1); + $x2 = round($x2); + $y1 = round($y1); + $y2 = round($y2); + + // Code based on, but not identical to, work by Ariel Garza and James Pine + $line_length = ceil (sqrt(pow(($x2 - $x1),2) + pow(($y2 - $y1),2)) ); + $dx = ($line_length) ? ($x2 - $x1) / $line_length : 0; + $dy = ($line_length) ? ($y2 - $y1) / $line_length : 0; + $lastx = $x1; $lasty = $y1; + $xmax = max($x1,$x2); + $xmin = min($x1,$x2); + $ymax = max($y1,$y2); + $ymin = min($y1,$y2); + for ($i = 0; $i < $line_length; $i += ($dash_length + $dash_space)) { + $x = ($dash_length * $dx) + $lastx; + $y = ($dash_length * $dy) + $lasty; + + // The last section might overshoot so we must take a computational hit + // and check this. + if( $x>$xmax ) $x=$xmax; + if( $y>$ymax ) $y=$ymax; + + if( $x<$xmin ) $x=$xmin; + if( $y<$ymin ) $y=$ymin; + + $this->Line($lastx,$lasty,$x,$y); + $lastx = $x + ($dash_space * $dx); + $lasty = $y + ($dash_space * $dy); + } + } + + function SetExpired($aFlg=true) { + $this->expired = $aFlg; + } + + // Generate image header + function Headers() { + + // In case we are running from the command line with the client version of + // PHP we can't send any headers. + $sapi = php_sapi_name(); + if( $sapi == 'cli' ) + return; + + // These parameters are set by headers_sent() but they might cause + // an undefined variable error unless they are initilized + $file=''; + $lineno=''; + if( headers_sent($file,$lineno) ) { + $file=basename($file); + $t = new ErrMsgText(); + $msg = $t->Get(10,$file,$lineno); + die($msg); + } + + if ($this->expired) { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); + header("Cache-Control: no-cache, must-revalidate"); + header("Pragma: no-cache"); + } + header("Content-type: image/$this->img_format"); + } + + // Adjust image quality for formats that allow this + function SetQuality($q) { + $this->quality = $q; + } + + // Stream image to browser or to file + function Stream($aFile="") { + $func="image".$this->img_format; + if( $this->img_format=="jpeg" && $this->quality != null ) { + $res = @$func($this->img,$aFile,$this->quality); + } + else { + if( $aFile != "" ) { + $res = @$func($this->img,$aFile); + if( !$res ) + JpGraphError::RaiseL(25107,$aFile);//("Can't write to file '$aFile'. Check that the process running PHP has enough permission."); + } + else { + $res = @$func($this->img); + if( !$res ) + JpGraphError::RaiseL(25108);//("Can't stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP."); + + } + } + } + + // Clear resource tide up by image + function Destroy() { + imagedestroy($this->img); + } + + // Specify image format. Note depending on your installation + // of PHP not all formats may be supported. + function SetImgFormat($aFormat,$aQuality=75) { + $this->quality = $aQuality; + $aFormat = strtolower($aFormat); + $tst = true; + $supported = imagetypes(); + if( $aFormat=="auto" ) { + if( $supported & IMG_PNG ) + $this->img_format="png"; + elseif( $supported & IMG_JPG ) + $this->img_format="jpeg"; + elseif( $supported & IMG_GIF ) + $this->img_format="gif"; + elseif( $supported & IMG_WBMP ) + $this->img_format="wbmp"; + elseif( $supported & IMG_XPM ) + $this->img_format="xpm"; + else + JpGraphError::RaiseL(25109);//("Your PHP (and GD-lib) installation does not appear to support any known graphic formats. You need to first make sure GD is compiled as a module to PHP. If you also want to use JPEG images you must get the JPEG library. Please see the PHP docs for details."); + + return true; + } + else { + if( $aFormat=="jpeg" || $aFormat=="png" || $aFormat=="gif" || $aFormat=="wbmp" || $aFormat=="xpm") { + if( $aFormat=="jpeg" && !($supported & IMG_JPG) ) + $tst=false; + elseif( $aFormat=="png" && !($supported & IMG_PNG) ) + $tst=false; + elseif( $aFormat=="gif" && !($supported & IMG_GIF) ) + $tst=false; + elseif( $aFormat=="wbmp" && !($supported & IMG_WBMP) ) + $tst=false; + elseif( $aFormat=="xpm" && !($supported & IMG_XPM) ) + $tst=false; + else { + $this->img_format=$aFormat; + return true; + } + } + else + $tst=false; + if( !$tst ) + JpGraphError::RaiseL(25110,$aFormat);//(" Your PHP installation does not support the chosen graphic format: $aFormat"); + } + } +} // CLASS + +//=================================================== +// CLASS RotImage +// Description: Exactly as Image but draws the image at +// a specified angle around a specified rotation point. +//=================================================== +class RotImage extends Image { + var $m=array(); + var $a=0; + var $dx=0,$dy=0,$transx=0,$transy=0; + + function RotImage($aWidth,$aHeight,$a=0,$aFormat=DEFAULT_GFORMAT,$aSetAutoMargin=true) { + $this->Image($aWidth,$aHeight,$aFormat,$aSetAutoMargin); + $this->dx=$this->left_margin+$this->plotwidth/2; + $this->dy=$this->top_margin+$this->plotheight/2; + $this->SetAngle($a); + } + + function SetCenter($dx,$dy) { + $old_dx = $this->dx; + $old_dy = $this->dy; + $this->dx=$dx; + $this->dy=$dy; + $this->SetAngle($this->a); + return array($old_dx,$old_dy); + } + + function SetTranslation($dx,$dy) { + $old = array($this->transx,$this->transy); + $this->transx = $dx; + $this->transy = $dy; + return $old; + } + + function UpdateRotMatrice() { + $a = $this->a; + $a *= M_PI/180; + $sa=sin($a); $ca=cos($a); + // Create the rotation matrix + $this->m[0][0] = $ca; + $this->m[0][1] = -$sa; + $this->m[0][2] = $this->dx*(1-$ca) + $sa*$this->dy ; + $this->m[1][0] = $sa; + $this->m[1][1] = $ca; + $this->m[1][2] = $this->dy*(1-$ca) - $sa*$this->dx ; + } + + function SetAngle($a) { + $tmp = $this->a; + $this->a = $a; + $this->UpdateRotMatrice(); + return $tmp; + } + + function Circle($xc,$yc,$r) { + // Circle get's rotated through the Arc() call + // made in the parent class + parent::Circle($xc,$yc,$r); + } + + function FilledCircle($xc,$yc,$r) { + list($xc,$yc) = $this->Rotate($xc,$yc); + parent::FilledCircle($xc,$yc,$r); + } + + function Arc($xc,$yc,$w,$h,$s,$e) { + list($xc,$yc) = $this->Rotate($xc,$yc); + $s += $this->a; + $e += $this->a; + parent::Arc($xc,$yc,$w,$h,$s,$e); + } + + function FilledArc($xc,$yc,$w,$h,$s,$e) { + list($xc,$yc) = $this->Rotate($xc,$yc); + $s += $this->a; + $e += $this->a; + parent::FilledArc($xc,$yc,$w,$h,$s,$e); + } + + function SetMargin($lm,$rm,$tm,$bm) { + parent::SetMargin($lm,$rm,$tm,$bm); + $this->dx=$this->left_margin+$this->plotwidth/2; + $this->dy=$this->top_margin+$this->plotheight/2; + $this->UpdateRotMatrice(); + } + + function Rotate($x,$y) { + // Optimization. Ignore rotation if Angle==0 || ANgle==360 + if( $this->a == 0 || $this->a == 360 ) { + return array($x + $this->transx, $y + $this->transy ); + } + else { + $x1=round($this->m[0][0]*$x + $this->m[0][1]*$y,1) + $this->m[0][2] + $this->transx; + $y1=round($this->m[1][0]*$x + $this->m[1][1]*$y,1) + $this->m[1][2] + $this->transy; + return array($x1,$y1); + } + } + + function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth=-1,$fromHeight=-1,$aMix=100) { + list($toX,$toY) = $this->Rotate($toX,$toY); + parent::CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fromWidth,$fromHeight,$aMix); + + } + + function ArrRotate($pnts) { + $n = count($pnts)-1; + for($i=0; $i < $n; $i+=2) { + list ($x,$y) = $this->Rotate($pnts[$i],$pnts[$i+1]); + $pnts[$i] = $x; $pnts[$i+1] = $y; + } + return $pnts; + } + + function Line($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->Rotate($x1,$y1); + list($x2,$y2) = $this->Rotate($x2,$y2); + parent::Line($x1,$y1,$x2,$y2); + } + + function Rectangle($x1,$y1,$x2,$y2) { + // Rectangle uses Line() so it will be rotated through that call + parent::Rectangle($x1,$y1,$x2,$y2); + } + + function FilledRectangle($x1,$y1,$x2,$y2) { + if( $y1==$y2 || $x1==$x2 ) + $this->Line($x1,$y1,$x2,$y2); + else + $this->FilledPolygon(array($x1,$y1,$x2,$y1,$x2,$y2,$x1,$y2)); + } + + function Polygon($pnts,$closed=FALSE,$fast=false) { + // Polygon uses Line() so it will be rotated through that call unless + // fast drawing routines are used in which case a rotate is needed + if( $fast ) { + parent::Polygon($this->ArrRotate($pnts)); + } + else + parent::Polygon($pnts,$closed,$fast); + } + + function FilledPolygon($pnts) { + parent::FilledPolygon($this->ArrRotate($pnts)); + } + + function Point($x,$y) { + list($xp,$yp) = $this->Rotate($x,$y); + parent::Point($xp,$yp); + } + + function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=false) { + list($xp,$yp) = $this->Rotate($x,$y); + return parent::StrokeText($xp,$yp,$txt,$dir,$paragraph_align,$debug); + } +} + + +?> diff --git a/html/includes/jpgraph/src/imgdata_balls.inc.php b/html/includes/jpgraph/src/imgdata_balls.inc.php new file mode 100644 index 0000000000..11291efd3f --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_balls.inc.php @@ -0,0 +1,1063 @@ + 'imgdata_large', + MARK_IMG_MBALL => 'imgdata_small', + MARK_IMG_SBALL => 'imgdata_xsmall', + MARK_IMG_BALL => 'imgdata_xsmall'); + var $colors_1 = array('blue','lightblue','brown','darkgreen', + 'green','purple','red','gray','yellow','silver','gray'); + var $index_1 = array('blue'=>9,'lightblue'=>1,'brown'=>6,'darkgreen'=>7, + 'green'=>8,'purple'=>4,'red'=>0,'gray'=>5,'silver'=>3,'yellow'=>2); + var $maxidx_1 = 9 ; + + var $colors_2 = array('blue','bluegreen','brown','cyan', + 'darkgray','greengray','gray','green', + 'greenblue','lightblue','lightred', + 'purple','red','white','yellow'); + + + var $index_2 = array('blue'=>9,'bluegreen'=>13,'brown'=>8,'cyan'=>12, + 'darkgray'=>5,'greengray'=>6,'gray'=>2,'green'=>10, + 'greenblue'=>3,'lightblue'=>1,'lightred'=>14, + 'purple'=>7,'red'=>0,'white'=>11,'yellow'=>4); + + var $maxidx_2 = 14 ; + + + var $colors_3 = array('bluegreen','cyan','darkgray','greengray', + 'gray','graypurple','green','greenblue','lightblue', + 'lightred','navy','orange','purple','red','yellow'); + + var $index_3 = array('bluegreen'=>1,'cyan'=>11,'darkgray'=>14,'greengray'=>10, + 'gray'=>3,'graypurple'=>4,'green'=>9,'greenblue'=>7, + 'lightblue'=>13,'lightred'=>0,'navy'=>2,'orange'=>12, + 'purple'=>8,'red'=>5,'yellow'=>6); + var $maxidx_3 = 14 ; + + var $colors,$index,$maxidx; + var $imgdata_large ; + var $imgdata_small ; + var $imgdata_xsmall ; + + + function GetImg($aMark,$aIdx) { + switch( $aMark ) { + case MARK_IMG_SBALL: + case MARK_IMG_BALL: + $this->colors = $this->colors_3; + $this->index = $this->index_3 ; + $this->maxidx = $this->maxidx_3 ; + break; + case MARK_IMG_MBALL: + $this->colors = $this->colors_2; + $this->index = $this->index_2 ; + $this->maxidx = $this->maxidx_2 ; + break; + default: + $this->colors = $this->colors_1; + $this->index = $this->index_1 ; + $this->maxidx = $this->maxidx_1 ; + break; + } + return parent::GetImg($aMark,$aIdx); + } + + function ImgData_Balls() { + +//========================================================== +// File: bl_red.png +//========================================================== + $this->imgdata_large[0][0]= 1072 ; + $this->imgdata_large[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAByF'. + 'BMVEX/////////xsb/vb3/lIz/hIT/e3v/c3P/c2v/a2v/Y2P/'. + 'UlL/Skr/SkL/Qjn/MTH/MSn/KSn/ISH/IRj/GBj/GBD/EBD/EA'. + 'j/CAj/CAD/AAD3QkL3MTH3KSn3KSH3GBj3EBD3CAj3AAD1zMzv'. + 'QkLvISHvIRjvGBjvEBDvEAjvAADnUlLnSkrnMTnnKSnnIRjnGB'. + 'DnEBDnCAjnAADec3PeSkreISHeGBjeGBDeEAjWhITWa2vWUlLW'. + 'SkrWISnWGBjWEBDWEAjWCAjWAADOnp7Oa2vOGCHOGBjOGBDOEB'. + 'DOCAjOAADJrq7Gt7fGGBjGEBDGCAjGAADEpKS/v7+9QkK9GBC9'. + 'EBC9CAi9AAC1e3u1a2u1Skq1KSm1EBC1CAi1AACtEBCtCBCtCA'. + 'itAACngYGlCAilAACghIScOTmcCAicAACYgYGUGAiUCAiUAAiU'. + 'AACMKSmMEACMAACEa2uEGAiEAAB7GBh7CAB7AABzOTlzGBBzCA'. + 'BzAABrSkprOTlrGBhrAABjOTljAABaQkJaOTlaCABaAABSKSlS'. + 'GBhSAABKKSlKGBhKAABCGBhCCABCAAA5CAA5AAAxCAAxAAApCA'. + 'ApAAAhAAAYAACc9eRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkRFD'. + 'UHLytKAAAB4UlEQVR4nGNgIAK4mGjrmNq6BmFIWMmISUpKSmk5'. + 'B8ZEokj4qoiLiQCBgqald3xaBpKMj6y4sLCQkJCIvIaFV0RaUR'. + 'lCSk5cWEiAn19ASN7QwisuraihHiajKyEixM/NwckjoKrvEACU'. + 'qumpg7pAUlREiJdNmZmLT9/cMzwps7Smc3I2WEpGUkxYkJuFiY'. + 'lTxszePzY1v7Shc2oX2D+K4iLCgjzsrOw8embuYUmZeTVtPVOn'. + 'gqSslYAOF+Ln4ZHWtXMPTcjMrWno7J82rRgoZWOsqaCgrqaqqm'. + 'fn5peQmlsK1DR52vRaoFSIs5GRoYG5ub27n19CYm5pdVPnxKnT'. + 'pjWDpLydnZwcHTz8QxMSEnJLgDL9U6dNnQ6Sio4PDAgICA+PTU'. + 'zNzSkph8hADIxKS46Pj0tKTc3MLSksqWrtmQySAjuDIT8rKy0r'. + 'Kz+vtLSmur6jb9JUIJgGdjxDQUVRUVFpaUVNQ1NrZ9+kKVOmTZ'. + 'k6vR0sldJUAwQNTU2dnX0TgOJTQLrSIYFY2dPW1NbW2TNxwtQp'. + 'U6ZMmjJt2rRGWNB3TO7vnzh5MsgSoB6gy7sREdY7bRrQEDAGOb'. + 'wXOQW0TJsOEpwClmxBTTbZ7UDVIPkp7dkYaYqhuLa5trYYUxwL'. + 'AADzm6uekAAcXAAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bl_bluegreen.png +//========================================================== + $this->imgdata_large[1][0]= 1368 ; + $this->imgdata_large[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMMFi8hE9b2uAAABOVJREFUeNq9lk2sJFUVx3+3qv'. + 'tW95t57zFvhiFxmCFRUJRoNCQiJARMhiFx/Igxii5goTG6ZDAu'. + '/EhcSCIrTAgLEiKsJ8ywABNZEMJXEDYCukAmjgjzBkK/j35V1d'. + '333FtV97io97pfzwxfG86qcu/N+Z3zP+fcW/Apmfk4hx57+R/6'. + 'Rqmc9ykhsWjlsUngAA1fXIQ7b73pI/186IGHnn9dH/8frC8v4I'. + 'PiG53uaerR4GmKkv31mB8cyfjd946ZTwR66qVX9OTWIi8UKUv9'. + 'BOrZXpYZvFeiBvzI0fgSUSFKwbVG+Pl1V3HH0VvNR4KeeukV/f'. + 'PmMmdHhst76aXD64AbeVQ9bjNHaiGOC2o3wLrAb2/4LL/84ffn'. + 'fCdzkOdayKpLppBemrBsU5Y1Zdmm9LJdGU6E/t4M24Q26jRDRL'. + 'j3mdc49cSTekFsMzs5XuTsyLDUNSDQ25NwKOly9YIl22MYhJr/'. + 'uoDtBBoT0CxBRGYOAhibIaOCe//2MpfM6KHnX9cXipSlbkKWmS'. + 'nk9iv38J0jixw7vJfrTMYBOvhSoQHJBS09ANELloAGDxW8tfoW'. + 'J+5/UC8CPS0LU7r3SpYarr7M8rmFjMPLXT6/33L4si7Z2GCrQC'. + '+0ctlOaNs9DReV8vSLr85ndPLpZ/WNvHW+01kAVFBOGvJx0wYg'. + 'Sp47RIQ4Emwa8FGJXlDxSCFo5YlVgAo2hwPue/hRndboTV3EW2'. + 'Wp3k6wBp8q56QiWzecW6vwQfnPRkAWhFgILnq08jQ+R2nlUzzN'. + 'uES9Q7Vd+9fba7NmWJW61db2247qACmcjxXr45psYphsFGSLBu'. + 'kIajxqtjNwHkvAjQt0sg3crhPA2+fPz0CuyNFOghsGsr19mnFg'. + 'DGwrRm8UoAtNmQPQtRXDgdC4HImCFEKcCE0oieUWUYq2LtbiGp'. + 'mBQmppfIkjw45DK0QNNkvQ0jMBtPL0UnDRM1rN+cxKwzvOo2NP'. + 'tykR9a1kfpZNDLMG6QDYJqCTBvUe1+uxs+YKyPoGrTwY2HhvC4'. + 'CDWQd5d4xNApNQEEMgjgLdUCLBQ5cprL/trwNwKG2IUmDqDFd5'. + 'sr5BWrlxuSdLDFEFlqAzXGc4zFjupqh6uqYihpxJcEgp026l2w'. + '7wFUv7Z6AvrfRo/n0OYzPwIKE3HUKAJg2otMBiElnsF7wngis9'. + '3ZDjNnLi7huCWUZfueZKTu/M0V3HvmkOFDVxVKDG04ScejSgW5'. + 'V0q5JYFEghuDLHlTmToqDeGOCKIVtrW9hsdmXufEcNLPSXuPHa'. + 'a+bvuh9df5AH/v5PDFmbWQC3Mx+TVvfGVTRB2CodNgT2JBX003'. + 'aANZAYS/BxCv32TV/l2C03G7jgmfjGiT/qmeEmibEYm7XzAO2k'. + 'A+pbgHhBgydqu54YO5eRiLCy7yDvPP6Xqf+5Z+Lu277OYuOpiw'. + 'H15oBmlNOMcmK5RbP+PrEscGU+DSAxdg4CICIkxnLP8aNz63Og'. + 'H3/rdvOb795GVhuaYo0oBc3GGrEsUPVTwO6a7LYd+X51x3Hu/t'. + 'lP5tS65FN+6okn9U+n/sqb596dTvhOF+02myXTmkQNrOw7yD3H'. + 'j14E+UDQjp24/0E9/eKrbA4HH3aMK1b2ccvXvswjv//1J/s5ud'. + 'Due/hRPfP+OmfOrk7vrn7a48ihA3zh8CH+8Iuffiw/n4r9H1ZZ'. + '0zz7G56hAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bl_yellow.png +//========================================================== + $this->imgdata_large[2][0]= 1101 ; + $this->imgdata_large[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAB2l'. + 'BMVEX//////////+///+f//9b//8b//73//7X//63//6X//5T/'. + '/4z//4T//3P//2v//1r//0r//0L//zH//yn//yH//xj//xD//w'. + 'j//wD/90L/9zn/9zH/9xj/9xD/9wj/9wD39yn37zn37zH37yH3'. + '7xD37wj37wDv70Lv50rv50Lv5znv5yHv5xjv5wjv5wDn51Ln5x'. + 'Dn3jHn3iHn3hjn3hDn3gje3oze3nPe3lLe1oze1nPe1lLe1ine'. + '1iHe1hje1hDe1gje1gDW1qXW1mvWzqXWzkLWzhjWzhDWzgjWzg'. + 'DOzrXOzq3OzpzOzgDOxkrOxinOxhjOxhDOxgjOxgDGxqXGxnvG'. + 'xmvGvRjGvRDGvQjGvQDFxbnAvr6/v7+9vaW9vZS9vQi9vQC9tR'. + 'C9tQi9tQC7u7W1tZS1tXu1tTG1tQi1rRC1rQi1rQCtrYytrSGt'. + 'rQitrQCtpYStpSGtpQitpQClpYSlpXulpQClnBClnAilnACcnG'. + 'ucnAicnACclAiclACUlFqUlCmUlAiUlACUjFKUjAiUjACMjFKM'. + 'jEqMjACMhACEhACEewB7ezF7exB7ewB7cwBzcylzcwBzaxBzaw'. + 'BraxhrawhrawBrYxBrYwBjYwBjWgBaWgBaUgCXBwRMAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwkRFBKiJZ4hAAAB7ElEQVR4nI3S+1vS'. + 'UBgHcB67WJmIMWAVdDHEDLBC6Go0slj3Ft0m9RRBWQEmFZFDEM'. + 'Qgt0EMFBY7p/+198hj1kM/9N1+++x73rOd6XT/kStnTx4fPzd9'. + 'uwfOjFhomj7smAhwj/6Cm2O0xUwy6g7cCL99uCW3jtBmE7lsdr'. + 'fvejgpzP7uEDFRRoqy2k8xQPnypo2BUMP6waF9Vpf3ciiSzErL'. + 'XTkPc0zDe3bsHDAcc00yoVgqL3UWN2iENpspff+2vn6D0+NnZ9'. + '6lC5K6RuSqBTZn1O/a3rd7v/MSez+WyIpVFX8GuuCA9SjD4N6B'. + 'oRNTfo5PCAVR0fBXoIuOQzab1XjwwNHx00GOj8/nKtV1DdeArk'. + '24R+0ul9PjmbrHPYl+EipyU0OoQSjg8/m83kl/MMhx0fjCkqio'. + 'SMOE7t4JMAzDsizH81AqSdW2hroLPg4/CEF4PhKNx98vlevrbY'. + 'QQXgV6kXwVfjkTiSXmhYVcSa7DIE1DOENe7GM6lUym0l+EXKks'. + 'K20VAeH2M0JvVgrZfL5Qqkiy0lRVaMBd7H7EZUmsiJJcrTdVja'. + 'wGpdbTLj3/3qwrUOjAfGgg4LnNA5tdQx14Hm00QFBm65hfNzAm'. + '+yIFhFtzuj+z2MI/MQn6Uez5pz4Ua41G7VumB/6RX4zMr1TKBr'. + 'SXAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bl_silver.png +//========================================================== + $this->imgdata_large[3][0]= 1481 ; + $this->imgdata_large[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAADAF'. + 'BMVEUAAADOzs7Gxsa9vb21tbXOxsbOzsbGzsb3///O1ta1vb2c'. + 'paVSWlpKWlpSY2ve5+97hIze7/9aY2vO5/9zhJRaa3tSY3PGzt'. + 'aMlJxrc3tja3NKUlpCSlK1vcZze4RSWmPW5/+Upb3G3v9zhJxS'. + 'Y3t7jKVaa4TO3veltc6ElK1re5Rjc4ycpbV7hJRaY3M5QlLn7/'. + '/Gzt6lrb2EjJzO3v9ja3vG1ve9zu+1xueltdacrc6UpcaMnL1C'. + 'SlqElLV7jK1zhKVre5zW3u/O1ue1vc6ttcaMlKVze4xrc4RSWm'. + 'tKUmPG1v+9zve1xu+tveeltd6crdbe5/+9xt6cpb17hJxaY3s5'. + 'QlrW3vfO1u/Gzue1vdattc6lrcaUnLWMlK2EjKVze5Rrc4xja4'. + 'RSWnNKUmtCSmO9xuecpcZ7hKVaY4TW3v/O1vfGzu+1vd6ttdal'. + 'rc69xu+UnL2MlLWEjK1ze5xrc5R7hK1ja4zO1v+1veettd6lrd'. + 'aMlL3Gzv/39//W1t7Gxs61tb29vcatrbWlpa2cnKWUlJyEhIx7'. + 'e4TW1ufGxta1tcZSUlqcnK3W1u+UlKW9vda1tc57e4ytrcalpb'. + '1ra3vOzu9jY3OUlK29vd6MjKWEhJxaWmtSUmNzc4xKSlpjY3tK'. + 'SmNCQlqUjJzOxs7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'. + 'AAAAAAAAAAAAAAAAAAAAAAAAD///9fnkWVAAAAAnRSTlP/AOW3'. + 'MEoAAAABYktHRP+lB/LFAAAACXBIWXMAAABFAAAARQBP+QatAA'. + 'AB/klEQVR42mNgxAsYqCdd3+lcb4hLmj8wMMvEu8DCMqYbU9op'. + 'UEFB2MTb26eyysomFl06XEEhUCHLpAKo2z/fujikEUVaXUFBMB'. + 'BouLePuV+VVWGRciIXknSEsImCQd3//xwmPr65llaFcSFJHkjS'. + '3iYmWUDZ//8NfCr989NjNUMSUyTg0jneSiaCINn/gmlVQM12qg'. + 'lJnp5waTMTE5NAkCyHWZW/lXWNfUlikmdYK0zax7siS4EDKJtd'. + 'mQeU1XRwLBdLkRGASucWmGVnZ4dnhZvn5lmm29iVOWpnJqcuko'. + 'JKR1Wm5eTkRKYF5eblp9sU2ZeUJiV7zbfVg0pH56UFBQXNjIqK'. + 'jgkujItX1koKTVmYajsdKu2qETVhwgSXiUDZ2Bn9xqUeoZ5e0t'. + 'LzYYZ3B092ndjtOnmKTmycW1s7SHa+l5dtB8zlccE6RlN0dGbM'. + 'mDVbd5KupNBcL6+F82XgHouLj5vRP2PWLGNdd4+ppnxe8tJec6'. + 'XnNsKkm0uVQ5RDRHQTPTym68nPlZbvkfYCexsa5rpJ2qXa5Umm'. + 'ocmec3m8vHjmSs+fgxyhC5JDQ8WSPT2lvbzm8vDIe0nbtiBLN8'. + '8BigNdu1B6Lsje+fPbUFMLi5TMfGmvHi/puUAv23q2YCTFNqH5'. + 'MvPnSwPh3HasCbm3XUpv+nS5VtrkEkwAANSTpGHdye9PAAAASn'. + 'RFWHRzaWduYXR1cmUANGJkODkyYmE4MWZhNTk4MTIyNDJjNjUx'. + 'NzZhY2UxMDAzOGFhZjdhZWIyNzliNTM2ZGFmZDlkM2RiNDU3Zm'. + 'NlNT9CliMAAAAASUVORK5CYII=' ; + +//========================================================== +// File: bl_purple.png +//========================================================== + $this->imgdata_large[4][0]= 1149 ; + $this->imgdata_large[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAACAV'. + 'BMVEX/////////7///5///1v//xv//rf//pf//lP//jP//hP//'. + 'c///a///Wv//Wvf/Uv//Sv//Qv//Qvf/Off/Mf//Kf//If//If'. + 'f/GP//GPf/EP//EPf/CP//CPf/CO//AP//APf3Oe/3Kff3Ke/3'. + 'Ie/3GO/3EO/3AO/vSu/vSufvOefvMefvIefvGOfvEOfvCOfvAO'. + 'fnUufnSufnMd7nId7nGN7nGNbnEN7nCN7nAN7ejN7ejNbec97e'. + 'c9beUtbeQtbeIdbeGNbeENbeCNbeANbWpdbWa9bWQs7WGM7WEM'. + '7WCM7WAM7Otc7Orc7OnM7OSsbOIb3OGMbOEMbOCMbOAM7OAMbG'. + 'pcbGnMbGe8bGa8bGKbXGEL3GCL3GAL3FucXBu73AvsC/v7+9pb'. + '29Ka29GLW9ELW9CLW9AL29ALW5rrm1lLW1e7W1MbW1GKW1EK21'. + 'CLW1CK21AK2tjK2thKWtMaWtIaWtGJytCK2tCKWtAK2tAKWlhK'. + 'Wle6WlEJylCJylAKWlAJyca5ycGJScEJScCJScAJycAJSUWpSU'. + 'UoyUKZSUEIyUCIyUAJSUAIyMUoyMSoyMIYSMEISMCISMAIyMAI'. + 'SECHuEAISEAHt7MXt7EHt7CHt7AHt7AHNzKXNzEGtzAHNzAGtr'. + 'GGtrEGNrCGtrAGtrAGNjCFpjAGNjAFpaAFpaAFIpZn4bAAAAAX'. + 'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsS'. + 'AdLdfvwAAAAHdElNRQfTAwkRFB0ymoOwAAAB9UlEQVR4nGNgIA'. + 'K42hhqGtm5+WFIWClKycvLK6gbuARGoEj4aMjLSElISUir6Tt7'. + 'x+aEIWR8leQlwEBSTc/CK7awLguuR0lGQkJMVFRUTFJVzwko1d'. + 'oFk9OQl5IQE+Dh5hVR0TV3CkkvbJgyASJjDZIR5GBl5eRX0TH1'. + 'DEqrbJ2ypBEspSgvJSXKw8bMxMavbOLoGZNf1TZlybw4oIyfLN'. + 'BxotxsLEzsQiaOHkFpBQ2905esrAZK2SpIAaUEuDm5+LTNPAKj'. + 'C+pbps1evrIDKGWnLictKSkuLKyoZQyUya9o7Z2+YMXKGUApew'. + 'M9PTVdXR0TEwf3wOjUirruafOXL18xFyjl72Kpb25qaurg4REU'. + 'EFVe2zJ5zpLlK1aCpbydnZ2dnDwDA6NTopLLeiZNXbB8BcTAyP'. + 'TQ0JDg4KCY1NS83JKmiVOBepYvX9UPlAovzEiPSU/LLyior2vq'. + 'mjZr3vLlIF01IC+XVhUWFlZW1Lc290ycOGfxohVATSsXx4Oksn'. + 'vaWlsb2tq6J0+bM2/RohVA81asbIcEYueU3t7JU6ZNnwNyGkhm'. + '+cp5CRCppJnzZ8+ZM3/JUogECBbBIixr8Yqly8FCy8F6ltUgoj'. + 'lz7sqVK2ByK+cVMSCDxoUrwWDVysXt8WhJKqG4Y8bcuTP6qrGk'. + 'QwwAABiMu7T4HMi4AAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bl_gray.png +//========================================================== + $this->imgdata_large[5][0]= 905 ; + $this->imgdata_large[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAABO1'. + 'BMVEX////////3///39/fv7+/e5+fW3t7Wzs7WxsbG1tbGzsbG'. + 'xsbDxMS/v7++wMC+v7+9zsa9xsa9vb29tbW9ra29pa24uLi1xs'. + 'a1vb21tbWxtrattbWmpqalra2cra2cpaWcnJycjIyUpaWUnJyU'. + 'lJSUjIyMnJyMnJSMlJSMlIyMjJSMjIyElJSElIyEjIyEhIR7jI'. + 'x7hIR7hHt7e3t7e3N7e2tzhIRze3tze3Nzc3Nre3trc3Nrc2tr'. + 'a2tjc3Njc2tja3Nja2tjY2NjWlpaa2taY2taY2NaY1paWlpaUl'. + 'JSY2NSY1pSWlpSWlJSUlJSUkpKWlpKWlJKUlpKUlJKUkpKSkpK'. + 'SkJCUlJCUkJCSkpCSkJCQkI5Sko5QkI5Qjk5OUI5OTkxQkIxOT'. + 'kxMTkxMTEpMTEhMTEhKSkYISEpy7AFAAAAAXRSTlMAQObYZgAA'. + 'AAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdE'. + 'lNRQfTAwkRFQfW40uLAAABx0lEQVR4nI3SbXfSMBQA4NV3nce5'. + 'TecAHUywRMHSgFuBCFsQUqwBS1OsWQh0GTj//y8wZUzdwQ/efM'. + 'tzcm/uuXdj4z9ic/PR9k4qk1qDnf0X2/uZzKt8GaRvSubg4LVp'. + 'mkWzCGAT/i3Zsm2XNQHLsm2n2937LaaNnGoJFAEo27B50qN0ay'. + 'Wg26lXsw8fP8nmzcJb2CbsnF5JmmCE8ncN404KvLfsYwd7/MdV'. + 'Pdgl/VbKMIzbuwVgVZw2JlSKJTVJ3609vWUY957lgAUd1KNcqr'. + 'yWnOcOPn8q7d5/8PywAqsOOiVDrn42NFk+HQ7dVuXNYeFdBTpN'. + 'nY5JdZl8xI5Y+HXYaTVqEDp1hAnRohZM03EUjMdhn5wghOoNnD'. + 'wSK7KiiDPqEtz+iD4ctdyAifNYzUnScBSxwPd6GLfRURW7Ay5i'. + 'pS5bmrY8348C5vvUI+TLiIVSJrVA0heK/GDkJxYMRoyfCSmk4s'. + 'uWc3yic/oBo4yF374LGQs5Xw0GyQljI8bYmEsxVUoKxa6HMpAT'. + 'vgyhU2mR8uU1pXmsa8ezqb6U4mwWF/5MeY8uLtQ0nmmQ8UWYvb'. + 'EcJaYWar7QhztrO5Wr4Q4hDbAG/4hfTAF2iCiWrCEAAAAASUVO'. + 'RK5CYII=' ; + +//========================================================== +// File: bl_brown.png +//========================================================== + $this->imgdata_large[6][0]= 1053 ; + $this->imgdata_large[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAMAAADzN3VRAAABoV'. + 'BMVEX////Gzs7GvbXGrZTGpXu9nHO1nHO1nIy9taXGxs7GtaXO'. + 'nHPGlFrGjEq9hEq1hEqte0Klczmcazmce1KtnIzGxsbGvb3OlF'. + 'LOlFq9hFKte0qcc0KUYzGEWimMc1K9ta3OnGvOnGPWnGO9jFq9'. + 'jFKlc0KUazmMYzl7UilzUjGtpZzGxr3GnGPWpWvepXO1hFJ7Wj'. + 'FrSiFjUjG1ra3GnHPvxpT/5733zpythFKUa0KEYzlzUilaOSF7'. + 'Wjm9jErvvYz/99b///f/78bnrYS1hFqle0p7UjFrSiljQiFCMR'. + 'iMhHO9lGvGjFLWnGv/3q3////erXuthEqlc0paQiFKMRhSQin/'. + '1qX/997//++cc0pjSilaQilKORhCKRiclIy9pYzGlGPntYT33q'. + '3vvZSEWjlSOSE5KRB7c2O1lHutczmthFqte1JrWkqtjGtCKRBa'. + 'SjmljGuca0KMYzGMaznOztaclISUYzmEWjFKOSF7a1qEYzFaSi'. + 'GUjISEa0pKOSm9vb2llIxaQhg5IQiEc2tzY0paORilnJy1raVS'. + 'OSljUkJjWkKTpvQWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkREiei'. + 'zP2EAAAB9UlEQVR4nGWS/VfSUBjHL5QluhhBxtwyWcCus5Blpm'. + 'wDC4ONaWXCyBi7RMZmpQ2Bypm9W/byV3cHHo/W88s95/s5z/d5'. + 'uwCcCh/4L3zAf+bs0NC588On9QAYGSUuBINk6GI4cmnsBLk8Go'. + '1SFEGMkzRzZeLq5JE8FvDHouw1lqXiCZJOcnCKnx4AcP0GBqmZ'. + 'mRgRT9MMB4Wbs7cGSXNRik3dnp9fiMUzNCNKgpzN9bsaWaQo9s'. + '7dfH7pXiFTZCBU1JK27LmtBO8TDx7mV1eXHqXXyiIUFLWiVzHx'. + 'BxcJIvV4/cn6wkqmWOOwmVE3UQOAp6HxRKL5bGPj+VwhUhalFq'. + '8alm5vAt+LlySZTsebzcKrraIIW4JqZC3N3ga+1+EQTZKZta1M'. + 'pCZCSeDViqVrThsEdsLJZLJYLpZrHVGScrKBvTQNtQHY6XIM02'. + 'E6Ik7odRW1Dzy3N28n3kGuB3tQagm7UMBFXI/sATAs7L5vdbEs'. + '8Lycm923NB0j5wMe6KOsKIIyxcuqauxbrmlqyEWfPmPy5assY1'. + 'U1SvWKZWom9nK/HfQ3+v2HYZSMStayTNN0PYKqg11P1nWsWq7u'. + '4gJeY8g9PLrddNXRdW8Iryv86I3ja/9s26gvukhDdvUQnIjlKr'. + 'IdZCNH+3Xw779qbG63f//ZOzb6C4+ofdbzERrSAAAAAElFTkSu'. + 'QmCC' ; + +//========================================================== +// File: bl_darkgreen.png +//========================================================== + $this->imgdata_large[7][0]= 1113 ; + $this->imgdata_large[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAB2l'. + 'BMVEX////////3///v///n/+/e99bW/+/W99bO786/v7++vr69'. + '/96999a7wb24vbu1/9a1zqW1u7itxrWosq6l772l1qWlxrWlxq'. + '2lva2cxpSU562U3q2UxqWUvaWUpZyM77WM57WMvYyMtZyMrZyM'. + 'pZSMnJSEvZyEtYyErZSElIx7zpR7xpx7xpR7vZR7jIRz1pRzxp'. + 'RzjIRrzpRrzoxrxoxrtYRrrYxrrXtrpYRrhHNjzoxjxoxjxoRj'. + 'vYRjtYRjrXtjpXtjlGNje2tazoxazoRaxoxaxoRavYRatYRatX'. + 'tarXtapXNanHNajFpae2tSzoRSxoRSvXtStXtSrXtSrXNSpXNS'. + 'nHNSnGtSlGtSlGNSjGtSjGNKvXtKtXNKrXNKpWtKnGtKlGNKjG'. + 'NKhGNKhFJKc1pKa1JCrWtCpWtCnGtClGNCjGNCjFpChFpCe1JC'. + 'a1JCY1I5pWs5nGM5lGM5jFo5hFo5e1o5c0o5WkoxjFoxhFoxhF'. + 'Ixe1Ixc1Ixc0oxa0ophFIpe0opc0opa0opa0IpY0IpWkIpWjkp'. + 'UkIpUjkhc0oha0IhY0IhWjkhWjEhUjkhUjEhSjEhSikhQjEhQi'. + 'kYWjkYSjEYSikYQjEYQikQSikQQikQQiEQOSExf8saAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwkRFCaDkWqUAAAB+ElEQVR4nI3S+1vS'. + 'UBgHcGZlPV0ks/vFrmQWFimJjiwiYUJWjFBWFhClyZCy5hLrwA'. + 'x2EIwJC1w7zf2vnU0re+iHvs9++7x7zznvORbLf+TA6ct9fYMX'. + 'jrfAUYefpp+/iM1ykxf/lmuhUZ/PTwXC8dml5Wcd23o5H5Mk6b'. + '5NUU8icXbhS67rNzn9JDnguOEYGQtEEtwC+Crs3RJ76P5A/znr'. + 'vsNX7wQnEiwHCtK7TTkW8rvdZ9uJtvZTLkxpHhSrP66bNEj7/P'. + '3WNoLYeeSWQQCIpe9lQw7RNEU5rDsIYtcJ14Nocg7kRUlBNkxn'. + 'YmGKcp7cv3vPwR7XOJPmc0VYU3Sv0e9NOBAYG7Hbz/cMjTMveZ'. + 'CHkqxuTBv0PhYJB4N3XR6PJ5rMAPMnpGUxDX1IxSeMTEaZp1OZ'. + 'nGAIQiYtsalUIhFlmGTy3sO3AizJCKn6DKYryxzHsWyaneMzr6'. + 'cWxRVZVlFTe4SpE3zm+U/4+whyiwJcWVMQNr3XONirVWAklxcE'. + 'EdbqchPhjhVzGpeqhUKhWBQhLElr9fo3pDaQPrw5xOl1CGG1JE'. + 'k1uYEBIVkrb02+o6RItfq6rBhbw/tuINT96766KhuqYpY3UFPF'. + 'BbY/19yZ1XF1U0UNBa9T7rZsz80K0jWk6bpWGW55UzbvTHZ+3t'. + 'vbAv/IT+K1uCmhIrKJAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bl_green.png +//========================================================== + $this->imgdata_large[8][0]= 1484 ; + $this->imgdata_large[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMMFjM4kcoDJQAABVlJREFUeNq9ll2MJFUVx3/11V'. + 'Vd/TE9vU0v4zLDwJIF16jBqLAPhsRXEiDqg0QTJiQSjcSNvCzw'. + 'sBEDDxizhvAAxBgf1oR9QF9NiE9ESFZkQyZB5WtddmdnZ3qqqr'. + 'uqbt367Cofqu3ZZpWVaDzJfbkf53//55z/PVdZXV3l/2H6f7Lp'. + '5VdOV/4Nb+GmHpUeA7AdBNxc3kafNb73jRPK9Xwon8ToxVefqU'. + 'b91wibH5EkCQBCizFihTSviHUHR0hWws9xe3wvJ7/7nPKpgX5y'. + '9oFqt3eOgWniRBoAbUBGGqZUibSYaeoT2B5bnkdaSA6793Cv/S'. + 'QPPbihXBfo5VdOV+8dfgnvwAU62YH5fCZ12sDujFkwyegCqTrB'. + 'iUOKTOJKj8jr88jS8zy6cXwBTP048nuHX0I0nDlIp7RpTG7kM0'. + 'sdyAYsTVukUuWGhlWHMq0ITL92lnUp9R1Obz/GmTNnqn9bDD8/'. + '+0D1oX0O0zQZZDYCsK2j3Gl9jQqDfHiei8GfiKVLlsZkJaBAN1'. + '0i6PgwUbB0GxG5/PrtE/xLRr959Znqw9452oVNI+jiJhnr1pe4'. + 'k29zB1/nFr5Kj7tpt1YYhJ0FJ7nUYbcJQBgahN2MzeCP/OipR6'. + 'prgN6Qr6ELFQFUWoRpNVjlKwxZB8DCpE+PtfEKqV1cUzxpVudu'. + 'GTBHA5Y1g99e+dUio9O/P1Vpq+/WE5GGjDSMoAtAQjrf3C52IP'. + 'QxpY4WK2hpReka9Gfrhqgz0bACRoCWjDh56kQ1z9FeuUUQxVhK'. + 'B92sD1VahM+bAJgcoJhGjP/6Ln8rAgDiRCVRKiIzxMkkodBJ85'. + 'im1IlEHbE4k1xyNveL4YP8HarmGJIOpqyjeQmfNHmTvnqZTWBt'. + 'vIJXpPwlukJSuSTKGK3pEwtJmiX00ZlInTyNscImO6XBITvH1c'. + '8vVt2OucdKvIyeKRTNCivsEMgcpg6taYs30nfq0Gqg6hOSSFJ4'. + 'BSnJPht0IqEjWmOGocEI6F0J94F0qaL6BntTF0MtUfweKQKAPU'. + 'Wwp4OcVnQAmVb0p9DLOzjEhEKnGRmoRc7EzRGlwA6NujAKG4yP'. + '6Sjwc4aVznZ7DK0xXdkDoJf0kGmFBniFBOBGcZSCCSKd0IwN0k'. + 'IS+QZWCGVZex4BnUxya3+Zt9iugQbcRFpIAtuHvAZulPUdLhUJ'. + 'RqegI3WcqaSXddlT3idsWMSRRGkEtNwmyTifAwyBo7LP+11J0e'. + '7tM7pZOYblHkBLcqZ5LcYtw6Wbd4CM3SpE9foYZsIHoqDKCrbz'. + 'mLSQtPwmuhXgtBLs0GBdbXOhFGB7WBKO2F8GXt9/VO97Ya3atF'. + '7nUHnwGjGGQqcPxFEdFqURkEidiZszAERoYIsGju1hq21kWee3'. + 'bw15+8WpsvAy3K1+i3JkkhZyPpxxjjPOsfOYiZ+TFhLPzQnHOU'. + 'tpzGB2dgA4tscIkKIx19Cxg/fPL7vQJu47eXt1VvsDK8pwPueZ'. + 'PuZoQMOqhRoJHSs0kKLBWjvjYinmeQGw1TaX1RFdfZ3LMzYLjA'. + 'C++dkn6AaH2Nobk6cxEzdnuG0TdC8zvdJkN0hqkFkO/jwL0fxa'. + 'so8sBcuFzQ+/+MRC+BeAHnpwQzn++ee5KT9Eshuy46dcKAXm32'. + '0uzPQhS4GttkH2GQID2Wc0Y4LtAbDxhZ/x5A+e/uTG9+jGceXH'. + '9/ySnnIXnUzOxXe1038mW3ZynNmam4yYWkO+f9cv+Oljz16/lV'. + '9tDz/9nerc1hm8ZEScSRK7VvtYl1i1dklsOKyvc+zg/bzw1O8+'. + '/efkajt56kR1ydlEJBc5H46xzbrJ3dY9wrB7hGcff+6/+279L+'. + '0fHxyiE8XMLl4AAAAASUVORK5CYII=' ; + +//========================================================== +// File: bl_blue.png +//========================================================== + $this->imgdata_large[9][0]= 1169 ; + $this->imgdata_large[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAACEF'. + 'BMVEX/////////7//35//v1v/exv/Wvf/Wrf/Wpf/Orf+/v7+9'. + 'tc69jP+9hP+5ucW1tc6tlP+rq7Wlpdalpcalpb2cnM6cnMacc/'. + '+cWv+UlLWUjN6UjK2Uc/+Ma/+MUv+EhKWEa/+EQvd7e8Z7e7V7'. + 'e6V7c957Wv9za9Zza8ZzSv9ra5xrSv9rOf9rMe9jUudjQv9jOe'. + '9aWpRaUt5aUpRaSu9aSudSUoxSSs5SSoxSMf9KQtZKOfdKMedK'. + 'Kf9KKe9CKf9CKb1CKa1CIfdCIedCId45MXs5Kfc5If85Iec5Id'. + 'Y5GP8xMbUxMXsxKc4xKZQxIf8xGP8xGO8xGN4xGNYxGL0xGK0p'. + 'KXMpIYwpGP8pGO8pGOcpGNYpGM4pEP8pEPcpEOcpEN4pENYpEM'. + 'YpEL0hGKUhEP8hEPchEO8hEOchEN4hENYhEM4hEMYhELUhCP8h'. + 'CO8hCN4YGJwYGGsYEL0YEK0YEHMYCN4YCM4YCMYYCL0YCKUYAP'. + '8QEJQQEIwQEHsQEGsQCM4QCLUQCK0QCKUQCJwQCJQQCIwQCHMQ'. + 'CGsQAP8QAPcQAO8QAOcQAN4QANYQAM4QAMYQAL0QALUQAKUQAJ'. + 'QQAIQICGsICGMIAO8IANYIAL0IALUIAK0IAKUIAJwIAJQIAIwI'. + 'AIQIAHsIAHMIAGsIAGMAAN4AAMYAAK0AAJQAAIwAAIQAAHMAAG'. + 'sAAGMAAFrR1dDlAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkRFRPMOZ'. + '/2AAAB+klEQVR4nGNgIAIIqeqZmBqpi2JISNml5lVXV3d198Yo'. + 'oUjwm1SnxsbGRsSm5ZfNXO4tjCTjVh0ABhFx6QV9E1Y0S8JkuN'. + '3yAgLc7W3t/QPi4jPKJ8ye1yoIlTKpjvVy15eVUbN0i4zKLJ8w'. + 'ae6qcKgLqmMj3PUFWFl5NJ0CExLLJzbNW7BWCyxlXR0ba6/Axs'. + 'zELmfnkRBT0QiSKgXJCOflxUbYy3KyMHEoOrtEZ1c2TZ6/cMl6'. + 'eaCUamdsbIC7tjgPr4SBS3BMMVDTwkXr1hsDpYy6UmMj/O0tdX'. + 'QNbDxjknJLWqYsXLx0vStQynxGflpkZGCgs7Onp29SbtNkoMy6'. + 'pevCgFJWy3oyMuKjgoKCPWNCvEuqWhcsWrJ06XqQlPnMvrKyrM'. + 'TomJjkZAfHlNa2qdOWrlu63gcopbG8v7+hvLwip7g4JdSxsLZu'. + '8dKlS9ettwBKic2eNXHChIkTG5tKqgpr2uo6loLAehWQx0LnzJ'. + '49p6mpeXLLlNq6RUvqly6dvnR9Bx9ISnnlvLmT582bMr9t4aL2'. + '+vrp60GaDCGB6Ld6wfwFCxYCJZYsXQ+SmL6+FBryInVrFi1atH'. + 'jJkqVQsH6pNCzCJNvXrQW6CmQJREYFEc2CYevXrwMLAyXXl0oz'. + 'IAOt0vVQUGSIkabkDV3DwlzNVDAksAAAfUbNQRCwr88AAAAASU'. + 'VORK5CYII=' ; + +//========================================================== +// File: bs_red.png +//========================================================== + $this->imgdata_small[0][0]= 437 ; + $this->imgdata_small[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAk1'. + 'BMVEX////////GxsbGra3/xsbOhITWhIT/hIT/e3v/c3P/a2vG'. + 'UlK1SkrOUlL/Y2PWUlLGSkrnUlLeSkrnSkr/SkqEGBj/KSmlGB'. + 'jeGBjvGBj3GBj/EBD/CAj/AAD3AADvAADnAADeAADWAADOAADG'. + 'AAC9AAC1AACtAAClAACcAACUAACMAACEAAB7AABzAABrAABjAA'. + 'BuukXBAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGDNEMgOYAAAAm0'. + 'lEQVR4nI3Q3RKCIBAFYGZMy9RKzX7MVUAUlQTe/+kS0K49d3wD'. + '7JlFaG+CvIR3FvzPXgpLatxevVVS+Jzv0BDGk/UJwOkQ1ph2g/'. + 'Ct5ACX4wNT1o/zzUoJUFUGBiGfVnDTYGJgmrWy8iKEtp0Bpd2d'. + 'jLGu56MB7f4JOOfDJAwoNwslk/jOUi+Jts6RVNrC1hkhPy50Ef'. + 'u79/ADQMQSGQ8bBywAAAAASUVORK5CYII=' ; + + +//========================================================== +// File: bs_lightblue.png +//========================================================== + $this->imgdata_small[1][0]= 657 ; + $this->imgdata_small[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABVl'. + 'BMVEX////////d///AwMC7wcS08P+y+P+xxdCwxM+uws2twMur'. + 'vsinzNynytylzuKhyN6e5v6d5P+d1fOcwNWcu8ub4f+at8iZ3v'. + '+ZvdGY2/yW2f+VscGU1vuT1fqTr72Sx+SSxeKR0fWRz/GPz/OP'. + 'rr+OyeqMy+6Myu2LyeyKxueJudSGw+SGorGDvt+Cvd6CvN2Aud'. + 'p+uNd+t9Z9tdV8tdR8tNN6sc94r813rct2q8h0qcZ0qMVzp8Rx'. + 'o8Bwor5tn7ptnrptnrlsnbhqmbRpmbNpi51ol7Flkqtkkqtkka'. + 'pjj6hijaRhjaZgi6NfiqJfiaFdh55bhJtag5pZgphYgJZYf5VX'. + 'cn9Ve5FSeI1RdopRdYlQdYlPc4dPcoZPcoVNcINLboBLbH9GZn'. + 'hGZXdFZHZEY3RDYnJCXW4/W2s/WWg+Wmo7VmU7VGM7U2E6VGM6'. + 'VGI5UV82T1wGxheQAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGTok'. + '9Yp9AAAAtElEQVR4nGNgIBaw8wkpKghzwvksPAKiUsraprYiLF'. + 'ARXkE2JiZ1PXMHXzGIAIekOFBE08TGLTCOCyzCLyvDxsZqZOnk'. + 'E56kAhaRV9NQUjW2tPcMjs9wBYsY6Oobmlk7egRGpxZmgkW0zC'. + '2s7Jy9giKT8gohaiQcnVzc/UNjkrMLCyHmcHr7BYREJKTlFxbm'. + 'QOxiEIuKTUzJKgQCaZibpdOzQfwCOZibGRi4dcJyw3S4iQ4HAL'. + 'qvIlIAMH7YAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bs_gray.png +//========================================================== + $this->imgdata_small[2][0]= 550 ; + $this->imgdata_small[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAMAAADH72RtAAABI1'. + 'BMVEX///8AAAD8EAD8IAD8NAD8RAD8VAAYGBi/v7+goKCCgoJk'. + 'ZGRGRkb8yAD83AD87AD8/AD4+ADo+ADY+ADI+AC0+ACk+ACU+A'. + 'CE+AB0/ABk/ABU/ABE/AAw/AAg/AAQ/AAA/AAA+AAA6BAA2CAA'. + 'yDQAtEQApFQAlGQAhHQAdIgAZJgAVKgARLgAMMgAINwAEOwAAP'. + 'wAAPgIAPAQAOgYAOAkANgsANA0AMg8AMBEALhMALBUAKhcAKBo'. + 'AJhwAJB4AIiAAID////4+Pjy8vLs7Ozm5ubg4ODa2trT09PNzc'. + '3Hx8fBwcG7u7u1tbWurq6oqKiioqKcnJyWlpaQkJCJiYmDg4N9'. + 'fX13d3dxcXFra2tkZGReXl5YWFhSUlJMTExGRkZAQEA1BLn4AA'. + 'AAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIA'. + 'AAsSAdLdfvwAAAAHdElNRQfTAwkUGiIctEHoAAAAfElEQVR4nI'. + '2N2xKDIAwF+bZ2kAa8cNFosBD//yvKWGh9dN+yk9kjxH28R7ze'. + 'wzBOYSX6CaNB927Z9qZ66KTSNmBM7UU9Hx2c5qjmJaWCaV5j4t'. + 'o1ANr40sn5a+x4biElrqHgrXMeac/c1nEpFHG0LSFoo/jO/BeF'. + 'lJnFbT58ayUf0BpA8wAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bs_greenblue.png +//========================================================== + $this->imgdata_small[3][0]= 503 ; + $this->imgdata_small[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAxl'. + 'BMVEX///////+/v79znJQhSkJ7raU5hHtjraVKnJRCjIRClIyU'. + '9++E595avbVaxr2/v7+ctbWcvb17nJxrjIx7paUxQkK9//+Mvb'. + '17ra2Evb17tbVCY2MQGBiU5+ec9/eM5+d71tZanJxjra1rvb1j'. + 'tbVSnJxara1rzs5jxsZKlJRChIQpUlIhQkJatbVSpaU5c3MxY2'. + 'MYMTEQISFavb1Sra1KnJxCjIw5e3sxa2spWlpClJQhSkoYOTkp'. + 'Y2MhUlIQKSkIGBgQMTH+e30mAAAAAXRSTlMAQObYZgAAAAFiS0'. + 'dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfT'. + 'AwkUGTIqLgJPAAAAqklEQVR4nI2QVxOCMBCEM6Mi2OiCvSslJB'. + 'CUoqjn//9TYgCfubf9Zu9uZxFqO+rscO7b6l/LljMZX29J2pNr'. + 'YjmX4ZaIEs2NeiWO19NNacl8rHAyD4LR6jjw6PMRdTjZE0JOiU'. + 'dDv2ALTlzRvSdCCfAHGCc7yRPSrAQRQOWxKc3C/IUjBlDdUcM8'. + '97vFGwBY9QsZGBc/A4DWZNbeXIPWZEZI0c2lqSute/gCO9MXGY'. + '4/IOkAAAAASUVORK5CYII=' ; + +//========================================================== +// File: bs_yellow.png +//========================================================== + $this->imgdata_small[4][0]= 507 ; + $this->imgdata_small[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAzF'. + 'BMVEX///////+/v79zYwCMewDOxoTWzoTezkr/5wj/5wDnzgDe'. + 'xgC1pQCtnACllACcjACUhABjWgDGvVK1rUrOxlLGvUqEexilnB'. + 'jv3hj35xj/7wj/7wD35wDv3gDn1gDezgDWxgDOvQDGtQC9rQCE'. + 'ewB7cwBzawBrYwDWzlLn3lLe1krn3kre1hi9tQC1rQCtpQClnA'. + 'CclACUjACMhAD/9wC/v7///8bOzoT//4T//3v//3P//2v//2Pn'. + '50r//0r//yn39xj//xD//wBjYwDO8noaAAAAAXRSTlMAQObYZg'. + 'AAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAH'. + 'dElNRQfTAwkUGSDZl3MHAAAAqElEQVR4nI3QWRNDMBAA4My09E'. + 'IF1SME0VT1okXvM/3//6kEfbZv+81eswA0DfHxRpOV+M+zkDGG'. + 'rL63zCoJ2ef2RLZDIqNqYexyvFrY9ePkxGWdpvfzC7tEGtIRly'. + 'nqzboFKMlizAXbNnZyiFUKAy4bZ+B6W0lRaQDLmg4h/k7eFwDL'. + 'OWIky8qhXUBQ7gKGmsxpC+ah1TdriwByqG8GQNDNr6kLjf/wAx'. + 'KgEq+FpPbfAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bs_darkgray.png +//========================================================== + $this->imgdata_small[5][0]= 611 ; + $this->imgdata_small[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAABJl'. + 'BMVEX////////o8v/f6O7W4OnR3PXL1OTL0evEyLvCzePAwMC/'. + 'v7a8wsq7t7C1xum1vtS1q6GzopmyxeKsrsOqvNWoq7anvN+nsb'. + 'qhrcGgqbGfpq6cp7+bqMuVmJKRm7yPlKKMnL6FkKWFipOEkLSE'. + 'j6qEhoqAiaB+jqd8haF7hZR4iJt4g5l3hZl2gIt2cod1hJVzeY'. + 'VzboJvhp9sfJJsb41peY1pd5xpdoVod4xndI5lcHxka4BjcYVg'. + 'Z3BfboFbb4lbZnZbYntaZ4laZYVZV3JYYWpXX3JWWm5VX4RVW2'. + 'NUYX9SXHxPWn5OVFxNWWtNVXVMVWFKV3xHUGZGU3dGTldFSlxE'. + 'Sk9ESXBCRlNBS3k/SGs/RU4+R1k9R2U6RFU2PUg0PEQxNU0ECL'. + 'QWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAA'. + 'CxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGQmbJetrAAAAtklEQV'. + 'R4nGNgwAK4JZTNNOWlYDxhMT4ZDTOzQE1uMF9CiJWVU0LbxDlS'. + 'G8QVF+FnZ2KRNHAIiPUHaZGSlmZj5lH19A1KjLUA8lXU5MWllF'. + 'yjo30TYr2BfG19G11b37CEeN84H38gX1HbwTUkOjo+zjfG3hLI'. + 'l1exCvCNCwnxjfMz0gTyRdXNHXx9fUNCQu2MwU6SN3ZwD42LCH'. + 'W30IK4T8vUJSAkNMhDiwPqYiktXWN9JZj7UQAAjWEfhlG+kScA'. + 'AAAASUVORK5CYII=' ; + + +//========================================================== +// File: bs_darkgreen.png +//========================================================== + $this->imgdata_small[6][0]= 666 ; + $this->imgdata_small[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABX1'. + 'BMVEX////////l/+nAwMC86r+8wb28wby8wLy78sCzw7SywrSx'. + 'wLKwvrGuvK+syK+ryq2rx62n36ym3aumxKmk2qij0Keh16ahva'. + 'Og1aSguKKe06KeuaCetZ+d0KGdtZ+bz6Cay56ZyZ2Zwp2Zr5qZ'. + 'rpqYwJuXyZuXrJmVw5mUxZiTxJeTw5eTq5WRwJWPtJKOvZKKuI'. + '6Kt42Kn4yJt42ItIuGsomFsYmEsIiEr4eDr4eBrIR/qoN+qIJ8'. + 'poB7pH56o356on14nnt2nXl0mndzmnZzmXZymHVwlXNvlHJukn'. + 'FtiHBqjm1qjW1oi2toiWpniWplh2hlhmdkhWdig2VggGNgf2Je'. + 'fmFdfGBde19bbl1aeFxXdFpWclhVclhVcVdUcFZTb1VSbVRQal'. + 'JPaVFKY0xKYkxJYUtIYEpHX0lEWkZCWERCV0NCVkM/U0A+U0A+'. + 'UUA+UEA9Uj89UT48Tj45TDvewfrHAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAwkUGRjxlcuZAAAAtElEQVR4nGNgIBZw8osqqIpzw/msfI'. + 'IiUmr6lo6SbFARASEOJiYtQ2uXADmIAJeEGFBE18LBMySBBywi'. + 'LC/LwcFiZuvmH5WiAxZR0tRW1DC3dfYJS8zyAouYGBibWtm7+o'. + 'TEpZfkgEX0rG3snNx9Q2NSCksgaqRd3Ty8gyLiU/NKSiDmcPsF'. + 'BodHJ2UUlZTkQ+xikIlNSE7LLgECZagL2VQyc0H8YnV2uD94jS'. + 'ILIo14iQ4HALarJBNwbJVNAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bs_purple.png +//========================================================== + $this->imgdata_small[7][0]= 447 ; + $this->imgdata_small[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAnF'. + 'BMVEX///////+/v7/Gvca9rb3Grcb/xv+1hLWte629hL21e7XG'. + 'hMbWhNbOe87We9b/hP//e/97OXv/c///a///Y/+cOZz/Sv/WOd'. + 'bnOefvOe//Kf9jCGNrCGv/EP//CP/nCOf/AP/3APfvAO/nAOfe'. + 'AN7WANbOAM7GAMa9AL21ALWtAK2lAKWcAJyUAJSMAIyEAIR7AH'. + 'tzAHNrAGtjAGPP1sZnAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGS'. + 'o5QpoZAAAAnElEQVR4nI3Q2xJDMBAG4MyQokWrZz3oSkJISJH3'. + 'f7dK0Gv/Xb7J7vyzCK0NjtPsHuH/2wlhTE7LnTNLCO/TFQjjIp'. + 'hHAA6bY06LSqppMAY47x+04HXTba2kAFlmQKr+YuVDCGUG2k6/'. + 'rNwYK8rKwKCnPxHnVS0aA3rag4UQslUGhrlk0Kpv1+sx3tLZ6w'. + 'dtYemMkOsnz8R3V9/hB87DEu2Wos5+AAAAAElFTkSuQmCC' ; + + +//========================================================== +// File: bs_brown.png +//========================================================== + $this->imgdata_small[8][0]= 677 ; + $this->imgdata_small[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABaF'. + 'BMVEX//////////8X/3oD/3nj/1HX/0Gr/xGP/rkv/gBf+iS/2'. + 'bAL1agDxaQDuZwDrZwLpZQDmZQLlZADjcx7gZATeYQDdZgraXw'. + 'DZXwHYXgDXiEvXZAvUjlfUXwXTjVfTbR7ShUvRbR7RWwDMWQDL'. + 'WADKooLKWADJoYLJgkvHWATGoILFn4LFgEvFVgDEZx7EVQDDt6'. + '/DVQDCt6/CnoLChlfCVADAwMC+hFe+UgC8UgC6UQC4gVe4UAC3'. + 'gVe3UAC1gFe1eUu1TwC1TgCzTgCwTQKuTACrSgCqSgCpSgCpSQ'. + 'CodEulSACkRwCiRgCdRACcRACaQwCYQgCWQgKVQQCVQACUQACS'. + 'UR6RPwCOPgCNPQCLPACKPACJOwCEOQCBOAB+NwB9NgB8NgB7NQ'. + 'B6NwJ4NAB3RR52MwB0MgBuLwBtLwBsLwBqLgBpLQBkLQJiKgBh'. + 'KgBgKwRcKABbKQJbJwBaKQRaJwBYKAJVJQDZvdIYAAAAAXRSTl'. + 'MAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLd'. + 'fvwAAAAHdElNRQfTAwkUGho0tvl2AAAAtklEQVR4nGNgIBaoSg'. + 'mLKGpowfkGMty8AqJKpi4mRlAROR5ONg4JFUv3YHOIgDo/HwsT'. + 'q6yps29EsjZYREFIkJ2ZS9/OMzA20wEsIi8uKSZtaOPmH5WSFw'. + 'YW0VRW07Vw8vCLSMguLwCL6FlaObp6B0TGZxSXQ9TouHv6+IXG'. + 'JGYWlpdDzNEKCgmPjkvLKS0vL4LYxWAen5SelV8OBNZQFxrZ5h'. + 'aC+GX2MDczMBh7pZakehkTHQ4AA0Am/jsB5gkAAAAASUVORK5C'. + 'YII=' ; + +//========================================================== +// File: bs_blue.png +//========================================================== + $this->imgdata_small[9][0]= 436 ; + $this->imgdata_small[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAk1'. + 'BMVEX///////+/v7+trcbGxv+EhM6EhNaEhP97e/9zc/9ra/9S'. + 'UsZKSrVSUs5jY/9SUtZKSsZSUudKSt5KSudKSv8YGIQpKf8YGK'. + 'UYGN4YGO8YGPcQEP8ICP8AAP8AAPcAAO8AAOcAAN4AANYAAM4A'. + 'AMYAAL0AALUAAK0AAKUAAJwAAJQAAIwAAIQAAHsAAHMAAGsAAG'. + 'ONFkFbAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGhNNakHSAAAAmk'. + 'lEQVR4nI3P2xKCIBAGYGfM6SBWo1nauIqogaDA+z9dK9Lhrv47'. + 'vtl/2A2CfxNlJRRp9IETYGraJeEb7ocLNKznia8A7Db7umWDUG'. + 'sxAzhurxRHxok4KQGqCuEhlL45oU1D2w5BztY4KRhj/bCAsetM'. + '2uObjwvY8/oX50JItYDxSyZSTrO2mNhvGMbaWAevnbFIcpuTr7'. + 't+5AkyfBIKSJHdSQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bs_green.png +//========================================================== + $this->imgdata_small[10][0]= 452 ; + $this->imgdata_small[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAn1'. + 'BMVEX///////+/v7+/v7/G/8aUxpSMvYyUzpSMzoyM1oxarVqE'. + '/4R7/3tavVpKnEpaxlpz/3Nr/2tKtUpj/2Na51pKzkpK1kpK50'. + 'pK/0oYcxgp/ykYlBgY3hgY7xgY9xgQ/xAI/wgA/wAA9wAA7wAA'. + '5wAA3gAA1gAAzgAAxgAAvQAAtQAArQAApQAAnAAAlAAAjAAAhA'. + 'AAewAAcwAAawAAYwA0tyxUAAAAAXRSTlMAQObYZgAAAAFiS0dE'. + 'AIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAw'. + 'kUGgW5vvSDAAAAnklEQVR4nI3QSxKCMAwA0M4gqCgoiiJ+kEAL'. + 'LQUq0PufzX7ENdnlJZNkgtDS2CYZvK6bf+7EoKLA9cH5SQzv6A'. + 'YloTywsAbYr44FrlgrXCMJwHl3xxVtuuFkJAPIcw2tGB9GcFli'. + 'oqEf5GTkSUhVMw2TtD0XSlnDOw3SznE5520vNEi7CwW9+Ayjyq'. + 'U/3+yPuq5gvhkhL0xlGnqL//AFf14UIh4mkEkAAAAASUVORK5C'. + 'YII=' ; + + +//========================================================== +// File: bs_white.png +//========================================================== + $this->imgdata_small[11][0]= 480 ; + $this->imgdata_small[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAAQCAYAAADwMZRfAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFTsY/ewvBQAAAW1JREFUeJytkz2u4jAUhT/jic'. + 'gfBUKiZhE0bIKeVbCWrIKenp6eDiGlCEEEBArIxvzGU4xeZjLk'. + 'jWb05lRXuvbx+exr4bouX1Xjyw7Atz81F4uFBYjjGIDhcCjq1o'. + 'k6nN1uZwFerxfP55Msy1itVmRZBsB4PK6YveHkeW5d18XzPIIg'. + 'wPd9Wq0WnU6HMAxJkoQoiuynOIfDwUopkVIihKAoCgAcx6Hdbm'. + 'OMIU1T5vN55eBKEikljUYDIX6kFUKU9e8aDAZlmjcca+1b7TgO'. + '1+uVy+VS9nzfr8e53++VzdZaiqIgz3OMMWitOZ/PaK0JgqDeRC'. + 'mF53lIKYGfr3O73TDGoJQiTVO01nS73XqT4/FIs9kkCAIej0eZ'. + 'brPZEMcxSZKgtQZgMpmIWpN+vy+m06n1PK9yTx8Gy+WS/X5Pr9'. + 'er9GuHLYoiG4YhSilOpxPr9Zrtdlti/JriU5MPjUYjq7UuEWaz'. + '2d+P/b/qv/zi75oetJcv7QQXAAAAAElFTkSuQmCC' ; + + +//========================================================== +// File: bs_cyan.png +//========================================================== + $this->imgdata_small[12][0]= 633 ; + $this->imgdata_small[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAABPl'. + 'BMVEX////////F///AwMCvxsaC1NSC0dGCz8+CzMyA//94//91'. + '//9q//9j//9X4uJX09NXz89Xx8dXxMRL//9L5uZL3d1L2NhLxs'. + 'ZLt7cv//8e9fUe8fEe7u4e398epqYehoYX//8L+PgK//8F9fUE'. + '/v4E5+cEb28EZ2cC//8C/v4C/f0CzMwCrq4Cjo4CdXUCaWkCZW'. + 'UB/PwA//8A/f0A+/sA8/MA7e0A7OwA6+sA5eUA5OQA4uIA4eEA'. + '3NwA2toA2NgA1dUA09MA0tIA0NAAysoAxsYAxcUAxMQAv78Avr'. + '4AvLwAtrYAtbUAs7MAsLAAra0Aq6sAqKgApaUApKQAoqIAoKAA'. + 'n58AmpoAlZUAk5MAkpIAkJAAj48AjIwAiYkAh4cAf38AfX0Ae3'. + 'sAenoAcnIAcHAAa2sAaWkAaGgAYmIUPEuTAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwkUGQDi+VPPAAAAtElEQVR4nGNgIBawikipyIiy'. + 'wfksfJpGRkamNtr8LFARPiMFHmFDcztXfwGoFi0jLiZuZRtnry'. + 'BddrCIiJEGL6eklYO7X3iCOFhE2thESdHawdUnJDZFDiyiamZh'. + 'aevk5h0UlZSpBhaRtbN3dPHwDY5MSM+EqBFzc/f0DgiLTkjLzI'. + 'SYw6bjHxgaEZeckZmpD7GLQSAqJj4xNRMIBGFuFtRLA/ENhGBu'. + 'ZmDgkJBXl5fgIDocAAKcINaFePT4AAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bs_bluegreen.png +//========================================================== + $this->imgdata_small[13][0]= 493 ; + $this->imgdata_small[13][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAvV'. + 'BMVEX///////+/v79j//855/8x3v851v9Spb1C1v8AOUqEtcZK'. + 'lK1StdYxzv8hxv8AY4QASmNSlK1KpcZKtd4YQlIYnM4YrecIvf'. + '8AtfcAre8AjL0AhLUAc5wAa5QAWnsAQloAKTkAGCFKhJxKrdYY'. + 'jL0Ypd4Atf8ArfcApecAnN4AlM4AjMYAe60Ac6UAY4wAUnNSnL'. + '0AlNYAWoQASmsAOVIAITGEtc4YWnsAUnsAMUqtvcaErcYAKUIA'. + 'GCkAECHUyVh/AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAA'. + 'AJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGxNUcXCT'. + 'AAAAqUlEQVR4nI2Q1xKCMBREM2NHLCCogAGCjd6SqLT8/2cZKT'. + '6zb3tm987OBWCsXoejp8rC35fi4+l6gXFZlD0Rz6fZ1tdDmKR9'. + 'RdOmkzmP7DDpilfX3SzvRgQ/Vr1uiZplfsCBiVf03RJd140wgj'. + 'kmNqMtuYXcxyYmNWJdRoYwzpM9qRvGujuCmSR7q7ARY00/MiWk'. + 'sCnjkobNEm1+HknDZgAqR0GKU43+wxdu2hYzbsHU6AAAAABJRU'. + '5ErkJggg==' ; + +//========================================================== +// File: bs_lightred.png +//========================================================== + $this->imgdata_small[14][0]= 532 ; + $this->imgdata_small[14][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAA3l'. + 'BMVEX///////+/v7/Gvb0hGBj/5///3v//zu//1u//xucpGCG9'. + 'nK21lKVSQkp7Wms5KTExISlaOUpjQlIhEBj/tdbOhKXnrcbGjK'. + 'Wla4TetcbGnK2EWmv/rc73pcZ7UmOcY3vOpbW1jJzenLW9e5Rz'. + 'Slq1c4xrQlJSOULGhJz/pcb3nL2chIzOnK33rcbelK3WjKWMWm'. + 'vGe5SEUmM5ISnOtb3GrbXerb3vpb2ca3v/rcaUY3POhJxCKTF7'. + 'SlrWnK21e4ytc4TvnLXnlK2la3taOUK1lJxrSlLGhJRjQkpSMT'. + 'lw+q2nAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAwkUGjoP2Nm+AAAAr0'. + 'lEQVR4nGNgIBaYiOk62imYwPnMkiIyso76yhJSzFARMxkRNk49'. + 'a3t5OW6oFk1LVkYOfWUHKxUXiEYzLS12DnN3VXkjIRtFsIiSk5'. + '6evqGqhYGKugAfWMRa1FpD2UHeQEXQRlgALCJur+rgbCUNFOAS'. + 'hqjRkZe3MpBTcwEKCEPMMTGSs3Xz8OQHCnBBHckt6OJpIyAMBD'. + 'wwN/MYc4H4LK4wNzMwmGrzcvFqmxIdDgDiHRT6VVQkrAAAAABJ'. + 'RU5ErkJggg==' ; + +//========================================================== +// File: bxs_lightred.png +//========================================================== + $this->imgdata_xsmall[0][0]= 432 ; + $this->imgdata_xsmall[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAA3l'. + 'BMVEX///////+/v7/Gvb0hGBj/5///3v//zu//1u//xucpGCG9'. + 'nK21lKVSQkp7Wms5KTExISlaOUpjQlIhEBj/tdbOhKXnrcbGjK'. + 'Wla4TetcbGnK2EWmv/rc73pcZ7UmOcY3vOpbW1jJzenLW9e5Rz'. + 'Slq1c4xrQlJSOULGhJz/pcb3nL2chIzOnK33rcbelK3WjKWMWm'. + 'vGe5SEUmM5ISnOtb3GrbXerb3vpb2ca3v/rcaUY3POhJxCKTF7'. + 'SlrWnK21e4ytc4TvnLXnlK2la3taOUK1lJxrSlLGhJRjQkpSMT'. + 'lw+q2nAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUKBOgGhWjAAAAS0'. + 'lEQVR4nGNgQAEmunYmEJaMCKe1vBxYzJKVQ9lKBSSupKdnaKGi'. + 'zgdkiqs6WKnYcIGYJnK2HvzCwmCNgi42wsLCECNMeXlNUY0HAL'. + 'DaB7Du8MiEAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bxs_bluegreen.png +//========================================================== + $this->imgdata_xsmall[1][0]= 397 ; + $this->imgdata_xsmall[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAvV'. + 'BMVEX///////+/v79j//855/8x3v851v9Spb1C1v8AOUqEtcZK'. + 'lK1StdYxzv8hxv8AY4QASmNSlK1KpcZKtd4YQlIYnM4YrecIvf'. + '8AtfcAre8AjL0AhLUAc5wAa5QAWnsAQloAKTkAGCFKhJxKrdYY'. + 'jL0Ypd4Atf8ArfcApecAnN4AlM4AjMYAe60Ac6UAY4wAUnNSnL'. + '0AlNYAWoQASmsAOVIAITGEtc4YWnsAUnsAMUqtvcaErcYAKUIA'. + 'GCkAECHUyVh/AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAA'. + 'AJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUKDVyF5Be'. + 'AAAASUlEQVR4nGNgQAFmYqJcEJaEOJ+UrD5YTJKFTZrfGCQuaq'. + 'glLWvMaQ5kqujo6hnbKIKYXPr68gp2dmCNJiZAlh3ECGsREWtU'. + '4wF1kwdpAHfnSwAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bxs_navy.png +//========================================================== + $this->imgdata_xsmall[2][0]= 353 ; + $this->imgdata_xsmall[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAk1'. + 'BMVEX///////+/v7+trcbGxv+EhM6EhNaEhP97e/9zc/9ra/9S'. + 'UsZKSrVSUs5jY/9SUtZKSsZSUudKSt5KSudKSv8YGIQpKf8YGK'. + 'UYGN4YGO8YGPcQEP8ICP8AAP8AAPcAAO8AAOcAAN4AANYAAM4A'. + 'AMYAAL0AALUAAK0AAKUAAJwAAJQAAIwAAIQAAHsAAHMAAGsAAG'. + 'ONFkFbAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUJxXO4axZAAAAR0'. + 'lEQVR4nGNgQAGskhKsEJaslIi8ijpYTJaDU1FVAyQuKSujoKKh'. + 'LQ5kSigpqWro6oOYrOoaWroGBmCNWiCWAdQwUVFWVOMBOp4GCJ'. + 's5S60AAAAASUVORK5CYII=' ; + +//========================================================== +// File: bxs_gray.png +//========================================================== + $this->imgdata_xsmall[3][0]= 492 ; + $this->imgdata_xsmall[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABI1'. + 'BMVEX///8AAAD8EAD8IAD8NAD8RAD8VAAYGBi/v7+goKCCgoJk'. + 'ZGRGRkb8yAD83AD87AD8/AD4+ADo+ADY+ADI+AC0+ACk+ACU+A'. + 'CE+AB0/ABk/ABU/ABE/AAw/AAg/AAQ/AAA/AAA+AAA6BAA2CAA'. + 'yDQAtEQApFQAlGQAhHQAdIgAZJgAVKgARLgAMMgAINwAEOwAAP'. + 'wAAPgIAPAQAOgYAOAkANgsANA0AMg8AMBEALhMALBUAKhcAKBo'. + 'AJhwAJB4AIiAAID////4+Pjy8vLs7Ozm5ubg4ODa2trT09PNzc'. + '3Hx8fBwcG7u7u1tbWurq6oqKiioqKcnJyWlpaQkJCJiYmDg4N9'. + 'fX13d3dxcXFra2tkZGReXl5YWFhSUlJMTExGRkZAQEA1BLn4AA'. + 'AAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEA'. + 'AAsRAX9kX5EAAAAHdElNRQfTAwkUKC74clmyAAAAQklEQVR4nG'. + 'NgQAVBYVCGt5dXYEQ0mOnp5h4QFgVmeri6+4dHxYMVeHoFRUTH'. + 'gTUFBIZBWAwMkZEx8bFQM2Lj0UwHANc/DV6yq/BiAAAAAElFTk'. + 'SuQmCC' ; + +//========================================================== +// File: bxs_graypurple.png +//========================================================== + $this->imgdata_xsmall[4][0]= 542 ; + $this->imgdata_xsmall[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABSl'. + 'BMVEX////////11P/MqdvKrNfAwMC+u7+9u7+4rr24lsi3rby3'. + 'lMe1rLq1o720q7i0oL20ksSzoryyqbaykMGxlb2wkL+vnbiujb'. + '2sjLuri7qpl7GoirWoibenmK2mla6mjLKmhrSllauki7CjhrCj'. + 'hLGihLChg6+ggq2fkqadkKOcfqqai6Gag6WYe6WXeqSWeaOTd6'. + 'CTd5+Rdp6RdZ6RdZ2Qg5eOc5qMcpiLcZeJb5WIbpOHbZKGbJGE'. + 'a4+CaY2AZ4t/Z4p/Zop/Zol+Zol7ZIZ6Y4V5YoR1ZH11X391Xn'. + '9zXX1yXXtxXHtvWnluWXhsV3VqVnNpVXJoVHFnU3BmUm9jUGth'. + 'VGdgTmheTGZcS2RcSmRaSWJYR19XRl5SQllRQlhQQVdPQFZOP1'. + 'VLPlFJO09IPE5IOk5FOEtEN0lDOEpDOElDNklCNkc/M0XhbrfD'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'EAAAsRAX9kX5EAAAAHdElNRQfTAwkUKCgREfyHAAAATUlEQVR4'. + 'nGNgQAEcIko8EBY3M5Ougy+IxSXMwmTsFsAHZMqrSRvZB0W7A5'. + 'k6FlYugXEZICaPr394Um4uSAFDRFRCbm4uxAihsDAhVOMBHT0L'. + 'hkeRpo8AAAAASUVORK5CYII=' ; + +//========================================================== +// File: bxs_red.png +//========================================================== + $this->imgdata_xsmall[5][0]= 357 ; + $this->imgdata_xsmall[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAk1'. + 'BMVEX////////GxsbGra3/xsbOhITWhIT/hIT/e3v/c3P/a2vG'. + 'UlK1SkrOUlL/Y2PWUlLGSkrnUlLeSkrnSkr/SkqEGBj/KSmlGB'. + 'jeGBjvGBj3GBj/EBD/CAj/AAD3AADvAADnAADeAADWAADOAADG'. + 'AAC9AAC1AACtAAClAACcAACUAACMAACEAAB7AABzAABrAABjAA'. + 'BuukXBAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZ'. + 'cwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUIyjy5SVMAAAAS0'. + 'lEQVR4nGNgQAFsUpJsEJastIi8ijpYTJaDU0FVgxXIlJKVUVDR'. + '0BYHMiUUlVQ1dPVBTDZ1dS1dAwOQAgYtbSDLAGIEq6goK6rxAD'. + 'yXBg73lwGUAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: bxs_yellow.png +//========================================================== + $this->imgdata_xsmall[6][0]= 414 ; + $this->imgdata_xsmall[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAzF'. + 'BMVEX///////+/v79zYwCMewDOxoTWzoTezkr/5wj/5wDnzgDe'. + 'xgC1pQCtnACllACcjACUhABjWgDGvVK1rUrOxlLGvUqEexilnB'. + 'jv3hj35xj/7wj/7wD35wDv3gDn1gDezgDWxgDOvQDGtQC9rQCE'. + 'ewB7cwBzawBrYwDWzlLn3lLe1krn3kre1hi9tQC1rQCtpQClnA'. + 'CclACUjACMhAD/9wC/v7///8bOzoT//4T//3v//3P//2v//2Pn'. + '50r//0r//yn39xj//xD//wBjYwDO8noaAAAAAXRSTlMAQObYZg'. + 'AAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAH'. + 'dElNRQfTAwkUIzoBXFQEAAAAS0lEQVR4nGNgQAFsDhJsEJaTo5'. + '2skj5YzMnSSk7ZwBzIlOSUklPiMxYHMnW4FXT5VNVBTDZeXiNV'. + 'QUGQAgYBYyBLEGIEq5gYK6rxAH4kBmHBaMQQAAAAAElFTkSuQm'. + 'CC' ; + +//========================================================== +// File: bxs_greenblue.png +//========================================================== + $this->imgdata_xsmall[7][0]= 410 ; + $this->imgdata_xsmall[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAxl'. + 'BMVEX///////+/v79znJQhSkJ7raU5hHtjraVKnJRCjIRClIyU'. + '9++E595avbVaxr2/v7+ctbWcvb17nJxrjIx7paUxQkK9//+Mvb'. + '17ra2Evb17tbVCY2MQGBiU5+ec9/eM5+d71tZanJxjra1rvb1j'. + 'tbVSnJxara1rzs5jxsZKlJRChIQpUlIhQkJatbVSpaU5c3MxY2'. + 'MYMTEQISFavb1Sra1KnJxCjIw5e3sxa2spWlpClJQhSkoYOTkp'. + 'Y2MhUlIQKSkIGBgQMTH+e30mAAAAAXRSTlMAQObYZgAAAAFiS0'. + 'dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfT'. + 'AwkUJy5/6kV9AAAATUlEQVR4nGNgQAGCyuyCEJaGugKHviVYzF'. + 'hO3sxCWwDIVNLTM9PXtpEGMhW12Cy0DR1ATEFLSxZ7BweQAgYd'. + 'HUMHBweIEQKiogKoxgMAo/4H5AfSehsAAAAASUVORK5CYII=' ; + +//========================================================== +// File: bxs_purple.png +//========================================================== + $this->imgdata_xsmall[8][0]= 364 ; + $this->imgdata_xsmall[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAnF'. + 'BMVEX///////+/v7/Gvca9rb3Grcb/xv+1hLWte629hL21e7XG'. + 'hMbWhNbOe87We9b/hP//e/97OXv/c///a///Y/+cOZz/Sv/WOd'. + 'bnOefvOe//Kf9jCGNrCGv/EP//CP/nCOf/AP/3APfvAO/nAOfe'. + 'AN7WANbOAM7GAMa9AL21ALWtAK2lAKWcAJyUAJSMAIyEAIR7AH'. + 'tzAHNrAGtjAGPP1sZnAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUIj'. + 'mBTjT/AAAASUlEQVR4nGNgQAGskhKsEJaCrJiSuhZYTEFASFlD'. + 'GyQuqSCnrK6tJwpkiquoamgbGIGYrFpaugbGxmCNunpAljHECB'. + 'ZBQRZU4wFSMAZsXeM71AAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bxs_green.png +//========================================================== + $this->imgdata_xsmall[9][0]= 370 ; + $this->imgdata_xsmall[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAn1'. + 'BMVEX///////+/v7+/v7/G/8aUxpSMvYyUzpSMzoyM1oxarVqE'. + '/4R7/3tavVpKnEpaxlpz/3Nr/2tKtUpj/2Na51pKzkpK1kpK50'. + 'pK/0oYcxgp/ykYlBgY3hgY7xgY9xgQ/xAI/wgA/wAA9wAA7wAA'. + '5wAA3gAA1gAAzgAAxgAAvQAAtQAArQAApQAAnAAAlAAAjAAAhA'. + 'AAewAAcwAAawAAYwA0tyxUAAAAAXRSTlMAQObYZgAAAAFiS0dE'. + 'AIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAw'. + 'kUKBrZxq0HAAAATElEQVR4nGNgQAGccrIcEJaivISyhjaIxa7I'. + 'I6CiqcMKZMopKqho6OhLA5kyqmqaOobGICartraeoYkJSAGDnj'. + '6QZQIxgk1Skg3VeABlVgbItqEBUwAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bxs_darkgreen.png +//========================================================== + $this->imgdata_xsmall[10][0]= 563 ; + $this->imgdata_xsmall[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABX1'. + 'BMVEX////////l/+nAwMC86r+8wb28wby8wLy78sCzw7SywrSx'. + 'wLKwvrGuvK+syK+ryq2rx62n36ym3aumxKmk2qij0Keh16ahva'. + 'Og1aSguKKe06KeuaCetZ+d0KGdtZ+bz6Cay56ZyZ2Zwp2Zr5qZ'. + 'rpqYwJuXyZuXrJmVw5mUxZiTxJeTw5eTq5WRwJWPtJKOvZKKuI'. + '6Kt42Kn4yJt42ItIuGsomFsYmEsIiEr4eDr4eBrIR/qoN+qIJ8'. + 'poB7pH56o356on14nnt2nXl0mndzmnZzmXZymHVwlXNvlHJukn'. + 'FtiHBqjm1qjW1oi2toiWpniWplh2hlhmdkhWdig2VggGNgf2Je'. + 'fmFdfGBde19bbl1aeFxXdFpWclhVclhVcVdUcFZTb1VSbVRQal'. + 'JPaVFKY0xKYkxJYUtIYEpHX0lEWkZCWERCV0NCVkM/U0A+U0A+'. + 'UUA+UEA9Uj89UT48Tj45TDvewfrHAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElN'. + 'RQfTAwkUKCFozUQjAAAATUlEQVR4nGNgQAGcoqrcEJYQB5OhSw'. + 'CIxSXGwWThGcIDZCppK5o7hyV6AZl6NnbuoSmFICZ3YHB0RkkJ'. + 'SAFDbEJaSUkJxAjeyEheVOMBQj4MOEkWew4AAAAASUVORK5CYI'. + 'I=' ; + +//========================================================== +// File: bxs_cyan.png +//========================================================== + $this->imgdata_xsmall[11][0]= 530 ; + $this->imgdata_xsmall[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABPl'. + 'BMVEX////////F///AwMCvxsaC1NSC0dGCz8+CzMyA//94//91'. + '//9q//9j//9X4uJX09NXz89Xx8dXxMRL//9L5uZL3d1L2NhLxs'. + 'ZLt7cv//8e9fUe8fEe7u4e398epqYehoYX//8L+PgK//8F9fUE'. + '/v4E5+cEb28EZ2cC//8C/v4C/f0CzMwCrq4Cjo4CdXUCaWkCZW'. + 'UB/PwA//8A/f0A+/sA8/MA7e0A7OwA6+sA5eUA5OQA4uIA4eEA'. + '3NwA2toA2NgA1dUA09MA0tIA0NAAysoAxsYAxcUAxMQAv78Avr'. + '4AvLwAtrYAtbUAs7MAsLAAra0Aq6sAqKgApaUApKQAoqIAoKAA'. + 'n58AmpoAlZUAk5MAkpIAkJAAj48AjIwAiYkAh4cAf38AfX0Ae3'. + 'sAenoAcnIAcHAAa2sAaWkAaGgAYmIUPEuTAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAA'. + 'AHdElNRQfTAwkUKQFKuFWqAAAATUlEQVR4nGNgQAGsUjJsEJaR'. + 'grC5qz9YzIiL28YriB3IlDZRsnYNiZUDMmXtHT2CE9JBTDb/wI'. + 'jkzEyQAoaomMTMzEyIERzy8hyoxgMAN2MLVPW0f4gAAAAASUVO'. + 'RK5CYII=' ; + +//========================================================== +// File: bxs_orange.png +//========================================================== + $this->imgdata_xsmall[12][0]= 572 ; + $this->imgdata_xsmall[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABaF'. + 'BMVEX//////////8X/3oD/3nj/1HX/0Gr/xGP/rkv/gBf+iS/2'. + 'bAL1agDxaQDuZwDrZwLpZQDmZQLlZADjcx7gZATeYQDdZgraXw'. + 'DZXwHYXgDXiEvXZAvUjlfUXwXTjVfTbR7ShUvRbR7RWwDMWQDL'. + 'WADKooLKWADJoYLJgkvHWATGoILFn4LFgEvFVgDEZx7EVQDDt6'. + '/DVQDCt6/CnoLChlfCVADAwMC+hFe+UgC8UgC6UQC4gVe4UAC3'. + 'gVe3UAC1gFe1eUu1TwC1TgCzTgCwTQKuTACrSgCqSgCpSgCpSQ'. + 'CodEulSACkRwCiRgCdRACcRACaQwCYQgCWQgKVQQCVQACUQACS'. + 'UR6RPwCOPgCNPQCLPACKPACJOwCEOQCBOAB+NwB9NgB8NgB7NQ'. + 'B6NwJ4NAB3RR52MwB0MgBuLwBtLwBsLwBqLgBpLQBkLQJiKgBh'. + 'KgBgKwRcKABbKQJbJwBaKQRaJwBYKAJVJQDZvdIYAAAAAXRSTl'. + 'MAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9k'. + 'X5EAAAAHdElNRQfTAwkUJBSSy88MAAAATUlEQVR4nGNgQAGqwo'. + 'paEBYPJ4eKezCIpc7HwmrqG6ENZMpLihm6RaWEAZl6Vo7ekRnF'. + 'IKZWSHhcTnk5SAFDfFJWeXk5xAjj1FRjVOMBeFwNcWYSLjsAAA'. + 'AASUVORK5CYII=' ; + +//========================================================== +// File: bxs_lightblue.png +//========================================================== + $this->imgdata_xsmall[13][0]= 554 ; + $this->imgdata_xsmall[13][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAABVl'. + 'BMVEX////////d///AwMC7wcS08P+y+P+xxdCwxM+uws2twMur'. + 'vsinzNynytylzuKhyN6e5v6d5P+d1fOcwNWcu8ub4f+at8iZ3v'. + '+ZvdGY2/yW2f+VscGU1vuT1fqTr72Sx+SSxeKR0fWRz/GPz/OP'. + 'rr+OyeqMy+6Myu2LyeyKxueJudSGw+SGorGDvt+Cvd6CvN2Aud'. + 'p+uNd+t9Z9tdV8tdR8tNN6sc94r813rct2q8h0qcZ0qMVzp8Rx'. + 'o8Bwor5tn7ptnrptnrlsnbhqmbRpmbNpi51ol7Flkqtkkqtkka'. + 'pjj6hijaRhjaZgi6NfiqJfiaFdh55bhJtag5pZgphYgJZYf5VX'. + 'cn9Ve5FSeI1RdopRdYlQdYlPc4dPcoZPcoVNcINLboBLbH9GZn'. + 'hGZXdFZHZEY3RDYnJCXW4/W2s/WWg+Wmo7VmU7VGM7U2E6VGM6'. + 'VGI5UV82T1wGxheQAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHU'. + 'gAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElNRQfTAwkUJziL'. + 'PvAsAAAATUlEQVR4nGNgQAHsQgqcEJYgG5Oegy+IxSHOxmTiFs'. + 'gFZMprKBnbB8e7AplaFlbOQUl5ICanX0BEWmEhSAFDVGxKYWEh'. + 'xAjusDBuVOMBJO8LrFHRAykAAAAASUVORK5CYII=' ; + +//========================================================== +// File: bxs_darkgray.png +//========================================================== + $this->imgdata_xsmall[14][0]= 574 ; + $this->imgdata_xsmall[14][1]= + 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABm'. + 'JLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsRAAALEQF/ZF+RAAAB'. + 'iElEQVR42k3QPU8TYRwA8P//ebkXrgdIColXRAOEkJqbaExMut'. + 'DBhE1GNjYHPg+DG6ODiU6QOLjVxITBcFKBYCstlAC2Bz17fe76'. + 'vLD6+wg/1FpTRFR5lpaub/u1eGBGaAT4HneD4OlXx7avtDYUjT'. + 'HQabd2Ti8e3vVSKzxrtHS32wIpFVldno22Nqvvg2Bhl0gp/aNm'. + 'vJ3qqXAtLIva+ks1H0wqlSXi4+d6+OFTfRsAfHJx2d1od24rZP'. + 'xP2HzopINr1mkesX7ccojqif0v9crxWXODZTno3+dNGA7uWLsd'. + 'mUYU4fHJCViMG9umLBmM4L6fagZGg9QKfjZ+Qfy3C3G/B3mugF'. + 'IHHNcDf64E3KJALApk2p8CSolUUqLjFkyxOGMsTtFyJ+Wz57NQ'. + '8DghS4sLB0svioeZZo7nPhFoUKZDIVFbglkTTnl5/rC8snjAkJ'. + 'Bk/XV5LxHC/v7tR8jzTFPbg8LENK9WX0Vv31T2AEmCSmlKCCoh'. + 'ROnP1U1tPFYjJBRcbtzSf+GPsFTAQBq1n4AAAABKdEVYdHNpZ2'. + '5hdHVyZQBiYzYyMDIyNjgwYThjODMyMmUxNjk0NWUzZjljOGFh'. + 'N2VmZWFhMjA4OTE2ZjkwOTdhZWE1MzYyMjk0MWRkM2I5EqaPDA'. + 'AAAABJRU5ErkJggg==' ; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/imgdata_bevels.inc.php b/html/includes/jpgraph/src/imgdata_bevels.inc.php new file mode 100644 index 0000000000..569c7dd654 --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_bevels.inc.php @@ -0,0 +1,104 @@ + 'imgdata'); + + var $colors = array('green','purple','orange','red','yellow'); + var $index = array('green'=>1,'purple'=>4,'orange'=>2,'red'=>0,'yellow'=>3); + var $maxidx = 4 ; + + var $imgdata ; + + function ImgData_Bevels() { +//========================================================== +// File: bullets_balls_red_013.png +//========================================================== + $this->imgdata[0][0]= 337 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/f3+LFwcmNxMuxm62DmqKth1VpZmIWg6fv'. + 'HCa7K0BwMEytCjFnIyUlEBg9vhQvAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNhk+pYJVAAAAl0lEQVR4nE2Q2xLDIAgFHUWBKJf//9'. + 'oekmbafVDZARRbK/pYTKP9WNcNv64zzUdd9BjmrgnsVXRNSzO3'. + 'CJ5ahdhy0XKQkxld1kxb45j7dp0x2lBNOyVgQpMaoadX7Hs7zr'. + 'P1yKj47DKBnKaBKiSAkNss7O6PkMx6kIgYXISQJpcZCqdY6KR+'. + 'J1PkS5Xob/h7MNz8x6D3fz5DKQjpkZOBYAAAAABJRU5ErkJggg'. + '==' ; + +//========================================================== +// File: bullets_balls_green_013.png +//========================================================== + $this->imgdata[1][0]= 344 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/e3+K3vriUub/Dm18j4xc3ob10k0ItqQlU'. + 'e5JBmwpxY1ENaKBgUh0iHgwsSre9AAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNTfJXtxZAAAAnklEQVR4nE2QWY4EMQhDUVhSIRC4/2'. + 'kbaqLp9p+f2AxAayAzDfiK9znPORuvH0x8Ss9z6I9sHp6tcxE9'. + 'nLmWmebmt5F5p2AR0+C9AWpLBjXRaZsCAT3SqklVp0YkAWaGtd'. + 'c5Z41/STYpPzW7BjyiRrwkVmQto/Cw9tNEMvsgcekyCyFPboIu'. + 'IsuXiKffYB4NK4r/h6d4g9HPPwCR7i8+GscIiiaonUAAAAAASU'. + 'VORK5CYII=' ; + +//========================================================== +// File: bullets_balls_oy_035.png +//========================================================== + $this->imgdata[2][0]= 341 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/f3+K5tbqNwcjnkjXjbxR2i5anfEoNkbis'. + 'PBxpU0sZbZejKgdqIRIlERIwYtkYAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNgK0wEu5AAAAm0lEQVR4nE3QVxIEIQgEUErAgTHA/U'. + '+7zbipf9RXgoGo0liMmX6RdSPLPtZM9F4LuuSIaZtZWffiU6Iz'. + 'Y8SOMF0NogBj30ioGRGLZgiPvce1TbIRz6oBQEbOFGK0rIoxrn'. + '5hDomMA1cfGRCaRVhjS3gkzheM+4HtnlkXcvdZhWG4qZawewe6'. + '9Jnz/TKLB/ML6HUepn//QczazuwFO/0Ivpolhi4AAAAASUVORK'. + '5CYII=' ; + +//========================================================== +// File: bullets_balls_oy_036.png +//========================================================== + $this->imgdata[3][0]= 340 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////////27t/e3+LO3hfYzz65ubiNwci6uQ12ipadgVGa'. + 'fwsNkbhnVkcaZ5dwSA8lFg7CEepmAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAHdElN'. + 'RQfTAxcCBySi1nevAAAAjElEQVR4nFXPWw7EIAgFUNMoCMhj/6'. + 'staKczc/2RkwjS2glQ+w3YytgXCXCZpRo8gJdGxZadJws13CUP'. + '4SZI4MYiUxypeiGGw1XShVBTNN9kLXP2GRrZPFvKgd7z/sqGGV'. + '7C7r7r3l09alYN3iA8Yn+ImdVrNoEeSRqJPAaHfhZzLYwXstdZ'. + 'rP3n2bvdAI4INwtihiwAAAAASUVORK5CYII=' ; + +//========================================================== +// File: bullets_balls_pp_019.png +//========================================================== + $this->imgdata[4][0]= 334 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAMAAAAMs7fIAAAAM1'. + 'BMVEX////+/v7i4eO/w8eHxcvKroNVormtfkjrMN2BeXQrepPc'. + 'Esy4IL+OFaR7F25LHF8mFRh5XXtUAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAxcBNgkjEpIxAAAAlElEQVR4nE2QAQ7FIAhDDTAVndL7n3'. + 'ZV/7JfEwMvFIWUlkTMVNInbVv5ZeJqG7Smh2QTBwJBpsdizAZP'. + '5NyW0awhK8kYodnZxS6ECvPRp2sI+y7PBv1mN02KH7h77QCJ8D'. + '4VvY5NUgEmCwj6ZMzHtJRgRSXwC1gfcqJJH0GBnSnK1kUQ72DY'. + 'CPBv+MCS/e0jib77eQAJxwiEWm7hFwAAAABJRU5ErkJggg==' ; + + } +} + + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/imgdata_diamonds.inc.php b/html/includes/jpgraph/src/imgdata_diamonds.inc.php new file mode 100644 index 0000000000..eefdc8d828 --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_diamonds.inc.php @@ -0,0 +1,177 @@ +'imgdata'); + var $colors = array('lightblue','darkblue','gray', + 'blue','pink','purple','red','yellow'); + var $index = array('lightblue' =>7,'darkblue'=>2,'gray'=>6, + 'blue'=>4,'pink'=>1,'purple'=>5,'red'=>0,'yellow'=>3); + + var $maxidx = 7 ; + var $imgdata ; + + function ImgData_Diamonds() { +//========================================================== +// File: diam_red.png +//========================================================== + $this->imgdata[0][0]= 668 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/F'. + 'BMVEX///////+cAAD/AADOAABjAABrAADWGBjOCAj/CAj/GBj/'. + 'EBCcCAiMOTl7KSl7ISFzGBilGBjOEBBrCAjv5+eMQkK1QkKtMT'. + 'GtKSnWKSn/KSlzEBCcEBDexsb/tbXOe3ucWlqcUlKUSkr/e3vn'. + 'a2u9UlL/a2uEMTHeUlLeSkqtOTn/UlL/SkrWOTn/QkL/OTmlIS'. + 'H/MTH/ISH39/f/9/f35+fezs7/5+fvzs7WtbXOra3nvb3/zs7G'. + 'nJzvtbXGlJTepaW9jIy1hITWlJS1e3uta2ulY2P/lJTnhITne3'. + 'vGY2O9Wlr/c3PeY2O1Skr/Y2P/WlreQkLWISGlEBCglEUaAAAA'. + 'AXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAA'. + 'sSAdLdfvwAAAAHdElNRQfTAwsWEw5WI4qnAAABGUlEQVR4nHXQ'. + '1XLDMBAFUKUCM1NiO8zcpIxpp8z0//9SWY7b2LHv6EU6s1qtAN'. + 'iMBAojLPkigpJvogKC4pxDuQipjanlICXof1RQDkYEF21mKIfg'. + '/GGKtjAmOKt9oSyuCU7OhyiDCQnjowGfRnooCJIkiWJvv8NxnG'. + 'nyNAwFcekvZpPP3mu7Vrp8fOq8DYbTyjdnAvBj7Jbd7nP95urs'. + '+MC2D6unF+Cu0VJULQBAlsOQuueN3Hrp2nGUvqppemBZ0aU7Se'. + 'SXvYZFMKaLJn7MH3btJmZEMEmGSOreqy0SI/4ffo3uiUOYEACy'. + 'OFopmNWlP5uZd9uPWmUoxvK9ilO9NtBo6mS7KkZD0fOJYqgGBU'. + 'S/T7OKCAA9tfsFOicXcbxt29cAAAAASUVORK5CYII=' ; + +//========================================================== +// File: diam_pink.png +//========================================================== + $this->imgdata[1][0]= 262 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgID/M5n/Zpn/zMz/mZn1xELhAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEi3tX8qUAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + +//========================================================== +// File: diam_blue.png +//========================================================== + $this->imgdata[2][0]= 662 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA+V'. + 'BMVEX///+AgIAAAJwAAP8AAM4AAGMAAGsQEP8YGHMQEHMYGP8Q'. + 'EKUICJwICM5KSpQxMYQpKXsYGNYQEM4ICGsICP97e85aWpw5OY'. + 'xSUv85ObVCQt4xMa0pKa0hIaUpKf+9vd6EhLVra+dzc/9SUr1r'. + 'a/9aWt5SUt5CQrVaWv9KSv8hIXs5Of8xMf8pKdYhIdYYGKUhIf'. + '/Ozs739//v7/fn5+/v7//n5/fW1ufOzufOzu/W1v+trc69veel'. + 'pc6trd6UlMa9vf+MjL21tfe1tf+UlNZzc61ra6Wlpf+EhOeMjP'. + '9ra8ZSUpyEhP9CQoxKSrVCQv85Od4xMdYQENZnJhlWAAAAAXRS'. + 'TlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAd'. + 'LdfvwAAAAHdElNRQfTAwsWEx3Snct5AAABFklEQVR4nHXR5XbD'. + 'IBgGYM6AuHsaqbvOfeuknev9X8xISbplSd5/8JyXwwcA/I0AKm'. + 'PFchVBdvKNKggKQx2VIoRwMZihMiQE49YUlWBCcPL0hYq4ITh+'. + 'qKECUoLDZWqoQNA766F/mJHlHXblPJJNiyURhM5eU9cNw5BlmS'. + 'IrLOLxhzfotF7vwO2j3ez2ap/TmW4AIM7DoN9+tu+vLk6Pdg9O'. + '6ufXjfXLm6pxPACSJIpRFAa+/26DhuK6qjbiON40k0N3skjOvm'. + 'NijBmchF5mi+1jhQqDmWyIzPp1hUlrv8On5l+6mMm1tigFNyrt'. + '5R97g+FKKyGKkTNKesXPJTZXOFIrUoKiypcTQVHjK4g8H2dWEQ'. + 'B8bvUDLSQXSr41rmEAAAAASUVORK5CYII=' ; + +//========================================================== +// File: diam_yellow.png +//========================================================== + $this->imgdata[3][0]= 262 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgIBmMwCZZgD/zADMmQD/QLMZAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEwcv/zIDAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + +//========================================================== +// File: diam_lightblue.png +//========================================================== + $this->imgdata[4][0]= 671 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/1'. + 'BMVEX///+AgIAAnP8A//8Azv8AY/8Aa/8I//8Y1v8Izv8Y//8Q'. + '//8InP8Qzv8Ypf85jP8he/8Yc/8Ia/8pe/8p//8p1v9Ctf8xrf'. + '8prf8QnP8Qc/9CjP+1//97//9r//9S//9K//9C//85//8x//8h'. + '//9r5/9K3v9S3v851v97zv9Svf85rf8hpf/G3v9SnP9anP9KlP'. + '8xhP/n7//v7+f3///n///O//+U//9z//9j//9a//975/9C3v8h'. + '1v+E5/+17/9j3v/O7//n9/+95/+l3v9jxv+U1v8Qpf9avf9Ktf'. + '+Uxv+11v97tf9rrf+cxv+Mvf9jpf+tzv+Etf/O3v/39/8Akkxr'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'IAAAsSAdLdfvwAAAAHdElNRQfTAwsWEiHk6Ya/AAABGUlEQVR4'. + 'nHXQ13KDMBAF0J2o0E01GHDvJa7p3em95/+/JQJMYjDc0Yt0Zr'. + 'VaAaxHgtxwbSGPkGQpOIeQ2ORxJiJmNWYZyAhZR0WcgQGhViU0'. + 'nEGoedDHGxgRapRPcRpXhOr7XZzCmLjaXk9IIjvkOEmSRLG62+'. + 'F5XlEElhA5sW21GvXj6mGlDBfnJ51lr9svnvEKwH1hu2QPbwd3'. + 'N9eXVzuL7/Hn29frdKaamgcgy67L3HFG9gDefV+dm5qme4YRXL'. + 'oVR374mRqUELZYosf84XAxISFRQuMh4rrH8YxGSP6HX6H97NNQ'. + 'KEAaR08qCeuSnx2a8zIPWqUowtKHSRK91rAw0elmVYQFVc8mhq'. + '7p5RD7Ps3IIwA9sfsFxFUX6eZ4Zh4AAAAASUVORK5CYII=' ; + +//========================================================== +// File: diam_purple.png +//========================================================== + $this->imgdata[5][0]= 657 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAA/F'. + 'BMVEX///////8xAP/OAP+cAP9jAP9rAP+cCP85CP/OEP9SKf/O'. + 'CP9CEP9zGP9rCP+lGP/WOf/WIf9KIf9jOf+MQv+EMf97If9zEP'. + '+1Sv+lIf/ne//eUv/na//n5//Oxv/Wzv+chP9zUv97Wv9rQv9a'. + 'Mf9KGP/v5/+te/97Kf+9Y/+tOf+tKf+lEP/vtf/WMf/WKf/v7+'. + 'f39/+tnP+9rf9rSv9jQv9CGP+ljP+EY//Gtf+tlP+Ma/9zSv/e'. + 'zv+UUv+9lP+cWv+lY/+cUv+MOf+EKf+UQv/Opf/OhP/Ga/+1Qv'. + '/Oe/+9Uv/ntf/eWv/eSv/WGP/3zv/vlP/WEP//9/+pL4oHAAAA'. + 'AXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAA'. + 'sSAdLdfvwAAAAHdElNRQfTAwsWEjX+M1LCAAABDklEQVR4nHXQ'. + '1bLDIBAGYFqIEW+ksbr7cXd3ff93OUCamdOE/Mxw882yywLwPz'. + '+gNKotlRFUVnNUQlCxTMRFCKEdE+MgpJaEiIOU4DKaoSIygtb3'. + 'FBUQrm3xjPK4JvXjK0A5hFniYSBtIilQVYUm+X0KTVNiYah+2q'. + 'ulFb8nUbSovD2+TCavwXQWmnMA6ro+di+uR5cPzfPhVqPV3N1p'. + 'n3b3+rimAWAYhP3xnXd7P6oc9vadPsa1wYEs00dFQRAFehlX21'. + '25Sg9NOgwF5jeNTjVL9om0TjDc1lmeCKZ17nFPzhPtSRt6J06R'. + 'WKUoeG3MoXRa/wjLHGLodwZcotPqjsYngnWslRBZH91hWTbpD2'. + 'EdF1ECWW1SAAAAAElFTkSuQmCC' ; + +//========================================================== +// File: diam_gray.png +//========================================================== + $this->imgdata[6][0]= 262 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX//////wAzMzNmZmbMzMyZmZlq4Qo5AAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWExZFTxLxAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + +//========================================================== +// File: diam_blgr.png +//========================================================== + $this->imgdata[7][0]= 262 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAbBAMAAAB/+ulmAAAAEl'. + 'BMVEX///+AgIBmzP9m///M//+Z//8hMmBVAAAAAXRSTlMAQObY'. + 'ZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAA'. + 'AHdElNRQfTAwsWEwCxm6egAAAAbUlEQVR4nFXJwQ3AMAhDUdRm'. + 'kKojuCswABf2X6UEEiC+WF+PyDfoGEuvwXogq3Rk1Y6W0tBSG8'. + '6Uwpla6CmJnpoYKRsjjb/Y63vo9kIkLcZCCsbGYGwMRqIzEp1R'. + 'OBmFk9HQGA2N0ZEIz5HX+h/jailYpfz4dAAAAABJRU5ErkJggg'. + '==' ; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/imgdata_pushpins.inc.php b/html/includes/jpgraph/src/imgdata_pushpins.inc.php new file mode 100644 index 0000000000..a9659d2b58 --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_pushpins.inc.php @@ -0,0 +1,517 @@ + 'imgdata_small', + MARK_IMG_SPUSHPIN => 'imgdata_small', + MARK_IMG_LPUSHPIN => 'imgdata_large'); + + var $colors = array('blue','green','orange','pink','red'); + var $index = array('red' => 0, 'orange' => 1, 'pink' => 2, 'blue' => 3, 'green' => 4 ) ; + var $maxidx = 4 ; + var $imgdata_large, $imgdata_small ; + + function ImgData_PushPins() { + + // The anchor should be where the needle "hits" the paper + // (bottom left corner) + $this->anchor_x = 0; + $this->anchor_y = 1; + +//========================================================== +// File: ppl_red.png +//========================================================== + $this->imgdata_large[0][0]= 2490 ; + $this->imgdata_large[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMKBh4Ryh89CgAACUdJREFUeJy9mNtTFFcexz+/7p'. + '4Lw1wZJKDGCAwmDAqUySamcCq1ed6k9mn3UfMP7F+1T3nYqn2J'. + 'lZdoDEjpbq0KG8EBFBFBEJye6Zmenkv32Ydu5GYiUMmeqq6uqT'. + '6Xz3zP73aOcIKmAQkIFyD3N/jrBPwlKjLQEglVlJKyUjR3u7cc'. + 'WLoP3/4dvv03LNrQ8I6x1rFbDML9kOmHvh7IRHU9JKmUSG8vpF'. + 'IoXX/TV0AiEM5A5jT0noFMFMJHXUt/d5f9TUAbhtQ3cPFruDog'. + '8klHMnmO0dGYe/myOJGINEwTz3F2higFXgy8PpAkOC+h8hoaCt'. + '4ppHFcQAWSgOQlyI/p+lUjmRxWAwNJd3xca/f34yoFi4tgmjtD'. + 'NIFkJ4xcgBCgVqEBFJ9DqcZea/gNAAVEg7AOGYnHe9XoaJd3+X'. + 'LISSSwnz6lsbKCZ9sHh4UVdBkwdA6cPwNnIfJPmC3Ctgft3wwQ'. + 'QPkvTZJJnbExzfvsM2nMzVG7e5fG48d4lnXwTwEYCjJxuHQBog'. + 'BHUfKkgAIIhiGk06hTp/Dm5qS1uYlXLvtWd4gPgIiCrAEcVckT'. + 'Ab5p7TaYJrK1hQaEenrwSiVfQdc91P0kSp7Ii89D5ksY/kAkLy'. + 'IZXFdXkQjS1YUSEbdcRu168V6+HTUNIKJDRwdE+sBIQmP9Ld59'. + 'bEBA3of4F/D+uXb7rGaaCSmXI3pPj64PDaHCYfEqFVSjgWo2D2'. + '73XlJNQTgCyQykIuBWoNKEeh1aLXBPBCggGdBOgxZVSjoajVhH'. + 'o5HWlIpq4bCQSgm9vXhK4ZZKh5SUYygp4J1EQVUD9xlU18BJQD'. + 'bUbJ5T5XJStyxN9fSI099P3baxV1dRloW2h2ivx/yakg2ot6F1'. + 'EkCa4G1D+zVEq5ArKTWM42Q6HUczQV7U66w9e0ZpdRXlOIQ5vF'. + 'VHUXILKify4jiEzkOqC3peQMoBQymFlMt4Dx6wUSxSsm2UZXEK'. + 'P30QvOUt8/2Sd78CdWwFDTA+gsw3cOlPcPUD+CQB52oQ21RKXM'. + 'eRhGXhOg7VoKrx8KuS4ygZhVg3ZI8FGIfwR9BVgAtfwxdXdP3L'. + '86nUR91dXelNXTeWWy10paQHX602YAP1ADASAL7LJvFtMpOCc0'. + 'cG3FHuGlz6Gr4YEpnoTCbzsdHRbOzy5RCRiLRMk5rjyOtAimwA'. + 'U4U3SurBN/0wnAASBCVDIKpB4kiAB5Ub0/UvO9LpPAMDGfn005'. + 'AxPCzxep3Q6iqPLUseBoufCZRsAE6g5g5kKIDfKUj3wnpAG8QB'. + '/Z1OIqANQuI65AtwNScyYXR2XlAXL2YZHzcklRKWl5GVFXFtGx'. + 'MoAiV/EQaAGH6BUQNWgQpwFngv+Ca8KUAQEBcwgTJHyMV7679R'. + 'XS8YqdSI6u/PMD5ukMtJY3GR2uQkr5aXeWVZOEALmA8WsIAxfL'. + 'd0goVLAdCOd+/YpgqeVtBv4yiA++q/RKKXixe7GB8PSyoljcVF'. + 'yg8fyubyMpulEk2lyAIfAAvAC+B+oOQFoAt/+0rAejB/EzjNri'. + 'vvqNnCd64jxcE39V8spnP+vMbAgDSePKE2NcXm06dslMuUlcID'. + 'TuFvqwXMBU8N39bGgRR+ki0Dz4L5DSAe9NGD7zq+6kcN1L6H2b'. + 'ao5WWaQHllRTafPmWrVMJUimoAQrBYJFjQwre7B6A8YAi8LCgD'. + '5DVo6/hbb/iHK1KggvFeD3hHziQKEMuiNTNDbXGRTdtmw7Iwla'. + 'KGH0oqwbscLOoG46rAY6AOzRhY74PT6QuUKEN4PegXxd/yEDTT'. + 'YMWOk+oEaLkuFdNk0zTZwjfkavDUArXWgGXgFb4dEShXhfYqlI'. + 'ow3w9rg3B6ED60IOOA5oEYQBrcpG+mj9bg0VG8GMJhVDZLyzAo'. + 'VSq8rFYxXXefcjVgG9+uisDrXUCApoKSBcUHMBmHhfcgNwhtD3'. + 'q9IG6Lr15b4OUTmPwBJt8JqGuapp05o0mhoHnptLQfPsR+8IBK'. + 'uYyNH3yr+B77LHheA3tK1Ta+IrMeTL2C6Xl48TOsNWDDgAz7s5'. + '/r+krP/eddCsbj8fDQ4GBm9MqVvvRXX2VULBayRGRzaYn1SoWa'. + 'UjgB4PIB5QK4ZgBXBKaAHxQsrED1H7CRgCUPwgHZDqACmhWwXv'. + '2aDRqGYeRyufS169cvThQKV88PDuYbW1vJ5VRK+5euqxWlPMdX'. + 'SRqgreHbZGN3ijfKBXBTAeh2Fdwi2MofshP/dvKwCmKhp4m83Y'. + 'vj8Xg4l8tlCoXC0MTExMTFkZE/1m37wvLGRvKRacoD1209E7Fc'. + 'pZwYREOQqEJ4z3HskHLsz4AoXykPIBSN0t3dTTQafROoHdumXC'. + '4fjoMiog0ODiauX7+eLxQKV3O53ETdti88nJnJ3rl505ifmWm3'. + 'arWSodR8GNbycDoNHy5C5jFold1k8d+DyvELNwg93d18/vnn9P'. + 'X1oes6nufx/Plz7t+/fxhQKSWJRCI5NjaWHxkZKdj1+sjSwkJm'. + '+uZN/dZ337VqCwullGUVdZjsgIUC5LqhrUPvCugWuApeApPAzY'. + 'PKHWyaphGNRunt7WVwcBARwfM8Ojo6sCzrMKBhGLphGFEF2Wq1'. + '2jc7M5OZ/vHH0MPbt93awkJJmeZsC6ZaMK3DCwvWdNioQUb5B6'. + 'AdBR+9SzkAz/NwHIeXL18iIui6TjgcJplMMjY2th8wHo+Hh4aG'. + 'MsPDw6fddru7+Phxx51bt/RbN260qwsLpZhlFZsw9QJ+2Pbrga'. + 'oJG2FY2oKwuTtVEz9uV34NbqdtbW0xPT1NNBoF4MyZM1y5coWu'. + 'rq5dQBHRcrlc4tq1a/l8Pj9RMs38ndu3Ez//9JNXLRZNyuXZJk'. + 'xVYKoExQpsK/+IaAuYb7no8zjC/R+A4zisrq7u+53NZjl16tQ+'. + 'QIlEIslsNpuPRCJXZ2dnh2/duNFRW1oy07a96MKd575yxRqU1B'. + '5vPMpF5HHa1tYW9+7do7Ozc/eQpZTSQ6FQt1Lq8pMnT/5w7969'. + 'nuLcXE1rNufO9fRMhlKpOyvt9qPtVmvb25fFfvvWbrepVCqHwo'. + 'xaX19vff/996ZhGC8qlkW9Wt1Onz073fXxxz+6MB+9e9dUjuO+'. + '7ebq9wLdB9hoNCrr6+s/4wf3FCJW3fPmTZhXsNWCprjuW66Dfr'. + '928KAfBhJAEgiJSLuzs7OSTqctoFkqlZRt26j/I+L/AGjPTN4d'. + 'Nqn4AAAAAElFTkSuQmCC' ; + +//========================================================== +// File: ppl_orange.png +//========================================================== + $this->imgdata_large[1][0]= 2753 ; + $this->imgdata_large[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQ0VCkHCzQAACk5JREFUeJytmGtzG0d2hp8zNw'. + 'AEcRdJ6EJK9FL0CqZUm9jWbkwq3vhDstl8dmLvz8rP2H8Q75ZT'. + 'pkRfpLgqsS6WIFEKGYkiSBCDO+banQ8DUpRWEkklXQUUqlCDfv'. + 'rp857pgfAOQ4AMOJdg4R/hX96Hf06bvDc5iT07i8yeg8ksiIAI'. + '4TBi/ds9/vivD/njapNHvRBfHXMu410AM+BUoVSF05NQsi1sO4'. + '8402AXwLQTuP31OAZO2aG0MEn14iSlnI1z3LnMk8IZYJyBwjIs'. + '/TWsVIWPJkvMFS4zMfMhUp5BsoCpAAEBLYKaMFGn00jBxnvu02'. + '35+JHmSJEnBpQEcPo38MmCxd/nS9Ry71Ga/g1W9a8gn0GsHkgA'. + '6DGjxkqb5CoO+YxF3A3p+jGjQUzoK+L/V0ADzFMwtSR8eLbAr8'. + 'uXOTf9NzhTc0geSLUQcYHgYEH786RMg0zWJHV2Aitv4x/HpHVS'. + 'QA2YBqTTGIUq5qkPMWaWkVwPnPtAA/BevmZcjxaaUtHh8pJJGu'. + 'DpCB9FvT7A7YT7S3p5vFMNzmWo/O0MSx/Ms3TqI8r59zFTfUQe'. + 'I7SBODE3tnfoIxYnNHligwik0zAzDdVpyKbA8sff5YAeMEwgkV'. + 'cufQeTJzZoCsaFLKXPTnNpoUTNsSgJmNoGsuNQjIDwYD2HlnZy'. + 'k++yxTKXZfKTU8zOpjhneeQYkorSmGERtIlICBKRbLX+y98YN3'. + 'ADcNIm+bJD4U3pPnmbEaRgYVRTGBkDSSsmxKfY7ZLuDJA4hdjl'. + 'JEgyBB2SJOvQ9RzTpNKoEwNq0CNFvOXR3/HxMgYVPObaz8kPmh'. + 'hkEWMatAfRONGGvLizyOE9P8KkpwhPDAgQKJQbELUD0oOIhbbH'. + 'JeVTmowxjAgZutB5AoOngA+2DdYrcTyOyYZP9+QpBvI29vwEhb'. + 'It042BVQgDy9KTMfkwQG1A9ACCLlgBBGUwxxoc52WDh2ATyEPp'. + '1hoaPvrEBh0Dq5an9OUsl/9hylk5b5c+mowLc4E2Jtw4Eoljyf'. + 'ogA/AGEAagNRjGyUxOmEycyVA5EWDBxrmUp3ytLIv/NJP69Goh'. + '+9mFydIvS5PZYkvH1oY/RFtKymlwBFQAgQd+kAA6qSQ8pvn2mp'. + 'SkJkuVFHPHBnQMrEt5Sl+e4/Lvp51PF1PF5Xy6WMvOWZXMom8z'. + 'OZTQ8+j5sbQiMEwopsCIwRtBGIJSCdzbTGo9NimkDcgdC7Bg49'. + 'TG5n4/nfr0Si77WdYp1YzyZEkWPdteaEnB7pPqBTxuIf/VgciE'. + 'SgasCPwh+GNIkaNNag1RiPge5pEhMQVjfoLcF+eoXSvbKxedwn'. + 'LKzC3KWbOi5/sW5a44/SHFUSgVA7SCzRG0AvA9mPOgFIETgu4n'. + 'Ww0wNQWFAqRSL6D2ZQYBdDrQ7R7jXiwgRcvIL02makuTmWtpM/'. + '+BlLMl5vuWzLVEuwH6oYnR1KS8kJINGXMM2YdfRlALoQoQQKeb'. + 'bDVwoMdxQMaLCwLo96HZTF5HbrEhmOftianfZisfzueKv7ZmrX'. + 'MsjhxKXZGBjzyeEHmSE3oWiggtyVGmE8DTIXTC5NxgAxOAGUM8'. + 'fun9mnSSLQ/CxNzOTgJ3LIMgoGwkKBiiMyaVviHVkdCO4FEKNv'. + 'LQzWBYHfITPa4UBVM0LR/WB7ARJsdDDTjA6deYFIFUOimJ3d0E'. + 'sNdLavYYgBpthqKcjiiJRO8K6CK0CsJTjfQAGaJtD9vQFAxNNQ'. + '1FB0yBAfA8gdMAIagLoCVAen0M00zMOTYShNDtoHs9CAIUoI4E'. + '1IBihCdNhsMhsj6NuV7BCC2IBpBqQaaFOENCCeiEsO1BO4RQgy'. + 'I5Hm4k4oIU9MrgZSAdBeTabZz+ODxKQRRBFBJo6IUc51anYRQo'. + 'dto+24FNxYCiaWKkQsj00KkO4gxRRkAngJ868M0u3OkkM+hxQA'. + 'cQ7YD7GO5XYSsPZybh/TCkFIYY+kWniTW4Q7jXgHvHMhiRpmuW'. + 'ca08GZkkZ/nY6TZMNhCnf2CuPoDVJvxpB+q9BHA8Ag1uH+oP4c'. + 'YEPCzDwmzSLquShHW/E0YRbG/BjZtw40hAy7aNzJlzRn75E6N0'. + 'qiwTzafI7kOU3gWrhzZC2iHcbsPqLlxvJnCt4KC1RYAL3I5hzY'. + 'Xv/huePYCtITQMKEnyB4KQvMURuJvw889HGSwUCs7CwkLpo6tX'. + 'Ty/+7nel6VLGDn/8N9m+eZuo1UP8iNhLau6b3RfmOsHBGTUYw9'. + 'WBNeDrGB4+h/4qNLKwTnLbHj9CJw/6GoIh9Jpvq0HHcayFhYXi'. + 'l3/4w9LK8vLKexfma3G/mb/3n1njTivS7tNQaaU1grQDjJ868D'. + 'Axx6vmxnBrY9C9IcSbSXbavNjb/S3eN6/0m1JcKBScixcvllZW'. + 'Vi6uLC8v12q1v/M8b/HxVjP//YYr32yE4dYWvShO0ogi14xwxq'. + 'F4rbnxZ3cMjtpvEEeMvwA0TdOYn5/PffHFF7Vr166tvPeLXyx7'. + 'nrd4+/btyg/frFo//Xgncnd67qCn78earQqcmYD3fSi1wPCTSV'. + '3gzqvm9uFOMl5nUAqFQn5paal26dKla57vf7D+6FHph9VV88af'. + 'vgq79bo70e3VT2l9A3hYg4UiRALVHTCHSZvYBm4A//6quf8zoG'. + '3bpuM4acMwKr1+//SDe/dK31+/bv90/Xrcq9fduNW6rbVeC+E7'. + 'gWdD2DKg4UEpBmPcm10RuScida31ntb62HAigoigDw6Gh0axWH'. + 'QWFhZKi4uLZ+I4PrVer2e+u37dXPvqq6hbr7tOp1NXWq89h6/b'. + '8FBB34WGBesdcPrj38lkMkGlUuml0+mu53nR3t4eo9HoSLhMJk'. + 'OlUiGdTuN5Hq7rvgA0TdO4cOFC7vPPP6/VarXldqdTu7m2lrv7'. + '7beq++BBO263b/tKrfWSXlbvwJ6CuAtDgTYiaBFMw6BSqfDxxx'. + '+rarWqGo0GN2/eZGtrC6XenAkRoVKpcPXqVWZmZmg0Gty6desF'. + 'oIhIOp3Ol8vlmmVZK3fv3Lm09uc/Zwbr653ccPgoNIzvnmn99Z'. + '7W9QG46lAaM5mM2l95GIYUi0VOnz7N7OwsWmsymQzyuse5Q8Mw'. + 'DNLpNDMzM5w/f/7A6AGgUkoajYa9urpayOXzUz/fvZutr68Pim'. + 'F4/2y1+n2o9Q/ru7uPesPhXnyo4A+vfHp6mmazybNnz9jZ2UFr'. + 'TbPZJAhe+8/aS0Mphed5NBoNABqNBqPR6MWBVWstvu/nnj9/Pv'. + 'vo0aPq5uZmPBgM/qcwPf39xV/9ajU1M3Nvq9PZaw8GoT50PjdN'. + 'k6mpKa5cucL58+eJ45j19XWePHnCzs4OnudhmiaWZRGGIVH05r'. + 'yEYYjrumxubrKxsfFyDQJ6NBp1Pc+7C4jWumBaVm+kVL2l1H2l'. + '1G6otS+H6V6z8u3tbVzXpdFooJRicXGRqakptre3uXXr1ltrcT'. + 'Qa8ezZszemWAE9rfUdYBOwtVLRbrPZ+48ff+wDvuu6Sr3MB4Dr'. + 'uty6desgfa1WC3iRyrNnz4pSSmezWUzTfGtYtNYcdvC/9sMlgP'. + 'n5N4cAAAAASUVORK5CYII=' ; + +//========================================================== +// File: ppl_pink.png +//========================================================== + $this->imgdata_large[2][0]= 2779 ; + $this->imgdata_large[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQolY9lkpgAACmhJREFUeJy9mOtzFNl5h5+3b9'. + 'Mz0kzPBWmEVtIiWYhIiC0HCDhB8lb8ISk7nzdZ5+/zJ/8BTmpT'. + '660CZLwG1pVFgBkgGIHECEaa+/T9nHzQCCQuRpCNz6mp6g893U'. + '8/c37ve3qEjxiC4OA4n/Lp/EUu/tsMM/+aEWduVBx7WhdkShcY'. + 'xUH2zo0Dwod/5N6vf8V//PoGdx8M8EOFPtK9jI8BdHCcMuVSmf'. + 'LxHLmSZdm2U8xIbmKETDGDZZnIy4dBbCynyGhphurEDBOlHFnn'. + 'qPcyPxTOwDCOccw7w5nlBRZWylI+ny/mZ6rL1dzUZ5/IWGZU3D'. + 'ZIOMQDDaJcHDVGWUbJBi9odVr0QoVSPzigIEaZ8vgSS/8wZU3/'. + 'k1fylipz5dLM2WlrZqHKaGCKbEbontq3KAKWQyZfZKTgYqc9Bp'. + '2I2PcJ4ogk/UEBQcwipbFZmT13vDBx8fhnE1Ofnp9yJopFyT3X'. + 'yANfks0QHSQMDaL37pOxMLIu2UyVkjVKLjyKSeuD8dAYCFkso1'. + 'gYMaeWJ40T56cl8yAi/O4FSa2P6kYczIDsgVpAqcDImZPMuAB1'. + 'dkLQtcc8a/bwox8IUHAxZVxGZMouSLVYwKuMkD5IxN+JSdsRJB'. + 'pexuTVgYYM6EoGmxkmg3/hEhNUMr/hd7dqbOzExMn/GRDAxWZc'. + 'j3I8HiXfMjF2FQowKw7pjoN6E/Llw/GBJj8qxVOMlX4ipxc/lY'. + 'kl2zBLkmrTcEzMkoNoRLVidLi/9g+Z3I+1xRHX5EcAihxnbPRv'. + 'OTU9kZSmpKPy9FTGrLimPZ1H+UiyGaF67w6n7E1DwMngFDxGvc'. + 'w70v0xZUby5IxjlIyMssUJrJwVWkXBdbXvSvwEibcSdKCAFI16'. + '4/sc0SRo9cGAGq1DwvQFzV6DVuBiV4zYnlEts6A2TSPcSiXoxo'. + 'QqJCEEFMbQ2b69o5qMiOOPqIMQkagu/aSL7waE8101WFShLjk9'. + 'yxgEvjRUiyYd+gwAjY2J9VpXfZ/JEXLhDp3OR6U4T97+hEnPwx'. + 'tv4HsRjy2tTQSFzQgDUnwSLBQRI+x1ZgcH87Vcv4SF19Kt0ezS'. + '1h9s0Ma25pgr/YJfnLnEysok0+ezjM6EBLldGqKIJYuDRhOQEJ'. + 'Oih8X9Q0xmcXNjlCofBJgn78wxVz7L2YWf8tPPz1hnfjbjzfxN'. + 'qVwutq2etZXUQSXikcXGIgUiUkJSDIQMJgYGJsaB3c7b1qQ4GZ'. + 'xSkdGZIwMeNLfK6uezMnvJK3pLxeVixfvMsyVjSNSO6IV9adPG'. + 'AArkEEz8oUkFmBjYGO80qfd6pCWIayD59wIKcsjcKqufn7JO/S'. + 'xfyi+5c24pey5rZ09mJRNkiDdT/tzbkBr3SYkpMYpgEaIJSYhI'. + 'kSOY1GhilAQk5ntDIojxCZ/kf87Pl85xbuWEnLiUy+cW3NNuJX'. + 'MmY5meKf6mT7wZS+THdOjxlG06tIlIOMZxchSxcFFEGAwAGGME'. + 'jwyZYSnWL3cXWiIUbUI6hO/vxXuFOV84ycmlBWthNeflTjuzTi'. + 'lzJmM5s46Ej0J63/ZoPmoy6PYxtYVNhmfs0mbAND1mmKVMBY1L'. + 'mxA1LN7WgXQbCApNhKJHRIM+DQbv7yQGhjnJ5NgFuXBuxpu5mD'. + 'udm3LPuY7pmZLUE6L1SIJaIPFuDAqyw9lnwDYv6NFHkWJh4ZDB'. + 'wCBFD3uMxsTAwcBAiElpE/KcPg36dIiOvpsRxDCyhmlP2YY9ZU'. + 'v8NMb/1id+FGO0DTztkSXLOONUqeITsMkW2zwnJEIDFhYGx+A1'. + 'kwK4mASkvKDPc3p0iYhRRwYUhZLUTyV6Eu0t4s1Y4kcx6W6KaM'. + 'EZThcXH59RRhGEgIAddnBwNEBKqqpUtWBIF22YDIhJsbEkJqFN'. + 'qLtERHs7GnUkwISEQAf0uj30bY39PzbiC6qrDu2cExJ69Nhhhz'. + '59UlIUipCQOnVi4sjG7ubJBy6um0C+he/0iDHQKIQERYyKFLqr'. + 'SI/W6kJCnvOcrWSLSquC1/Jw9Ks3R0FQKHr0uMc9bnCDGjX69A'. + 'H0XlcJkibN5jOe/alCZStHbjJL9lSMLkXExvCXRiDV6GZEeGeX'. + '3TvvBVQoEjfBL/v0rT75Th7VU5C8gktI6NLlMY+5yU3WWGODDf'. + 'r098tHpNFNH7/2lKdXXdz7efLzVaqJIBOCmK8AJUlI6g0aV+9y'. + '9+p7AR3bMQpTBWPy7yeN6fy0jNwewfpvC9Xe+3kFoUuXe9zj5n'. + 'BusEGHjh6GIAGawC2FWuvSvbbF1maFylZAsC1ISZADBiVNSJrP'. + 'eX73MY//skHP85z5+fnSxQsXj//4n39cmnPn7LbZlsajBmEnBL'. + '1nuEGDG9x4aa5Ldz+h0RCuBqwBv1Wo+7vs9r7n++0MmYeAM+zB'. + '+61EK1QUEnbbtN+9Bh3Hsebn54u//PdfLq9eWl2ZnZ1dSnaSwu'. + 'Pin40b9g3doKE0WoNIl65xj3v75njd3BBubQi6ExKmDWkMRKSl'. + 'tSbVKQcMao1Go5Ugb0+x53nOyZMnSysrKydXLq1cWlxa/McgCB'. + 'Yev3hU+GPrD3I5/q94k3pXYQY58q6B5Bs0HB//neaGx00gyWaz'. + 'VCoV7bquCoKAnZ0dfN/f03egLGj0m3XQNE1jdnY2/+WXXy6trq'. + '6uzP3oR5eCIFi4detW5feXL1vr679Let37zVB3/mQytjXJwmSB'. + 'wikHp9ShY0RESqObwPrr5oBERKhUKly4cIFqtUq9XufmzZtsbW'. + '2hXvuDwTTNtxZq8TyvsLy8vLS4uLgahOHphw8elL69fNlc++qr'. + 'uFOrNXPddm1cczVL5f5P+Lv5MuOJgTGxwYbZpZsCdeAq8M1Bcw'. + 'CGYeC6LtVqlRMnTjAyMkKn0yGXyx0N0LZt03Ec1zCMSrfXO37v'. + 'zp3S769csb+/ciXt1mrNdHf3ltZ6Lca8ZpJsduhtCdb2gEFJoQ'. + 'xADYHuHDS3f32lFEEQUK/XGRkZoVAocP78eZaXl9FaI/Jq25Uk'. + 'yWHAYrHozM/PlxYWFibTND32sFbLXrtyxVz76qukXas1M61WTW'. + 'm99gx+20TdN9jqtfjP7QzOwwYNp037Zd0DukDnIByA1pqdnR2+'. + '++472u02Z8+eZWJiAsMwDsEBRNGBzYJpmsaJEyfyX3zxxdLS0t'. + 'KlVqu1dP3q1cLta9ekU6u1dat1J9b6Sk9kraV1rYXegW7apDYw'. + 'kFY6fPc4MNTw88bwfZ/NzU2UUnieRxAEiAiGcXiXfcigiIjruo'. + 'VyubxkWdbK7fX1xWvffFMInjzBM82uMT5+p++6V1UUrSe7u03t'. + '+8lezlKt3gHyl0aSJDQaDa5fv876+vo+w6FzDq1BpZRsb2/bly'. + '9f9vL5/Njdu3fzG0+eMJHNxsfn532vXN5NPG/7abPZal6/Hvfe'. + 'kroPHfsm98f7AHW9Xo+//vrrlmVZm71+37QNw3JnZ9PK4uJGpV'. + 'pt4Dh+vLGhsrmcfv1iHzu01m89HjIdCon2fb8TBMHtvYeRUn50'. + '1Oj4vqp3Ok1f5LYSadfr9dQfDN642P/XeF2DA+SBAuA4jkOhUK'. + 'BQKESO43S11p3BYBDt7u4y+CtB/i/q7jp1GMiw2AAAAABJRU5E'. + 'rkJggg==' ; + +//========================================================== +// File: ppl_blue.png +//========================================================== + $this->imgdata_large[3][0]= 2284 ; + $this->imgdata_large[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFRAiTZAL3gAACHlJREFUeJy9mGtv29YZgJ9zKF'. + 'F3y/Q9jh05tuQkarKgbYasde0UBdZgwNou/Vqga/sD9mP2B4a1'. + 'BbZ9atFPxb5sqOtmXbI19bqsluPYiR3HN90vFEWRZx/IJI5zqa'. + 'x0OwBBSgR5Hj7v+55zSEFXTUgIJyA9C6/9RsjMjAyFIxxJCDc7'. + 'iBqKgyZACGg3G2x9+xXf/fG33P3mC9qNKsp1O+1JdkEnQTdgIO'. + 'ttCSMUi8gj072MnugllAyB9G8rBGi6RsToJTF6iuRoFi1kHKZf'. + '7fB8Iggj0/Dy23D2dakNTR3JDsXPvzstxmZGRMER1EwHhQAEgE'. + 'CLhIkPD6InY9S3djGLJVBtQP1Qb4HDAyoJYQOOZkPx49nhTH9i'. + '7MUBGT7egxkJgd70wZS/CUkoZtA/fRoE1DZ2ACiv52ibReCp4e'. + '7CIEHomxDiuVdGTqUnf/ZeOjR8fpiVXZul5ZrY3bWwbdcLr/dA'. + 'AAIpAwQjUWIjQ+g9HZvswiCgBVF9/SI6OSLGzo0i+oLi6+Utbq'. + '+bKEftgwOE/0Ohocf66M+cBjo22U2RQLIHMhmYnvaOpR9S8bSU'. + 'UqCURGpRkuMZMm9cIvPGJZLj0yBjT2LprkiSkykx9cuXIhOnUs'. + 'm+QNC2XdG02ggBTcvFabsPWwTPpBAChSCgh4kYBpoeplWp47Qs'. + '7EYDt21xINzd5GCAxLExRl89Z+nHjpbKMmjbmkgfDzI0JEW53K'. + 'Jaa6NcAOEX8v52uJzsBlAS6u0hcnTIccPRqhWPCUcLD+s1EaUp'. + 'HCEhEMCyHNpt9SjgIU12A6iw6xb123vYhaaKjB9tlgMD5X+uBp'. + 'zdkpg6azA8EaNQtKlVba+Xez4eCntnJrsDdFsW5nYFpxlFN846'. + 'DXe8utkM4mhi+EgQmjYbS2WqexZKk6BpjwJ2YlK5VjeA3pNDiH'. + 'YjRWPzPE7tmBo8EWwGhkXx+z3uXL7D3rU97LIF8RBEAl6lK/Uo'. + '6JNM1rZ2aTcr3eUgIQOGTgbdwXMGyRejenLYTvQGbAdRuetSud'. + 'OivVuFZgtCEgICghICnZoMhmlVTPR49LCAEkQUhk/B7KXe0MWf'. + 'nxj8xVR/cDheK14WZmtVMJSBnlGoN6FmQq0FLfdwJgORKPHRo/'. + 'Snzx4G0F/FjJ4KiOdmjPCrrx8bffnMybMv9MQGNG3rzlVqtR1B'. + 'sh/CYXCD4Aag1oCW7ZnUOjSp6WFi/QNEB8Y7BfTNjZyCmUvJ0I'. + 'XXT47MTp98Ybon9VZCk8cVazfqlNargsY34G7ByAlIjkHd9CCr'. + 'LbBdiHViUgiECuDKYCdz8b2cywREdiYZOj8zNnLuzOTzx6ODp+'. + 'OaGaqwVzBFqz0Idhz2loE7YEwBLaAJLQcKbW8qjAcBF5Jh0AMP'. + 'IOHe6kxgtb3UMO2OxkF//ffK28nQqxfvm3szrtnDVa799Qb/+v'. + 'NtsbNSpm3tAv8B+w7Ub0FhAyoBcMPec9oK6raXk48ziQBXQcmC'. + 'pT3YqHa0mpEBkTR6wz/Jjo2cy04+fzwxdDquNfQKO7sFUbpu0c'. + 'wp3JoAYsA42Bbkl4GCryUNDEM7Avm6Z/CgSYBWG8pNuFuDu1Wo'. + 'tjoxKIJGeHIiM/jmK9NnX5ycuJQMtUcqXPvLDTa+qIie4hAJ1U'. + 'vdrmO2HaDfB931twJgAn1A4lGT96obPHPLBbhVgUoTHHWo9aAA'. + 'JVAKpyKEmQNzWRENAsL18ycKjAFN/9gCNvzLB/390MMmE7pnDi'. + 'Bvwt0K5Jv3O+0oB22nJ1Vvjb/UMhOpcKknqN1OiMB2DNHU2G5s'. + 'sVndpGJVcZXjX1IAlvw9PmhRQcOFPhsSDkiBrQR1G7brgs0a7D'. + 'ag3FK4rguqBXarI4Nt1SJv5gls7TEWtJDRBO2GwnIs8maevFnA'. + 'Gx6awLZvzeTBu4kFbLigijC47pscpx0xyDfkvtUEnlarCDtrUC'. + 't2HGIhvPHVdVwqjTIrxRU2a5uUrYoP0QZ2gMvACl7+3V/LuKDq'. + 'sJuDy597516+CEezIHXv7vcgXQu2l+Bvn8He9Y4AE4kgk5P9DE'. + 'R6aFdq5Et5Nit3yTf3m9sBcsAN3+D98c0Fit5JawE25r1zg1Fo'. + '5B8GFD7g+nVYnu8EUEop9XTa0N/9dUbqcphP/rDJzbUClVbpgR'. + 'y2fXM3fND95qj75J8AC6BWPINfVSBieK+x+6cS5UCzCLu3oFV9'. + 'GqCMx2NGOp2Znpv7aXZudsool3T5J/179sxVlHJ4kGPrP2COBX'. + '/7DmiApWCjxIMXpYNznYuXM+6TAKWUMppOZzLvv//ery5cuDCT'. + 'SqVS336bCwr1JfAPB9r+2KAFwJS+OcETzZHz/7v3etl6ipz77X'. + 'GAMh6PG+l0OjM3NzczOzs3k0pNnFlbW43+e/GKtMqrblSsF03V'. + 'WHcJA0PjIAzvg9JTze2H67g9DjAwOTmZ+uCDD96anZ2dnZiYmF'. + '5dW41++Lvfa1fnr7qllVK9103mXNTnJgPA+YugsvB3HTaEl+Qs'. + 'AZ/yeHPPDCiTyaRx5syZbGoilV1dW00szC9oV+avusuLy0Xd0X'. + 'MgFkDM+zkYBZEHV8f7wwKu84zmngQoNU0LaZoWUa4K31y5qX/8'. + '4cfyyvwVN5/L10NOKNeg8UmDxoKF5Vfj1xXAgD0JrgAcvBDfel'. + 'a4g4AykUgY6XR6emJiIru2ttZXq9S0K19eUcuLy8WQE8o5OAsN'. + 'Ggsmpl+NpoL1g9X4UBU+C9xDgEKIwNTUVOqdd955M9mbnJ3/cj'. + '6Vu5aTheXCQXNdVeMzAwJSCGEA2XKpnF1cXIzlFnOVhJPIKdR+'. + 'c88ctq4AlVKsrKzw0UcfKcC5uXqzXnNqSzb2pwLxOHP/l7Z/BN'. + 'eB01LKt4HTrusKvGr8jB+hGn8MQAkYQMrfw4Nq/MFPtf+rdvDb'. + 'k8QL+/5Z4Uepxm7bfwHuTAVUWpWaqAAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: ppl_green.png +//========================================================== + $this->imgdata_large[4][0]= 2854 ; + $this->imgdata_large[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFQ4hANhluwAACrNJREFUeJytmF1zE1eagJ+3u9'. + 'XdkvUty2AbmLEtEzDBgZ0UpDBOalNTUzU3czl7tct/2n+wt3M/'. + 'NVM12SSTQQSyW2TA+QAJQogtYYFtyfrqL3WfvWj5g8AEjzfvhS'. + 'SXjk8//Zz3Pf3qCMcJAWxMKlT4kH+jwu/FknnJSUItKFHzCrKA'. + 'BggBQx5ziz/wn/yBz3hED4/oaJfSjgVoYjJJgTLTZCjohp7IGT'. + 'k5aZ4kb+bRTR30Q7djj8f/kpPMUSCFedRL6W8e8qMQNE6S4xpv'. + 'c5HrTPFubiJ3ZnlyOXV59rJYU5Z00h1c3d0brxAiUkScRijisk'. + '6XLTyiN3s8HuAJpniXa/q8/pt8Or+0kF8oXJm5YiydWcIpOrJu'. + 'rjOQwd54AQwsMpTJYhPSoYuLQ58An/DnBQSdImXO8avsTPbqpc'. + 'lLp67OXDVzMznZLGxSs2qyIRu4at8gKHQEC50kE1icxqCAdxST'. + 'xjEA44tqaJlERl8uLWvvnX5PHuQfcCdxh5qq0aX76vj4WgWyXO'. + 'QiNgBP8IAaddr08X8+wHFmJSQhBbPAZGoSZSt5wQs6qoNC7UEd'. + '4AEoLIQSCaCCy78Dv8Tiv1hjjW1CRj8XIAgEKqDtt9keboMJZa'. + 'vMjuzQVd3Xr9prTJo+GF/jKZea95R25Lxs8jg5qFGiwDnOS0mW'. + 'NE0rjNRIt3WbklUCA9mV3Zdz8OBT/JfCQLB0SKYVVjGFYSfx/E'. + '26ow4e6uDujlPFQpE0FU6P8qNTHdXJdEdda0qf0itWBVM3pa/3'. + 'ccUlIECJet0cAJoeYk5EZCeS5IwEoerSxccJBwRqFFf38QCTaO'. + 'TRVFKJm3NTbtLNSyh2IkhIXsvLCesEGNCWdmwyruSD/z9kUlRc'. + '3bqNlSxhJNJ43p5JITrOEis8Qtr0cXEpU/JT/pmO18n2vb42pU'. + '3JnDnHMBqyPlpnoAaxhr2llv1ZUBqEGlqYwDQMsskMOcMgVL3Y'. + 'ZOQTHAcQQiIGjHCwCaiovjrv4hbcpKuJJjIcDHm685RGr4GLCx'. + 'YHkAcrLoAoDSLBiAQrMkjqybHJCbxgh+7xAC1MpsgzwRwD3qHL'. + 'WyTIBdlAa6u2rHfXaew06PV78ZZjAwleNnkolECoH5i090wOcY'. + '+TgwYzFHiPi1zkOkXexeAMASnVU+LiyiA1wFUuaqggACLizeWw'. + 'ycMzyssmVYKkbpGyC5T+OUALk2mKLHKWf+ED/az+YW42d66YL+'. + 'aNrmEEzQCFEnKw368EgEvcN1m80eTIQIt0TFOjMJHkzNEBBYPp'. + 'sblf8QHzrORO5JaWZ5ZLl6cuJyyxpNPv4PZdoT+GyIxBfI5uUg'. + 'eJMCwP2/bIHO1JEudcgUUWOceKNq99mCvnzs5PzRcuTV4y5mRO'. + 'SMIjo47z5S7a94oQCNKgJsZwO7D/IDNg3/LLhRNXt4JohBb4aG'. + '82GLdXcf93mQ+Y43r2RHZp+cRy6cqJK4l8MS+tdItaqiYtc0Mm'. + 'QpfJARh98HYh9IiXVcaAo58wGb+LBAjbSPgCOcoSa0wzxXtc08'. + '/pv8mfyL+9MLVQvDJ1JVHJV6SZbFI1qtTsB+KlehRtRTGE8Afo'. + 'P4DRcAxiEudhAHjjzz+ubgX4oHowakHQOlqzICQwyVPITGVOXi'. + 'xfLF6aumzmczl5lHzMff2+fCdPaGttEkXoLQAO9B7C6EugPYby'. + 'gVPjGXc5eIbNAJPjGwiAbaAJUQv8wVG7GROkJFpyOqn/ovgLba'. + '44L0+sDaraXb6jzq7aBQWjBOyUoHcaopOgmaA3IRyNDZnA1HjO'. + 'HSBkr7eEFDAEngHrQCf+/s2A8cSiSkqcKUeeTjwFy2Jd78t3+L'. + 'TR4itIiBLwLQhzkJyB5Cx4HXDaENVQCBAQcRqFIHTRaBIvuYXg'. + 'AdsouuNxEL0ZUBHnSQp66R73zYfUtQ6OytKT8RckQAJQoLtgO5'. + 'BJgj0D/WfgdyHaAHx8THoUcbGx8ciwhUl3bDEiToURPooeI7pH'. + 'MziK9Yd9nU5a6GgKjOH41vsgI4hAcyC5AZkapF+AoYNrjjsuhx'. + 'FbtPmeB5ykyQQzTPAWAQWC8S9oAI0QRRuPb9jkmyMZNAOTklvC'. + 'GGYZaFkGmkVAh8h4DtKFMIBunG+pB5B5AIkGBDsQ+qBiL20caj'. + 'zhJknq5KlgMkLjJHJos4kYEbFJi5vc5eYbATVN02bNWe19+32t'. + 'aJWlFm3wbf8Rz5NbDFJdlOFBF/g7cBf0JkrbBb+F6j1DOduEkU'. + '8bWCOiSofPWadBnSZDWmgUkEMGhZCINut8S/0NBtPptFlZrBSu'. + 'vnt1+ndnflfIp9OJ/279Ubbbd+lP7KBKPoEBsgnqLph/BRzwdS'. + 'LnBUFvHcfdpRsGPAGqwMco6jynz+e0SPKYCHMfLX5VKHwcenR+'. + 'Igd1XTcqlUr+xn/cePv91fevzy8sLO2OtrOpWkqL7gXKSAVRdh'. + 'ZFEmEXoYkwBNqovoc/3GHH3aUR+jwC1oD/AWrANi4hGwyBzqEG'. + 'Vvb77Dgi0eT1VZzJZMxKpVJYXV1dXF1dXVm6sPSvruue3Xzcyj'. + '6/syvDzwj0lNazK6Fj5LFCRZouZpBABj6jXouu3+Np6HNvDHaf'. + 'g91t74msbMuOJicnSSaTKKUQEUQEpRSO69But1/dB0VEm5uby9'. + 'y4cWNpdXX1+sLCworrume//PuXpeqnVeOban0U1PW2kcx+O9L7'. + 'Te9sUB4lWFR9SqNtNGcHx+/RDD2+Am4D94CnQA8OjjlEhMnyJC'. + 'srK8zOzu7BiYioMAzZ2Njg9u3brwIqpSSXy2WXl5eXLly4sOo4'. + 'zoV6vV6oflrVP/7Tx8Hmw1Zb6ydqmpWp7ha8h4O3gjOhzVANmF'. + 'XPMNQWvdDnCXCXuHR+APqH4fbCtm2mp6eZn59H13WJuYXRaKSU'. + 'UiSTyVcBdV3XDcOwRaTU7/en19bWCn/79G+JL/76RbhZ22y7u+'. + '6ahl71nPDz/nO17m7wAxlabFOihy4+DvAcqAMbPzZ3OFzX5dmz'. + 'Z2iahoiosUUVhiGNRgPHcV4GzGQy5uLiYuH8+fMzo9FoslarJW'. + '9+elP75E+fBJu1zY7qqpqBUW3T/niohnVvy+1zm5aVtp+WE2XT'. + 'nrHFzbjh1tYLz3XdPjD4R3BKKba2tqhWq4dzUO3noBPn4H5PKy'. + 'LaO++8U7hx48byhQsXVne7u6tf3/v64t3P7mbq9+odt+OuaWi3'. + 'PLxbW2ytubjbQCgiMnt6VlaurWgz0zM0m02q1WrUaDSUUuqI56'. + 'ivDxE5MCgiYllWtlwuL5mmufLV/a/O/uXPf9Ff1F+80Lv6Yx29'. + '2qHzyZBh3cdvc7gaTZuZkzPh/Py8ACqVSv1/uPZDKXUAGEWRtF'. + 'qtxEcffZTL5XLF+2v39fqjeivshA/TpP83JLwzYFBzcA4370Cc'. + 'S81nTRBUs9lkOByi1GuOPI4Rh3+26JZlnSkWi781DOPXvV4v3+'. + '/2G0R8kSBxB/jew+tERK+c49m2TblcxrZtXNfl+fPneJ6HZVmU'. + 'y2VJJpNyaJ9TSinlOA5bW1u4rntkQA0oAG8D54gb9W3ianxM3A'. + 'e/cn73U3Hq1Cm5du2aPjs7a+ztcSIShmE4ajQa6tatWzQajZ+0'. + 'fbiKI+It4SvijVUj7kL2qvGfgkskEqTTaZmcnDROnTplJhIJTU'. + 'QiwPd9P/Q8T6XTaQzDIAiCfzjP/wFVfszuFqdHXgAAAABJRU5E'. + 'rkJggg==' ; + + +//========================================================== +// File: pp_red.png +//========================================================== + $this->imgdata_small[0][0]= 384 ; + $this->imgdata_small[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhouFobZrQAAAQ1JREFUeJyV1dFtwyAQBuD/og'. + 'xQdYxa8gRY6hJ0jK6QdohMkTEuE5wUj5ERen05IoLvID7Jkn2G'. + 'j8MgTMyMXqRlUQBYq9ydmaL2h1cwqD7l30t+L1iwlbYFRegY7I'. + 'SHjkEifGg4ww3aBa/l4+9AhxWWr/dLhEunXUGHq6yGniw3QkOw'. + '3jJ7UBd82n/VVAlAtvsfp98lAj2sAJOhU4AeQ7DC1ubVBODWDJ'. + 'TtCsEWa6u5M1NeFs1NzgdtuhHGtj+9Q2IDppQUAL6Cyrlz0gDN'. + 'ohSMiJCt861672EiAhEhESG3woJ9V9OKTkwRKbdqz4cHmFLSFg'. + 's69+LvAZKdeZ/n89uLnd2g0S+gjd5g8zzjH5Y/eLLi+NPEAAAA'. + 'AElFTkSuQmCC' ; + +//========================================================== +// File: pp_orange.png +//========================================================== + $this->imgdata_small[1][0]= 403 ; + $this->imgdata_small[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhwAnApz5AAAASBJREFUeJyN1dFthDAMBuDf7S'. + '3BCm2VCRKpS4QxbhikW6IewzcBqm6Fm6JyH7iEEByCn5AJH38g'. + 'BBIRHNUzBAWAGNfe/SrUGv92CtNt309BrfFdMGPjvt9CD8Fyml'. + 'ZZaDchRgA/59FDMD18pvNoNyHxMnUmgLmPHoJ+CqqfMaNAH22C'. + 'fgqKRwR+GRpxGjXBEiuXDBWQhTK3plxijyWWvtKVS5KNG1xM8I'. + 'OBr7geV1WupDqpmTAPKjCqLhxk/z0PImQmjKrAuI6vMXlhFroD'. + 'vfdqITXWqg2YMSJEAFcReoag6UXU2DzPG8w5t09YYsAyLWvHrL'. + 'HUy6D3XmvMAAhAay8kAJpBosX4vt0G4+4Jam6s6Rz1fgFG0ncA'. + 'f3XfOQcA+Acv5IUSdQw9hgAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: pp_pink.png +//========================================================== + $this->imgdata_small[2][0]= 419 ; + $this->imgdata_small[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhsQzvz1RwAAATBJREFUeJyd1MFthDAQheF/oi'. + 'gF+JYWQKICkCJRA1vGtrDbxFbhGvY0HVjCLeS2BeTiHFgTB2wg'. + 'eRISstCnmcG2qCpbuXf3ADBQzWsPfZfS9y9HsEu4/Fo33Wf4Fx'. + 'gxL3a1XkI3wbTNXHLoboVeLFUYDqObYBy+Fw/Uh9DdCmtOwIjF'. + 'YvG76CZoOhNGRmpO8zz30CJoOhMAqlDxFzQLppgXj2XaNlP7FF'. + 'GLL7ccMYCBgZERgCvXLBrfi2DEclmiKZwFY4tp6sW26bVfnede'. + 'e5Hc5dC2bUgrXGKqWrwcXnNYDjmCrcCIiQgDcFYV05kQ8SXmnB'. + 'NgPiVN06wrTDGAhz5EWY/FOccTk+cTnHM/YNu2YYllgFxCWuUM'. + 'ikzGx+2Gc+4N+CoJW8n+5a2UKm2aBoBvGA6L7wfl8aoAAAAASU'. + 'VORK5CYII=' ; + + +//========================================================== +// File: pp_blue.png +//========================================================== + $this->imgdata_small[3][0]= 883 ; + $this->imgdata_small[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAACi1'. + 'BMVEX///8AAAAAADMAAGYAAJkAAMwAAP8zAAAzADMzAGYzAJkz'. + 'AMwzAP9mAABmADNmAGZmAJlmAMxmAP+ZAACZADOZAGaZAJmZAM'. + 'yZAP/MAADMADPMAGbMAJnMAMzMAP//AAD/ADP/AGb/AJn/AMz/'. + 'AP8AMwAAMzMAM2YAM5kAM8wAM/8zMwAzMzMzM2YzM5kzM8wzM/'. + '9mMwBmMzNmM2ZmM5lmM8xmM/+ZMwCZMzOZM2aZM5mZM8yZM//M'. + 'MwDMMzPMM2bMM5nMM8zMM///MwD/MzP/M2b/M5n/M8z/M/8AZg'. + 'AAZjMAZmYAZpkAZswAZv8zZgAzZjMzZmYzZpkzZswzZv9mZgBm'. + 'ZjNmZmZmZplmZsxmZv+ZZgCZZjOZZmaZZpmZZsyZZv/MZgDMZj'. + 'PMZmbMZpnMZszMZv//ZgD/ZjP/Zmb/Zpn/Zsz/Zv8AmQAAmTMA'. + 'mWYAmZkAmcwAmf8zmQAzmTMzmWYzmZkzmcwzmf9mmQBmmTNmmW'. + 'ZmmZlmmcxmmf+ZmQCZmTOZmWaZmZmZmcyZmf/MmQDMmTPMmWbM'. + 'mZnMmczMmf//mQD/mTP/mWb/mZn/mcz/mf8AzAAAzDMAzGYAzJ'. + 'kAzMwAzP8zzAAzzDMzzGYzzJkzzMwzzP9mzABmzDNmzGZmzJlm'. + 'zMxmzP+ZzACZzDOZzGaZzJmZzMyZzP/MzADMzDPMzGbMzJnMzM'. + 'zMzP//zAD/zDP/zGb/zJn/zMz/zP8A/wAA/zMA/2YA/5kA/8wA'. + '//8z/wAz/zMz/2Yz/5kz/8wz//9m/wBm/zNm/2Zm/5lm/8xm//'. + '+Z/wCZ/zOZ/2aZ/5mZ/8yZ///M/wDM/zPM/2bM/5nM/8zM////'. + '/wD//zP//2b//5n//8z///9jJVUgAAAAAXRSTlMAQObYZgAAAA'. + 'FiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElN'. + 'RQfTAwkWGTNerea3AAAAYUlEQVR4nHXNwQ3AIAxDUUfyoROxRZ'. + 'icARin0EBTIP3Hp1gBRqSqYo0seqjZpnngojlWBir5+b8o06lM'. + 'ha5uFKEpDZulV8l52axhVzqaCdxQp32qVSSwC1wN3fYiw7b76w'. + 'bN4SMue4/KbwAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: pp_green.png +//========================================================== + $this->imgdata_small[4][0]= 447 ; + $this->imgdata_small[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wMJFhkLdq9eKQAAAUxJREFUeJyN1LFVwzAQxvH/8f'. + 'IeDS0FLKABlN6eIwPYAzCHB0gWYI2jj+i1ABUTQN4TRSQ7iiWZ'. + 'qxLn9Mt9ydmiqrSq930AYFiu6YdKrf/hP1gYQn6960PxwBaYMG'. + 'E9UA3dBFtVQjdBOQmBakLennK0CapRwbZRZ3N0O/IeEsqp3HKL'. + 'Smtt5pUZgTPg4gdDud+6xoS97wM2rsxxmRSoTgoVcMZsXJkBho'. + 'SmKqCuOuEtls6nmGMFPTUmxBKx/MeyNfQGLoOOiC2ddsxb1Kzv'. + 'ZzUqu5IXbGDvBJf+hDisi77qFSuhq7Xpuu66TyJLRGbsXVUPxV'. + 'SxsgkzDMt0mKT3/RcjL8C5hHnvJToXY0xYRZ4xnVKsV/S+a8YA'. + 'AvCb3s9g13UhYj+TTo93B3fApRV1FVlEAD6H42DjN9/WvzDYuJ'. + 'dL5b1/ji+/IX8EGWP4AwRii8PdFHTqAAAAAElFTkSuQmCC' ; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/imgdata_squares.inc.php b/html/includes/jpgraph/src/imgdata_squares.inc.php new file mode 100644 index 0000000000..dfc26bffc7 --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_squares.inc.php @@ -0,0 +1,150 @@ +'imgdata'); + + var $colors = array('bluegreen','blue','green', + 'lightblue','orange','purple','red','yellow'); + var $index = array('bluegreen' =>2,'blue'=>5,'green'=>6, + 'lightblue'=>0,'orange'=>7,'purple'=>4,'red'=>3,'yellow'=>1); + var $maxidx = 7 ; + var $imgdata ; + + function ImgData_Squares () { +//========================================================== +//sq_lblue.png +//========================================================== + $this->imgdata[0][0]= 362 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAABm'. + 'JLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAA'. + 'B3RJTUUH0wMLFgojiPx/ygAAAPdJREFUeNpj/P377+kzHx89/c'. + 'VAHNBQ5VBX52HavPWWjg6nnDQbkXoUFTnnL7zD9PPXrz17HxCj'. + 'E6Jn6fL7H7/+ZWJgYCBGJ7IeBgYGJogofp1oehDa8OjE1IOiDa'. + 'tOrHoYGBhY0NwD0enirMDAwMDFxYRVD7ptyDrNTAU0NXix6sGu'. + 'jYGBgZOT9e/f/0xMjFyczFgVsGAKCfBza2kKzpl3hIuT1c9Xb/'. + 'PW58/foKchJqx6tmy98vbjj8cvPm/afMnXW1JShA2fNmQ9EBFc'. + 'Opnw6MGjkwm/Hlw6mQjqwaqTiRg9mDoZv//4M2/+UYJ64EBWgj'. + 'cm2hwA8l24oNDl+DMAAAAASUVORK5CYII=' ; + +//========================================================== +//sq_yellow.png +//========================================================== + $this->imgdata[1][0]= 338 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAWl'. + 'BMVEX////+/+H+/9/9/9v8/8P8/8H8/7v8/7n6/4P5/335/3n5'. + '/3X4/1f4/1P3/031/w30/wn0/wPt+ADp9ADm8ADk7gDc5gDa5A'. + 'DL1ADFzgCwuACqsgClrABzeAC9M0MzAAAAAWJLR0QAiAUdSAAA'. + 'AAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEDlOgDj'. + 'EAAAB+SURBVHjaVcpbCsQgDEDRGERGKopjDa2a/W9zfLWj9/Nw'. + 'Ac21ZRBOtZlRN9ApzSYFaDUj79KIorRDbJNO9bN/GUSh2ZRJFJ'. + 'S18iorURBiyksO8buT0zkfYaUqzI91ckfhWhoGXTLzsDjI68Sz'. + 'pGMjrzPzauA/iXk1AtykmvgBC8UcWUdc9HkAAAAASUVORK5CYI'. + 'I=' ; + +//========================================================== +//sq_blgr.png +//========================================================== + $this->imgdata[2][0]= 347 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAZl'. + 'BMVEX////0+vv0+vrz+fry+frv+Png7e/d7e/a6+zY6+250tSz'. + '0tSyztCtztGM0NWIz9SDzdNfsLVcrrRZrbJOp61MpqtIr7dHn6'. + 'RErrZArLQ6q7M2g4kygYcsp68npa4ctr8QZ20JnqepKsl4AAAA'. + 'AWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU'. + '1FB9MDCxYEByp8tpUAAAB7SURBVHjaVcjRFoIgDADQWZpWJpjY'. + 'MsnG//9kzIFn3McLzfArDA3MndFjrhvgfDHFBEB9pt0CVzwrY3'. + 'n2yicjhY4vTSp0nbXtN+hCV53SHDWe61dZY+/9463r2XuifHAM'. + '0SoH+6xEcovUlCfefeFSIwfTTQ3fB+pi4lV/bTIgvmaA7a0AAA'. + 'AASUVORK5CYII=' ; + +//========================================================== +//sq_red.png +//========================================================== + $this->imgdata[3][0]= 324 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAXV'. + 'BMVEX////++Pn99/j99ff99fb98/X98/T98PL55uj43+P24+bw'. + 'kKPvjaHviJ3teJHpxMnoL2Pjs73WW3rWNljVWXnUVnbUK1DTJk'. + '3SUHPOBz/KQmmxPVmuOFasNFOeIkWVka/fAAAAAWJLR0QAiAUd'. + 'SAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEHd'. + 'ceT+8AAABtSURBVHjaVchbAkMwEAXQq6i3VrQiQfa/zDYTw8z5'. + 'PCjGt9JVWFt1XWPh1fWNdfDy+tq6WPfRUPENNKnSnXNWPB4uv2'. + 'b54nSZ8jHrMtOxvWZZZtpD4KP6xLkO9/AhzhaCOMhJh68cOjzV'. + '/K/4Ac2cG+nBcaRuAAAAAElFTkSuQmCC' ; + +//========================================================== +//sq_pink.png +//========================================================== + $this->imgdata[4][0]= 445 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAApV'. + 'BMVEX////6+Pz69/v49Pr38/r17/jr4+/l3Onj2efh1ua/L+i+'. + 'q8m+Lue9Lua8qsS8LuW8LeS7pca5LOG4LN+2Y9O2YNW1ZdO1Kt'. + 'y0atC0aNGzb82zbc6zKtuzKdqycsuwa8qtJtOISZ2GRpuFN6GE'. + 'NqCDQpmCMZ+BPpd/LJ1/K519S5B9Jpx9Jpt9JZt6RY11BJZ1BJ'. + 'V0BJV0BJRzBJNvNoRtIoJUEmdZ/XbrAAAAAWJLR0QAiAUdSAAA'. + 'AAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYDF3iKMD'. + 'YAAACeSURBVHjaVczbEoIgGARgCiMtrexoWpaa2FHUgvd/tH4Y'. + 'BnEvv9ldhNPradPnnGBUTtPDzMRPSIF46SaBoR25dYjz3I20Lb'. + 'ek6BgQz73Il7KKpSgCO0pTHU0886J1sCe0ZYbALjGhjFnEM2es'. + 'VhZVI4d+B1QtfnV47ywCEaKeP/p7JdLejSYt0j6NIiOq1wJZIs'. + 'QTDA0ELHwhPBCwyR/Cni9cOmzJtwAAAABJRU5ErkJggg==' ; + +//========================================================== +//sq_blue.png +//========================================================== + $this->imgdata[5][0]= 283 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAQl'. + 'BMVEX////4+fz39/z19vvy8vru7/ni4+7g4fHW1ue8vteXmt6B'. + 'hdhiZ7FQVaZETcxCSJo1Oq4zNoMjKakhJHcKFaMEC2jRVYdWAA'. + 'AAAWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0'. + 'SU1FB9MDCxYDN0PkEP4AAABfSURBVHjaVchHAoAgDATAVcCCIF'. + 'j4/1elJEjmOFDHKVgDv4iz640gLs+LMF6ZUv/VqcXXplU7Gqpy'. + 'PFzBT5qml9NzlOX259riWHlS4kOffviHD8PQYZx2EFMPRkw+9Q'. + 'FSnRPeWEDzKAAAAABJRU5ErkJggg==' ; + +//========================================================== +//sq_green.png +//========================================================== + $this->imgdata[6][0]= 325 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAXV'. + 'BMVEX////2+vX1+vX1+fT0+fPz+PPx9/Dv9u7u9e3h7uHe697a'. + '6dnO2s3I1sa10LOvza2ay5aEwYBWlE9TqE5Tkk1RkEpMrUJMg0'. + 'hKiUNGpEFBojw8oTcsbScaYBMWlwmMT0NtAAAAAWJLR0QAiAUd'. + 'SAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEFd'. + 'nFx90AAABuSURBVHjaVc9HAoAgDADB2HuJWLDx/2cKBITscW4L'. + '5byzMIWtZobNDZIZtrcCGZsRQ8GwvRSRNxIiMuysODKG3alikl'. + 'ueOPlpKTLBaRmOZxQxaXlfb5ZWI9om4WntrXiDSJzp7SBkwMQa'. + 'FEy0VR/NAB2kNuj7rgAAAABJRU5ErkJggg==' ; + +//========================================================== +//sq_orange.png +//========================================================== + $this->imgdata[7][0]= 321 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAUV'. + 'BMVEX/////8+n/8uf/8OP/59H/5Mv/zqH/zJ3/ypv/yJf/vYH/'. + 'u33/uXn/n0n/nUX/m0H/lzn/ljf/lDP/kS3/kCv/iR//hxv/fg'. + 'n/fAX/eQDYZgDW6ia5AAAAAWJLR0QAiAUdSAAAAAlwSFlzAAAL'. + 'EgAACxIB0t1+/AAAAAd0SU1FB9MDCxYEJIgbx+cAAAB2SURBVH'. + 'jaVczRCoQwDETRbLAWLZSGUA35/w/dVI0283i4DODew3YESmWW'. + 'kg5gWkoQAe6TleUQI/66Sy7i56+kLk7cht2N0+hcnJgQu0SqiC'. + '1SzSIbzWSi6gavqJ63wSduRi2f+kwyD5rEukwCdZ1kGAMGMfv9'. + 'AbWuGMOr5COSAAAAAElFTkSuQmCC' ; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/imgdata_stars.inc.php b/html/includes/jpgraph/src/imgdata_stars.inc.php new file mode 100644 index 0000000000..bd3272a71a --- /dev/null +++ b/html/includes/jpgraph/src/imgdata_stars.inc.php @@ -0,0 +1,144 @@ + 'imgdata'); + + var $colors = array('bluegreen','lightblue','purple','blue','green','pink','red','yellow'); + var $index = array('bluegreen'=>3,'lightblue'=>4,'purple'=>1, + 'blue'=>5,'green'=>0,'pink'=>7,'red'=>2,'yellow'=>6); + var $maxidx = 7 ; + var $imgdata ; + + function ImgData_Stars() { +//========================================================== +// File: bstar_green_001.png +//========================================================== + $this->imgdata[0][0]= 329 ; + $this->imgdata[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAAUV'. + 'BMVEX///////+/v7+83rqcyY2Q/4R7/15y/1tp/05p/0lg/zdX'. + '/zdX/zVV/zdO/zFJ9TFJvDFD4yg+8Bw+3iU68hwurhYotxYosx'. + 'YokBoTfwANgQFUp7DWAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgF'. + 'HUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJj'. + 'CRyxgTAAAAcUlEQVR4nH3MSw6AIAwEUBL/IKBWwXL/g0pLojUS'. + 'ZzGLl8ko9Zumhr5iy66/GH0dp49llNPB5sTotDY5PVuLG6tnM9'. + 'CVKSIe1joSgPsAKSuANNaENFQvTAGzmheSkUpMBWeJZwqBT8wo'. + 'hmysD4bnnPsC/x8ItUdGPfAAAAAASUVORK5CYII=' ; +//========================================================== +// File: bstar_blred.png +//========================================================== + $this->imgdata[1][0]= 325 ; + $this->imgdata[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79uRJ6jWPOSUtKrb+ejWO+gWPaGTruJTr6rZvF2'. + 'RqC2ocqdVuCeV+egV/GsnLuIXL66rMSpcOyATbipY/OdWOp+VK'. + 'aTU9WhV+yJKBoLAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJwynv1'. + 'XVAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_red_001.png +//========================================================== + $this->imgdata[2][0]= 325 ; + $this->imgdata[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+eRFHzWG3SUmHnb37vWGr2WHG7Tlm+TljxZneg'. + 'Rk3KoaXgVmXnV2nxV227nJ++XGzErK3scIS4TVzzY3fqWG2mVF'. + 'zVU2PsV2rJFw9VAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJzCI0C'. + 'lSAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_blgr_001.png +//========================================================== + $this->imgdata[3][0]= 325 ; + $this->imgdata[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79Ehp5Yx/NSq9Jvw+dYwu9YzfZOmbtOmb5myPFG'. + 'gqChvcpWteBXvedXxvGcsbtcpb6su8RwzOxNmrhjyvNYwupUjK'. + 'ZTr9VXwOyJhmWNAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJTC65k'. + 'vQAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_blgr_002.png +//========================================================== + $this->imgdata[4][0]= 325 ; + $this->imgdata[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79EnpxY8/FS0dJv5+dY7+9Y9vBOubtOur5m8fFG'. + 'nKChycpW3uBX5+ZX8e2curtcvrqswsRw7OdNuLZj8/BY6udUpK'. + 'ZT1dRX7OtNkrW5AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJgXHeN'. + 'wwAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_blue_001.png +//========================================================== + $this->imgdata[5][0]= 325 ; + $this->imgdata[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v79EY55Yi/NSetJvledYiO9YkPZOb7tObr5mkvFG'. + 'X6ChrcpWgOBXhedXi/Gcpbtcf76sssRwnOxNcbhjk/NYiepUbK'. + 'ZTfdVXh+ynNEzzAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJhStyP'. + 'zCAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_oy_007.png +//========================================================== + $this->imgdata[6][0]= 325 ; + $this->imgdata[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+ejUTz11jSvVLn02/v1lj21li7q06+r07x2mag'. + 'lUbKxKHgy1bnz1fx1Ve7t5y+qlzEwqzs03C4pE3z2WPqz1imml'. + 'TVv1Ps01dGRjeyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJjsGGc'. + 'GbAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + +//========================================================== +// File: bstar_lred.png +//========================================================== + $this->imgdata[7][0]= 325 ; + $this->imgdata[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAMAAABsDg4iAAAATl'. + 'BMVEX///+/v7+eRJPzWN3SUr7nb9TvWNj2WOS7Tqi+TqnxZtyg'. + 'Ro/KocPgVsjnV9LxV927nLa+XLTErL7scN24TarzY9/qWNemVJ'. + 'jVU8LsV9VCwcc9AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgA'. + 'AAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTAxYTJxi9ZY'. + 'GoAAAAcElEQVR4nH3MyQ6AIAwEUFIqiwju2///qLQmWiJxDnN4'. + 'mYxSv5lqGCs2nvaLLtZx/VhGOW1MjnPJWp0zsw2wsUY2jd09BY'. + 'DFmESC+BwA5UCUxhqAhqrA4CGrLpCMVGK4sZe4B+/5RLdiyMb6'. + 'on/PuS9CdQNC7yBXEQAAAABJRU5ErkJggg==' ; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpg-config.inc.php b/html/includes/jpgraph/src/jpg-config.inc.php new file mode 100644 index 0000000000..7936f2a1f8 --- /dev/null +++ b/html/includes/jpgraph/src/jpg-config.inc.php @@ -0,0 +1,216 @@ + diff --git a/html/includes/jpgraph/src/jpgraph.php b/html/includes/jpgraph/src/jpgraph.php new file mode 100644 index 0000000000..0da5cb5aae --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph.php @@ -0,0 +1,5950 @@ +Get(11,$file,$lineno); + die($msg); + } + else { + DEFINE('CACHE_DIR', $_SERVER['TEMP'] . '/'); + } + } else { + DEFINE('CACHE_DIR','/tmp/jpgraph_cache/'); + } + } +} +elseif( !defined('CACHE_DIR') ) { + DEFINE('CACHE_DIR', ''); +} + +if (!defined('TTF_DIR')) { + if (strstr( PHP_OS, 'WIN') ) { + $sroot = getenv('SystemRoot'); + if( empty($sroot) ) { + $t = new ErrMsgText(); + $msg = $t->Get(12,$file,$lineno); + die($msg); + } + else { + DEFINE('TTF_DIR', $sroot.'/fonts/'); + } + } else { + DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/'); + } +} + +if (!defined('MBTTF_DIR')) { + if (strstr( PHP_OS, 'WIN') ) { + $sroot = getenv('SystemRoot'); + if( empty($sroot) ) { + $t = new ErrMsgText(); + $msg = $t->Get(12,$file,$lineno); + die($msg); + } + else { + DEFINE('TTF_DIR', $sroot.'/fonts/'); + } + } else { + DEFINE('MBTTF_DIR','/usr/share/fonts/ja/TrueType/'); + } +} + +//------------------------------------------------------------------ +// Constants which are used as parameters for the method calls +//------------------------------------------------------------------ + +// Tick density +DEFINE("TICKD_DENSE",1); +DEFINE("TICKD_NORMAL",2); +DEFINE("TICKD_SPARSE",3); +DEFINE("TICKD_VERYSPARSE",4); + +// Side for ticks and labels. +DEFINE("SIDE_LEFT",-1); +DEFINE("SIDE_RIGHT",1); +DEFINE("SIDE_DOWN",-1); +DEFINE("SIDE_BOTTOM",-1); +DEFINE("SIDE_UP",1); +DEFINE("SIDE_TOP",1); + +// Legend type stacked vertical or horizontal +DEFINE("LEGEND_VERT",0); +DEFINE("LEGEND_HOR",1); + +// Mark types for plot marks +DEFINE("MARK_SQUARE",1); +DEFINE("MARK_UTRIANGLE",2); +DEFINE("MARK_DTRIANGLE",3); +DEFINE("MARK_DIAMOND",4); +DEFINE("MARK_CIRCLE",5); +DEFINE("MARK_FILLEDCIRCLE",6); +DEFINE("MARK_CROSS",7); +DEFINE("MARK_STAR",8); +DEFINE("MARK_X",9); +DEFINE("MARK_LEFTTRIANGLE",10); +DEFINE("MARK_RIGHTTRIANGLE",11); +DEFINE("MARK_FLASH",12); +DEFINE("MARK_IMG",13); +DEFINE("MARK_FLAG1",14); +DEFINE("MARK_FLAG2",15); +DEFINE("MARK_FLAG3",16); +DEFINE("MARK_FLAG4",17); + +// Builtin images +DEFINE("MARK_IMG_PUSHPIN",50); +DEFINE("MARK_IMG_SPUSHPIN",50); +DEFINE("MARK_IMG_LPUSHPIN",51); +DEFINE("MARK_IMG_DIAMOND",52); +DEFINE("MARK_IMG_SQUARE",53); +DEFINE("MARK_IMG_STAR",54); +DEFINE("MARK_IMG_BALL",55); +DEFINE("MARK_IMG_SBALL",55); +DEFINE("MARK_IMG_MBALL",56); +DEFINE("MARK_IMG_LBALL",57); +DEFINE("MARK_IMG_BEVEL",58); + +// Inline defines +DEFINE("INLINE_YES",1); +DEFINE("INLINE_NO",0); + +// Format for background images +DEFINE("BGIMG_FILLPLOT",1); +DEFINE("BGIMG_FILLFRAME",2); +DEFINE("BGIMG_COPY",3); +DEFINE("BGIMG_CENTER",4); + +// Depth of objects +DEFINE("DEPTH_BACK",0); +DEFINE("DEPTH_FRONT",1); + +// Direction +DEFINE("VERTICAL",1); +DEFINE("HORIZONTAL",0); + +// Axis styles for scientific style axis +DEFINE('AXSTYLE_SIMPLE',1); +DEFINE('AXSTYLE_BOXIN',2); +DEFINE('AXSTYLE_BOXOUT',3); +DEFINE('AXSTYLE_YBOXIN',4); +DEFINE('AXSTYLE_YBOXOUT',5); + +// Style for title backgrounds +DEFINE('TITLEBKG_STYLE1',1); +DEFINE('TITLEBKG_STYLE2',2); +DEFINE('TITLEBKG_STYLE3',3); +DEFINE('TITLEBKG_FRAME_NONE',0); +DEFINE('TITLEBKG_FRAME_FULL',1); +DEFINE('TITLEBKG_FRAME_BOTTOM',2); +DEFINE('TITLEBKG_FRAME_BEVEL',3); +DEFINE('TITLEBKG_FILLSTYLE_HSTRIPED',1); +DEFINE('TITLEBKG_FILLSTYLE_VSTRIPED',2); +DEFINE('TITLEBKG_FILLSTYLE_SOLID',3); + +// Style for background gradient fills +DEFINE('BGRAD_FRAME',1); +DEFINE('BGRAD_MARGIN',2); +DEFINE('BGRAD_PLOT',3); + +// Width of tab titles +DEFINE('TABTITLE_WIDTHFIT',0); +DEFINE('TABTITLE_WIDTHFULL',-1); + +// Defines for 3D skew directions +DEFINE('SKEW3D_UP',0); +DEFINE('SKEW3D_DOWN',1); +DEFINE('SKEW3D_LEFT',2); +DEFINE('SKEW3D_RIGHT',3); + +// For internal use only +DEFINE("_JPG_DEBUG",false); +DEFINE("_FORCE_IMGTOFILE",false); +DEFINE("_FORCE_IMGDIR",'/tmp/jpgimg/'); + + +function CheckPHPVersion($aMinVersion) +{ + list($majorC, $minorC, $editC) = split('[/.-]', PHP_VERSION); + list($majorR, $minorR, $editR) = split('[/.-]', $aMinVersion); + + if ($majorC > $majorR) return true; + if ($majorC < $majorR) return false; + // same major - check minor + if ($minorC > $minorR) return true; + if ($minorC < $minorR) return false; + // and same minor + if ($editC >= $editR) return true; + return true; +} + +// +// Make sure PHP version is high enough +// +if( !CheckPHPVersion(MIN_PHPVERSION) ) { + JpGraphError::RaiseL(13,PHP_VERSION,MIN_PHPVERSION); +} + +// +// Routine to determine if GD1 or GD2 is installed +// +function CheckGDVersion() { + if( !function_exists("imagetypes") || !function_exists('imagecreatefromstring') ) + return 0; + $GDfuncList = get_extension_funcs('gd'); + if( !$GDfuncList ) + return 0 ; + else { + if( in_array('imagegd2',$GDfuncList) && + in_array('imagecreatetruecolor',$GDfuncList)) + return 2; + else + return 1; + } +} + +// +// Check what version of the GD library is installed. +// +$gdversion = CheckGDVersion(); +if( $gdversion != 2 ) { + JpGraphError::RaiseL(25002); +//(" Your PHP installation does not seem to have the required GD 2.x library. Please see the PHP documentation on how to install and enable the GD library."); +} + +// +// Setup PHP error handler +// +function _phpErrorHandler($errno,$errmsg,$filename, $linenum, $vars) { + // Respect current error level + if( $errno & error_reporting() ) { + JpGraphError::RaiseL(25003,basename($filename),$linenum,$errmsg); + } +} + +if( INSTALL_PHP_ERR_HANDLER ) { + set_error_handler("_phpErrorHandler"); +} + +// +//Check if there were any warnings, perhaps some wrong includes by the user +// +if( isset($GLOBALS['php_errormsg']) && CATCH_PHPERRMSG && + !preg_match('/|Deprecated|/i', $GLOBALS['php_errormsg'])) { + JpGraphError::RaiseL(25004,$GLOBALS['php_errormsg']); +} + + +// Useful mathematical function +function sign($a) {return $a >= 0 ? 1 : -1;} + +// Utility function to generate an image name based on the filename we +// are running from and assuming we use auto detection of graphic format +// (top level), i.e it is safe to call this function +// from a script that uses JpGraph +function GenImgName() { + global $_SERVER; + + // Determine what format we should use when we save the images + $supported = imagetypes(); + if( $supported & IMG_PNG ) $img_format="png"; + elseif( $supported & IMG_GIF ) $img_format="gif"; + elseif( $supported & IMG_JPG ) $img_format="jpeg"; + elseif( $supported & IMG_WBMP ) $img_format="wbmp"; + elseif( $supported & IMG_XPM ) $img_format="xpm"; + + if( !isset($_SERVER['PHP_SELF']) ) + JpGraphError::RaiseL(25005); +//(" Can't access PHP_SELF, PHP global variable. You can't run PHP from command line if you want to use the 'auto' naming of cache or image files."); + $fname = basename($_SERVER['PHP_SELF']); + if( !empty($_SERVER['QUERY_STRING']) ) { + $q = @$_SERVER['QUERY_STRING']; + $fname .= '_'.preg_replace("/\W/", "_", $q).'.'.$img_format; + } + else { + $fname = substr($fname,0,strlen($fname)-4).'.'.$img_format; + } + return $fname; +} + +//=================================================== +// CLASS JpgTimer +// Description: General timing utility class to handle +// time measurement of generating graphs. Multiple +// timers can be started. +//=================================================== +class JpgTimer { + var $start; + var $idx; +//--------------- +// CONSTRUCTOR + function JpgTimer() { + $this->idx=0; + } + +//--------------- +// PUBLIC METHODS + + // Push a new timer start on stack + function Push() { + list($ms,$s)=explode(" ",microtime()); + $this->start[$this->idx++]=floor($ms*1000) + 1000*$s; + } + + // Pop the latest timer start and return the diff with the + // current time + function Pop() { + assert($this->idx>0); + list($ms,$s)=explode(" ",microtime()); + $etime=floor($ms*1000) + (1000*$s); + $this->idx--; + return $etime-$this->start[$this->idx]; + } +} // Class + +$gJpgBrandTiming = BRAND_TIMING; +//=================================================== +// CLASS DateLocale +// Description: Hold localized text used in dates +//=================================================== +class DateLocale { + + var $iLocale = 'C'; // environmental locale be used by default + + var $iDayAbb = null; + var $iShortDay = null; + var $iShortMonth = null; + var $iMonthName = null; + +//--------------- +// CONSTRUCTOR + function DateLocale() { + settype($this->iDayAbb, 'array'); + settype($this->iShortDay, 'array'); + settype($this->iShortMonth, 'array'); + settype($this->iMonthName, 'array'); + + + $this->Set('C'); + } + +//--------------- +// PUBLIC METHODS + function Set($aLocale) { + if ( in_array($aLocale, array_keys($this->iDayAbb)) ){ + $this->iLocale = $aLocale; + return TRUE; // already cached nothing else to do! + } + + $pLocale = setlocale(LC_TIME, 0); // get current locale for LC_TIME + + if (is_array($aLocale)) { + foreach ($aLocale as $loc) { + $res = @setlocale(LC_TIME, $loc); + if ( $res ) { + $aLocale = $loc; + break; + } + } + } + else { + $res = @setlocale(LC_TIME, $aLocale); + } + if ( ! $res ){ + JpGraphError::RaiseL(25007,$aLocale); +//("You are trying to use the locale ($aLocale) which your PHP installation does not support. Hint: Use '' to indicate the default locale for this geographic region."); + return FALSE; + } + + $this->iLocale = $aLocale; + + for ( $i = 0, $ofs = 0 - strftime('%w'); $i < 7; $i++, $ofs++ ){ + $day = strftime('%a', strtotime("$ofs day")); + $day{0} = strtoupper($day{0}); + $this->iDayAbb[$aLocale][]= $day{0}; + $this->iShortDay[$aLocale][]= $day; + } + + for($i=1; $i<=12; ++$i) { + list($short ,$full) = explode('|', strftime("%b|%B",strtotime("2001-$i-01"))); + $this->iShortMonth[$aLocale][] = ucfirst($short); + $this->iMonthName [$aLocale][] = ucfirst($full); + } + + // Return to original locale + setlocale(LC_TIME, $pLocale); + + return TRUE; + } + + + function GetDayAbb() { + return $this->iDayAbb[$this->iLocale]; + } + + function GetShortDay() { + return $this->iShortDay[$this->iLocale]; + } + + function GetShortMonth() { + return $this->iShortMonth[$this->iLocale]; + } + + function GetShortMonthName($aNbr) { + return $this->iShortMonth[$this->iLocale][$aNbr]; + } + + function GetLongMonthName($aNbr) { + return $this->iMonthName[$this->iLocale][$aNbr]; + } + + function GetMonth() { + return $this->iMonthName[$this->iLocale]; + } +} + +$gDateLocale = new DateLocale(); +$gJpgDateLocale = new DateLocale(); + + +//======================================================= +// CLASS Footer +// Description: Encapsulates the footer line in the Graph +//======================================================= +class Footer { + var $left,$center,$right; + var $iLeftMargin = 3; + var $iRightMargin = 3; + var $iBottomMargin = 3; + + function Footer() { + $this->left = new Text(); + $this->left->ParagraphAlign('left'); + $this->center = new Text(); + $this->center->ParagraphAlign('center'); + $this->right = new Text(); + $this->right->ParagraphAlign('right'); + } + + function Stroke(&$aImg) { + $y = $aImg->height - $this->iBottomMargin; + $x = $this->iLeftMargin; + $this->left->Align('left','bottom'); + $this->left->Stroke($aImg,$x,$y); + + $x = ($aImg->width - $this->iLeftMargin - $this->iRightMargin)/2; + $this->center->Align('center','bottom'); + $this->center->Stroke($aImg,$x,$y); + + $x = $aImg->width - $this->iRightMargin; + $this->right->Align('right','bottom'); + $this->right->Stroke($aImg,$x,$y); + } +} + + +//=================================================== +// CLASS Graph +// Description: Main class to handle graphs +//=================================================== +class Graph { + var $cache=null; // Cache object (singleton) + var $img=null; // Img object (singleton) + var $plots=array(); // Array of all plot object in the graph (for Y 1 axis) + var $y2plots=array();// Array of all plot object in the graph (for Y 2 axis) + var $ynplots=array(); + var $xscale=null; // X Scale object (could be instance of LinearScale or LogScale + var $yscale=null,$y2scale=null, $ynscale=array(); + var $iIcons = array(); // Array of Icons to add to + var $cache_name; // File name to be used for the current graph in the cache directory + var $xgrid=null; // X Grid object (linear or logarithmic) + var $ygrid=null,$y2grid=null; + var $doframe=true,$frame_color=array(0,0,0), $frame_weight=1; // Frame around graph + var $boxed=false, $box_color=array(0,0,0), $box_weight=1; // Box around plot area + var $doshadow=false,$shadow_width=4,$shadow_color=array(102,102,102); // Shadow for graph + var $xaxis=null; // X-axis (instane of Axis class) + var $yaxis=null, $y2axis=null, $ynaxis=array(); // Y axis (instance of Axis class) + var $margin_color=array(200,200,200); // Margin color of graph + var $plotarea_color=array(255,255,255); // Plot area color + var $title,$subtitle,$subsubtitle; // Title and subtitle(s) text object + var $axtype="linlin"; // Type of axis + var $xtick_factor,$ytick_factor; // Factot to determine the maximum number of ticks depending on the plot with + var $texts=null, $y2texts=null; // Text object to ge shown in the graph + var $lines=null, $y2lines=null; + var $bands=null, $y2bands=null; + var $text_scale_off=0, $text_scale_abscenteroff=-1; // Text scale offset in fractions and for centering bars in absolute pixels + var $background_image="",$background_image_type=-1,$background_image_format="png"; + var $inline; + var $showcsim=0,$csimcolor="red"; //debug stuff, draw the csim boundaris on the image if <>0 + var $grid_depth=DEPTH_BACK; // Draw grid under all plots as default + var $iAxisStyle = AXSTYLE_SIMPLE; + var $iCSIMdisplay=false,$iHasStroked = false; + var $footer; + var $csimcachename = '', $csimcachetimeout = 0, $iCSIMImgAlt=''; + var $iDoClipping = false; + var $y2orderback=true; + var $tabtitle; + var $bkg_gradtype=-1,$bkg_gradstyle=BGRAD_MARGIN; + var $bkg_gradfrom='navy', $bkg_gradto='silver'; + var $titlebackground = false; + var $titlebackground_color = 'lightblue', + $titlebackground_style = 1, + $titlebackground_framecolor = 'blue', + $titlebackground_framestyle = 2, + $titlebackground_frameweight = 1, + $titlebackground_bevelheight = 3 ; + var $titlebkg_fillstyle=TITLEBKG_FILLSTYLE_SOLID; + var $titlebkg_scolor1='black',$titlebkg_scolor2='white'; + var $framebevel = false, $framebeveldepth = 2 ; + var $framebevelborder = false, $framebevelbordercolor='black'; + var $framebevelcolor1='white@0.4', $framebevelcolor2='black@0.4'; + var $background_image_mix=100; + var $background_cflag = ''; + var $background_cflag_type = BGIMG_FILLPLOT; + var $background_cflag_mix = 100; + var $iImgTrans=false, + $iImgTransHorizon = 100,$iImgTransSkewDist=150, + $iImgTransDirection = 1, $iImgTransMinSize = true, + $iImgTransFillColor='white',$iImgTransHighQ=false, + $iImgTransBorder=false,$iImgTransHorizonPos=0.5; + var $iYAxisDeltaPos=50; + var $iIconDepth=DEPTH_BACK; + var $iAxisLblBgType = 0, + $iXAxisLblBgFillColor = 'lightgray', $iXAxisLblBgColor = 'black', + $iYAxisLblBgFillColor = 'lightgray', $iYAxisLblBgColor = 'black'; + var $iTables=NULL; + var $legend; + +//--------------- +// CONSTRUCTOR + + // aWIdth Width in pixels of image + // aHeight Height in pixels of image + // aCachedName Name for image file in cache directory + // aTimeOut Timeout in minutes for image in cache + // aInline If true the image is streamed back in the call to Stroke() + // If false the image is just created in the cache + function Graph($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { + GLOBAL $gJpgBrandTiming; + // If timing is used create a new timing object + if( $gJpgBrandTiming ) { + global $tim; + $tim = new JpgTimer(); + $tim->Push(); + } + + if( !is_numeric($aWidth) || !is_numeric($aHeight) ) { + JpGraphError::RaiseL(25008);//('Image width/height argument in Graph::Graph() must be numeric'); + } + + // Automatically generate the image file name based on the name of the script that + // generates the graph + if( $aCachedName=="auto" ) + $aCachedName=GenImgName(); + + // Should the image be streamed back to the browser or only to the cache? + $this->inline=$aInline; + + $this->img = new RotImage($aWidth,$aHeight); + + $this->cache = new ImgStreamCache($this->img); + $this->cache->SetTimeOut($aTimeOut); + + $this->title = new Text(); + $this->title->ParagraphAlign('center'); + $this->title->SetFont(FF_FONT2,FS_BOLD); + $this->title->SetMargin(3); + $this->title->SetAlign('center'); + + $this->subtitle = new Text(); + $this->subtitle->ParagraphAlign('center'); + $this->subtitle->SetMargin(2); + $this->subtitle->SetAlign('center'); + + $this->subsubtitle = new Text(); + $this->subsubtitle->ParagraphAlign('center'); + $this->subsubtitle->SetMargin(2); + $this->subsubtitle->SetAlign('center'); + + $this->legend = new Legend(); + $this->footer = new Footer(); + + // Window doesn't like '?' in the file name so replace it with an '_' + $aCachedName = str_replace("?","_",$aCachedName); + + // If the cached version exist just read it directly from the + // cache, stream it back to browser and exit + if( $aCachedName!="" && READ_CACHE && $aInline ) + if( $this->cache->GetAndStream($aCachedName) ) { + exit(); + } + + $this->cache_name = $aCachedName; + $this->SetTickDensity(); // Normal density + + $this->tabtitle = new GraphTabTitle(); + } +//--------------- +// PUBLIC METHODS + // Enable final image perspective transformation + function Set3DPerspective($aDir=1,$aHorizon=100,$aSkewDist=120,$aQuality=false,$aFillColor='#FFFFFF',$aBorder=false,$aMinSize=true,$aHorizonPos=0.5) { + $this->iImgTrans = true; + $this->iImgTransHorizon = $aHorizon; + $this->iImgTransSkewDist= $aSkewDist; + $this->iImgTransDirection = $aDir; + $this->iImgTransMinSize = $aMinSize; + $this->iImgTransFillColor=$aFillColor; + $this->iImgTransHighQ=$aQuality; + $this->iImgTransBorder=$aBorder; + $this->iImgTransHorizonPos=$aHorizonPos; + } + + // Set Image format and optional quality + function SetImgFormat($aFormat,$aQuality=75) { + $this->img->SetImgFormat($aFormat,$aQuality); + } + + // Should the grid be in front or back of the plot? + function SetGridDepth($aDepth) { + $this->grid_depth=$aDepth; + } + + function SetIconDepth($aDepth) { + $this->iIconDepth=$aDepth; + } + + // Specify graph angle 0-360 degrees. + function SetAngle($aAngle) { + $this->img->SetAngle($aAngle); + } + + function SetAlphaBlending($aFlg=true) { + $this->img->SetAlphaBlending($aFlg); + } + + // Shortcut to image margin + function SetMargin($lm,$rm,$tm,$bm) { + $this->img->SetMargin($lm,$rm,$tm,$bm); + } + + function SetY2OrderBack($aBack=true) { + $this->y2orderback = $aBack; + } + + // Rotate the graph 90 degrees and set the margin + // when we have done a 90 degree rotation + function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { + $lm = $lm ==0 ? floor(0.2 * $this->img->width) : $lm ; + $rm = $rm ==0 ? floor(0.1 * $this->img->width) : $rm ; + $tm = $tm ==0 ? floor(0.2 * $this->img->height) : $tm ; + $bm = $bm ==0 ? floor(0.1 * $this->img->height) : $bm ; + + $adj = ($this->img->height - $this->img->width)/2; + $this->img->SetMargin($tm-$adj,$bm-$adj,$rm+$adj,$lm+$adj); + $this->img->SetCenter(floor($this->img->width/2),floor($this->img->height/2)); + $this->SetAngle(90); + if( empty($this->yaxis) || empty($this->xaxis) ) { + JpgraphError::RaiseL(25009);//('You must specify what scale to use with a call to Graph::SetScale()'); + } + $this->xaxis->SetLabelAlign('right','center'); + $this->yaxis->SetLabelAlign('center','bottom'); + } + + function SetClipping($aFlg=true) { + $this->iDoClipping = $aFlg ; + } + + // Add a plot object to the graph + function Add(&$aPlot) { + if( $aPlot == null ) + JpGraphError::RaiseL(25010);//("Graph::Add() You tried to add a null plot to the graph."); + if( is_array($aPlot) && count($aPlot) > 0 ) + $cl = $aPlot[0]; + else + $cl = $aPlot; + + if( is_a($cl,'Text') ) + $this->AddText($aPlot); + elseif( is_a($cl,'PlotLine') ) + $this->AddLine($aPlot); + elseif( is_a($cl,'PlotBand') ) + $this->AddBand($aPlot); + elseif( is_a($cl,'IconPlot') ) + $this->AddIcon($aPlot); + elseif( is_a($cl,'GTextTable') ) + $this->AddTable($aPlot); + else + $this->plots[] = &$aPlot; + } + + + function AddTable(&$aTable) { + if( is_array($aTable) ) { + for($i=0; $i < count($aTable); ++$i ) + $this->iTables[]=&$aTable[$i]; + } + else { + $this->iTables[] = &$aTable ; + } + } + + function AddIcon(&$aIcon) { + if( is_array($aIcon) ) { + for($i=0; $i < count($aIcon); ++$i ) + $this->iIcons[]=&$aIcon[$i]; + } + else { + $this->iIcons[] = &$aIcon ; + } + } + + // Add plot to second Y-scale + function AddY2(&$aPlot) { + if( $aPlot == null ) + JpGraphError::RaiseL(25011);//("Graph::AddY2() You tried to add a null plot to the graph."); + + if( is_array($aPlot) && count($aPlot) > 0 ) + $cl = $aPlot[0]; + else + $cl = $aPlot; + + if( is_a($cl,'Text') ) + $this->AddText($aPlot,true); + elseif( is_a($cl,'PlotLine') ) + $this->AddLine($aPlot,true); + elseif( is_a($cl,'PlotBand') ) + $this->AddBand($aPlot,true); + else + $this->y2plots[] = &$aPlot; + } + + // Add plot to second Y-scale + function AddY($aN,&$aPlot) { + + if( $aPlot == null ) + JpGraphError::RaiseL(25012);//("Graph::AddYN() You tried to add a null plot to the graph."); + + if( is_array($aPlot) && count($aPlot) > 0 ) + $cl = $aPlot[0]; + else + $cl = $aPlot; + + if( is_a($cl,'Text') || is_a($cl,'PlotLine') || is_a($cl,'PlotBand') ) + JpGraph::RaiseL(25013);//('You can only add standard plots to multiple Y-axis'); + else + $this->ynplots[$aN][] = &$aPlot; + } + + // Add text object to the graph + function AddText(&$aTxt,$aToY2=false) { + if( $aTxt == null ) + JpGraphError::RaiseL(25014);//("Graph::AddText() You tried to add a null text to the graph."); + if( $aToY2 ) { + if( is_array($aTxt) ) { + for($i=0; $i < count($aTxt); ++$i ) + $this->y2texts[]=&$aTxt[$i]; + } + else + $this->y2texts[] = &$aTxt; + } + else { + if( is_array($aTxt) ) { + for($i=0; $i < count($aTxt); ++$i ) + $this->texts[]=&$aTxt[$i]; + } + else + $this->texts[] = &$aTxt; + } + } + + // Add a line object (class PlotLine) to the graph + function AddLine(&$aLine,$aToY2=false) { + if( $aLine == null ) + JpGraphError::RaiseL(25015);//("Graph::AddLine() You tried to add a null line to the graph."); + + if( $aToY2 ) { + if( is_array($aLine) ) { + for($i=0; $i < count($aLine); ++$i ) + $this->y2lines[]=&$aLine[$i]; + } + else + $this->y2lines[] = &$aLine; + } + else { + if( is_array($aLine) ) { + for($i=0; $i < count($aLine); ++$i ) + $this->lines[]=&$aLine[$i]; + } + else + $this->lines[] = &$aLine; + } + } + + // Add vertical or horizontal band + function AddBand(&$aBand,$aToY2=false) { + if( $aBand == null ) + JpGraphError::RaiseL(25016);//(" Graph::AddBand() You tried to add a null band to the graph."); + + if( $aToY2 ) { + if( is_array($aBand) ) { + for($i=0; $i < count($aBand); ++$i ) + $this->y2bands[] = &$aBand[$i]; + } + else + $this->y2bands[] = &$aBand; + } + else { + if( is_array($aBand) ) { + for($i=0; $i < count($aBand); ++$i ) + $this->bands[] = &$aBand[$i]; + } + else + $this->bands[] = &$aBand; + } + } + + function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=2,$aStyle=BGRAD_FRAME) { + $this->bkg_gradtype=$aGradType; + $this->bkg_gradstyle=$aStyle; + $this->bkg_gradfrom = $aFrom; + $this->bkg_gradto = $aTo; + } + + // Set a country flag in the background + function SetBackgroundCFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { + $this->background_cflag = $aName; + $this->background_cflag_type = $aBgType; + $this->background_cflag_mix = $aMix; + } + + // Alias for the above method + function SetBackgroundCountryFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) { + $this->background_cflag = $aName; + $this->background_cflag_type = $aBgType; + $this->background_cflag_mix = $aMix; + } + + + // Specify a background image + function SetBackgroundImage($aFileName,$aBgType=BGIMG_FILLPLOT,$aImgFormat="auto") { + + // Get extension to determine image type + if( $aImgFormat == "auto" ) { + $e = explode('.',$aFileName); + if( !$e ) { + JpGraphError::RaiseL(25018,$aFileName);//('Incorrect file name for Graph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); + } + + $valid_formats = array('png', 'jpg', 'gif'); + $aImgFormat = strtolower($e[count($e)-1]); + if ($aImgFormat == 'jpeg') { + $aImgFormat = 'jpg'; + } + elseif (!in_array($aImgFormat, $valid_formats) ) { + JpGraphError::RaiseL(25019,$aImgFormat);//('Unknown file extension ($aImgFormat) in Graph::SetBackgroundImage() for filename: '.$aFileName); + } + } + + $this->background_image = $aFileName; + $this->background_image_type=$aBgType; + $this->background_image_format=$aImgFormat; + } + + function SetBackgroundImageMix($aMix) { + $this->background_image_mix = $aMix ; + } + + // Specify axis style (boxed or single) + function SetAxisStyle($aStyle) { + $this->iAxisStyle = $aStyle ; + } + + // Set a frame around the plot area + function SetBox($aDrawPlotFrame=true,$aPlotFrameColor=array(0,0,0),$aPlotFrameWeight=1) { + $this->boxed = $aDrawPlotFrame; + $this->box_weight = $aPlotFrameWeight; + $this->box_color = $aPlotFrameColor; + } + + // Specify color for the plotarea (not the margins) + function SetColor($aColor) { + $this->plotarea_color=$aColor; + } + + // Specify color for the margins (all areas outside the plotarea) + function SetMarginColor($aColor) { + $this->margin_color=$aColor; + } + + // Set a frame around the entire image + function SetFrame($aDrawImgFrame=true,$aImgFrameColor=array(0,0,0),$aImgFrameWeight=1) { + $this->doframe = $aDrawImgFrame; + $this->frame_color = $aImgFrameColor; + $this->frame_weight = $aImgFrameWeight; + } + + function SetFrameBevel($aDepth=3,$aBorder=false,$aBorderColor='black',$aColor1='white@0.4',$aColor2='darkgray@0.4',$aFlg=true) { + $this->framebevel = $aFlg ; + $this->framebeveldepth = $aDepth ; + $this->framebevelborder = $aBorder ; + $this->framebevelbordercolor = $aBorderColor ; + $this->framebevelcolor1 = $aColor1 ; + $this->framebevelcolor2 = $aColor2 ; + + $this->doshadow = false ; + } + + // Set the shadow around the whole image + function SetShadow($aShowShadow=true,$aShadowWidth=5,$aShadowColor=array(102,102,102)) { + $this->doshadow = $aShowShadow; + $this->shadow_color = $aShadowColor; + $this->shadow_width = $aShadowWidth; + $this->footer->iBottomMargin += $aShadowWidth; + $this->footer->iRightMargin += $aShadowWidth; + } + + // Specify x,y scale. Note that if you manually specify the scale + // you must also specify the tick distance with a call to Ticks::Set() + function SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1) { + $this->axtype = $aAxisType; + + if( $aYMax < $aYMin || $aXMax < $aXMin ) + JpGraphError::RaiseL(25020);//('Graph::SetScale(): Specified Max value must be larger than the specified Min value.'); + + $yt=substr($aAxisType,-3,3); + if( $yt=="lin" ) + $this->yscale = new LinearScale($aYMin,$aYMax); + elseif( $yt == "int" ) { + $this->yscale = new LinearScale($aYMin,$aYMax); + $this->yscale->SetIntScale(); + } + elseif( $yt=="log" ) + $this->yscale = new LogScale($aYMin,$aYMax); + else + JpGraphError::RaiseL(25021,$aAxisType);//("Unknown scale specification for Y-scale. ($aAxisType)"); + + $xt=substr($aAxisType,0,3); + if( $xt == "lin" || $xt == "tex" ) { + $this->xscale = new LinearScale($aXMin,$aXMax,"x"); + $this->xscale->textscale = ($xt == "tex"); + } + elseif( $xt == "int" ) { + $this->xscale = new LinearScale($aXMin,$aXMax,"x"); + $this->xscale->SetIntScale(); + } + elseif( $xt == "dat" ) { + $this->xscale = new DateScale($aXMin,$aXMax,"x"); + } + elseif( $xt == "log" ) + $this->xscale = new LogScale($aXMin,$aXMax,"x"); + else + JpGraphError::RaiseL(25022,$aAxisType);//(" Unknown scale specification for X-scale. ($aAxisType)"); + + $this->xaxis = new Axis($this->img,$this->xscale); + $this->yaxis = new Axis($this->img,$this->yscale); + $this->xgrid = new Grid($this->xaxis); + $this->ygrid = new Grid($this->yaxis); + $this->ygrid->Show(); + } + + // Specify secondary Y scale + function SetY2Scale($aAxisType="lin",$aY2Min=1,$aY2Max=1) { + if( $aAxisType=="lin" ) + $this->y2scale = new LinearScale($aY2Min,$aY2Max); + elseif( $aAxisType == "int" ) { + $this->y2scale = new LinearScale($aY2Min,$aY2Max); + $this->y2scale->SetIntScale(); + } + elseif( $aAxisType=="log" ) { + $this->y2scale = new LogScale($aY2Min,$aY2Max); + } + else JpGraphError::RaiseL(25023,$aAxisType);//("JpGraph: Unsupported Y2 axis type: $aAxisType\nMust be one of (lin,log,int)"); + + $this->y2axis = new Axis($this->img,$this->y2scale); + $this->y2axis->scale->ticks->SetDirection(SIDE_LEFT); + $this->y2axis->SetLabelSide(SIDE_RIGHT); + $this->y2axis->SetPos('max'); + $this->y2axis->SetTitleSide(SIDE_RIGHT); + + // Deafult position is the max x-value + $this->y2grid = new Grid($this->y2axis); + } + + // Set the delta position (in pixels) between the multiple Y-axis + function SetYDeltaDist($aDist) { + $this->iYAxisDeltaPos = $aDist; + } + + // Specify secondary Y scale + function SetYScale($aN,$aAxisType="lin",$aYMin=1,$aYMax=1) { + + if( $aAxisType=="lin" ) + $this->ynscale[$aN] = new LinearScale($aYMin,$aYMax); + elseif( $aAxisType == "int" ) { + $this->ynscale[$aN] = new LinearScale($aYMin,$aYMax); + $this->ynscale[$aN]->SetIntScale(); + } + elseif( $aAxisType=="log" ) { + $this->ynscale[$aN] = new LogScale($aYMin,$aYMax); + } + else JpGraphError::RaiseL(25024,$aAxisType);//("JpGraph: Unsupported Y axis type: $aAxisType\nMust be one of (lin,log,int)"); + + $this->ynaxis[$aN] = new Axis($this->img,$this->ynscale[$aN]); + $this->ynaxis[$aN]->scale->ticks->SetDirection(SIDE_LEFT); + $this->ynaxis[$aN]->SetLabelSide(SIDE_RIGHT); + } + + + // Specify density of ticks when autoscaling 'normal', 'dense', 'sparse', 'verysparse' + // The dividing factor have been determined heuristically according to my aesthetic + // sense (or lack off) y.m.m.v ! + function SetTickDensity($aYDensity=TICKD_NORMAL,$aXDensity=TICKD_NORMAL) { + $this->xtick_factor=30; + $this->ytick_factor=25; + switch( $aYDensity ) { + case TICKD_DENSE: + $this->ytick_factor=12; + break; + case TICKD_NORMAL: + $this->ytick_factor=25; + break; + case TICKD_SPARSE: + $this->ytick_factor=40; + break; + case TICKD_VERYSPARSE: + $this->ytick_factor=100; + break; + default: + JpGraphError::RaiseL(25025,$densy);//("JpGraph: Unsupported Tick density: $densy"); + } + switch( $aXDensity ) { + case TICKD_DENSE: + $this->xtick_factor=15; + break; + case TICKD_NORMAL: + $this->xtick_factor=30; + break; + case TICKD_SPARSE: + $this->xtick_factor=45; + break; + case TICKD_VERYSPARSE: + $this->xtick_factor=60; + break; + default: + JpGraphError::RaiseL(25025,$densx);//("JpGraph: Unsupported Tick density: $densx"); + } + } + + + // Get a string of all image map areas + function GetCSIMareas() { + if( !$this->iHasStroked ) + $this->Stroke(_CSIM_SPECIALFILE); + + $csim = $this->title->GetCSIMAreas(); + $csim .= $this->subtitle->GetCSIMAreas(); + $csim .= $this->subsubtitle->GetCSIMAreas(); + $csim .= $this->legend->GetCSIMAreas(); + + if( $this->y2axis != NULL ) { + $csim .= $this->y2axis->title->GetCSIMAreas(); + } + + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i ) { + $csim .= $this->texts[$i]->GetCSIMAreas(); + } + } + + if( $this->y2texts != null && $this->y2scale != null ) { + $n = count($this->y2texts); + for($i=0; $i < $n; ++$i ) { + $csim .= $this->y2texts[$i]->GetCSIMAreas(); + } + } + + if( $this->yaxis != null && $this->xaxis != null ) { + $csim .= $this->yaxis->title->GetCSIMAreas(); + $csim .= $this->xaxis->title->GetCSIMAreas(); + } + + $n = count($this->plots); + for( $i=0; $i < $n; ++$i ) + $csim .= $this->plots[$i]->GetCSIMareas(); + + $n = count($this->y2plots); + for( $i=0; $i < $n; ++$i ) + $csim .= $this->y2plots[$i]->GetCSIMareas(); + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $m = count($this->ynplots[$i]); + for($j=0; $j < $m; ++$j ) { + $csim .= $this->ynplots[$i][$j]->GetCSIMareas(); + } + } + + $n = count($this->iTables); + for( $i=0; $i < $n; ++$i ) { + $csim .= $this->iTables[$i]->GetCSIMareas(); + } + + return $csim; + } + + // Get a complete .. tag for the final image map + function GetHTMLImageMap($aMapName) { + $im = "\n"; + $im .= $this->GetCSIMareas(); + $im .= ""; + return $im; + } + + function CheckCSIMCache($aCacheName,$aTimeOut=60) { + global $_SERVER; + + if( $aCacheName=='auto' ) + $aCacheName=basename($_SERVER['PHP_SELF']); + + $urlarg = $this->GetURLArguments(); + $this->csimcachename = CSIMCACHE_DIR.$aCacheName.$urlarg; + $this->csimcachetimeout = $aTimeOut; + + // First determine if we need to check for a cached version + // This differs from the standard cache in the sense that the + // image and CSIM map HTML file is written relative to the directory + // the script executes in and not the specified cache directory. + // The reason for this is that the cache directory is not necessarily + // accessible from the HTTP server. + if( $this->csimcachename != '' ) { + $dir = dirname($this->csimcachename); + $base = basename($this->csimcachename); + $base = strtok($base,'.'); + $suffix = strtok('.'); + $basecsim = $dir.'/'.$base.'?'.$urlarg.'_csim_.html'; + $baseimg = $dir.'/'.$base.'?'.$urlarg.'.'.$this->img->img_format; + + $timedout=false; + // Does it exist at all ? + + if( file_exists($basecsim) && file_exists($baseimg) ) { + // Check that it hasn't timed out + $diff=time()-filemtime($basecsim); + if( $this->csimcachetimeout>0 && ($diff > $this->csimcachetimeout*60) ) { + $timedout=true; + @unlink($basecsim); + @unlink($baseimg); + } + else { + if ($fh = @fopen($basecsim, "r")) { + fpassthru($fh); + return true; + } + else + JpGraphError::RaiseL(25027,$basecsim);//(" Can't open cached CSIM \"$basecsim\" for reading."); + } + } + } + return false; + } + + // Build the argument string to be used with the csim images + function GetURLArguments() { + + // This is a JPGRAPH internal defined that prevents + // us from recursively coming here again + $urlarg = _CSIM_DISPLAY.'=1'; + + // Now reconstruct any user URL argument + reset($_GET); + while( list($key,$value) = each($_GET) ) { + if( is_array($value) ) { + foreach ( $value as $k => $v ) { + $urlarg .= '&'.$key.'%5B'.$k.'%5D='.urlencode($v); + } + } + else { + $urlarg .= '&'.$key.'='.urlencode($value); + } + } + + // It's not ideal to convert POST argument to GET arguments + // but there is little else we can do. One idea for the + // future might be recreate the POST header in case. + reset($_POST); + while( list($key,$value) = each($_POST) ) { + if( is_array($value) ) { + foreach ( $value as $k => $v ) { + $urlarg .= '&'.$key.'%5B'.$k.'%5D='.urlencode($v); + } + } + else { + $urlarg .= '&'.$key.'='.urlencode($value); + } + } + + return $urlarg; + } + + function SetCSIMImgAlt($aAlt) { + $this->iCSIMImgAlt = $aAlt; + } + + function StrokeCSIM($aScriptName='auto',$aCSIMName='',$aBorder=0) { + if( $aCSIMName=='' ) { + // create a random map name + srand ((double) microtime() * 1000000); + $r = rand(0,100000); + $aCSIMName='__mapname'.$r.'__'; + } + + if( $aScriptName=='auto' ) + $aScriptName=basename($_SERVER['PHP_SELF']); + + $urlarg = $this->GetURLArguments(); + + if( empty($_GET[_CSIM_DISPLAY]) ) { + // First determine if we need to check for a cached version + // This differs from the standard cache in the sense that the + // image and CSIM map HTML file is written relative to the directory + // the script executes in and not the specified cache directory. + // The reason for this is that the cache directory is not necessarily + // accessible from the HTTP server. + if( $this->csimcachename != '' ) { + $dir = dirname($this->csimcachename); + $base = basename($this->csimcachename); + $base = strtok($base,'.'); + $suffix = strtok('.'); + $basecsim = $dir.'/'.$base.'?'.$urlarg.'_csim_.html'; + $baseimg = $base.'?'.$urlarg.'.'.$this->img->img_format; + + // Check that apache can write to directory specified + + if( file_exists($dir) && !is_writeable($dir) ) { + JpgraphError::RaiseL(25028,$dir);//('Apache/PHP does not have permission to write to the CSIM cache directory ('.$dir.'). Check permissions.'); + } + + // Make sure directory exists + $this->cache->MakeDirs($dir); + + // Write the image file + $this->Stroke(CSIMCACHE_DIR.$baseimg); + + // Construct wrapper HTML and write to file and send it back to browser + + // In the src URL we must replace the '?' with its encoding to prevent the arguments + // to be converted to real arguments. + $tmp = str_replace('?','%3f',$baseimg); + $htmlwrap = $this->GetHTMLImageMap($aCSIMName)."\n". + '\"".$this-iCSIMImgAlt."\" />\n"; + + if($fh = @fopen($basecsim,'w') ) { + fwrite($fh,$htmlwrap); + fclose($fh); + echo $htmlwrap; + } + else + JpGraphError::RaiseL(25029,$basecsim);//(" Can't write CSIM \"$basecsim\" for writing. Check free space and permissions."); + } + else { + + if( $aScriptName=='' ) { + JpGraphError::RaiseL(25030);//('Missing script name in call to StrokeCSIM(). You must specify the name of the actual image script as the first parameter to StrokeCSIM().'); + } + echo $this->GetHTMLImageMap($aCSIMName); + echo "\"".$this-iCSIMImgAlt."\" />\n"; + } + } + else { + $this->Stroke(); + } + } + + function GetTextsYMinMax($aY2=false) { + if( $aY2 ) + $txts = $this->y2texts; + else + $txts = $this->texts; + $n = count($txts); + $min=null; + $max=null; + for( $i=0; $i < $n; ++$i ) { + if( $txts[$i]->iScalePosY !== null && + $txts[$i]->iScalePosX !== null ) { + if( $min === null ) { + $min = $max = $txts[$i]->iScalePosY ; + } + else { + $min = min($min,$txts[$i]->iScalePosY); + $max = max($max,$txts[$i]->iScalePosY); + } + } + } + if( $min !== null ) { + return array($min,$max); + } + else + return null; + } + + function GetTextsXMinMax($aY2=false) { + if( $aY2 ) + $txts = $this->y2texts; + else + $txts = $this->texts; + $n = count($txts); + $min=null; + $max=null; + for( $i=0; $i < $n; ++$i ) { + if( $txts[$i]->iScalePosY !== null && + $txts[$i]->iScalePosX !== null ) { + if( $min === null ) { + $min = $max = $txts[$i]->iScalePosX ; + } + else { + $min = min($min,$txts[$i]->iScalePosX); + $max = max($max,$txts[$i]->iScalePosX); + } + } + } + if( $min !== null ) { + return array($min,$max); + } + else + return null; + } + + function GetXMinMax() { + list($min,$ymin) = $this->plots[0]->Min(); + list($max,$ymax) = $this->plots[0]->Max(); + foreach( $this->plots as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + $min = Min($xmin,$min); + $max = Max($xmax,$max); + } + + if( $this->y2axis != null ) { + foreach( $this->y2plots as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + $min = Min($xmin,$min); + $max = Max($xmax,$max); + } + } + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null) { + foreach( $this->ynplots[$i] as $p ) { + list($xmin,$ymin) = $p->Min(); + list($xmax,$ymax) = $p->Max(); + $min = Min($xmin,$min); + $max = Max($xmax,$max); + } + } + } + + return array($min,$max); + } + + function AdjustMarginsForTitles() { + $totrequired = + ($this->title->t != '' ? + $this->title->GetTextHeight($this->img) + $this->title->margin + 5 : 0 ) + + ($this->subtitle->t != '' ? + $this->subtitle->GetTextHeight($this->img) + $this->subtitle->margin + 5 : 0 ) + + ($this->subsubtitle->t != '' ? + $this->subsubtitle->GetTextHeight($this->img) + $this->subsubtitle->margin + 5 : 0 ) ; + + + $btotrequired = 0; + if($this->xaxis != null && !$this->xaxis->hide && !$this->xaxis->hide_labels ) { + // Minimum bottom margin + if( $this->xaxis->title->t != '' ) { + if( $this->img->a == 90 ) + $btotrequired = $this->yaxis->title->GetTextHeight($this->img) + 5 ; + else + $btotrequired = $this->xaxis->title->GetTextHeight($this->img) + 5 ; + } + else + $btotrequired = 0; + + if( $this->img->a == 90 ) { + $this->img->SetFont($this->yaxis->font_family,$this->yaxis->font_style, + $this->yaxis->font_size); + $lh = $this->img->GetTextHeight('Mg',$this->yaxis->label_angle); + } + else { + $this->img->SetFont($this->xaxis->font_family,$this->xaxis->font_style, + $this->xaxis->font_size); + $lh = $this->img->GetTextHeight('Mg',$this->xaxis->label_angle); + } + + $btotrequired += $lh + 5; + } + + if( $this->img->a == 90 ) { + // DO Nothing. It gets too messy to do this properly for 90 deg... + } + else{ + if( $this->img->top_margin < $totrequired ) { + $this->SetMargin($this->img->left_margin,$this->img->right_margin, + $totrequired,$this->img->bottom_margin); + } + if( $this->img->bottom_margin < $btotrequired ) { + $this->SetMargin($this->img->left_margin,$this->img->right_margin, + $this->img->top_margin,$btotrequired); + } + } + } + + // Stroke the graph + // $aStrokeFileName If != "" the image will be written to this file and NOT + // streamed back to the browser + function Stroke($aStrokeFileName="") { + + // Fist make a sanity check that user has specified a scale + if( empty($this->yscale) ) { + JpGraphError::RaiseL(25031);//('You must specify what scale to use with a call to Graph::SetScale().'); + } + + // Start by adjusting the margin so that potential titles will fit. + $this->AdjustMarginsForTitles(); + + // Setup scale constants + if( $this->yscale ) $this->yscale->InitConstants($this->img); + if( $this->xscale ) $this->xscale->InitConstants($this->img); + if( $this->y2scale ) $this->y2scale->InitConstants($this->img); + + $n=count($this->ynscale); + for($i=0; $i < $n; ++$i) { + if( $this->ynscale[$i] ) $this->ynscale[$i]->InitConstants($this->img); + } + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + // Do any pre-stroke adjustment that is needed by the different plot types + // (i.e bar plots want's to add an offset to the x-labels etc) + for($i=0; $i < count($this->plots) ; ++$i ) { + $this->plots[$i]->PreStrokeAdjust($this); + $this->plots[$i]->DoLegend($this); + } + + // Any plots on the second Y scale? + if( $this->y2scale != null ) { + for($i=0; $iy2plots) ; ++$i ) { + $this->y2plots[$i]->PreStrokeAdjust($this); + $this->y2plots[$i]->DoLegend($this); + } + } + + // Any plots on the extra Y axises? + $n = count($this->ynaxis); + for($i=0; $i<$n ; ++$i ) { + if( $this->ynplots == null || $this->ynplots[$i] == null) { + JpGraphError::RaiseL(25032,$i);//("No plots for Y-axis nbr:$i"); + } + $m = count($this->ynplots[$i]); + for($j=0; $j < $m; ++$j ) { + $this->ynplots[$i][$j]->PreStrokeAdjust($this); + $this->ynplots[$i][$j]->DoLegend($this); + } + } + + + // Bail out if any of the Y-axis not been specified and + // has no plots. (This means it is impossible to do autoscaling and + // no other scale was given so we can't possible draw anything). If you use manual + // scaling you also have to supply the tick steps as well. + if( (!$this->yscale->IsSpecified() && count($this->plots)==0) || + ($this->y2scale!=null && !$this->y2scale->IsSpecified() && count($this->y2plots)==0) ) { + //$e = "n=".count($this->y2plots)."\n"; + // $e = "Can't draw unspecified Y-scale.
    \nYou have either:
    \n"; + // $e .= "1. Specified an Y axis for autoscaling but have not supplied any plots
    \n"; + // $e .= "2. Specified a scale manually but have forgot to specify the tick steps"; + JpGraphError::RaiseL(25026); + } + + // Bail out if no plots and no specified X-scale + if( (!$this->xscale->IsSpecified() && count($this->plots)==0 && count($this->y2plots)==0) ) + JpGraphError::RaiseL(25034);//("JpGraph: Can't draw unspecified X-scale.
    No plots.
    "); + + //Check if we should autoscale y-axis + if( !$this->yscale->IsSpecified() && count($this->plots)>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->plots); + $lres = $this->GetLinesYMinMax($this->lines); + if( is_array($lres) ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + $tres = $this->GetTextsYMinMax(); + if( is_array($tres) ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + $this->yscale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor); + } + elseif( $this->yscale->IsSpecified() && + ( $this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->yscale->scale[0]; + $max = $this->yscale->scale[1]; + $this->yscale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->yscale->auto_ticks); + } + + if( $this->y2scale != null) { + + if( !$this->y2scale->IsSpecified() && count($this->y2plots)>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->y2plots); + $lres = $this->GetLinesYMinMax($this->y2lines); + if( is_array($lres) ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + $tres = $this->GetTextsYMinMax(true); + if( is_array($tres) ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + $this->y2scale->AutoScale($this->img,$min,$max,$this->img->plotheight/$this->ytick_factor); + } + elseif( $this->y2scale->IsSpecified() && + ( $this->y2scale->auto_ticks || !$this->y2scale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->y2scale->scale[0]; + $max = $this->y2scale->scale[1]; + $this->y2scale->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->y2scale->auto_ticks); + } + } + + // + // Autoscale the multiple Y-axis + // + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynscale[$i] != null) { + if( !$this->ynscale[$i]->IsSpecified() && count($this->ynplots[$i])>0 ) { + list($min,$max) = $this->GetPlotsYMinMax($this->ynplots[$i]); + $this->ynscale[$i]->AutoScale($this->img,$min,$max,$this->img->plotheight/$this->ytick_factor); + } + elseif( $this->ynscale[$i]->IsSpecified() && + ( $this->ynscale[$i]->auto_ticks || !$this->ynscale[$i]->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->ynscale[$i]->scale[0]; + $max = $this->ynscale[$i]->scale[1]; + $this->ynscale[$i]->AutoScale($this->img,$min,$max, + $this->img->plotheight/$this->ytick_factor, + $this->ynscale[$i]->auto_ticks); + } + } + } + + + //Check if we should autoscale x-axis + if( !$this->xscale->IsSpecified() ) { + if( substr($this->axtype,0,4) == "text" ) { + $max=0; + $n = count($this->plots); + for($i=0; $i < $n; ++$i ) { + $p = $this->plots[$i]; + // We need some unfortunate sub class knowledge here in order + // to increase number of data points in case it is a line plot + // which has the barcenter set. If not it could mean that the + // last point of the data is outside the scale since the barcenter + // settings means that we will shift the entire plot half a tick step + // to the right in oder to align with the center of the bars. + if( is_a($p,'BarPlot') || empty($p->barcenter)) { + $max=max($max,$p->numpoints-1); + } + else { + $max=max($max,$p->numpoints); + } + } + $min=0; + if( $this->y2axis != null ) { + foreach( $this->y2plots as $p ) { + $max=max($max,$p->numpoints-1); + } + } + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null) { + foreach( $this->ynplots[$i] as $p ) { + $max=max($max,$p->numpoints-1); + } + } + } + + $this->xscale->Update($this->img,$min,$max); + $this->xscale->ticks->Set($this->xaxis->tick_step,1); + $this->xscale->ticks->SupressMinorTickMarks(); + } + else { + list($min,$max) = $this->GetXMinMax(); + + $lres = $this->GetLinesXMinMax($this->lines); + if( $lres ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + $lres = $this->GetLinesXMinMax($this->y2lines); + if( $lres ) { + list($linmin,$linmax) = $lres ; + $min = min($min,$linmin); + $max = max($max,$linmax); + } + + $tres = $this->GetTextsXMinMax(); + if( $tres ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + + $tres = $this->GetTextsXMinMax(true); + if( $tres ) { + list($tmin,$tmax) = $tres ; + $min = min($min,$tmin); + $max = max($max,$tmax); + } + + $this->xscale->AutoScale($this->img,$min,$max,round($this->img->plotwidth/$this->xtick_factor)); + } + + //Adjust position of y-axis and y2-axis to minimum/maximum of x-scale + if( !is_numeric($this->yaxis->pos) && !is_string($this->yaxis->pos) ) + $this->yaxis->SetPos($this->xscale->GetMinVal()); + if( $this->y2axis != null ) { + if( !is_numeric($this->y2axis->pos) && !is_string($this->y2axis->pos) ) + $this->y2axis->SetPos($this->xscale->GetMaxVal()); + $this->y2axis->SetTitleSide(SIDE_RIGHT); + } + + $n = count($this->ynaxis); + $nY2adj = $this->y2axis != null ? $this->iYAxisDeltaPos : 0; + for( $i=0; $i < $n; ++$i ) { + if( $this->ynaxis[$i] != null ) { + if( !is_numeric($this->ynaxis[$i]->pos) && !is_string($this->ynaxis[$i]->pos) ) { + $this->ynaxis[$i]->SetPos($this->xscale->GetMaxVal()); + $this->ynaxis[$i]->SetPosAbsDelta($i*$this->iYAxisDeltaPos + $nY2adj); + } + $this->ynaxis[$i]->SetTitleSide(SIDE_RIGHT); + } + } + } + elseif( $this->xscale->IsSpecified() && + ( $this->xscale->auto_ticks || !$this->xscale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->xscale->scale[0]; + $max = $this->xscale->scale[1]; + + + $this->xscale->AutoScale($this->img,$min,$max, + $this->img->plotwidth/$this->xtick_factor, + false); + + if( $this->y2axis != null ) { + if( !is_numeric($this->y2axis->pos) && !is_string($this->y2axis->pos) ) + $this->y2axis->SetPos($this->xscale->GetMaxVal()); + $this->y2axis->SetTitleSide(SIDE_RIGHT); + } + + } + + // If we have a negative values and x-axis position is at 0 + // we need to supress the first and possible the last tick since + // they will be drawn on top of the y-axis (and possible y2 axis) + // The test below might seem strange the reasone being that if + // the user hasn't specified a value for position this will not + // be set until we do the stroke for the axis so as of now it + // is undefined. + // For X-text scale we ignore all this since the tick are usually + // much further in and not close to the Y-axis. Hence the test + // for 'text' + + if( ($this->yaxis->pos==$this->xscale->GetMinVal() || + (is_string($this->yaxis->pos) && $this->yaxis->pos=='min')) && + !is_numeric($this->xaxis->pos) && $this->yscale->GetMinVal() < 0 && + substr($this->axtype,0,4) != 'text' && $this->xaxis->pos!="min" ) { + + //$this->yscale->ticks->SupressZeroLabel(false); + $this->xscale->ticks->SupressFirst(); + if( $this->y2axis != null ) { + $this->xscale->ticks->SupressLast(); + } + } + elseif( !is_numeric($this->yaxis->pos) && $this->yaxis->pos=='max' ) { + $this->xscale->ticks->SupressLast(); + } + + + if( !$_csim ) { + $this->StrokePlotArea(); + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + } + $this->StrokeAxis(false); + + // Stroke bands + if( $this->bands != null && !$_csim) + for($i=0; $i < count($this->bands); ++$i) { + // Stroke all bands that asks to be in the background + if( $this->bands[$i]->depth == DEPTH_BACK ) + $this->bands[$i]->Stroke($this->img,$this->xscale,$this->yscale); + } + + if( $this->y2bands != null && $this->y2scale != null && !$_csim ) + for($i=0; $i < count($this->y2bands); ++$i) { + // Stroke all bands that asks to be in the foreground + if( $this->y2bands[$i]->depth == DEPTH_BACK ) + $this->y2bands[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + } + + + if( $this->grid_depth == DEPTH_BACK && !$_csim) { + $this->ygrid->Stroke(); + $this->xgrid->Stroke(); + } + + // Stroke Y2-axis + if( $this->y2axis != null && !$_csim) { + $this->y2axis->Stroke($this->xscale); + $this->y2grid->Stroke(); + } + + // Stroke yn-axis + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $this->ynaxis[$i]->Stroke($this->xscale); + } + + $oldoff=$this->xscale->off; + if(substr($this->axtype,0,4)=="text") { + if( $this->text_scale_abscenteroff > -1 ) { + // For a text scale the scale factor is the number of pixel per step. + // Hence we can use the scale factor as a substitute for number of pixels + // per major scale step and use that in order to adjust the offset so that + // an object of width "abscenteroff" becomes centered. + $this->xscale->off += round($this->xscale->scale_factor/2)-round($this->text_scale_abscenteroff/2); + } + else { + $this->xscale->off += + ceil($this->xscale->scale_factor*$this->text_scale_off*$this->xscale->ticks->minor_step); + } + } + + if( $this->iDoClipping ) { + $oldimage = $this->img->CloneCanvasH(); + } + + if( ! $this->y2orderback ) { + // Stroke all plots for Y axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->xscale,$this->yscale); + $this->plots[$i]->StrokeMargin($this->img); + } + } + + // Stroke all plots for Y2 axis + if( $this->y2scale != null ) + for($i=0; $i< count($this->y2plots); ++$i ) { + $this->y2plots[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + } + + if( $this->y2orderback ) { + // Stroke all plots for Y1 axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->xscale,$this->yscale); + $this->plots[$i]->StrokeMargin($this->img); + } + } + + $n = count($this->ynaxis); + for( $i=0; $i < $n; ++$i ) { + $m = count($this->ynplots[$i]); + for( $j=0; $j < $m; ++$j ) { + $this->ynplots[$i][$j]->Stroke($this->img,$this->xscale,$this->ynscale[$i]); + $this->ynplots[$i][$j]->StrokeMargin($this->img); + } + } + + if( $this->iIconDepth == DEPTH_FRONT) { + $this->StrokeIcons(); + } + + if( $this->iDoClipping ) { + // Clipping only supports graphs at 0 and 90 degrees + if( $this->img->a == 0 ) { + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->left_margin,$this->img->top_margin, + $this->img->left_margin,$this->img->top_margin, + $this->img->plotwidth+1,$this->img->plotheight); + } + elseif( $this->img->a == 90 ) { + $adj = ($this->img->height - $this->img->width)/2; + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->plotheight+1,$this->img->plotwidth); + } + else { + JpGraphError::RaiseL(25035,$this->img->a);//('You have enabled clipping. Cliping is only supported for graphs at 0 or 90 degrees rotation. Please adjust you current angle (='.$this->img->a.' degrees) or disable clipping.'); + } + $this->img->Destroy(); + $this->img->SetCanvasH($oldimage); + } + + $this->xscale->off=$oldoff; + + if( $this->grid_depth == DEPTH_FRONT && !$_csim ) { + $this->ygrid->Stroke(); + $this->xgrid->Stroke(); + } + + // Stroke bands + if( $this->bands!= null ) + for($i=0; $i < count($this->bands); ++$i) { + // Stroke all bands that asks to be in the foreground + if( $this->bands[$i]->depth == DEPTH_FRONT ) + $this->bands[$i]->Stroke($this->img,$this->xscale,$this->yscale); + } + + if( $this->y2bands!= null && $this->y2scale != null ) + for($i=0; $i < count($this->y2bands); ++$i) { + // Stroke all bands that asks to be in the foreground + if( $this->y2bands[$i]->depth == DEPTH_FRONT ) + $this->y2bands[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + } + + + // Stroke any lines added + if( $this->lines != null ) { + for($i=0; $i < count($this->lines); ++$i) { + $this->lines[$i]->Stroke($this->img,$this->xscale,$this->yscale); + $this->lines[$i]->DoLegend($this); + } + } + + if( $this->y2lines != null && $this->y2scale != null ) { + for($i=0; $i < count($this->y2lines); ++$i) { + $this->y2lines[$i]->Stroke($this->img,$this->xscale,$this->y2scale); + $this->y2lines[$i]->DoLegend($this); + } + } + + // Finally draw the axis again since some plots may have nagged + // the axis in the edges.However we do no stroke the labels again + // since any user defined callback would be called twice. It also + // enhances performance. + + if( !$_csim ) { + $this->StrokeAxis(); + } + + if( $this->y2scale != null && !$_csim ) + $this->y2axis->Stroke($this->xscale,false); + + if( !$_csim ) { + $this->StrokePlotBox(); + } + + // The titles and legends never gets rotated so make sure + // that the angle is 0 before stroking them + $aa = $this->img->SetAngle(0); + $this->StrokeTitles(); + $this->footer->Stroke($this->img); + $this->legend->Stroke($this->img); + $this->img->SetAngle($aa); + $this->StrokeTexts(); + $this->StrokeTables(); + + if( !$_csim ) { + + $this->img->SetAngle($aa); + + // Draw an outline around the image map + if(_JPG_DEBUG) { + $this->DisplayClientSideaImageMapAreas(); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans') ) { + require_once('jpgraph_imgtrans.php'); + //JpGraphError::Raise('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + } + } + } + + function SetAxisLabelBackground($aType,$aXFColor='lightgray',$aXColor='black',$aYFColor='lightgray',$aYColor='black') { + $this->iAxisLblBgType = $aType; + $this->iXAxisLblBgFillColor = $aXFColor; + $this->iXAxisLblBgColor = $aXColor; + $this->iYAxisLblBgFillColor = $aYFColor; + $this->iYAxisLblBgColor = $aYColor; + } + +//--------------- +// PRIVATE METHODS + + function StrokeAxisLabelBackground() { + // Types + // 0 = No background + // 1 = Only X-labels, length of axis + // 2 = Only Y-labels, length of axis + // 3 = As 1 but extends to width of graph + // 4 = As 2 but extends to height of graph + // 5 = Combination of 3 & 4 + // 6 = Combination of 1 & 2 + + $t = $this->iAxisLblBgType ; + if( $t < 1 ) return; + // Stroke optional X-axis label background color + if( $t == 1 || $t == 3 || $t == 5 || $t == 6 ) { + $this->img->PushColor($this->iXAxisLblBgFillColor); + if( $t == 1 || $t == 6 ) { + $xl = $this->img->left_margin; + $yu = $this->img->height - $this->img->bottom_margin + 1; + $xr = $this->img->width - $this->img->right_margin ; + $yl = $this->img->height-1-$this->frame_weight; + } + else { // t==3 || t==5 + $xl = $this->frame_weight; + $yu = $this->img->height - $this->img->bottom_margin + 1; + $xr = $this->img->width - 1 - $this->frame_weight; + $yl = $this->img->height-1-$this->frame_weight; + } + + $this->img->FilledRectangle($xl,$yu,$xr,$yl); + $this->img->PopColor(); + + // Check if we should add the vertical lines at left and right edge + if( $this->iXAxisLblBgColor !== '' ) { + $this->img->PushColor($this->iXAxisLblBgColor); + if( $t == 1 || $t == 6 ) { + $this->img->Line($xl,$yu,$xl,$yl); + $this->img->Line($xr,$yu,$xr,$yl); + } + else { + $xl = $this->img->width - $this->img->right_margin ; + $this->img->Line($xl,$yu-1,$xr,$yu-1); + } + $this->img->PopColor(); + } + } + + if( $t == 2 || $t == 4 || $t == 5 || $t == 6 ) { + $this->img->PushColor($this->iYAxisLblBgFillColor); + if( $t == 2 || $t == 6 ) { + $xl = $this->frame_weight; + $yu = $this->frame_weight+$this->img->top_margin; + $xr = $this->img->left_margin - 1; + $yl = $this->img->height - $this->img->bottom_margin + 1; + } + else { + $xl = $this->frame_weight; + $yu = $this->frame_weight; + $xr = $this->img->left_margin - 1; + $yl = $this->img->height-1-$this->frame_weight; + } + + $this->img->FilledRectangle($xl,$yu,$xr,$yl); + $this->img->PopColor(); + + // Check if we should add the vertical lines at left and right edge + if( $this->iXAxisLblBgColor !== '' ) { + $this->img->PushColor($this->iXAxisLblBgColor); + if( $t == 2 || $t == 6 ) { + $this->img->Line($xl,$yu-1,$xr,$yu-1); + $this->img->Line($xl,$yl-1,$xr,$yl-1); + } + else { + $this->img->Line($xr+1,$yu,$xr+1,$this->img->top_margin); + } + $this->img->PopColor(); + } + + } + } + + function StrokeAxis($aStrokeLabels=true) { + + if( $aStrokeLabels ) { + $this->StrokeAxisLabelBackground(); + } + + // Stroke axis + if( $this->iAxisStyle != AXSTYLE_SIMPLE ) { + switch( $this->iAxisStyle ) { + case AXSTYLE_BOXIN : + $toppos = SIDE_DOWN; + $bottompos = SIDE_UP; + $leftpos = SIDE_RIGHT; + $rightpos = SIDE_LEFT; + break; + case AXSTYLE_BOXOUT : + $toppos = SIDE_UP; + $bottompos = SIDE_DOWN; + $leftpos = SIDE_LEFT; + $rightpos = SIDE_RIGHT; + break; + case AXSTYLE_YBOXIN: + $toppos = -100; + $bottompos = SIDE_UP; + $leftpos = SIDE_RIGHT; + $rightpos = SIDE_LEFT; + break; + case AXSTYLE_YBOXOUT: + $toppos = -100; + $bottompos = SIDE_DOWN; + $leftpos = SIDE_LEFT; + $rightpos = SIDE_RIGHT; + break; + default: + JpGRaphError::RaiseL(25036,$this->iAxisStyle); //('Unknown AxisStyle() : '.$this->iAxisStyle); + break; + } + $this->xaxis->SetPos('min'); + + // By default we hide the first label so it doesn't cross the + // Y-axis in case the positon hasn't been set by the user. + // However, if we use a box we always want the first value + // displayed so we make sure it will be displayed. + $this->xscale->ticks->SupressFirst(false); + + $this->xaxis->SetLabelSide(SIDE_DOWN); + $this->xaxis->scale->ticks->SetSide($bottompos); + $this->xaxis->Stroke($this->yscale); + + if( $toppos != -100 ) { + // To avoid side effects we work on a new copy + $maxis = $this->xaxis; + $maxis->SetPos('max'); + $maxis->SetLabelSide(SIDE_UP); + $maxis->SetLabelMargin(7); + $this->xaxis->scale->ticks->SetSide($toppos); + $maxis->Stroke($this->yscale); + } + + $this->yaxis->SetPos('min'); + $this->yaxis->SetLabelMargin(10); + $this->yaxis->SetLabelSide(SIDE_LEFT); + $this->yaxis->scale->ticks->SetSide($leftpos); + $this->yaxis->Stroke($this->xscale); + + $myaxis = $this->yaxis; + $myaxis->SetPos('max'); + $myaxis->SetLabelMargin(10); + $myaxis->SetLabelSide(SIDE_RIGHT); + $myaxis->title->Set(''); + $myaxis->scale->ticks->SetSide($rightpos); + $myaxis->Stroke($this->xscale); + + } + else { + $this->xaxis->Stroke($this->yscale,$aStrokeLabels); + $this->yaxis->Stroke($this->xscale,$aStrokeLabels); + } + } + + + // Private helper function for backgound image + function LoadBkgImage($aImgFormat='',$aFile='',$aImgStr='') { + if( $aImgStr != '' ) { + return Image::CreateFromString($aImgStr); + } + + // Remove case sensitivity and setup appropriate function to create image + // Get file extension. This should be the LAST '.' separated part of the filename + $e = explode('.',$aFile); + $ext = strtolower($e[count($e)-1]); + if ($ext == "jpeg") { + $ext = "jpg"; + } + + if( trim($ext) == '' ) + $ext = 'png'; // Assume PNG if no extension specified + + if( $aImgFormat == '' ) + $imgtag = $ext; + else + $imgtag = $aImgFormat; + + $supported = imagetypes(); + if( ( $ext == 'jpg' && !($supported & IMG_JPG) ) || + ( $ext == 'gif' && !($supported & IMG_GIF) ) || + ( $ext == 'png' && !($supported & IMG_PNG) ) || + ( $ext == 'bmp' && !($supported & IMG_WBMP) ) || + ( $ext == 'xpm' && !($supported & IMG_XPM) ) ) { + JpGraphError::RaiseL(25037,$aFile);//('The image format of your background image ('.$aFile.') is not supported in your system configuration. '); + } + + + if( $imgtag == "jpg" || $imgtag == "jpeg") + { + $f = "imagecreatefromjpeg"; + $imgtag = "jpg"; + } + else + { + $f = "imagecreatefrom".$imgtag; + } + + // Compare specified image type and file extension + if( $imgtag != $ext ) { + //$t = "Background image seems to be of different type (has different file extension) than specified imagetype. Specified: '".$aImgFormat."'File: '".$aFile."'"; + JpGraphError::RaiseL(25038, $aImgFormat, $aFile); + } + + $img = @$f($aFile); + if( !$img ) { + JpGraphError::RaiseL(25039,$aFile);//(" Can't read background image: '".$aFile."'"); + } + return $img; + } + + function StrokeBackgroundGrad() { + if( $this->bkg_gradtype < 0 ) + return; + $grad = new Gradient($this->img); + if( $this->bkg_gradstyle == BGRAD_PLOT ) { + $xl = $this->img->left_margin; + $yt = $this->img->top_margin; + $xr = $xl + $this->img->plotwidth+1 ; + $yb = $yt + $this->img->plotheight ; + $grad->FilledRectangle($xl,$yt,$xr,$yb,$this->bkg_gradfrom,$this->bkg_gradto,$this->bkg_gradtype); + } + else { + $xl = 0; + $yt = 0; + $xr = $xl + $this->img->width - 1; + $yb = $yt + $this->img->height; + if( $this->doshadow ) { + $xr -= $this->shadow_width; + $yb -= $this->shadow_width; + } + if( $this->doframe ) { + $yt += $this->frame_weight; + $yb -= $this->frame_weight; + $xl += $this->frame_weight; + $xr -= $this->frame_weight; + } + $aa = $this->img->SetAngle(0); + $grad->FilledRectangle($xl,$yt,$xr,$yb,$this->bkg_gradfrom,$this->bkg_gradto,$this->bkg_gradtype); + $aa = $this->img->SetAngle($aa); + } + } + + function StrokeFrameBackground() { + if( $this->background_image != "" && $this->background_cflag != "" ) { + JpGraphError::RaiseL(25040);//('It is not possible to specify both a background image and a background country flag.'); + } + if( $this->background_image != "" ) { + $bkgimg = $this->LoadBkgImage($this->background_image_format,$this->background_image); + } + elseif( $this->background_cflag != "" ) { + if( ! class_exists('FlagImages') ) { + JpGraphError::RaiseL(25041);//('In order to use Country flags as backgrounds you must include the "jpgraph_flags.php" file.'); + } + $fobj = new FlagImages(FLAGSIZE4); + $dummy=''; + $bkgimg = $fobj->GetImgByName($this->background_cflag,$dummy); + $this->background_image_mix = $this->background_cflag_mix; + $this->background_image_type = $this->background_cflag_type; + } + else { + return ; + } + + $bw = ImageSX($bkgimg); + $bh = ImageSY($bkgimg); + + // No matter what the angle is we always stroke the image and frame + // assuming it is 0 degree + $aa = $this->img->SetAngle(0); + + switch( $this->background_image_type ) { + case BGIMG_FILLPLOT: // Resize to just fill the plotarea + $this->FillMarginArea(); + $this->StrokeFrame(); + // Special case to hande 90 degree rotated graph corectly + if( $aa == 90 ) { + $this->img->SetAngle(90); + $this->FillPlotArea(); + $aa = $this->img->SetAngle(0); + $adj = ($this->img->height - $this->img->width)/2; + $this->img->CopyMerge($bkgimg, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + 0,0, + $this->img->plotheight+1,$this->img->plotwidth, + $bw,$bh,$this->background_image_mix); + + } + else { + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg, + $this->img->left_margin,$this->img->top_margin, + 0,0,$this->img->plotwidth+1,$this->img->plotheight, + $bw,$bh,$this->background_image_mix); + } + break; + case BGIMG_FILLFRAME: // Fill the whole area from upper left corner, resize to just fit + $hadj=0; $vadj=0; + if( $this->doshadow ) { + $hadj = $this->shadow_width; + $vadj = $this->shadow_width; + } + $this->FillMarginArea(); + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg,0,0,0,0,$this->img->width-$hadj,$this->img->height-$vadj, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + case BGIMG_COPY: // Just copy the image from left corner, no resizing + $this->FillMarginArea(); + $this->FillPlotArea(); + $this->img->CopyMerge($bkgimg,0,0,0,0,$bw,$bh, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + case BGIMG_CENTER: // Center original image in the plot area + $this->FillMarginArea(); + $this->FillPlotArea(); + $centerx = round($this->img->plotwidth/2+$this->img->left_margin-$bw/2); + $centery = round($this->img->plotheight/2+$this->img->top_margin-$bh/2); + $this->img->CopyMerge($bkgimg,$centerx,$centery,0,0,$bw,$bh, + $bw,$bh,$this->background_image_mix); + $this->StrokeFrame(); + break; + default: + JpGraphError::RaiseL(25042);//(" Unknown background image layout"); + } + $this->img->SetAngle($aa); + } + + // Private + // Draw a frame around the image + function StrokeFrame() { + if( !$this->doframe ) return; + + if( $this->background_image_type <= 1 && + ($this->bkg_gradtype < 0 || ($this->bkg_gradtype > 0 && $this->bkg_gradstyle==BGRAD_PLOT)) ) { + $c = $this->margin_color; + } + else { + $c = false; + } + + if( $this->doshadow ) { + $this->img->SetColor($this->frame_color); + $this->img->ShadowRectangle(0,0,$this->img->width,$this->img->height, + $c,$this->shadow_width,$this->shadow_color); + } + elseif( $this->framebevel ) { + if( $c ) { + $this->img->SetColor($this->margin_color); + $this->img->FilledRectangle(0,0,$this->img->width-1,$this->img->height-1); + } + $this->img->Bevel(1,1,$this->img->width-2,$this->img->height-2, + $this->framebeveldepth, + $this->framebevelcolor1,$this->framebevelcolor2); + if( $this->framebevelborder ) { + $this->img->SetColor($this->framebevelbordercolor); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + else { + $this->img->SetLineWeight($this->frame_weight); + if( $c ) { + $this->img->SetColor($this->margin_color); + $this->img->FilledRectangle(0,0,$this->img->width-1,$this->img->height-1); + } + $this->img->SetColor($this->frame_color); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + + function FillMarginArea() { + $hadj=0; $vadj=0; + if( $this->doshadow ) { + $hadj = $this->shadow_width; + $vadj = $this->shadow_width; + } + + $this->img->SetColor($this->margin_color); +// $this->img->FilledRectangle(0,0,$this->img->width-1-$hadj,$this->img->height-1-$vadj); + + $this->img->FilledRectangle(0,0,$this->img->width-1-$hadj,$this->img->top_margin); + $this->img->FilledRectangle(0,$this->img->top_margin,$this->img->left_margin,$this->img->height-1-$hadj); + $this->img->FilledRectangle($this->img->left_margin+1, + $this->img->height-$this->img->bottom_margin, + $this->img->width-1-$hadj, + $this->img->height-1-$hadj); + $this->img->FilledRectangle($this->img->width-$this->img->right_margin, + $this->img->top_margin+1, + $this->img->width-1-$hadj, + $this->img->height-$this->img->bottom_margin-1); + } + + function FillPlotArea() { + $this->img->PushColor($this->plotarea_color); + $this->img->FilledRectangle($this->img->left_margin, + $this->img->top_margin, + $this->img->width-$this->img->right_margin, + $this->img->height-$this->img->bottom_margin); + $this->img->PopColor(); + } + + // Stroke the plot area with either a solid color or a background image + function StrokePlotArea() { + // Note: To be consistent we really should take a possible shadow + // into account. However, that causes some problem for the LinearScale class + // since in the current design it does not have any links to class Graph which + // means it has no way of compensating for the adjusted plotarea in case of a + // shadow. So, until I redesign LinearScale we can't compensate for this. + // So just set the two adjustment parameters to zero for now. + $boxadj = 0; //$this->doframe ? $this->frame_weight : 0 ; + $adj = 0; //$this->doshadow ? $this->shadow_width : 0 ; + + if( $this->background_image != "" || $this->background_cflag != "" ) { + $this->StrokeFrameBackground(); + } + else { + $aa = $this->img->SetAngle(0); + $this->StrokeFrame(); + $aa = $this->img->SetAngle($aa); + $this->StrokeBackgroundGrad(); + if( $this->bkg_gradtype < 0 || + ($this->bkg_gradtype > 0 && $this->bkg_gradstyle==BGRAD_MARGIN) ) { + $this->FillPlotArea(); + } + } + } + + function StrokeIcons() { + $n = count($this->iIcons); + for( $i=0; $i < $n; ++$i ) { + $this->iIcons[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + + function StrokePlotBox() { + // Should we draw a box around the plot area? + if( $this->boxed ) { + $this->img->SetLineWeight(1); + $this->img->SetLineStyle('solid'); + $this->img->SetColor($this->box_color); + for($i=0; $i < $this->box_weight; ++$i ) { + $this->img->Rectangle( + $this->img->left_margin-$i,$this->img->top_margin-$i, + $this->img->width-$this->img->right_margin+$i, + $this->img->height-$this->img->bottom_margin+$i); + } + } + } + + function SetTitleBackgroundFillStyle($aStyle,$aColor1='black',$aColor2='white') { + $this->titlebkg_fillstyle = $aStyle; + $this->titlebkg_scolor1 = $aColor1; + $this->titlebkg_scolor2 = $aColor2; + } + + function SetTitleBackground($aBackColor='gray', $aStyle=TITLEBKG_STYLE1, $aFrameStyle=TITLEBKG_FRAME_NONE, $aFrameColor='black', $aFrameWeight=1, $aBevelHeight=3, $aEnable=true) { + $this->titlebackground = $aEnable; + $this->titlebackground_color = $aBackColor; + $this->titlebackground_style = $aStyle; + $this->titlebackground_framecolor = $aFrameColor; + $this->titlebackground_framestyle = $aFrameStyle; + $this->titlebackground_frameweight = $aFrameWeight; + $this->titlebackground_bevelheight = $aBevelHeight ; + } + + + function StrokeTitles() { + + $margin=3; + + if( $this->titlebackground ) { + + // Find out height + $this->title->margin += 2 ; + $h = $this->title->GetTextHeight($this->img)+$this->title->margin+$margin; + if( $this->subtitle->t != "" && !$this->subtitle->hide ) { + $h += $this->subtitle->GetTextHeight($this->img)+$margin+ + $this->subtitle->margin; + $h += 2; + } + if( $this->subsubtitle->t != "" && !$this->subsubtitle->hide ) { + $h += $this->subsubtitle->GetTextHeight($this->img)+$margin+ + $this->subsubtitle->margin; + $h += 2; + } + $this->img->PushColor($this->titlebackground_color); + if( $this->titlebackground_style === TITLEBKG_STYLE1 ) { + // Inside the frame + if( $this->framebevel ) { + $x1 = $y1 = $this->framebeveldepth + 1 ; + $x2 = $this->img->width - $this->framebeveldepth - 2 ; + $this->title->margin += $this->framebeveldepth + 1 ; + $h += $y1 ; + $h += 2; + } + else { + $x1 = $y1 = $this->frame_weight; + $x2 = $this->img->width - 2*$x1; + } + } + elseif( $this->titlebackground_style === TITLEBKG_STYLE2 ) { + // Cover the frame as well + $x1 = $y1 = 0; + $x2 = $this->img->width - 1 ; + } + elseif( $this->titlebackground_style === TITLEBKG_STYLE3 ) { + // Cover the frame as well (the difference is that + // for style==3 a bevel frame border is on top + // of the title background) + $x1 = $y1 = 0; + $x2 = $this->img->width - 1 ; + $h += $this->framebeveldepth ; + $this->title->margin += $this->framebeveldepth ; + } + else { + JpGraphError::RaiseL(25043);//('Unknown title background style.'); + } + + if( $this->titlebackground_framestyle === 3 ) { + $h += $this->titlebackground_bevelheight*2 + 1 ; + $this->title->margin += $this->titlebackground_bevelheight ; + } + + if( $this->doshadow ) { + $x2 -= $this->shadow_width ; + } + + $indent=0; + if( $this->titlebackground_framestyle == TITLEBKG_FRAME_BEVEL ) { + $ind = $this->titlebackground_bevelheight; + } + + if( $this->titlebkg_fillstyle==TITLEBKG_FILLSTYLE_HSTRIPED ) { + $this->img->FilledRectangle2($x1+$ind,$y1+$ind,$x2-$ind,$h-$ind, + $this->titlebkg_scolor1, + $this->titlebkg_scolor2); + } + elseif( $this->titlebkg_fillstyle==TITLEBKG_FILLSTYLE_VSTRIPED ) { + $this->img->FilledRectangle2($x1+$ind,$y1+$ind,$x2-$ind,$h-$ind, + $this->titlebkg_scolor1, + $this->titlebkg_scolor2,2); + } + else { + // Solid fill + $this->img->FilledRectangle($x1,$y1,$x2,$h); + } + $this->img->PopColor(); + + $this->img->PushColor($this->titlebackground_framecolor); + $this->img->SetLineWeight($this->titlebackground_frameweight); + if( $this->titlebackground_framestyle == TITLEBKG_FRAME_FULL ) { + // Frame background + $this->img->Rectangle($x1,$y1,$x2,$h); + } + elseif( $this->titlebackground_framestyle == TITLEBKG_FRAME_BOTTOM ) { + // Bottom line only + $this->img->Line($x1,$h,$x2,$h); + } + elseif( $this->titlebackground_framestyle == TITLEBKG_FRAME_BEVEL ) { + $this->img->Bevel($x1,$y1,$x2,$h,$this->titlebackground_bevelheight); + } + $this->img->PopColor(); + + // This is clumsy. But we neeed to stroke the whole graph frame if it is + // set to bevel to get the bevel shading on top of the text background + if( $this->framebevel && $this->doframe && + $this->titlebackground_style === 3 ) { + $this->img->Bevel(1,1,$this->img->width-2,$this->img->height-2, + $this->framebeveldepth, + $this->framebevelcolor1,$this->framebevelcolor2); + if( $this->framebevelborder ) { + $this->img->SetColor($this->framebevelbordercolor); + $this->img->Rectangle(0,0,$this->img->width-1,$this->img->height-1); + } + } + } + + // Stroke title + $y = $this->title->margin; + if( $this->title->halign == 'center' ) + $this->title->Center(0,$this->img->width,$y); + elseif( $this->title->halign == 'left' ) { + $this->title->SetPos($this->title->margin+2,$y); + } + elseif( $this->title->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) + $indent = $this->shadow_width+2; + $this->title->SetPos($this->img->width-$this->title->margin-$indent,$y,'right'); + } + $this->title->Stroke($this->img); + + // ... and subtitle + $y += $this->title->GetTextHeight($this->img) + $margin + $this->subtitle->margin; + if( $this->subtitle->halign == 'center' ) + $this->subtitle->Center(0,$this->img->width,$y); + elseif( $this->subtitle->halign == 'left' ) { + $this->subtitle->SetPos($this->subtitle->margin+2,$y); + } + elseif( $this->subtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) + $indent = $this->shadow_width+2; + $this->subtitle->SetPos($this->img->width-$this->subtitle->margin-$indent,$y,'right'); + } + $this->subtitle->Stroke($this->img); + + // ... and subsubtitle + $y += $this->subtitle->GetTextHeight($this->img) + $margin + $this->subsubtitle->margin; + if( $this->subsubtitle->halign == 'center' ) + $this->subsubtitle->Center(0,$this->img->width,$y); + elseif( $this->subsubtitle->halign == 'left' ) { + $this->subsubtitle->SetPos($this->subsubtitle->margin+2,$y); + } + elseif( $this->subsubtitle->halign == 'right' ) { + $indent = 0; + if( $this->doshadow ) + $indent = $this->shadow_width+2; + $this->subsubtitle->SetPos($this->img->width-$this->subsubtitle->margin-$indent,$y,'right'); + } + $this->subsubtitle->Stroke($this->img); + + // ... and fancy title + $this->tabtitle->Stroke($this->img); + + } + + function StrokeTexts() { + // Stroke any user added text objects + if( $this->texts != null ) { + for($i=0; $i < count($this->texts); ++$i) { + $this->texts[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + + if( $this->y2texts != null && $this->y2scale != null ) { + for($i=0; $i < count($this->y2texts); ++$i) { + $this->y2texts[$i]->StrokeWithScale($this->img,$this->xscale,$this->y2scale); + } + } + + } + + function StrokeTables() { + if( $this->iTables != null ) { + $n = count($this->iTables); + for( $i=0; $i < $n; ++$i ) { + $this->iTables[$i]->StrokeWithScale($this->img,$this->xscale,$this->yscale); + } + } + } + + function DisplayClientSideaImageMapAreas() { + // Debug stuff - display the outline of the image map areas + $csim=''; + foreach ($this->plots as $p) { + $csim.= $p->GetCSIMareas(); + } + $csim .= $this->legend->GetCSIMareas(); + if (preg_match_all("/area shape=\"(\w+)\" coords=\"([0-9\, ]+)\"/", $csim, $coords)) { + $this->img->SetColor($this->csimcolor); + $n = count($coords[0]); + for ($i=0; $i < $n; $i++) { + if ($coords[1][$i]=="poly") { + preg_match_all('/\s*([0-9]+)\s*,\s*([0-9]+)\s*,*/',$coords[2][$i],$pts); + $this->img->SetStartPoint($pts[1][count($pts[0])-1],$pts[2][count($pts[0])-1]); + $m = count($pts[0]); + for ($j=0; $j < $m; $j++) { + $this->img->LineTo($pts[1][$j],$pts[2][$j]); + } + } else if ($coords[1][$i]=="rect") { + $pts = preg_split('/,/', $coords[2][$i]); + $this->img->SetStartPoint($pts[0],$pts[1]); + $this->img->LineTo($pts[2],$pts[1]); + $this->img->LineTo($pts[2],$pts[3]); + $this->img->LineTo($pts[0],$pts[3]); + $this->img->LineTo($pts[0],$pts[1]); + } + } + } + } + + // Text scale offset in fractions of a major scale step + function SetTextScaleOff($aOff) { + $this->text_scale_off = $aOff; + $this->xscale->text_scale_off = $aOff; + } + + // Text width of bar to be centered in absolute pixels + function SetTextScaleAbsCenterOff($aOff) { + $this->text_scale_abscenteroff = $aOff; + } + + // Get Y min and max values for added lines + function GetLinesYMinMax( $aLines ) { + $n = count($aLines); + if( $n == 0 ) return false; + $min = $aLines[0]->scaleposition ; + $max = $min ; + $flg = false; + for( $i=0; $i < $n; ++$i ) { + if( $aLines[$i]->direction == HORIZONTAL ) { + $flg = true ; + $v = $aLines[$i]->scaleposition ; + if( $min > $v ) $min = $v ; + if( $max < $v ) $max = $v ; + } + } + return $flg ? array($min,$max) : false ; + } + + // Get X min and max values for added lines + function GetLinesXMinMax( $aLines ) { + $n = count($aLines); + if( $n == 0 ) return false ; + $min = $aLines[0]->scaleposition ; + $max = $min ; + $flg = false; + for( $i=0; $i < $n; ++$i ) { + if( $aLines[$i]->direction == VERTICAL ) { + $flg = true ; + $v = $aLines[$i]->scaleposition ; + if( $min > $v ) $min = $v ; + if( $max < $v ) $max = $v ; + } + } + return $flg ? array($min,$max) : false ; + } + + // Get min and max values for all included plots + function GetPlotsYMinMax(&$aPlots) { + $n = count($aPlots); + $i=0; + do { + list($xmax,$max) = $aPlots[$i]->Max(); + } while( ++$i < $n && !is_numeric($max) ); + + $i=0; + do { + list($xmin,$min) = $aPlots[$i]->Min(); + } while( ++$i < $n && !is_numeric($min) ); + + if( !is_numeric($min) || !is_numeric($max) ) { + JpGraphError::RaiseL(25044);//('Cannot use autoscaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).'); + } + + list($xmax,$max) = $aPlots[0]->Max(); + list($xmin,$min) = $aPlots[0]->Min(); + for($i=0; $i < count($aPlots); ++$i ) { + list($xmax,$ymax)=$aPlots[$i]->Max(); + list($xmin,$ymin)=$aPlots[$i]->Min(); + if (is_numeric($ymax)) $max=max($max,$ymax); + if (is_numeric($ymin)) $min=min($min,$ymin); + } + if( $min == '' ) $min = 0; + if( $max == '' ) $max = 0; + if( $min == 0 && $max == 0 ) { + // Special case if all values are 0 + $min=0;$max=1; + } + return array($min,$max); + } + +} // Class + + + +//=================================================== +// CLASS LineProperty +// Description: Holds properties for a line +//=================================================== +class LineProperty { + var $iWeight=1, $iColor="black",$iStyle="solid"; + var $iShow=true; + +//--------------- +// PUBLIC METHODS + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetWeight($aWeight) { + $this->iWeight = $aWeight; + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function Show($aShow=true) { + $this->iShow=$aShow; + } + + function Stroke(&$aImg,$aX1,$aY1,$aX2,$aY2) { + if( $this->iShow ) { + $aImg->PushColor($this->iColor); + $oldls = $aImg->line_style; + $oldlw = $aImg->line_weight; + $aImg->SetLineWeight($this->iWeight); + $aImg->SetLineStyle($this->iStyle); + $aImg->StyleLine($aX1,$aY1,$aX2,$aY2); + $aImg->PopColor($this->iColor); + $aImg->line_style = $oldls; + $aImg->line_weight = $oldlw; + + } + } +} + + +//=================================================== +// CLASS Text +// Description: Arbitrary text object that can be added to the graph +//=================================================== +class Text { + var $t,$x=0,$y=0,$halign="left",$valign="top",$color=array(0,0,0); + var $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=10; + var $hide=false, $dir=0; + var $boxed=false; // Should the text be boxed + var $paragraph_align="left"; + var $margin=0; + var $icornerradius=0,$ishadowwidth=3; + var $iScalePosY=null,$iScalePosX=null; + var $iWordwrap=0; + var $fcolor='white',$bcolor='black',$shadow=false; + var $iCSIMarea='',$iCSIMalt='',$iCSIMtarget='',$iCSIMWinTarget=''; + +//--------------- +// CONSTRUCTOR + + // Create new text at absolute pixel coordinates + function Text($aTxt='',$aXAbsPos=0,$aYAbsPos=0) { + if( ! is_string($aTxt) ) { + JpGraphError::RaiseL(25050);//('First argument to Text::Text() must be s atring.'); + } + $this->t = $aTxt; + $this->x = round($aXAbsPos); + $this->y = round($aYAbsPos); + $this->margin = 0; + } +//--------------- +// PUBLIC METHODS + // Set the string in the text object + function Set($aTxt) { + $this->t = $aTxt; + } + + // Alias for Pos() + function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") { + $this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign); + } + + // Specify the position and alignment for the text object + function Pos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") { + $this->x = $aXAbsPos; + $this->y = $aYAbsPos; + $this->halign = $aHAlign; + $this->valign = $aVAlign; + } + + function SetScalePos($aX,$aY) { + $this->iScalePosX = $aX; + $this->iScalePosY = $aY; + } + + // Specify alignment for the text + function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") { + $this->halign = $aHAlign; + $this->valign = $aVAlign; + if( $aParagraphAlign != "" ) + $this->paragraph_align = $aParagraphAlign; + } + + // Alias + function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") { + $this->Align($aHAlign,$aVAlign,$aParagraphAlign); + } + + // Specifies the alignment for a multi line text + function ParagraphAlign($aAlign) { + $this->paragraph_align = $aAlign; + } + + // Specifies the alignment for a multi line text + function SetParagraphAlign($aAlign) { + $this->paragraph_align = $aAlign; + } + + function SetShadow($aShadowColor='darkgray',$aShadowWidth=3) { + $this->ishadowwidth=$aShadowWidth; + $this->shadow=$aShadowColor; + $this->boxed=true; + } + + function SetWordWrap($aCol) { + $this->iWordwrap = $aCol ; + } + + // Specify that the text should be boxed. fcolor=frame color, bcolor=border color, + // $shadow=drop shadow should be added around the text. + function SetBox($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { + if( $aFrameColor==false ) + $this->boxed=false; + else + $this->boxed=true; + $this->fcolor=$aFrameColor; + $this->bcolor=$aBorderColor; + // For backwards compatibility when shadow was just true or false + if( $aShadowColor === true ) + $aShadowColor = 'gray'; + $this->shadow=$aShadowColor; + $this->icornerradius=$aCornerRadius; + $this->ishadowwidth=$aShadowWidth; + } + + // Hide the text + function Hide($aHide=true) { + $this->hide=$aHide; + } + + // This looks ugly since it's not a very orthogonal design + // but I added this "inverse" of Hide() to harmonize + // with some classes which I designed more recently (especially) + // jpgraph_gantt + function Show($aShow=true) { + $this->hide=!$aShow; + } + + // Specify font + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family=$aFamily; + $this->font_style=$aStyle; + $this->font_size=$aSize; + } + + // Center the text between $left and $right coordinates + function Center($aLeft,$aRight,$aYAbsPos=false) { + $this->x = $aLeft + ($aRight-$aLeft )/2; + $this->halign = "center"; + if( is_numeric($aYAbsPos) ) + $this->y = $aYAbsPos; + } + + // Set text color + function SetColor($aColor) { + $this->color = $aColor; + } + + function SetAngle($aAngle) { + $this->SetOrientation($aAngle); + } + + // Orientation of text. Note only TTF fonts can have an arbitrary angle + function SetOrientation($aDirection=0) { + if( is_numeric($aDirection) ) + $this->dir=$aDirection; + elseif( $aDirection=="h" ) + $this->dir = 0; + elseif( $aDirection=="v" ) + $this->dir = 90; + else JpGraphError::RaiseL(25051);//(" Invalid direction specified for text."); + } + + // Total width of text + function GetWidth(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $w = $aImg->GetTextWidth($this->t,$this->dir); + return $w; + } + + // Hight of font + function GetFontHeight(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetFontHeight(); + return $h; + + } + + function GetTextHeight(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetTextHeight($this->t,$this->dir); + return $h; + } + + function GetHeight(&$aImg) { + // Synonym for GetTextHeight() + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetTextHeight($this->t,$this->dir); + return $h; + } + + // Set the margin which will be interpretated differently depending + // on the context. + function SetMargin($aMarg) { + $this->margin = $aMarg; + } + + function StrokeWithScale(&$aImg,$axscale,$ayscale) { + if( $this->iScalePosX === null || + $this->iScalePosY === null ) { + $this->Stroke($aImg); + } + else { + $this->Stroke($aImg, + round($axscale->Translate($this->iScalePosX)), + round($ayscale->Translate($this->iScalePosY))); + } + } + + function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') { + $this->iCSIMtarget = $aURITarget; + $this->iCSIMalt = $aAlt; + $this->iCSIMWinTarget = $aWinTarget; + } + + function GetCSIMareas() { + if( $this->iCSIMtarget !== '' ) + return $this->iCSIMarea; + else + return ''; + } + + // Display text in image + function Stroke(&$aImg,$x=null,$y=null) { + + if( !empty($x) ) $this->x = round($x); + if( !empty($y) ) $this->y = round($y); + + // Insert newlines + if( $this->iWordwrap > 0 ) { + $this->t = wordwrap($this->t,$this->iWordwrap,"\n"); + } + + // If position been given as a fraction of the image size + // calculate the absolute position + if( $this->x < 1 && $this->x > 0 ) $this->x *= $aImg->width; + if( $this->y < 1 && $this->y > 0 ) $this->y *= $aImg->height; + + $aImg->PushColor($this->color); + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $aImg->SetTextAlign($this->halign,$this->valign); + if( $this->boxed ) { + if( $this->fcolor=="nofill" ) + $this->fcolor=false; + $aImg->SetLineWeight(1); + $bbox = $aImg->StrokeBoxedText($this->x,$this->y,$this->t, + $this->dir,$this->fcolor,$this->bcolor,$this->shadow, + $this->paragraph_align,5,5,$this->icornerradius, + $this->ishadowwidth); + } + else { + $bbox = $aImg->StrokeText($this->x,$this->y,$this->t,$this->dir,$this->paragraph_align); + } + + // Create CSIM targets + $coords = $bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3].','.$bbox[4].','.$bbox[5].','.$bbox[6].','.$bbox[7]; + $this->iCSIMarea = "iCSIMtarget)."\" "; + if( trim($this->iCSIMalt) != '' ) { + $this->iCSIMarea .= " alt=\"".$this->iCSIMalt."\" "; + $this->iCSIMarea .= " title=\"".$this->iCSIMalt."\" "; + } + if( trim($this->iCSIMWinTarget) != '' ) { + $this->iCSIMarea .= " target=\"".$this->iCSIMWinTarget."\" "; + } + $this->iCSIMarea .= " />\n"; + + $aImg->PopColor($this->color); + + } +} // Class + +class GraphTabTitle extends Text{ + var $corner = 6 , $posx = 7, $posy = 4; + var $color='darkred',$fillcolor='lightyellow',$bordercolor='black'; + var $align = 'left', $width=TABTITLE_WIDTHFIT; + function GraphTabTitle() { + $this->t = ''; + $this->font_style = FS_BOLD; + $this->hide = true; + } + + function SetColor($aTxtColor,$aFillColor='lightyellow',$aBorderColor='black') { + $this->color = $aTxtColor; + $this->fillcolor = $aFillColor; + $this->bordercolor = $aBorderColor; + } + + function SetFillColor($aFillColor) { + $this->fillcolor = $aFillColor; + } + + function SetTabAlign($aAlign) { + // Synonym for SetPos + $this->align = $aAlign; + } + + function SetPos($aAlign) { + $this->align = $aAlign; + } + + function SetWidth($aWidth) { + $this->width = $aWidth ; + } + + function Set($t) { + $this->t = $t; + $this->hide = false; + } + + function SetCorner($aD) { + $this->corner = $aD ; + } + + function Stroke(&$aImg) { + if( $this->hide ) + return; + $this->boxed = false; + $w = $this->GetWidth($aImg) + 2*$this->posx; + $h = $this->GetTextHeight($aImg) + 2*$this->posy; + + $x = $aImg->left_margin; + $y = $aImg->top_margin; + + if( $this->width === TABTITLE_WIDTHFIT ) { + if( $this->align == 'left' ) { + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + elseif( $this->align == 'center' ) { + $x += round($aImg->plotwidth/2) - round($w/2); + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner, $y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + else { + $x += $aImg->plotwidth -$w; + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + } + } + else { + if( $this->width === TABTITLE_WIDTHFULL ) + $w = $aImg->plotwidth ; + else + $w = $this->width ; + + // Make the tab fit the width of the plot area + $p = array($x, $y, + $x, $y-$h+$this->corner, + $x + $this->corner,$y-$h, + $x + $w - $this->corner, $y-$h, + $x + $w, $y-$h+$this->corner, + $x + $w, $y); + + } + if( $this->halign == 'left' ) { + $aImg->SetTextAlign('left','bottom'); + $x += $this->posx; + $y -= $this->posy; + } + elseif( $this->halign == 'center' ) { + $aImg->SetTextAlign('center','bottom'); + $x += $w/2; + $y -= $this->posy; + } + else { + $aImg->SetTextAlign('right','bottom'); + $x += $w - $this->posx; + $y -= $this->posy; + } + + $aImg->SetColor($this->fillcolor); + $aImg->FilledPolygon($p); + + $aImg->SetColor($this->bordercolor); + $aImg->Polygon($p,true); + + $aImg->SetColor($this->color); + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $aImg->StrokeText($x,$y,$this->t,0,'center'); + } + +} + +//=================================================== +// CLASS SuperScriptText +// Description: Format a superscript text +//=================================================== +class SuperScriptText extends Text { + var $iSuper=""; + var $sfont_family="",$sfont_style="",$sfont_size=8; + var $iSuperMargin=2,$iVertOverlap=4,$iSuperScale=0.65; + var $iSDir=0; + var $iSimple=false; + + function SuperScriptText($aTxt="",$aSuper="",$aXAbsPos=0,$aYAbsPos=0) { + parent::Text($aTxt,$aXAbsPos,$aYAbsPos); + $this->iSuper = $aSuper; + } + + function FromReal($aVal,$aPrecision=2) { + // Convert a floating point number to scientific notation + $neg=1.0; + if( $aVal < 0 ) { + $neg = -1.0; + $aVal = -$aVal; + } + + $l = floor(log10($aVal)); + $a = sprintf("%0.".$aPrecision."f",round($aVal / pow(10,$l),$aPrecision)); + $a *= $neg; + if( $this->iSimple && ($a == 1 || $a==-1) ) $a = ''; + + if( $a != '' ) + $this->t = $a.' * 10'; + else { + if( $neg == 1 ) + $this->t = '10'; + else + $this->t = '-10'; + } + $this->iSuper = $l; + } + + function Set($aTxt,$aSuper="") { + $this->t = $aTxt; + $this->iSuper = $aSuper; + } + + function SetSuperFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=8) { + $this->sfont_family = $aFontFam; + $this->sfont_style = $aFontStyle; + $this->sfont_size = $aFontSize; + } + + // Total width of text + function GetWidth(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $w = $aImg->GetTextWidth($this->t); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $w += $aImg->GetTextWidth($this->iSuper); + $w += $this->iSuperMargin; + return $w; + } + + // Hight of font (approximate the height of the text) + function GetFontHeight(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetFontHeight(); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $h += $aImg->GetFontHeight(); + return $h; + } + + // Hight of text + function GetTextHeight(&$aImg) { + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $h = $aImg->GetTextHeight($this->t); + $aImg->SetFont($this->sfont_family,$this->sfont_style,$this->sfont_size); + $h += $aImg->GetTextHeight($this->iSuper); + return $h; + } + + function Stroke(&$aImg,$ax=-1,$ay=-1) { + + // To position the super script correctly we need different + // cases to handle the alignmewnt specified since that will + // determine how we can interpret the x,y coordinates + + $w = parent::GetWidth($aImg); + $h = parent::GetTextHeight($aImg); + switch( $this->valign ) { + case 'top': + $sy = $this->y; + break; + case 'center': + $sy = $this->y - $h/2; + break; + case 'bottom': + $sy = $this->y - $h; + break; + default: + JpGraphError::RaiseL(25052);//('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text'); + break; + } + + switch( $this->halign ) { + case 'left': + $sx = $this->x + $w; + break; + case 'center': + $sx = $this->x + $w/2; + break; + case 'right': + $sx = $this->x; + break; + default: + JpGraphError::RaiseL(25053);//('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text'); + break; + } + + $sx += $this->iSuperMargin; + $sy += $this->iVertOverlap; + + // Should we automatically determine the font or + // has the user specified it explicetly? + if( $this->sfont_family == "" ) { + if( $this->font_family <= FF_FONT2 ) { + if( $this->font_family == FF_FONT0 ) { + $sff = FF_FONT0; + } + elseif( $this->font_family == FF_FONT1 ) { + if( $this->font_style == FS_NORMAL ) + $sff = FF_FONT0; + else + $sff = FF_FONT1; + } + else { + $sff = FF_FONT1; + } + $sfs = $this->font_style; + $sfz = $this->font_size; + } + else { + // TTF fonts + $sff = $this->font_family; + $sfs = $this->font_style; + $sfz = floor($this->font_size*$this->iSuperScale); + if( $sfz < 8 ) $sfz = 8; + } + $this->sfont_family = $sff; + $this->sfont_style = $sfs; + $this->sfont_size = $sfz; + } + else { + $sff = $this->sfont_family; + $sfs = $this->sfont_style; + $sfz = $this->sfont_size; + } + + parent::Stroke($aImg,$ax,$ay); + + + // For the builtin fonts we need to reduce the margins + // since the bounding bx reported for the builtin fonts + // are much larger than for the TTF fonts. + if( $sff <= FF_FONT2 ) { + $sx -= 2; + $sy += 3; + } + + $aImg->SetTextAlign('left','bottom'); + $aImg->SetFont($sff,$sfs,$sfz); + $aImg->PushColor($this->color); + $aImg->StrokeText($sx,$sy,$this->iSuper,$this->iSDir,'left'); + $aImg->PopColor(); + } +} + + +//=================================================== +// CLASS Grid +// Description: responsible for drawing grid lines in graph +//=================================================== +class Grid { + var $img; + var $scale; + var $grid_color='#DDDDDD',$grid_mincolor='#DDDDDD'; + var $type="solid"; + var $show=false, $showMinor=false,$weight=1; + var $fill=false,$fillcolor=array('#EFEFEF','#BBCCFF'); +//--------------- +// CONSTRUCTOR + function Grid(&$aAxis) { + $this->scale = &$aAxis->scale; + $this->img = &$aAxis->img; + } +//--------------- +// PUBLIC METHODS + function SetColor($aMajColor,$aMinColor=false) { + $this->grid_color=$aMajColor; + if( $aMinColor === false ) + $aMinColor = $aMajColor ; + $this->grid_mincolor = $aMinColor; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + // Specify if grid should be dashed, dotted or solid + function SetLineStyle($aType) { + $this->type = $aType; + } + + // Decide if both major and minor grid should be displayed + function Show($aShowMajor=true,$aShowMinor=false) { + $this->show=$aShowMajor; + $this->showMinor=$aShowMinor; + } + + function SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue') { + $this->fill = $aFlg; + $this->fillcolor = array( $aColor1, $aColor2 ); + } + + // Display the grid + function Stroke() { + + // We do not have minor ticks (or grids) for text scales + if( $this->showMinor && !$this->scale->textscale ) { + $tmp = $this->grid_color; + $this->grid_color = $this->grid_mincolor; + $this->DoStroke($this->scale->ticks->ticks_pos); + + $this->grid_color = $tmp; + $this->DoStroke($this->scale->ticks->maj_ticks_pos); + } + else { + $this->DoStroke($this->scale->ticks->maj_ticks_pos); + } + } + +//-------------- +// Private methods + // Draw the grid + function DoStroke(&$aTicksPos) { + if( !$this->show ) + return; + $nbrgrids = count($aTicksPos); + + if( $this->scale->type=="y" ) { + $xl=$this->img->left_margin; + $xr=$this->img->width-$this->img->right_margin; + + if( $this->fill ) { + // Draw filled areas + $y2 = $aTicksPos[0]; + $i=1; + while( $i < $nbrgrids ) { + $y1 = $y2; + $y2 = $aTicksPos[$i++]; + $this->img->SetColor($this->fillcolor[$i & 1]); + $this->img->FilledRectangle($xl,$y1,$xr,$y2); + } + } + + $this->img->SetColor($this->grid_color); + $this->img->SetLineWeight($this->weight); + + // Draw grid lines + for($i=0; $i<$nbrgrids; ++$i) { + $y=$aTicksPos[$i]; + if( $this->type == "solid" ) + $this->img->Line($xl,$y,$xr,$y); + elseif( $this->type == "dotted" ) + $this->img->DashedLine($xl,$y,$xr,$y,1,6); + elseif( $this->type == "dashed" ) + $this->img->DashedLine($xl,$y,$xr,$y,2,4); + elseif( $this->type == "longdashed" ) + $this->img->DashedLine($xl,$y,$xr,$y,8,6); + } + } + elseif( $this->scale->type=="x" ) { + $yu=$this->img->top_margin; + $yl=$this->img->height-$this->img->bottom_margin; + $limit=$this->img->width-$this->img->right_margin; + + if( $this->fill ) { + // Draw filled areas + $x2 = $aTicksPos[0]; + $i=1; + while( $i < $nbrgrids ) { + $x1 = $x2; + $x2 = min($aTicksPos[$i++],$limit) ; + $this->img->SetColor($this->fillcolor[$i & 1]); + $this->img->FilledRectangle($x1,$yu,$x2,$yl); + } + } + + $this->img->SetColor($this->grid_color); + $this->img->SetLineWeight($this->weight); + + // We must also test for limit since we might have + // an offset and the number of ticks is calculated with + // assumption offset==0 so we might end up drawing one + // to many gridlines + $i=0; + $x=$aTicksPos[$i]; + while( $itype == "solid" ) + $this->img->Line($x,$yl,$x,$yu); + elseif( $this->type == "dotted" ) + $this->img->DashedLine($x,$yl,$x,$yu,1,6); + elseif( $this->type == "dashed" ) + $this->img->DashedLine($x,$yl,$x,$yu,2,4); + elseif( $this->type == "longdashed" ) + $this->img->DashedLine($x,$yl,$x,$yu,8,6); + ++$i; + } + } + else { + JpGraphError::RaiseL(25054,$this->scale->type);//('Internal error: Unknown grid axis ['.$this->scale->type.']'); + } + return true; + } +} // Class + +//=================================================== +// CLASS Axis +// Description: Defines X and Y axis. Notes that at the +// moment the code is not really good since the axis on +// several occasion must know wheter it's an X or Y axis. +// This was a design decision to make the code easier to +// follow. +//=================================================== +class Axis { + var $pos = false; + var $weight=1; + var $color=array(0,0,0),$label_color=array(0,0,0); + var $img=null,$scale=null; + var $hide=false; + var $ticks_label=false, $ticks_label_colors=null; + var $show_first_label=true,$show_last_label=true; + var $label_step=1; // Used by a text axis to specify what multiple of major steps + // should be labeled. + var $tick_step=1; + var $labelPos=0; // Which side of the axis should the labels be? + var $title=null,$title_adjust,$title_margin,$title_side=SIDE_LEFT; + var $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=10,$label_angle=0; + var $tick_label_margin=7; + var $label_halign = '',$label_valign = '', $label_para_align='left'; + var $hide_line=false,$hide_labels=false; + var $iDeltaAbsPos=0; + //var $hide_zero_label=false; + +//--------------- +// CONSTRUCTOR + function Axis(&$img,&$aScale,$color=array(0,0,0)) { + $this->img = &$img; + $this->scale = &$aScale; + $this->color = $color; + $this->title=new Text(""); + + if( $aScale->type=="y" ) { + $this->title_margin = 25; + $this->title_adjust="middle"; + $this->title->SetOrientation(90); + $this->tick_label_margin=7; + $this->labelPos=SIDE_LEFT; + //$this->SetLabelFormat('%.1f'); + } + else { + $this->title_margin = 5; + $this->title_adjust="high"; + $this->title->SetOrientation(0); + $this->tick_label_margin=7; + $this->labelPos=SIDE_DOWN; + $this->title_side=SIDE_DOWN; + //$this->SetLabelFormat('%.0f'); + } + } +//--------------- +// PUBLIC METHODS + + function SetLabelFormat($aFormStr) { + $this->scale->ticks->SetLabelFormat($aFormStr); + } + + function SetLabelFormatString($aFormStr,$aDate=false) { + $this->scale->ticks->SetLabelFormat($aFormStr,$aDate); + } + + function SetLabelFormatCallback($aFuncName) { + $this->scale->ticks->SetFormatCallback($aFuncName); + } + + function SetLabelAlign($aHAlign,$aVAlign="top",$aParagraphAlign='left') { + $this->label_halign = $aHAlign; + $this->label_valign = $aVAlign; + $this->label_para_align = $aParagraphAlign; + } + + // Don't display the first label + function HideFirstTickLabel($aShow=false) { + $this->show_first_label=$aShow; + } + + function HideLastTickLabel($aShow=false) { + $this->show_last_label=$aShow; + } + + // Manually specify the major and (optional) minor tick position and labels + function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) { + $this->scale->ticks->SetTickPositions($aMajPos,$aMinPos,$aLabels); + } + + // Manually specify major tick positions and optional labels + function SetMajTickPositions($aMajPos,$aLabels=NULL) { + $this->scale->ticks->SetTickPositions($aMajPos,NULL,$aLabels); + } + + // Hide minor or major tick marks + function HideTicks($aHideMinor=true,$aHideMajor=true) { + $this->scale->ticks->SupressMinorTickMarks($aHideMinor); + $this->scale->ticks->SupressTickMarks($aHideMajor); + } + + // Hide zero label + function HideZeroLabel($aFlag=true) { + $this->scale->ticks->SupressZeroLabel(); + //$this->hide_zero_label = $aFlag; + } + + function HideFirstLastLabel() { + // The two first calls to ticks method will supress + // automatically generated scale values. However, that + // will not affect manually specified value, e.g text-scales. + // therefor we also make a kludge here to supress manually + // specified scale labels. + $this->scale->ticks->SupressLast(); + $this->scale->ticks->SupressFirst(); + $this->show_first_label = false; + $this->show_last_label = false; + } + + // Hide the axis + function Hide($aHide=true) { + $this->hide=$aHide; + } + + // Hide the actual axis-line, but still print the labels + function HideLine($aHide=true) { + $this->hide_line = $aHide; + } + + function HideLabels($aHide=true) { + $this->hide_labels = $aHide; + } + + + // Weight of axis + function SetWeight($aWeight) { + $this->weight = $aWeight; + } + + // Axis color + function SetColor($aColor,$aLabelColor=false) { + $this->color = $aColor; + if( !$aLabelColor ) $this->label_color = $aColor; + else $this->label_color = $aLabelColor; + } + + // Title on axis + function SetTitle($aTitle,$aAdjustAlign="high") { + $this->title->Set($aTitle); + $this->title_adjust=$aAdjustAlign; + } + + // Specify distance from the axis + function SetTitleMargin($aMargin) { + $this->title_margin=$aMargin; + } + + // Which side of the axis should the axis title be? + function SetTitleSide($aSideOfAxis) { + $this->title_side = $aSideOfAxis; + } + + // Utility function to set the direction for tick marks + function SetTickDirection($aDir) { + // Will be deprecated from 1.7 + if( ERR_DEPRECATED ) + JpGraphError::RaiseL(25055);//('Axis::SetTickDirection() is deprecated. Use Axis::SetTickSide() instead'); + $this->scale->ticks->SetSide($aDir); + } + + function SetTickSide($aDir) { + $this->scale->ticks->SetSide($aDir); + } + + // Specify text labels for the ticks. One label for each data point + function SetTickLabels($aLabelArray,$aLabelColorArray=null) { + $this->ticks_label = $aLabelArray; + $this->ticks_label_colors = $aLabelColorArray; + } + + // How far from the axis should the labels be drawn + function SetTickLabelMargin($aMargin) { + if( ERR_DEPRECATED ) + JpGraphError::RaiseL(25056);//('SetTickLabelMargin() is deprecated. Use Axis::SetLabelMargin() instead.'); + $this->tick_label_margin=$aMargin; + } + + function SetLabelMargin($aMargin) { + $this->tick_label_margin=$aMargin; + } + + // Specify that every $step of the ticks should be displayed starting + // at $start + // DEPRECATED FUNCTION: USE SetTextTickInterval() INSTEAD + function SetTextTicks($step,$start=0) { + JpGraphError::RaiseL(25057);//(" SetTextTicks() is deprecated. Use SetTextTickInterval() instead."); + } + + // Specify that every $step of the ticks should be displayed starting + // at $start + function SetTextTickInterval($aStep,$aStart=0) { + $this->scale->ticks->SetTextLabelStart($aStart); + $this->tick_step=$aStep; + } + + // Specify that every $step tick mark should have a label + // should be displayed starting + function SetTextLabelInterval($aStep,$aStart=0) { + if( $aStep < 1 ) + JpGraphError::RaiseL(25058);//(" Text label interval must be specified >= 1."); + $this->scale->ticks->SetTextLabelStart($aStart); + $this->label_step=$aStep; + } + + // Which side of the axis should the labels be on? + function SetLabelPos($aSidePos) { + // This will be deprecated from 1.7 + if( ERR_DEPRECATED ) + JpGraphError::RaiseL(25059);//('SetLabelPos() is deprecated. Use Axis::SetLabelSide() instead.'); + $this->labelPos=$aSidePos; + } + + function SetLabelSide($aSidePos) { + $this->labelPos=$aSidePos; + } + + // Set the font + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family = $aFamily; + $this->font_style = $aStyle; + $this->font_size = $aSize; + } + + // Position for axis line on the "other" scale + function SetPos($aPosOnOtherScale) { + $this->pos=$aPosOnOtherScale; + } + + // Set the position of the axis to be X-pixels delta to the right + // of the max X-position (used to position the multiple Y-axis) + function SetPosAbsDelta($aDelta) { + $this->iDeltaAbsPos=$aDelta; + } + + // Specify the angle for the tick labels + function SetLabelAngle($aAngle) { + $this->label_angle = $aAngle; + } + + // Stroke the axis. + function Stroke($aOtherAxisScale,$aStrokeLabels=true) { + if( $this->hide ) return; + if( is_numeric($this->pos) ) { + $pos=$aOtherAxisScale->Translate($this->pos); + } + else { // Default to minimum of other scale if pos not set + if( ($aOtherAxisScale->GetMinVal() >= 0 && $this->pos==false) || $this->pos=="min" ) { + $pos = $aOtherAxisScale->scale_abs[0]; + } + elseif($this->pos == "max") { + $pos = $aOtherAxisScale->scale_abs[1]; + } + else { // If negative set x-axis at 0 + $this->pos=0; + $pos=$aOtherAxisScale->Translate(0); + } + } + $pos += $this->iDeltaAbsPos; + $this->img->SetLineWeight($this->weight); + $this->img->SetColor($this->color); + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + if( $this->scale->type == "x" ) { + if( !$this->hide_line ) + $this->img->FilledRectangle($this->img->left_margin,$pos, + $this->img->width-$this->img->right_margin,$pos+$this->weight-1); + if( $this->title_side == SIDE_DOWN ) { + $y = $pos + $this->img->GetFontHeight() + $this->title_margin + $this->title->margin; + $yalign = 'top'; + } + else { + $y = $pos - $this->img->GetFontHeight() - $this->title_margin - $this->title->margin; + $yalign = 'bottom'; + } + + if( $this->title_adjust=="high" ) + $this->title->Pos($this->img->width-$this->img->right_margin,$y,"right",$yalign); + elseif( $this->title_adjust=="middle" || $this->title_adjust=="center" ) + $this->title->Pos(($this->img->width-$this->img->left_margin-$this->img->right_margin)/2+$this->img->left_margin,$y,"center",$yalign); + elseif($this->title_adjust=="low") + $this->title->Pos($this->img->left_margin,$y,"left",$yalign); + else { + JpGraphError::RaiseL(25060,$this->title_adjust);//('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); + } + } + elseif( $this->scale->type == "y" ) { + // Add line weight to the height of the axis since + // the x-axis could have a width>1 and we want the axis to fit nicely together. + if( !$this->hide_line ) + $this->img->FilledRectangle($pos-$this->weight+1,$this->img->top_margin, + $pos,$this->img->height-$this->img->bottom_margin+$this->weight-1); + $x=$pos ; + if( $this->title_side == SIDE_LEFT ) { + $x -= $this->title_margin; + $x -= $this->title->margin; + $halign="right"; + } + else { + $x += $this->title_margin; + $x += $this->title->margin; + $halign="left"; + } + // If the user has manually specified an hor. align + // then we override the automatic settings with this + // specifed setting. Since default is 'left' we compare + // with that. (This means a manually set 'left' align + // will have no effect.) + if( $this->title->halign != 'left' ) + $halign = $this->title->halign; + if( $this->title_adjust=="high" ) + $this->title->Pos($x,$this->img->top_margin,$halign,"top"); + elseif($this->title_adjust=="middle" || $this->title_adjust=="center") + $this->title->Pos($x,($this->img->height-$this->img->top_margin-$this->img->bottom_margin)/2+$this->img->top_margin,$halign,"center"); + elseif($this->title_adjust=="low") + $this->title->Pos($x,$this->img->height-$this->img->bottom_margin,$halign,"bottom"); + else + JpGraphError::RaiseL(25061,$this->title_adjust);//('Unknown alignment specified for Y-axis title. ('.$this->title_adjust.')'); + + } + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + if( $aStrokeLabels ) { + if( !$this->hide_labels ) + $this->StrokeLabels($pos); + $this->title->Stroke($this->img); + } + } + +//--------------- +// PRIVATE METHODS + // Draw all the tick labels on major tick marks + function StrokeLabels($aPos,$aMinor=false,$aAbsLabel=false) { + + $this->img->SetColor($this->label_color); + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + $yoff=$this->img->GetFontHeight()/2; + + // Only draw labels at major tick marks + $nbr = count($this->scale->ticks->maj_ticks_label); + + // We have the option to not-display the very first mark + // (Usefull when the first label might interfere with another + // axis.) + $i = $this->show_first_label ? 0 : 1 ; + if( !$this->show_last_label ) --$nbr; + // Now run through all labels making sure we don't overshoot the end + // of the scale. + $ncolor=0; + if( isset($this->ticks_label_colors) ) + $ncolor=count($this->ticks_label_colors); + + while( $i<$nbr ) { + // $tpos holds the absolute text position for the label + $tpos=$this->scale->ticks->maj_ticklabels_pos[$i]; + + // Note. the $limit is only used for the x axis since we + // might otherwise overshoot if the scale has been centered + // This is due to us "loosing" the last tick mark if we center. + if( $this->scale->type=="x" && $tpos > $this->img->width-$this->img->right_margin+1 ) { + return; + } + // we only draw every $label_step label + if( ($i % $this->label_step)==0 ) { + + // Set specific label color if specified + if( $ncolor > 0 ) + $this->img->SetColor($this->ticks_label_colors[$i % $ncolor]); + + // If the label has been specified use that and in other case + // just label the mark with the actual scale value + $m=$this->scale->ticks->GetMajor(); + + // ticks_label has an entry for each data point and is the array + // that holds the labels set by the user. If the user hasn't + // specified any values we use whats in the automatically asigned + // labels in the maj_ticks_label + if( isset($this->ticks_label[$i*$m]) ) + $label=$this->ticks_label[$i*$m]; + else { + if( $aAbsLabel ) + $label=abs($this->scale->ticks->maj_ticks_label[$i]); + else + $label=$this->scale->ticks->maj_ticks_label[$i]; + if( $this->scale->textscale && $this->scale->ticks->label_formfunc == '' ) { + ++$label; + } + } + + //if( $this->hide_zero_label && $label==0.0 ) { + // ++$i; + // continue; + //} + + if( $this->scale->type == "x" ) { + if( $this->labelPos == SIDE_DOWN ) { + if( $this->label_angle==0 || $this->label_angle==90 ) { + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign('center','top'); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + + } + else { + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign("right","top"); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + + $this->img->StrokeText($tpos,$aPos+$this->tick_label_margin+1,$label, + $this->label_angle,$this->label_para_align); + } + else { + if( $this->label_angle==0 || $this->label_angle==90 ) { + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign("center","bottom"); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + else { + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign("right","bottom"); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + } + $this->img->StrokeText($tpos,$aPos-$this->tick_label_margin-1,$label, + $this->label_angle,$this->label_para_align); + } + } + else { + // scale->type == "y" + //if( $this->label_angle!=0 ) + //JpGraphError::Raise(" Labels at an angle are not supported on Y-axis"); + if( $this->labelPos == SIDE_LEFT ) { // To the left of y-axis + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign("right","center"); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + $this->img->StrokeText($aPos-$this->tick_label_margin,$tpos,$label,$this->label_angle,$this->label_para_align); + } + else { // To the right of the y-axis + if( $this->label_halign=='' && $this->label_valign=='') + $this->img->SetTextAlign("left","center"); + else + $this->img->SetTextAlign($this->label_halign,$this->label_valign); + $this->img->StrokeText($aPos+$this->tick_label_margin,$tpos,$label,$this->label_angle,$this->label_para_align); + } + } + } + ++$i; + } + } + +} // Class + +//=================================================== +// CLASS Ticks +// Description: Abstract base class for drawing linear and logarithmic +// tick marks on axis +//=================================================== +class Ticks { + var $minor_abs_size=3, $major_abs_size=5; + var $direction=1; // Should ticks be in(=1) the plot area or outside (=-1)? + var $scale; + var $is_set=false; + var $precision; + var $supress_zerolabel=false,$supress_first=false; + var $supress_last=false,$supress_tickmarks=false,$supress_minor_tickmarks=false; + var $mincolor="",$majcolor=""; + var $weight=1; + var $label_formatstr=''; // C-style format string to use for labels + var $label_formfunc=''; + var $label_dateformatstr=''; + var $label_usedateformat=FALSE; + + +//--------------- +// CONSTRUCTOR + function Ticks(&$aScale) { + $this->scale=&$aScale; + $this->precision = -1; + } + +//--------------- +// PUBLIC METHODS + // Set format string for automatic labels + function SetLabelFormat($aFormatString,$aDate=FALSE) { + $this->label_formatstr=$aFormatString; + $this->label_usedateformat=$aDate; + } + + function SetLabelDateFormat($aFormatString) { + $this->label_dateformatstr=$aFormatString; + } + + function SetFormatCallback($aCallbackFuncName) { + $this->label_formfunc = $aCallbackFuncName; + } + + // Don't display the first zero label + function SupressZeroLabel($aFlag=true) { + $this->supress_zerolabel=$aFlag; + } + + // Don't display minor tick marks + function SupressMinorTickMarks($aHide=true) { + $this->supress_minor_tickmarks=$aHide; + } + + // Don't display major tick marks + function SupressTickMarks($aHide=true) { + $this->supress_tickmarks=$aHide; + } + + // Hide the first tick mark + function SupressFirst($aHide=true) { + $this->supress_first=$aHide; + } + + // Hide the last tick mark + function SupressLast($aHide=true) { + $this->supress_last=$aHide; + } + + // Size (in pixels) of minor tick marks + function GetMinTickAbsSize() { + return $this->minor_abs_size; + } + + // Size (in pixels) of major tick marks + function GetMajTickAbsSize() { + return $this->major_abs_size; + } + + function SetSize($aMajSize,$aMinSize=3) { + $this->major_abs_size = $aMajSize; + $this->minor_abs_size = $aMinSize; + } + + // Have the ticks been specified + function IsSpecified() { + return $this->is_set; + } + + // Set the distance between major and minor tick marks + function Set($aMaj,$aMin) { + // "Virtual method" + // Should be implemented by the concrete subclass + // if any action is wanted. + } + + // Specify number of decimals in automatic labels + // Deprecated from 1.4. Use SetFormatString() instead + function SetPrecision($aPrecision) { + if( ERR_DEPRECATED ) + JpGraphError::RaiseL(25063);//('Ticks::SetPrecision() is deprecated. Use Ticks::SetLabelFormat() (or Ticks::SetFormatCallback()) instead'); + $this->precision=$aPrecision; + } + + function SetSide($aSide) { + $this->direction=$aSide; + } + + // Which side of the axis should the ticks be on + function SetDirection($aSide=SIDE_RIGHT) { + $this->direction=$aSide; + } + + // Set colors for major and minor tick marks + function SetMarkColor($aMajorColor,$aMinorColor="") { + $this->SetColor($aMajorColor,$aMinorColor); + } + + function SetColor($aMajorColor,$aMinorColor="") { + $this->majcolor=$aMajorColor; + + // If not specified use same as major + if( $aMinorColor=="" ) + $this->mincolor=$aMajorColor; + else + $this->mincolor=$aMinorColor; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + +} // Class + +//=================================================== +// CLASS LinearTicks +// Description: Draw linear ticks on axis +//=================================================== +class LinearTicks extends Ticks { + var $minor_step=1, $major_step=2; + var $xlabel_offset=0,$xtick_offset=0; + var $label_offset=0; // What offset should the displayed label have + // i.e should we display 0,1,2 or 1,2,3,4 or 2,3,4 etc + var $text_label_start=0; + var $iManualTickPos = NULL, $iManualMinTickPos = NULL, $iManualTickLabels = NULL; + var $maj_ticks_pos = array(), $maj_ticklabels_pos = array(), + $ticks_pos = array(), $maj_ticks_label = array(); + var $iAdjustForDST = false; // If a date falls within the DST period add one hour to the diaplyed time + +//--------------- +// CONSTRUCTOR + function LinearTicks() { + $this->precision = -1; + } + +//--------------- +// PUBLIC METHODS + + + // Return major step size in world coordinates + function GetMajor() { + return $this->major_step; + } + + // Return minor step size in world coordinates + function GetMinor() { + return $this->minor_step; + } + + // Set Minor and Major ticks (in world coordinates) + function Set($aMajStep,$aMinStep=false) { + if( $aMinStep==false ) + $aMinStep=$aMajStep; + + if( $aMajStep <= 0 || $aMinStep <= 0 ) { + JpGraphError::RaiseL(25064); +//(" Minor or major step size is 0. Check that you haven't got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem."); + } + + $this->major_step=$aMajStep; + $this->minor_step=$aMinStep; + $this->is_set = true; + } + + function SetMajTickPositions($aMajPos,$aLabels=NULL) { + $this->SetTickPositions($aMajPos,NULL,$aLabels); + } + + function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) { + if( !is_array($aMajPos) || ($aMinPos!==NULL && !is_array($aMinPos)) ) { + JpGraphError::RaiseL(25065);//('Tick positions must be specifued as an array()'); + return; + } + $n=count($aMajPos); + if( is_array($aLabels) && (count($aLabels) != $n) ) { + JpGraphError::RaiseL(25066);//('When manually specifying tick positions and labels the number of labels must be the same as the number of specified ticks.'); + return; + } + $this->iManualTickPos = $aMajPos; + $this->iManualMinTickPos = $aMinPos; + $this->iManualTickLabels = $aLabels; + } + + // Specify all the tick positions manually and possible also the exact labels + function _doManualTickPos($aScale) { + $n=count($this->iManualTickPos); + $m=count($this->iManualMinTickPos); + $doLbl=count($this->iManualTickLabels) > 0; + + $this->maj_ticks_pos = array(); + $this->maj_ticklabels_pos = array(); + $this->ticks_pos = array(); + + // Now loop through the supplied positions and translate them to screen coordinates + // and store them in the maj_label_positions + $minScale = $aScale->scale[0]; + $maxScale = $aScale->scale[1]; + $j=0; + for($i=0; $i < $n ; ++$i ) { + // First make sure that the first tick is not lower than the lower scale value + if( !isset($this->iManualTickPos[$i]) || + $this->iManualTickPos[$i] < $minScale || $this->iManualTickPos[$i] > $maxScale) { + continue; + } + + + $this->maj_ticks_pos[$j] = $aScale->Translate($this->iManualTickPos[$i]); + $this->maj_ticklabels_pos[$j] = $this->maj_ticks_pos[$j]; + + // Set the minor tick marks the same as major if not specified + if( $m <= 0 ) { + $this->ticks_pos[$j] = $this->maj_ticks_pos[$j]; + } + + if( $doLbl ) { + $this->maj_ticks_label[$j] = $this->iManualTickLabels[$i]; + } + else { + $this->maj_ticks_label[$j]=$this->_doLabelFormat($this->iManualTickPos[$i],$i,$n); + } + ++$j; + } + + // Some sanity check + if( count($this->maj_ticks_pos) < 2 ) { + JpGraphError::RaiseL(25067);//('Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tickl marks.'); + } + + // Setup the minor tick marks + $j=0; + for($i=0; $i < $m; ++$i ) { + if( empty($this->iManualMinTickPos[$i]) || + $this->iManualMinTickPos[$i] < $minScale || $this->iManualMinTickPos[$i] > $maxScale) + continue; + $this->ticks_pos[$j] = $aScale->Translate($this->iManualMinTickPos[$i]); + ++$j; + } + } + + function _doAutoTickPos($aScale) { + $maj_step_abs = $aScale->scale_factor*$this->major_step; + $min_step_abs = $aScale->scale_factor*$this->minor_step; + + if( $min_step_abs==0 || $maj_step_abs==0 ) { + JpGraphError::RaiseL(25068);//("A plot has an illegal scale. This could for example be that you are trying to use text autoscaling to draw a line plot with only one point or that the plot area is too small. It could also be that no input data value is numeric (perhaps only '-' or 'x')"); + } + // We need to make this an int since comparing it below + // with the result from round() can give wrong result, such that + // (40 < 40) == TRUE !!! + $limit = (int)$aScale->scale_abs[1]; + + if( $aScale->textscale ) { + // This can only be true for a X-scale (horizontal) + // Define ticks for a text scale. This is slightly different from a + // normal linear type of scale since the position might be adjusted + // and the labels start at on + $label = (float)$aScale->GetMinVal()+$this->text_label_start+$this->label_offset; + $start_abs=$aScale->scale_factor*$this->text_label_start; + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + $x = $aScale->scale_abs[0]+$start_abs+$this->xlabel_offset*$min_step_abs; + for( $i=0; $label <= $aScale->GetMaxVal()+$this->label_offset; ++$i ) { + // Apply format to label + $this->maj_ticks_label[$i]=$this->_doLabelFormat($label,$i,$nbrmajticks); + $label+=$this->major_step; + + // The x-position of the tick marks can be different from the labels. + // Note that we record the tick position (not the label) so that the grid + // happen upon tick marks and not labels. + $xtick=$aScale->scale_abs[0]+$start_abs+$this->xtick_offset*$min_step_abs+$i*$maj_step_abs; + $this->maj_ticks_pos[$i]=$xtick; + $this->maj_ticklabels_pos[$i] = round($x); + $x += $maj_step_abs; + + } + } + else { + $label = $aScale->GetMinVal(); + $abs_pos = $aScale->scale_abs[0]; + $j=0; $i=0; + $step = round($maj_step_abs/$min_step_abs); + if( $aScale->type == "x" ) { + // For a normal linear type of scale the major ticks will always be multiples + // of the minor ticks. In order to avoid any rounding issues the major ticks are + // defined as every "step" minor ticks and not calculated separately + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + while( round($abs_pos) <= $limit ) { + $this->ticks_pos[] = round($abs_pos); + $this->ticks_label[] = $label; + if( $step == 0 || $i % $step == 0 && $j < $nbrmajticks ) { + $this->maj_ticks_pos[$j] = round($abs_pos); + $this->maj_ticklabels_pos[$j] = round($abs_pos); + $this->maj_ticks_label[$j]=$this->_doLabelFormat($label,$j,$nbrmajticks); + ++$j; + } + ++$i; + $abs_pos += $min_step_abs; + $label+=$this->minor_step; + } + } + elseif( $aScale->type == "y" ) { + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal())/$this->major_step)+1; + while( round($abs_pos) >= $limit ) { + $this->ticks_pos[$i] = round($abs_pos); + $this->ticks_label[$i]=$label; + if( $step == 0 || $i % $step == 0 && $j < $nbrmajticks ) { + $this->maj_ticks_pos[$j] = round($abs_pos); + $this->maj_ticklabels_pos[$j] = round($abs_pos); + $this->maj_ticks_label[$j]=$this->_doLabelFormat($label,$j,$nbrmajticks); + ++$j; + } + ++$i; + $abs_pos += $min_step_abs; + $label += $this->minor_step; + } + } + } + } + + function AdjustForDST($aFlg=true) { + $this->iAdjustForDST = $aFlg; + } + + + function _doLabelFormat($aVal,$aIdx,$aNbrTicks) { + + // If precision hasn't been specified set it to a sensible value + if( $this->precision==-1 ) { + $t = log10($this->minor_step); + if( $t > 0 ) + $precision = 0; + else + $precision = -floor($t); + } + else + $precision = $this->precision; + + if( $this->label_formfunc != '' ) { + $f=$this->label_formfunc; + $l = call_user_func($f,$aVal); + } + elseif( $this->label_formatstr != '' || $this->label_dateformatstr != '' ) { + if( $this->label_usedateformat ) { + // Adjust the value to take daylight savings into account + if (date("I",$aVal)==1 && $this->iAdjustForDST ) // DST + $aVal+=3600; + $l = date($this->label_formatstr,$aVal); + if( $this->label_formatstr == 'W' ) { + // If we use week formatting then add a single 'w' in front of the + // week number to differentiate it from dates + $l = 'w'.$l; + } + } + else { + if( $this->label_dateformatstr !== '' ) { + // Adjust the value to take daylight savings into account + if (date("I",$aVal)==1 && $this->iAdjustForDST ) // DST + $aVal+=3600; + $l = date($this->label_dateformatstr,$aVal); + if( $this->label_formatstr == 'W' ) { + // If we use week formatting then add a single 'w' in front of the + // week number to differentiate it from dates + $l = 'w'.$l; + } + } + else + $l = sprintf($this->label_formatstr,$aVal); + } + } + else { + $l = sprintf('%01.'.$precision.'f',round($aVal,$precision)); + } + + if( ($this->supress_zerolabel && $l==0) || ($this->supress_first && $aIdx==0) || + ($this->supress_last && $aIdx==$aNbrTicks-1) ) { + $l=''; + } + return $l; + } + + // Stroke ticks on either X or Y axis + function _StrokeTicks(&$aImg,$aScale,$aPos) { + $hor = $aScale->type == 'x'; + $aImg->SetLineWeight($this->weight); + + // We need to make this an int since comparing it below + // with the result from round() can give wrong result, such that + // (40 < 40) == TRUE !!! + $limit = (int)$aScale->scale_abs[1]; + + // A text scale doesn't have any minor ticks + if( !$aScale->textscale ) { + // Stroke minor ticks + $yu = $aPos - $this->direction*$this->GetMinTickAbsSize(); + $xr = $aPos + $this->direction*$this->GetMinTickAbsSize(); + $n = count($this->ticks_pos); + for($i=0; $i < $n; ++$i ) { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor!="" ) $aImg->PushColor($this->mincolor); + if( $hor ) { + //if( $this->ticks_pos[$i] <= $limit ) + $aImg->Line($this->ticks_pos[$i],$aPos,$this->ticks_pos[$i],$yu); + } + else { + //if( $this->ticks_pos[$i] >= $limit ) + $aImg->Line($aPos,$this->ticks_pos[$i],$xr,$this->ticks_pos[$i]); + } + if( $this->mincolor!="" ) $aImg->PopColor(); + } + } + } + + // Stroke major ticks + $yu = $aPos - $this->direction*$this->GetMajTickAbsSize(); + $xr = $aPos + $this->direction*$this->GetMajTickAbsSize(); + $nbrmajticks=round(($aScale->GetMaxVal()-$aScale->GetMinVal()-$this->text_label_start )/$this->major_step)+1; + $n = count($this->maj_ticks_pos); + for($i=0; $i < $n ; ++$i ) { + if(!($this->xtick_offset > 0 && $i==$nbrmajticks-1) && !$this->supress_tickmarks) { + if( $this->majcolor!="" ) $aImg->PushColor($this->majcolor); + if( $hor ) { + //if( $this->maj_ticks_pos[$i] <= $limit ) + $aImg->Line($this->maj_ticks_pos[$i],$aPos,$this->maj_ticks_pos[$i],$yu); + } + else { + //if( $this->maj_ticks_pos[$i] >= $limit ) + $aImg->Line($aPos,$this->maj_ticks_pos[$i],$xr,$this->maj_ticks_pos[$i]); + } + if( $this->majcolor!="" ) $aImg->PopColor(); + } + } + + } + + // Draw linear ticks + function Stroke(&$aImg,$aScale,$aPos) { + if( $this->iManualTickPos != NULL ) + $this->_doManualTickPos($aScale); + else + $this->_doAutoTickPos($aScale); + $this->_StrokeTicks($aImg,$aScale,$aPos, $aScale->type == 'x' ); + } + +//--------------- +// PRIVATE METHODS + // Spoecify the offset of the displayed tick mark with the tick "space" + // Legal values for $o is [0,1] used to adjust where the tick marks and label + // should be positioned within the major tick-size + // $lo specifies the label offset and $to specifies the tick offset + // this comes in handy for example in bar graphs where we wont no offset for the + // tick but have the labels displayed halfway under the bars. + function SetXLabelOffset($aLabelOff,$aTickOff=-1) { + $this->xlabel_offset=$aLabelOff; + if( $aTickOff==-1 ) // Same as label offset + $this->xtick_offset=$aLabelOff; + else + $this->xtick_offset=$aTickOff; + if( $aLabelOff>0 ) + $this->SupressLast(); // The last tick wont fit + } + + // Which tick label should we start with? + function SetTextLabelStart($aTextLabelOff) { + $this->text_label_start=$aTextLabelOff; + } + +} // Class + +//=================================================== +// CLASS LinearScale +// Description: Handle linear scaling between screen and world +//=================================================== +class LinearScale { + var $scale=array(0,0); + var $scale_abs=array(0,0); + var $scale_factor; // Scale factor between world and screen + var $world_size; // Plot area size in world coordinates + var $world_abs_size; // Plot area size in pixels + var $off; // Offset between image edge and plot area + var $type; // is this x or y scale ? + var $ticks=null; // Store ticks + var $text_scale_off = 0; + var $autoscale_min=false; // Forced minimum value, auto determine max + var $autoscale_max=false; // Forced maximum value, auto determine min + var $gracetop=0,$gracebottom=0; + var $intscale=false; // Restrict autoscale to integers + var $textscale=false; // Just a flag to let the Plot class find out if + // we are a textscale or not. This is a cludge since + // this ionformatyion is availabale in Graph::axtype but + // we don't have access to the graph object in the Plots + // stroke method. So we let graph store the status here + // when the linear scale is created. A real cludge... + var $auto_ticks=false; // When using manual scale should the ticks be automatically set? + var $name = 'lin'; +//--------------- +// CONSTRUCTOR + function LinearScale($aMin=0,$aMax=0,$aType="y") { + assert($aType=="x" || $aType=="y" ); + assert($aMin<=$aMax); + + $this->type=$aType; + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->ticks = new LinearTicks(); + } + +//--------------- +// PUBLIC METHODS + // Check if scale is set or if we should autoscale + // We should do this is either scale or ticks has not been set + function IsSpecified() { + if( $this->GetMinVal()==$this->GetMaxVal() ) { // Scale not set + return false; + } + return true; + } + + // Set the minimum data value when the autoscaling is used. + // Usefull if you want a fix minimum (like 0) but have an + // automatic maximum + function SetAutoMin($aMin) { + $this->autoscale_min=$aMin; + } + + // Set the minimum data value when the autoscaling is used. + // Usefull if you want a fix minimum (like 0) but have an + // automatic maximum + function SetAutoMax($aMax) { + $this->autoscale_max=$aMax; + } + + // If the user manually specifies a scale should the ticks + // still be set automatically? + function SetAutoTicks($aFlag=true) { + $this->auto_ticks = $aFlag; + } + + // Specify scale "grace" value (top and bottom) + function SetGrace($aGraceTop,$aGraceBottom=0) { + if( $aGraceTop<0 || $aGraceBottom < 0 ) + JpGraphError::RaiseL(25069);//(" Grace must be larger then 0"); + $this->gracetop=$aGraceTop; + $this->gracebottom=$aGraceBottom; + } + + // Get the minimum value in the scale + function GetMinVal() { + return $this->scale[0]; + } + + // get maximum value for scale + function GetMaxVal() { + return $this->scale[1]; + } + + // Specify a new min/max value for sclae + function Update(&$aImg,$aMin,$aMax) { + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->InitConstants($aImg); + } + + // Translate between world and screen + function Translate($aCoord) { + if( !is_numeric($aCoord) ) { + if( $aCoord != '' && $aCoord != '-' && $aCoord != 'x' ) + JpGraphError::RaiseL(25070);//('Your data contains non-numeric values.'); + return 0; + } + else { + return $this->off + ($aCoord - $this->scale[0])*$this->scale_factor; + } + } + + // Relative translate (don't include offset) usefull when we just want + // to know the relative position (in pixels) on the axis + function RelTranslate($aCoord) { + if( !is_numeric($aCoord) ) { + if( $aCoord != '' && $aCoord != '-' && $aCoord != 'x' ) + JpGraphError::RaiseL(25070);//('Your data contains non-numeric values.'); + return 0; + } + else { + return ($aCoord - $this->scale[0]) * $this->scale_factor; + } + } + + // Restrict autoscaling to only use integers + function SetIntScale($aIntScale=true) { + $this->intscale=$aIntScale; + } + + // Calculate an integer autoscale + function IntAutoScale(&$img,$min,$max,$maxsteps,$majend=true) { + // Make sure limits are integers + $min=floor($min); + $max=ceil($max); + if( abs($min-$max)==0 ) { + --$min; ++$max; + } + $maxsteps = floor($maxsteps); + + $gracetop=round(($this->gracetop/100.0)*abs($max-$min)); + $gracebottom=round(($this->gracebottom/100.0)*abs($max-$min)); + if( is_numeric($this->autoscale_min) ) { + $min = ceil($this->autoscale_min); + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + } + + if( is_numeric($this->autoscale_max) ) { + $max = ceil($this->autoscale_max); + if( $min >= $max ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + } + + if( abs($min-$max ) == 0 ) { + ++$max; + --$min; + } + + $min -= $gracebottom; + $max += $gracetop; + + // First get tickmarks as multiples of 1, 10, ... + if( $majend ) { + list($num1steps,$adj1min,$adj1max,$maj1step) = + $this->IntCalcTicks($maxsteps,$min,$max,1); + } + else { + $adj1min = $min; + $adj1max = $max; + list($num1steps,$maj1step) = + $this->IntCalcTicksFreeze($maxsteps,$min,$max,1); + } + + if( abs($min-$max) > 2 ) { + // Then get tick marks as 2:s 2, 20, ... + if( $majend ) { + list($num2steps,$adj2min,$adj2max,$maj2step) = + $this->IntCalcTicks($maxsteps,$min,$max,5); + } + else { + $adj2min = $min; + $adj2max = $max; + list($num2steps,$maj2step) = + $this->IntCalcTicksFreeze($maxsteps,$min,$max,5); + } + } + else { + $num2steps = 10000; // Dummy high value so we don't choose this + } + + if( abs($min-$max) > 5 ) { + // Then get tickmarks as 5:s 5, 50, 500, ... + if( $majend ) { + list($num5steps,$adj5min,$adj5max,$maj5step) = + $this->IntCalcTicks($maxsteps,$min,$max,2); + } + else { + $adj5min = $min; + $adj5max = $max; + list($num5steps,$maj5step) = + $this->IntCalcTicksFreeze($maxsteps,$min,$max,2); + } + } + else { + $num5steps = 10000; // Dummy high value so we don't choose this + } + + // Check to see whichof 1:s, 2:s or 5:s fit better with + // the requested number of major ticks + $match1=abs($num1steps-$maxsteps); + $match2=abs($num2steps-$maxsteps); + if( !empty($maj5step) && $maj5step > 1 ) + $match5=abs($num5steps-$maxsteps); + else + $match5=10000; // Dummy high value + + // Compare these three values and see which is the closest match + // We use a 0.6 weight to gravitate towards multiple of 5:s + if( $match1 < $match2 ) { + if( $match1 < $match5 ) + $r=1; + else + $r=3; + } + else { + if( $match2 < $match5 ) + $r=2; + else + $r=3; + } + // Minsteps are always the same as maxsteps for integer scale + switch( $r ) { + case 1: + $this->ticks->Set($maj1step,$maj1step); + $this->Update($img,$adj1min,$adj1max); + break; + case 2: + $this->ticks->Set($maj2step,$maj2step); + $this->Update($img,$adj2min,$adj2max); + break; + case 3: + $this->ticks->Set($maj5step,$maj5step); + $this->Update($img,$adj5min,$adj5max); + break; + default: + JpGraphError::RaiseL(25073,$r);//('Internal error. Integer scale algorithm comparison out of bound (r=$r)'); + } + } + + + // Calculate autoscale. Used if user hasn't given a scale and ticks + // $maxsteps is the maximum number of major tickmarks allowed. + function AutoScale(&$img,$min,$max,$maxsteps,$majend=true) { + if( $this->intscale ) { + $this->IntAutoScale($img,$min,$max,$maxsteps,$majend); + return; + } + if( abs($min-$max) < 0.00001 ) { + // We need some difference to be able to autoscale + // make it 5% above and 5% below value + if( $min==0 && $max==0 ) { // Special case + $min=-1; $max=1; + } + else { + $delta = (abs($max)+abs($min))*0.005; + $min -= $delta; + $max += $delta; + } + } + + $gracetop=($this->gracetop/100.0)*abs($max-$min); + $gracebottom=($this->gracebottom/100.0)*abs($max-$min); + if( is_numeric($this->autoscale_min) ) { + $min = $this->autoscale_min; + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + if( abs($min-$max ) < 0.00001 ) + $max *= 1.2; + } + + if( is_numeric($this->autoscale_max) ) { + $max = $this->autoscale_max; + if( $min >= $max ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + if( abs($min-$max ) < 0.00001 ) + $min *= 0.8; + } + + + $min -= $gracebottom; + $max += $gracetop; + + // First get tickmarks as multiples of 0.1, 1, 10, ... + if( $majend ) { + list($num1steps,$adj1min,$adj1max,$min1step,$maj1step) = + $this->CalcTicks($maxsteps,$min,$max,1,2); + } + else { + $adj1min=$min; + $adj1max=$max; + list($num1steps,$min1step,$maj1step) = + $this->CalcTicksFreeze($maxsteps,$min,$max,1,2,false); + } + + // Then get tick marks as 2:s 0.2, 2, 20, ... + if( $majend ) { + list($num2steps,$adj2min,$adj2max,$min2step,$maj2step) = + $this->CalcTicks($maxsteps,$min,$max,5,2); + } + else { + $adj2min=$min; + $adj2max=$max; + list($num2steps,$min2step,$maj2step) = + $this->CalcTicksFreeze($maxsteps,$min,$max,5,2,false); + } + + // Then get tickmarks as 5:s 0.05, 0.5, 5, 50, ... + if( $majend ) { + list($num5steps,$adj5min,$adj5max,$min5step,$maj5step) = + $this->CalcTicks($maxsteps,$min,$max,2,5); + } + else { + $adj5min=$min; + $adj5max=$max; + list($num5steps,$min5step,$maj5step) = + $this->CalcTicksFreeze($maxsteps,$min,$max,2,5,false); + } + + // Check to see whichof 1:s, 2:s or 5:s fit better with + // the requested number of major ticks + $match1=abs($num1steps-$maxsteps); + $match2=abs($num2steps-$maxsteps); + $match5=abs($num5steps-$maxsteps); + // Compare these three values and see which is the closest match + // We use a 0.8 weight to gravitate towards multiple of 5:s + $r=$this->MatchMin3($match1,$match2,$match5,0.8); + switch( $r ) { + case 1: + $this->Update($img,$adj1min,$adj1max); + $this->ticks->Set($maj1step,$min1step); + break; + case 2: + $this->Update($img,$adj2min,$adj2max); + $this->ticks->Set($maj2step,$min2step); + break; + case 3: + $this->Update($img,$adj5min,$adj5max); + $this->ticks->Set($maj5step,$min5step); + break; + } + } + +//--------------- +// PRIVATE METHODS + + // This method recalculates all constants that are depending on the + // margins in the image. If the margins in the image are changed + // this method should be called for every scale that is registred with + // that image. Should really be installed as an observer of that image. + function InitConstants(&$img) { + if( $this->type=="x" ) { + $this->world_abs_size=$img->width - $img->left_margin - $img->right_margin; + $this->off=$img->left_margin; + $this->scale_factor = 0; + if( $this->world_size > 0 ) + $this->scale_factor=$this->world_abs_size/($this->world_size*1.0); + } + else { // y scale + $this->world_abs_size=$img->height - $img->top_margin - $img->bottom_margin; + $this->off=$img->top_margin+$this->world_abs_size; + $this->scale_factor = 0; + if( $this->world_size > 0 ) { + $this->scale_factor=-$this->world_abs_size/($this->world_size*1.0); + } + } + $size = $this->world_size * $this->scale_factor; + $this->scale_abs=array($this->off,$this->off + $size); + } + + // Initialize the conversion constants for this scale + // This tries to pre-calculate as much as possible to speed up the + // actual conversion (with Translate()) later on + // $start =scale start in absolute pixels (for x-scale this is an y-position + // and for an y-scale this is an x-position + // $len =absolute length in pixels of scale + function SetConstants($aStart,$aLen) { + $this->world_abs_size=$aLen; + $this->off=$aStart; + + if( $this->world_size<=0 ) { + // This should never ever happen !! + JpGraphError::RaiseL(25074); +//("You have unfortunately stumbled upon a bug in JpGraph. It seems like the scale range is ".$this->world_size." [for ".$this->type." scale]
    Please report Bug #01 to jpgraph@aditus.nu and include the script that gave this error. This problem could potentially be caused by trying to use \"illegal\" values in the input data arrays (like trying to send in strings or only NULL values) which causes the autoscaling to fail."); + + } + + // scale_factor = number of pixels per world unit + $this->scale_factor=$this->world_abs_size/($this->world_size*1.0); + + // scale_abs = start and end points of scale in absolute pixels + $this->scale_abs=array($this->off,$this->off+$this->world_size*$this->scale_factor); + } + + + // Calculate number of ticks steps with a specific division + // $a is the divisor of 10**x to generate the first maj tick intervall + // $a=1, $b=2 give major ticks with multiple of 10, ...,0.1,1,10,... + // $a=5, $b=2 give major ticks with multiple of 2:s ...,0.2,2,20,... + // $a=2, $b=5 give major ticks with multiple of 5:s ...,0.5,5,50,... + // We return a vector of + // [$numsteps,$adjmin,$adjmax,$minstep,$majstep] + // If $majend==true then the first and last marks on the axis will be major + // labeled tick marks otherwise it will be adjusted to the closest min tick mark + function CalcTicks($maxsteps,$min,$max,$a,$b,$majend=true) { + $diff=$max-$min; + if( $diff==0 ) + $ld=0; + else + $ld=floor(log10($diff)); + + // Gravitate min towards zero if we are close + if( $min>0 && $min < pow(10,$ld) ) $min=0; + + //$majstep=pow(10,$ld-1)/$a; + $majstep=pow(10,$ld)/$a; + $minstep=$majstep/$b; + + $adjmax=ceil($max/$minstep)*$minstep; + $adjmin=floor($min/$minstep)*$minstep; + $adjdiff = $adjmax-$adjmin; + $numsteps=$adjdiff/$majstep; + + while( $numsteps>$maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=$adjdiff/$majstep; + ++$ld; + } + + $minstep=$majstep/$b; + $adjmin=floor($min/$minstep)*$minstep; + $adjdiff = $adjmax-$adjmin; + if( $majend ) { + $adjmin = floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $adjmax = ceil($adjdiff/$majstep)*$majstep+$adjmin; + } + else + $adjmax=ceil($max/$minstep)*$minstep; + + return array($numsteps,$adjmin,$adjmax,$minstep,$majstep); + } + + function CalcTicksFreeze($maxsteps,$min,$max,$a,$b) { + // Same as CalcTicks but don't adjust min/max values + $diff=$max-$min; + if( $diff==0 ) + $ld=0; + else + $ld=floor(log10($diff)); + + //$majstep=pow(10,$ld-1)/$a; + $majstep=pow(10,$ld)/$a; + $minstep=$majstep/$b; + $numsteps=floor($diff/$majstep); + + while( $numsteps > $maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=floor($diff/$majstep); + ++$ld; + } + $minstep=$majstep/$b; + return array($numsteps,$minstep,$majstep); + } + + + function IntCalcTicks($maxsteps,$min,$max,$a,$majend=true) { + $diff=$max-$min; + if( $diff==0 ) + JpGraphError::RaiseL(25075);//('Can\'t automatically determine ticks since min==max.'); + else + $ld=floor(log10($diff)); + + // Gravitate min towards zero if we are close + if( $min>0 && $min < pow(10,$ld) ) $min=0; + + if( $ld == 0 ) $ld=1; + + if( $a == 1 ) + $majstep = 1; + else + $majstep=pow(10,$ld)/$a; + $adjmax=ceil($max/$majstep)*$majstep; + + $adjmin=floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $numsteps=$adjdiff/$majstep; + while( $numsteps>$maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=$adjdiff/$majstep; + ++$ld; + } + + $adjmin=floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + if( $majend ) { + $adjmin = floor($min/$majstep)*$majstep; + $adjdiff = $adjmax-$adjmin; + $adjmax = ceil($adjdiff/$majstep)*$majstep+$adjmin; + } + else + $adjmax=ceil($max/$majstep)*$majstep; + + return array($numsteps,$adjmin,$adjmax,$majstep); + } + + + function IntCalcTicksFreeze($maxsteps,$min,$max,$a) { + // Same as IntCalcTick but don't change min/max values + $diff=$max-$min; + if( $diff==0 ) + JpGraphError::RaiseL(25075);//('Can\'t automatically determine ticks since min==max.'); + else + $ld=floor(log10($diff)); + + if( $ld == 0 ) $ld=1; + + if( $a == 1 ) + $majstep = 1; + else + $majstep=pow(10,$ld)/$a; + + $numsteps=floor($diff/$majstep); + while( $numsteps > $maxsteps ) { + $majstep=pow(10,$ld)/$a; + $numsteps=floor($diff/$majstep); + ++$ld; + } + + return array($numsteps,$majstep); + } + + + + // Determine the minimum of three values witha weight for last value + function MatchMin3($a,$b,$c,$weight) { + if( $a < $b ) { + if( $a < ($c*$weight) ) + return 1; // $a smallest + else + return 3; // $c smallest + } + elseif( $b < ($c*$weight) ) + return 2; // $b smallest + return 3; // $c smallest + } +} // Class +//=================================================== +// CLASS ImgStreamCache +// Description: Handle caching of graphs to files +//=================================================== +class ImgStreamCache { + var $cache_dir; + var $img=null; + var $timeout=0; // Infinite timeout + //--------------- + // CONSTRUCTOR + function ImgStreamCache(&$aImg, $aCacheDir=CACHE_DIR) { + $this->img = &$aImg; + $this->cache_dir = $aCacheDir; + } + +//--------------- +// PUBLIC METHODS + + // Specify a timeout (in minutes) for the file. If the file is older then the + // timeout value it will be overwritten with a newer version. + // If timeout is set to 0 this is the same as infinite large timeout and if + // timeout is set to -1 this is the same as infinite small timeout + function SetTimeout($aTimeout) { + $this->timeout=$aTimeout; + } + + // Output image to browser and also write it to the cache + function PutAndStream(&$aImage,$aCacheFileName,$aInline,$aStrokeFileName) { + // Some debugging code to brand the image with numbe of colors + // used + GLOBAL $gJpgBrandTiming; + + if( $gJpgBrandTiming ) { + global $tim; + $t=$tim->Pop()/1000.0; + $c=$aImage->SetColor("black"); + $t=sprintf(BRAND_TIME_FORMAT,round($t,3)); + imagestring($this->img->img,2,5,$this->img->height-20,$t,$c); + } + + // Check if we should stroke the image to an arbitrary file + if( _FORCE_IMGTOFILE ) { + $aStrokeFileName = _FORCE_IMGDIR.GenImgName(); + } + + if( $aStrokeFileName!="" ) { + if( $aStrokeFileName == "auto" ) + $aStrokeFileName = GenImgName(); + if( file_exists($aStrokeFileName) ) { + // Delete the old file + if( !@unlink($aStrokeFileName) ) + JpGraphError::RaiseL(25111,$aStrokeFileName);//(" Can't delete cached image $aStrokeFileName. Permission problem?"); + } + $aImage->Stream($aStrokeFileName); + return; + } + + if( $aCacheFileName != "" && USE_CACHE) { + + $aCacheFileName = $this->cache_dir . $aCacheFileName; + if( file_exists($aCacheFileName) ) { + if( !$aInline ) { + // If we are generating image off-line (just writing to the cache) + // and the file exists and is still valid (no timeout) + // then do nothing, just return. + $diff=time()-filemtime($aCacheFileName); + if( $diff < 0 ) + JpGraphError::RaiseL(25112,$aCacheFileName);//(" Cached imagefile ($aCacheFileName) has file date in the future!!"); + if( $this->timeout>0 && ($diff <= $this->timeout*60) ) + return; + } + if( !@unlink($aCacheFileName) ) + JpGraphError::RaiseL(25113,$aStrokeFileName);//(" Can't delete cached image $aStrokeFileName. Permission problem?"); + $aImage->Stream($aCacheFileName); + } + else { + $this->MakeDirs(dirname($aCacheFileName)); + if( !is_writeable(dirname($aCacheFileName)) ) { + JpGraphError::RaiseL(25114,$aCacheFileName);//('PHP has not enough permissions to write to the cache file '.$aCacheFileName.'. Please make sure that the user running PHP has write permission for this file if you wan to use the cache system with JpGraph.'); + } + $aImage->Stream($aCacheFileName); + } + + $res=true; + // Set group to specified + if( CACHE_FILE_GROUP != "" ) + $res = @chgrp($aCacheFileName,CACHE_FILE_GROUP); + if( CACHE_FILE_MOD != "" ) + $res = @chmod($aCacheFileName,CACHE_FILE_MOD); + if( !$res ) + JpGraphError::RaiseL(25115,$aStrokeFileName);//(" Can't set permission for cached image $aStrokeFileName. Permission problem?"); + + $aImage->Destroy(); + if( $aInline ) { + if ($fh = @fopen($aCacheFileName, "rb") ) { + $this->img->Headers(); + fpassthru($fh); + return; + } + else + JpGraphError::RaiseL(25116,$aFile);//(" Cant open file from cache [$aFile]"); + } + } + elseif( $aInline ) { + $this->img->Headers(); + $aImage->Stream(); + return; + } + } + + // Check if a given image is in cache and in that case + // pass it directly on to web browser. Return false if the + // image file doesn't exist or exists but is to old + function GetAndStream($aCacheFileName) { + $aCacheFileName = $this->cache_dir.$aCacheFileName; + if ( USE_CACHE && file_exists($aCacheFileName) && $this->timeout>=0 ) { + $diff=time()-filemtime($aCacheFileName); + if( $this->timeout>0 && ($diff > $this->timeout*60) ) { + return false; + } + else { + if ($fh = @fopen($aCacheFileName, "rb")) { + $this->img->Headers(); + fpassthru($fh); + return true; + } + else + JpGraphError::RaiseL(25117,$aCacheFileName);//(" Can't open cached image \"$aCacheFileName\" for reading."); + } + } + return false; + } + + //--------------- + // PRIVATE METHODS + // Create all necessary directories in a path + function MakeDirs($aFile) { + $dirs = array(); + while ( !(file_exists($aFile)) ) { + $dirs[] = $aFile; + $aFile = dirname($aFile); + } + for ($i = sizeof($dirs)-1; $i>=0; $i--) { + if(! @mkdir($dirs[$i],0777) ) + JpGraphError::RaiseL(25118,$aFile);//(" Can't create directory $aFile. Make sure PHP has write permission to this directory."); + // We also specify mode here after we have changed group. + // This is necessary if Apache user doesn't belong the + // default group and hence can't specify group permission + // in the previous mkdir() call + if( CACHE_FILE_GROUP != "" ) { + $res=true; + $res =@chgrp($dirs[$i],CACHE_FILE_GROUP); + $res &= @chmod($dirs[$i],0777); + if( !$res ) + JpGraphError::RaiseL(25119,$aFile);//(" Can't set permissions for $aFile. Permission problems?"); + } + } + return true; + } +} // CLASS Cache + +//=================================================== +// CLASS Legend +// Description: Responsible for drawing the box containing +// all the legend text for the graph +//=================================================== +DEFINE('_DEFAULT_LPM_SIZE',8); +class Legend { + var $color=array(0,0,0); // Default fram color + var $fill_color=array(235,235,235); // Default fill color + var $shadow=true; // Shadow around legend "box" + var $shadow_color='gray'; + var $txtcol=array(); + var $mark_abs_hsize=_DEFAULT_LPM_SIZE, $mark_abs_vsize=_DEFAULT_LPM_SIZE; + var $xmargin=10,$ymargin=3,$shadow_width=2; + var $xlmargin=2, $ylmargin=''; + var $xpos=0.05, $ypos=0.15, $xabspos=-1, $yabspos=-1; + var $halign="right", $valign="top"; + var $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=10; + var $font_color='black'; + var $hide=false,$layout_n=1; + var $weight=1,$frameweight=1; + var $csimareas=''; + var $reverse = false ; +//--------------- +// CONSTRUCTOR + function Legend() { + // Empty + } +//--------------- +// PUBLIC METHODS + function Hide($aHide=true) { + $this->hide=$aHide; + } + + function SetHColMargin($aXMarg) { + $this->xmargin = $aXMarg; + } + + function SetVColMargin($aSpacing) { + $this->ymargin = $aSpacing ; + } + + function SetLeftMargin($aXMarg) { + $this->xlmargin = $aXMarg; + } + + // Synonym + function SetLineSpacing($aSpacing) { + $this->ymargin = $aSpacing ; + } + + function SetShadow($aShow='gray',$aWidth=2) { + if( is_string($aShow) ) { + $this->shadow_color = $aShow; + $this->shadow=true; + } + else + $this->shadow=$aShow; + $this->shadow_width=$aWidth; + } + + function SetMarkAbsSize($aSize) { + $this->mark_abs_vsize = $aSize ; + $this->mark_abs_hsize = $aSize ; + } + + function SetMarkAbsVSize($aSize) { + $this->mark_abs_vsize = $aSize ; + } + + function SetMarkAbsHSize($aSize) { + $this->mark_abs_hsize = $aSize ; + } + + function SetLineWeight($aWeight) { + $this->weight = $aWeight; + } + + function SetFrameWeight($aWeight) { + $this->frameweight = $aWeight; + } + + function SetLayout($aDirection=LEGEND_VERT) { + $this->layout_n = $aDirection==LEGEND_VERT ? 1 : 99 ; + } + + function SetColumns($aCols) { + $this->layout_n = $aCols ; + } + + function SetReverse($f=true) { + $this->reverse = $f ; + } + + // Set color on frame around box + function SetColor($aFontColor,$aColor='black') { + $this->font_color=$aFontColor; + $this->color=$aColor; + } + + function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { + $this->font_family = $aFamily; + $this->font_style = $aStyle; + $this->font_size = $aSize; + } + + function SetPos($aX,$aY,$aHAlign="right",$aVAlign="top") { + $this->Pos($aX,$aY,$aHAlign,$aVAlign); + } + + function SetAbsPos($aX,$aY,$aHAlign="right",$aVAlign="top") { + $this->xabspos=$aX; + $this->yabspos=$aY; + $this->halign=$aHAlign; + $this->valign=$aVAlign; + } + + + function Pos($aX,$aY,$aHAlign="right",$aVAlign="top") { + if( !($aX<1 && $aY<1) ) + JpGraphError::RaiseL(25120);//(" Position for legend must be given as percentage in range 0-1"); + $this->xpos=$aX; + $this->ypos=$aY; + $this->halign=$aHAlign; + $this->valign=$aVAlign; + } + + function SetFillColor($aColor) { + $this->fill_color=$aColor; + } + + function Add($aTxt,$aColor,$aPlotmark="",$aLinestyle=0,$csimtarget='',$csimalt='',$csimwintarget='') { + $this->txtcol[]=array($aTxt,$aColor,$aPlotmark,$aLinestyle,$csimtarget,$csimalt,$csimwintarget); + } + + function GetCSIMAreas() { + return $this->csimareas; + } + + function Stroke(&$aImg) { + // Constant + $fillBoxFrameWeight=1; + + if( $this->hide ) return; + + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + + if( $this->reverse ) { + $this->txtcol = array_reverse($this->txtcol); + } + + $n=count($this->txtcol); + if( $n == 0 ) return; + + // Find out the max width and height of each column to be able + // to size the legend box. + $numcolumns = ($n > $this->layout_n ? $this->layout_n : $n); + for( $i=0; $i < $numcolumns; ++$i ) { + $colwidth[$i] = $aImg->GetTextWidth($this->txtcol[$i][0]) + + 2*$this->xmargin + 2*$this->mark_abs_hsize; + $colheight[$i] = 0; + } + + // Find our maximum height in each row + $rows = 0 ; $rowheight[0] = 0; + for( $i=0; $i < $n; ++$i ) { + $h = max($this->mark_abs_vsize,$aImg->GetTextHeight($this->txtcol[$i][0]))+$this->ymargin; + if( $i % $numcolumns == 0 ) { + $rows++; + $rowheight[$rows-1] = 0; + } + $rowheight[$rows-1] = max($rowheight[$rows-1],$h); + } + + $abs_height = 0; + for( $i=0; $i < $rows; ++$i ) { + $abs_height += $rowheight[$i] ; + } + + // Make sure that the height is at least as high as mark size + ymargin + $abs_height = max($abs_height,$this->mark_abs_vsize); + + // We add 3 extra pixels height to compensate for the difficult in + // calculating font height + $abs_height += $this->ymargin+3; + + // Find out the maximum width in each column + for( $i=$numcolumns; $i < $n; ++$i ) { + $colwidth[$i % $numcolumns] = max( + $aImg->GetTextWidth($this->txtcol[$i][0])+2*$this->xmargin+2*$this->mark_abs_hsize,$colwidth[$i % $numcolumns]); + } + + // Get the total width + $mtw = 0; + for( $i=0; $i < $numcolumns; ++$i ) { + $mtw += $colwidth[$i] ; + } + + // Find out maximum width we need for legend box + $abs_width = $mtw+$this->xlmargin; + + if( $this->xabspos === -1 && $this->yabspos === -1 ) { + $this->xabspos = $this->xpos*$aImg->width ; + $this->yabspos = $this->ypos*$aImg->height ; + } + + // Positioning of the legend box + if( $this->halign=="left" ) + $xp = $this->xabspos; + elseif( $this->halign=="center" ) + $xp = $this->xabspos - $abs_width/2; + else + $xp = $aImg->width - $this->xabspos - $abs_width; + + $yp=$this->yabspos; + if( $this->valign=="center" ) + $yp-=$abs_height/2; + elseif( $this->valign=="bottom" ) + $yp-=$abs_height; + + // Stroke legend box + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->frameweight); + $aImg->SetLineStyle('solid'); + + if( $this->shadow ) + $aImg->ShadowRectangle($xp,$yp,$xp+$abs_width+$this->shadow_width, + $yp+$abs_height+$this->shadow_width, + $this->fill_color,$this->shadow_width,$this->shadow_color); + else { + $aImg->SetColor($this->fill_color); + $aImg->FilledRectangle($xp,$yp,$xp+$abs_width,$yp+$abs_height); + $aImg->SetColor($this->color); + $aImg->Rectangle($xp,$yp,$xp+$abs_width,$yp+$abs_height); + } + + // x1,y1 is the position for the legend mark + $x1=$xp+$this->mark_abs_hsize+$this->xlmargin; + $y1=$yp + $this->ymargin; + + $f2 = round($aImg->GetTextHeight('X')/2); + + $grad = new Gradient($aImg); + $patternFactory = null; + + // Now stroke each legend in turn + // Each plot has added the following information to the legend + // p[0] = Legend text + // p[1] = Color, + // p[2] = For markers a reference to the PlotMark object + // p[3] = For lines the line style, for gradient the negative gradient style + // p[4] = CSIM target + // p[5] = CSIM Alt text + $i = 1 ; $row = 0; + foreach($this->txtcol as $p) { + + // STROKE DEBUG BOX + if( _JPG_DEBUG ) { + $aImg->SetLineWeight(1); + $aImg->SetColor('red'); + $aImg->SetLineStyle('solid'); + $aImg->Rectangle($xp,$y1,$xp+$abs_width,$y1+$rowheight[$row]); + } + + $aImg->SetLineWeight($this->weight); + $x1 = round($x1); $y1=round($y1); + if ( $p[2] && $p[2]->GetType() > -1 ) { + // Make a plot mark legend + $aImg->SetColor($p[1]); + if( is_string($p[3]) || $p[3]>0 ) { + $aImg->SetLineStyle($p[3]); + $aImg->StyleLine($x1-$this->mark_abs_hsize,$y1+$f2,$x1+$this->mark_abs_hsize,$y1+$f2); + } + // Stroke a mark with the standard size + // (As long as it is not an image mark ) + if( $p[2]->GetType() != MARK_IMG ) { + + // Clear any user callbacks since we ont want them called for + // the legend marks + $p[2]->iFormatCallback = ''; + $p[2]->iFormatCallback2 = ''; + + // Since size for circles is specified as the radius + // this means that we must half the size to make the total + // width behave as the other marks + if( $p[2]->GetType() == MARK_FILLEDCIRCLE || $p[2]->GetType() == MARK_CIRCLE ) { + $p[2]->SetSize(min($this->mark_abs_vsize,$this->mark_abs_hsize)/2); + $p[2]->Stroke($aImg,$x1,$y1+$f2); + } + else { + $p[2]->SetSize(min($this->mark_abs_vsize,$this->mark_abs_hsize)); + $p[2]->Stroke($aImg,$x1,$y1+$f2); + } + } + } + elseif ( $p[2] && (is_string($p[3]) || $p[3]>0 ) ) { + // Draw a styled line + $aImg->SetColor($p[1]); + $aImg->SetLineStyle($p[3]); + $aImg->StyleLine($x1-1,$y1+$f2,$x1+$this->mark_abs_hsize,$y1+$f2); + $aImg->StyleLine($x1-1,$y1+$f2+1,$x1+$this->mark_abs_hsize,$y1+$f2+1); + } + else { + // Draw a colored box + $color = $p[1] ; + // We make boxes slightly larger to better show + $boxsize = min($this->mark_abs_vsize,$this->mark_abs_hsize) + 2 ; + $ym = round($y1 + $f2 - $boxsize/2); + // We either need to plot a gradient or a + // pattern. To differentiate we use a kludge. + // Patterns have a p[3] value of < -100 + if( $p[3] < -100 ) { + // p[1][0] == iPattern, p[1][1] == iPatternColor, p[1][2] == iPatternDensity + if( $patternFactory == null ) { + $patternFactory = new RectPatternFactory(); + } + $prect = $patternFactory->Create($p[1][0],$p[1][1],1); + $prect->SetBackground($p[1][3]); + $prect->SetDensity($p[1][2]+1); + $prect->SetPos(new Rectangle($x1,$ym,$boxsize,$boxsize)); + $prect->Stroke($aImg); + $prect=null; + } + else { + if( is_array($color) && count($color)==2 ) { + // The client want a gradient color + $grad->FilledRectangle($x1,$ym, + $x1+$boxsize,$ym+$boxsize, + $color[0],$color[1],-$p[3]); + } + else { + $aImg->SetColor($p[1]); + $aImg->FilledRectangle($x1,$ym,$x1+$boxsize,$ym+$boxsize); + } + $aImg->SetColor($this->color); + $aImg->SetLineWeight($fillBoxFrameWeight); + $aImg->Rectangle($x1,$ym,$x1+$boxsize,$ym+$boxsize); + } + } + $aImg->SetColor($this->font_color); + $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); + $aImg->SetTextAlign("left","top"); + $aImg->StrokeText(round($x1+$this->mark_abs_hsize+$this->xmargin),$y1,$p[0]); + + // Add CSIM for Legend if defined + if( $p[4] != "" ) { + $xe = $x1 + $this->xmargin+$this->mark_abs_hsize+$aImg->GetTextWidth($p[0]); + $ye = $y1 + max($this->mark_abs_vsize,$aImg->GetTextHeight($p[0])); + $coords = "$x1,$y1,$xe,$y1,$xe,$ye,$x1,$ye"; + if( ! empty($p[4]) ) { + $this->csimareas .= "csimareas .= " target=\"".$p[6]."\""; + } + + if( !empty($p[5]) ) { + $tmp=sprintf($p[5],$p[0]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + if( $i >= $this->layout_n ) { + $x1 = $xp+$this->mark_abs_hsize+$this->xlmargin; + $y1 += $rowheight[$row++]; + $i = 1; + } + else { + $x1 += $colwidth[($i-1) % $numcolumns] ; + ++$i; + } + } + } +} // Class + + +//=================================================== +// CLASS DisplayValue +// Description: Used to print data values at data points +//=================================================== +class DisplayValue { + var $show=false,$format="%.1f",$negformat=""; + var $iFormCallback=''; + var $angle=0; + var $ff=FF_FONT1,$fs=FS_NORMAL,$fsize=10; + var $color="navy",$negcolor=""; + var $margin=5,$valign="",$halign="center"; + var $iHideZero=false; + + function Show($aFlag=true) { + $this->show=$aFlag; + } + + function SetColor($aColor,$aNegcolor="") { + $this->color = $aColor; + $this->negcolor = $aNegcolor; + } + + function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->ff=$aFontFamily; + $this->fs=$aFontStyle; + $this->fsize=$aFontSize; + } + + function SetMargin($aMargin) { + $this->margin = $aMargin; + } + + function SetAngle($aAngle) { + $this->angle = $aAngle; + } + + function SetAlign($aHAlign,$aVAlign='') { + $this->halign = $aHAlign; + $this->valign = $aVAlign; + } + + function SetFormat($aFormat,$aNegFormat="") { + $this->format= $aFormat; + $this->negformat= $aNegFormat; + } + + function SetFormatCallback($aFunc) { + $this->iFormCallback = $aFunc; + } + + function HideZero($aFlag=true) { + $this->iHideZero=$aFlag; + } + + function Stroke(&$img,$aVal,$x,$y) { + + if( $this->show ) + { + if( $this->negformat=="" ) $this->negformat=$this->format; + if( $this->negcolor=="" ) $this->negcolor=$this->color; + + if( $aVal===NULL || (is_string($aVal) && ($aVal=="" || $aVal=="-" || $aVal=="x" ) ) ) + return; + + if( is_numeric($aVal) && $aVal==0 && $this->iHideZero ) { + return; + } + + // Since the value is used in different cirumstances we need to check what + // kind of formatting we shall use. For example, to display values in a line + // graph we simply display the formatted value, but in the case where the user + // has already specified a text string we don't fo anything. + if( $this->iFormCallback != '' ) { + $f = $this->iFormCallback; + $sval = call_user_func($f,$aVal); + } + elseif( is_numeric($aVal) ) { + if( $aVal >= 0 ) + $sval=sprintf($this->format,$aVal); + else + $sval=sprintf($this->negformat,$aVal); + } + else + $sval=$aVal; + + $y = $y-sign($aVal)*$this->margin; + + $txt = new Text($sval,$x,$y); + $txt->SetFont($this->ff,$this->fs,$this->fsize); + if( $this->valign == "" ) { + if( $aVal >= 0 ) + $valign = "bottom"; + else + $valign = "top"; + } + else + $valign = $this->valign; + $txt->Align($this->halign,$valign); + + $txt->SetOrientation($this->angle); + if( $aVal > 0 ) + $txt->SetColor($this->color); + else + $txt->SetColor($this->negcolor); + $txt->Stroke($img); + } + } +} + +//=================================================== +// CLASS Plot +// Description: Abstract base class for all concrete plot classes +//=================================================== +class Plot { + var $line_weight=1; + var $coords=array(); + var $legend='',$hidelegend=false; + var $csimtargets=array(); // Array of targets for CSIM + var $csimwintargets=array(); // Array of window targets for CSIM + var $csimareas=""; // Resultant CSIM area tags + var $csimalts=null; // ALT:s for corresponding target + var $color="black"; + var $numpoints=0; + var $weight=1; + var $value; + var $center=false; + var $legendcsimtarget='',$legendcsimwintarget=''; + var $legendcsimalt=''; +//--------------- +// CONSTRUCTOR + function Plot(&$aDatay,$aDatax=false) { + $this->numpoints = count($aDatay); + if( $this->numpoints==0 ) + JpGraphError::RaiseL(25121);//("Empty input data array specified for plot. Must have at least one data point."); + $this->coords[0]=$aDatay; + if( is_array($aDatax) ) { + $this->coords[1]=$aDatax; + $n = count($aDatax); + for($i=0; $i < $n; ++$i ) { + if( !is_numeric($aDatax[$i])) { + JpGraphError::RaiseL(25070); + } + } + } + $this->value = new DisplayValue(); + } + +//--------------- +// PUBLIC METHODS + + // Stroke the plot + // "virtual" function which must be implemented by + // the subclasses + function Stroke(&$aImg,&$aXScale,&$aYScale) { + JpGraphError::RaiseL(25122);//("JpGraph: Stroke() must be implemented by concrete subclass to class Plot"); + } + + function HideLegend($f=true) { + $this->hidelegend = $f; + } + + function DoLegend(&$graph) { + if( !$this->hidelegend ) + $this->Legend($graph); + } + + function StrokeDataValue($img,$aVal,$x,$y) { + $this->value->Stroke($img,$aVal,$x,$y); + } + + // Set href targets for CSIM + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets=$aTargets; + $this->csimwintargets=$aWinTargets; + $this->csimalts=$aAlts; + } + + // Get all created areas + function GetCSIMareas() { + return $this->csimareas; + } + + // "Virtual" function which gets called before any scale + // or axis are stroked used to do any plot specific adjustment + function PreStrokeAdjust(&$aGraph) { + if( substr($aGraph->axtype,0,4) == "text" && (isset($this->coords[1])) ) + JpGraphError::RaiseL(25123);//("JpGraph: You can't use a text X-scale with specified X-coords. Use a \"int\" or \"lin\" scale instead."); + return true; + } + + // Get minimum values in plot + function Min() { + if( isset($this->coords[1]) ) + $x=$this->coords[1]; + else + $x=""; + if( $x != "" && count($x) > 0 ) { + $xm=min($x); + } + else + $xm=0; + $y=$this->coords[0]; + $cnt = count($y); + if( $cnt > 0 ) { + /* + if( ! isset($y[0]) ) { + JpGraphError('The input data array must have consecutive values from position 0 and forward. The given y-array starts with empty values (NULL)'); + } + */ + //$ym = $y[0]; + $i=0; + while( $i<$cnt && !is_numeric($ym=$y[$i]) ) + $i++; + while( $i < $cnt) { + if( is_numeric($y[$i]) ) + $ym=min($ym,$y[$i]); + ++$i; + } + } + else + $ym=""; + return array($xm,$ym); + } + + // Get maximum value in plot + function Max() { + if( isset($this->coords[1]) ) + $x=$this->coords[1]; + else + $x=""; + + if( $x!="" && count($x) > 0 ) + $xm=max($x); + else { + $xm = $this->numpoints-1; + } + $y=$this->coords[0]; + if( count($y) > 0 ) { + /* + if( !isset($y[0]) ) { + JpGraphError::Raise('The input data array must have consecutive values from position 0 and forward. The given y-array starts with empty values (NULL)'); + //$y[0] = 0; +// Change in 1.5.1 Don't treat this as an error any more. Just silently convert to 0 +// Change in 1.17 Treat his as an error again !! This is the right way to do !! + } + */ + $cnt = count($y); + $i=0; + while( $i<$cnt && !is_numeric($ym=$y[$i]) ) + $i++; + while( $i < $cnt ) { + if( is_numeric($y[$i]) ) + $ym=max($ym,$y[$i]); + ++$i; + } + + } + else + $ym=""; + return array($xm,$ym); + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimwintarget = $aCSIMWinTarget; + $this->legendcsimalt = $aCSIMAlt; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + function SetLineWeight($aWeight=1) { + $this->line_weight=$aWeight; + } + + function SetCenter($aCenter=true) { + $this->center = $aCenter; + } + + // This method gets called by Graph class to plot anything that should go + // into the margin after the margin color has been set. + function StrokeMargin(&$aImg) { + return true; + } + + // Framework function the chance for each plot class to set a legend + function Legend(&$aGraph) { + if( $this->legend != "" ) + $aGraph->legend->Add($this->legend,$this->color,"",0,$this->legendcsimtarget, + $this->legendcsimalt,$this->legendcsimwintarget); + } + +} // Class + + +//=================================================== +// CLASS PlotLine +// Description: +// Data container class to hold properties for a static +// line that is drawn directly in the plot area. +// Usefull to add static borders inside a plot to show +// for example set-values +//=================================================== +class PlotLine { + var $weight=1; + var $color="black"; + var $direction=-1; + var $scaleposition; + var $legend='',$hidelegend=false, $legendcsimtarget='', $legendcsimalt='', $legendcsimwintarget=''; + var $iLineStyle='solid'; + + +//--------------- +// CONSTRUCTOR + function PlotLine($aDir=HORIZONTAL,$aPos=0,$aColor="black",$aWeight=1) { + $this->direction = $aDir; + $this->color=$aColor; + $this->weight=$aWeight; + $this->scaleposition=$aPos; + } + +//--------------- +// PUBLIC METHODS + + function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimwintarget = $aCSIMWinTarget; + $this->legendcsimalt = $aCSIMAlt; + } + + function HideLegend($f=true) { + $this->hidelegend = $f; + } + + function SetPosition($aScalePosition) { + $this->scaleposition=$aScalePosition; + } + + function SetDirection($aDir) { + $this->direction = $aDir; + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetWeight($aWeight) { + $this->weight=$aWeight; + } + + function SetLineStyle($aStyle) { + $this->iLineStyle = $aStyle; + } + +//--------------- +// PRIVATE METHODS + + function DoLegend(&$graph) { + if( !$this->hidelegend ) + $this->Legend($graph); + } + + // Framework function the chance for each plot class to set a legend + function Legend(&$aGraph) { + if( $this->legend != "" ) { + $dummyPlotMark = new PlotMark(); + $lineStyle = 1; + $aGraph->legend->Add($this->legend,$this->color,$dummyPlotMark,$lineStyle, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + + function PreStrokeAdjust($aGraph) { + // Nothing to do + } + + function Stroke(&$aImg,&$aXScale,&$aYScale) { + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->weight); + $oldStyle = $aImg->SetLineStyle($this->iLineStyle); + if( $this->direction == VERTICAL ) { + $ymin_abs=$aYScale->Translate($aYScale->GetMinVal()); + $ymax_abs=$aYScale->Translate($aYScale->GetMaxVal()); + $xpos_abs=$aXScale->Translate($this->scaleposition); + $aImg->StyleLine($xpos_abs, $ymin_abs, $xpos_abs, $ymax_abs); + } + elseif( $this->direction == HORIZONTAL ) { + $xmin_abs=$aXScale->Translate($aXScale->GetMinVal()); + $xmax_abs=$aXScale->Translate($aXScale->GetMaxVal()); + $ypos_abs=$aYScale->Translate($this->scaleposition); + $aImg->StyleLine($xmin_abs, $ypos_abs, $xmax_abs, $ypos_abs); + } + else { + JpGraphError::RaiseL(25125);//(" Illegal direction for static line"); + } + $aImg->SetLineStyle($oldStyle); + } +} + +// +?> diff --git a/html/includes/jpgraph/src/jpgraph_antispam-digits.php b/html/includes/jpgraph/src/jpgraph_antispam-digits.php new file mode 100644 index 0000000000..f72f153338 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_antispam-digits.php @@ -0,0 +1,204 @@ +digits['6'][0]= 645 ; + $this->digits['6'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAEBAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwMC'. + 'BAQEBwAAAAAAAAABAgMEAAURBiESIjFRBxMUQRUWMmFTYnGRkrHC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAA'. + 'AAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDslwiR3oDku8ONttsAvDiVyMcO/ET7ke5/aoOz6k1Vr5htNjW7a7M1yO3NTQU9JUDu'. + 'GgrlSn8xyf6p4gXaHJvNps9/mKZtSkGdMjRwpfqAFBLLACRlZUrJONsI2717No1lbZ10kx7XGnRpKWQ/6GVGMfzEJ5VFIVtsOH6e'. + 'wyKVhYsia0y22pLThSkJK1uniVgdThOM0ol+StIUhpopIyCFq3H8aUVCwnG3PGe4Rp6fLXJtMdyM0ojcIWvIz3HFnAPfrWTXb6GN'. + 'WaLXDwZjVz8pKEfhuIUFg/bAz9sVJ61nt61mxJFslLtq7e5yPqiBT4UDklKw4MDpt+u+9bFiu9riXNu83R+fcr6tohuQ5HQhmK37'. + 'paaC8DruScmg6X8KkjZEhbaB9KEyFYSOw26Uqd+e7Qerl5z74DY/1SomP//Z' ; + +//========================================================== +// d2-small.jpg +//========================================================== + $this->digits['2'][0]= 606 ; + $this->digits['2'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEQMBIgACEQEDEQH/xAAYAAEBAQEBAAAAAAAAAAAAAAAFAAQHAv/EACsQAAEDBAEC'. + 'BAYDAAAAAAAAAAIBAwQABQYRIRIxQVFhcQcTFSJSU5GU0f/EABcBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAZEQACAwEAAAAAAAAA'. + 'AAAAAAAAARESUUH/2gAMAwEAAhEDEQA/AOqXm/Q8dxmOL4PPSnCSNFixx6nXnkXgRT3Te17JWbGsveueSyLZdbPItNxOKLzTLjou'. + 'gYCSoSoY8ISKSbFeUrzkdlnTL1YshskiErkQnFEZaF8kkdBBVdjyi6RNL5+9F486eS/ECVkcBtDt1vZcho5viS8ZCp9C9tAIAm/F'. + 'VoPRU+HRtJ5JVRP1kP0PfwP+1VKrHBMliXG4Nw8VgE4xGkuqk2S1wTUNEVdIvgpL9iL6KtNxY7WOwo9tt0RCitj0sR2uCbFPPzH1'. + '7+6rRuSRcljMBMsUy2tky045KOawZk5xtEFBJEROO3hx61kh2rPCIX3MhsyC4QmfTbC6lH8dq5212qwkiG5H6Y/9R2qm+ofxqqsL'. + 'DLZ6f//Z' ; + +//========================================================== +// d9-small.jpg +//========================================================== + $this->digits['9'][0]= 680 ; + $this->digits['9'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwP/xAArEAABAwMD'. + 'AgYBBQAAAAAAAAABAgMEBQYRABIhE1EUIjEzQUIHMlJhcdH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/xAAYEQEAAwEAAAAAAAAA'. + 'AAAAAAAAAREhQf/aAAwDAQACEQMRAD8AkK7brF6X7XpMeGoKhFMLEeT4ZUheEhanF4OcZ2pTgDykk92bZpdCsi7aezLjxkIPUZiV'. + 'RSCy8hah7EkZ27yM7V+iscal5bE22Lon1qNDmSKROd8Sl+Ix1lMOlIS4HGgQpbStoUCnlJz8HmsXtW3Lst2rmBAelLMRRekOwnYz'. + 'Edls9QKKnOVLyk7UgcbzzrdBthqEJJwZbAI4x1U/7o1TaFa9lG36aXaZTy54VrcXUgrzsGdx+T30aNydweqVw1GS87T6Lb86Q4ha'. + 'my/IAYjZBx+snKk99oOQMf1AViE65SY348hzFy6hPKnqtKz7DC1lbqyPrvJKUJ7H+M6Wrt3InP7o1brFNp4bCDGhxGAsqz69VSiQ'. + 'ORwBxrrQ7itm1ac7Hp0WoGTIc3PSn0pccdcP2WorycfA1RaRHjxosZqOyhtDTSAhCf2gDAGjVHTd9sKSCumynFEZK1tIJUe58/ro'. + '1V1//9k=' ; + +//========================================================== +// d5-small.jpg +//========================================================== + $this->digits['5'][0]= 632 ; + $this->digits['5'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgIFBwT/xAAoEAABAwME'. + 'AQQCAwAAAAAAAAABAgMEBQYRABIhIkEUMVFhBxNCgaH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/EABcRAQEBAQAAAAAAAAAAAAAA'. + 'AAABEUH/2gAMAwEAAhEDEQA/ANGvW4YVOeiRX5b4mv5Sin05IdlupPKdo/j2SO3+6TbPNQvOsTVz33KRT4csR3YUF7Dsh5OSFvug'. + 'kqG4FPBxnjxpvvi4KZb1pTpU+QwxUi2Y7ZIAefUk5ATxnB9/gbtL/wCH1UpuhPUlZlMVaQ0mS8zJjqZOPfc2TwpIUonI9tw40R1r'. + 'WNGq/wBdJR1XT3lqHBUnGCfkfWjRWs1ve249erQqQYjOtN1FqPUpCXQ4WIzQSsJwT0UpRwQPG0nzqyuNHobjsl9kBuWqoOoXtT1/'. + 'WppZcA8lKRj64HxqU+3KpAr6plElRVKef3S4E0K9O8pLXVzKcqSsJAB9wSAca6bSoNXeuA1+5pEV+SGFNU1iKVFqI0Vdx2AJUeoz'. + '8DGlTDwG3CAf3q/pI0ah6MDhLz6U+EpXwPoaNMU//9k=' ; + +//========================================================== +// d1-small.jpg +//========================================================== + $this->digits['1'][0]= 646 ; + $this->digits['1'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEwMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABQYCBAf/xAApEAACAQMD'. + 'AwQBBQAAAAAAAAABAgMEBREABiESMUEHEyJRkSNCYXGB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAA'. + 'AAAAAAEREv/aAAwDAQACEQMRAD8A6jdd4WLbstILnc4Uq0VoWpkJknb6IjXLHJUePOlez923fcW4r1SxWlqC2UbdKirQif3Xw3yA'. + 'OFAGT09/kO3OmV3a20MFRf6lIYPcpy7yRRAzgxjIy2M8YwcdiBzpX6d22VNvUlTXsFkuwkrKqNSfnK7F8OTzwrAY+l5zoxKskudN'. + 'EgQPUT9PBkWF3DH+1GPxo1mLnRoAqF2VRgGOFmX/AAgY/GjRUP6hVMFv2FuFqUvUGrpDFJMBnpdyF5bsAQew7Hxzp6LZNT0yQ1DI'. + 'wp0QCFBhD0jCsfLZHxbx5xxpTuvb1+v9PV7Ztk9roLPLCjmSSN3mX5ZwqjCgZX7PfWxDQb2in96pv9qq46aTE0bW4x9ceAWAYPwS'. + 'PsYzoixgmheBGjIVcYCnjp/jHjHbRpe1JLn9OnopE/a0ykvjwDx47aNMXqP/2Q==' ; + +//========================================================== +// d8-small.jpg +//========================================================== + $this->digits['8'][0]= 694 ; + $this->digits['8'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AFQMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABgcEBf/EACsQAAEDAwMD'. + 'AwMFAAAAAAAAAAECAwQFBhEAEiEUMVEHE0EVYYEiIzJCsf/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/EABcRAQEBAQAAAAAAAAAA'. + 'AAAAAAABERL/2gAMAwEAAhEDEQA/AKL6gVVUa0i1T5QjvTprUJMlxW4R9zgQXe/AH+kaWrntqlWjaq7gpcmotXAw82ht9yY4tch8'. + 'uAFC0k7VBXPGMY51ruiaue+bThIj+7NbWqS+7HDxajFf6AlB/k44o8ZOABk4xkL0X0tZiojKrlRuGRJjugqldSlKGf6t7BuUQe3J'. + '44xxxrA1a4KVJipLidri8uLHgqOcfjOPxo0o2hdDvS1CmV2Yl6fS5ioipIQR1CAlKkLKR2UUqAI8g6NRSwuuyHab6s1ufLI/Zai7'. + 'UBJOxhTS0+6B32pWSFH4CidOdWU0ukLiN1BLr0zG5Sdm3GRvcPhIT858DvjXNrVsSLnm/VIdTXS6tTnFsxZTSN3jchaTwps+O/z9'. + 'tcBVq3hIX0tYqlIiQHdy5CqRHKHXEjAOMgBKjnvyRk4xrQa7OiGt1K5biYZL8SoVEpjOqkFsONtJCNwASeCQrn7aNUKnQYtLp7EC'. + 'EylmLHQltptPZKQOBo1FzH//2Q==' ; + +//========================================================== +// d4-small.jpg +//========================================================== + $this->digits['4'][0]= 643 ; + $this->digits['4'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABAYHAv/EAC0QAAIBAwQA'. + 'BAMJAAAAAAAAAAECAwQFEQAGEiETFDFBUmGBByIjUVNxobHR/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAIB/8QAGBEBAAMBAAAAAAAA'. + 'AAAAAAAAAAERIVH/2gAMAwEAAhEDEQA/ANjM00Nxmt1xiWW31CZp5uJwoAAaOQ/n7qfcZHqO5my3q5XX7R6ijiqnNut9u4NyJ4yv'. + 'JJyjYr8Xhrn5g599J7x3ulBNU7Zo7dXXXcLQ8kURYi4epYtkALjOePv1nUvbLvV7P3BZm3DR3eh88Kp7pVzBZI6iUhGWRRGWwE44'. + 'HX3V+uiL1uHgt+vL/H+aNJQ3CSeCOaFqSaJ1DJKs/TqRkMOvQjvRorHE4pRDLNWLGlRHGUeYIORXs9e5B7OP31E0fmdyb/t0DJ4Q'. + '27bfx3YZzPUIoAAz7IpOD6cuxq0uNumqLfVNDOqXBoZEjnZcqhIPXH4c46+WkdoWOltu3IDDLLLVVR83UVcuPEmmcZZ2/rHoAANG'. + 'GI7KIY1ijoLeEQBVCwIoAHpgY6Hy0aZe7mJ2jeHLKcEhusj6aNKgzr//2Q==' ; + +//========================================================== +// d7-small.jpg +//========================================================== + $this->digits['7'][0]= 658 ; + $this->digits['7'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgEFBwT/xAAuEAABAwIE'. + 'BAQGAwAAAAAAAAABAgMEBREABiExEhMiQSMyUXEHFBclVJFhk9L/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAGREBAQEAAwAA'. + 'AAAAAAAAAAAAAAEREiFR/9oADAMBAAIRAxEAPwDXq9mCjZeQ05VZ5ZST4bfEpa3VdglCbqUe+g9MZ5Uq7V8415WXoMSdQ6etgSps'. + '19wpkCMDZKUpv0FZvbi1NzpYasMDLDUbMVXrtQdbeeU23xLWkj5RlLYK0J7anW9gbAjCzkOtsVSUJUdtc6dVZK51UeaFm4LKbhpC'. + 'l7EhIFkDW974GbRI2XorUVls1OTdKAOqUpR0Hc3198GITQ6k+hLwrEpoODiDenRfW23bBicg78JXxPpD0mgVOW5PAivNNpahsPW5'. + '8xxQaSVkboQnhsnYm5OHqDGp1IpsalMKjMsMIC3+XZKbJFth62/QOEfMOZqZXp9JcKZTcGmTky3meSi7xQklI81vMR+sXIz/AEgp'. + 'Q0qPNu6ea8Q2jqtbp8+2w9h/OKORc/cpHjt1dDSHOtLZ4ekHW23bBjj+o9H/AB539aP94MG0+L//2Q==' ; + +//========================================================== +// d3-small.jpg +//========================================================== + $this->digits['3'][0]= 662 ; + $this->digits['3'][1]= + '/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. + 'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. + 'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwL/xAArEAABBAED'. + 'AwMDBQEAAAAAAAABAgMEBREABhIhMUEiMmETFZEHFkJDUdH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/xAAYEQEBAQEBAAAAAAAA'. + 'AAAAAAAAEQExQf/aAAwDAQACEQMRAD8A0vclruBdk3VVLLUNssGRJsZSCtqOjlgJAHvcOD6c4HnOdIbcttw1W5P29cFEhuawqTXS'. + 'VsJjnCMBxKkJJx7goAde+ceJfdNxU0UNlyymyXHi6kxWUNl1S3EnkAEIHX2nv86qtTuZr9Q9+1VhRsOoYpYcgSVyAE/TdewkJxnK'. + 'sBCjkdPGpnOtFMd3PqsXgfOAgD8Y0aX+11H9rDDjn8lr9yj5J+dGqsqxaw6Cc9cQZU4Sp7zTJsIrKlcUEKwhSin1JABI45GUjqOu'. + 'lbOvjbc3Ts9ynjGCy445UuFLYRzbWgrT6fhSCQSMDke+pew2zYVly/d7YchNqkMJZnQpgV9J8IzwWFJyUrAJHYgjvpLbu37G5nR7'. + 'vck5C3YRKYEOEVJZj8kjKypXqWvirjk9h+dB9i4faa89TDZUfKlIyT8k+To10a6KTkpcJ/0vL/7o0TS//9k=' ; + } +} + +class AntiSpam { + + var $iNumber=''; + + function AntiSpam($aNumber='') { + $this->iNumber = $aNumber; + } + + function Rand($aLen) { + $d=''; + for($i=0; $i < $aLen; ++$i) { + $d .= rand(1,9); + } + $this->iNumber = $d; + return $d; + } + + function Stroke() { + + $n=strlen($this->iNumber); + for($i=0; $i < $n; ++$i ) { + if( !is_numeric($this->iNumber[$i]) || $this->iNumber[$i]==0 ) { + return false; + } + } + + $dd = new HandDigits(); + $n = strlen($this->iNumber); + $img = @imagecreatetruecolor($n*$dd->iWidth, $dd->iHeight); + if( $img < 1 ) { + return false; + } + $start=0; + for($i=0; $i < $n; ++$i ) { + $size = $dd->digits[$this->iNumber[$i]][0]; + $dimg = imagecreatefromstring(base64_decode($dd->digits[$this->iNumber[$i]][1])); + imagecopy($img,$dimg,$start,0,0,0,imagesx($dimg), $dd->iHeight); + $start += imagesx($dimg); + } + $resimg = @imagecreatetruecolor($start+4, $dd->iHeight+4); + if( $resimg < 1 ) { + return false; + } + imagecopy($resimg,$img,2,2,0,0,$start, $dd->iHeight); + header("Content-type: image/jpeg"); + imagejpeg($resimg); + return true; + } +} + +?> diff --git a/html/includes/jpgraph/src/jpgraph_antispam.php b/html/includes/jpgraph/src/jpgraph_antispam.php new file mode 100644 index 0000000000..7d87e22ac1 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_antispam.php @@ -0,0 +1,624 @@ +chars['j'][0]= 658 ; +$this->chars['j'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUGBAf/xAAsEAACAQMDAwMBCQAAAAAAAAAB'. +'AgMEBREAEjEGIUEUUXGBBxMVIiNSYWKC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEC/8QAGhEAAwADAQAAAAAAAAAAAAAAAAECERIh'. +'Mv/aAAwDAQACEQMRAD8A6veK2st8zRWSyV1dUBfvHaGVI4hknsS7AFv4AyM57ayWbqeS+11xtT2etttwo4YqhEqnQs5bcAfyk4AZ'. +'SOeD441TKRTyingUBG4/ah8j684+dSFzh/BvtaslejMUu9DPQTDnLx4lQ/ONw1TGBm0jdRWqguEMghEisWilgDmNs4Ze+MEEEH40'. +'aUVFTa7JeLjRXu4GjhmnNbSfqFQVlA3rkckOjH/Q99Glmkl0C/Q06pvsvT9vttXHDF6T1KrWbs5gRgQJM+FDlQxPhjpF1XcVq+qe'. +'jEoKiOecXBqh2TDDYIXLKuP6549xk8auI6aJqV45oknWdNswkAIkGMYIxjGO2NR1F0LZY5qkWqkS1xrM0M8lMSJpY+TGrnJiQ577'. +'cEgeNHhi7D3qC3UN69M8tIakRhgrh9o748+eNGtcCiKjjpkQKlMTEg3ZwoxtHHtgfTRpYXArvp//2Q==' ; + +//========================================================== +// lf-small.jpg +//========================================================== +$this->chars['f'][0]= 633 ; +$this->chars['f'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQFBgcC/8QAKxAAAgEDAwMCBQUAAAAAAAAA'. +'AQIDBBEhAAUGEjFBEyIHFFFhoRUzYnGS/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQP/xAAaEQACAwEBAAAAAAAAAAAAAAAAAQIRMRIh'. +'/9oADAMBAAIRAxEAPwDcnmLoIkiSYsouC3tA++O2lU9WkqVjJ+YdhZLsQI/4/YfQm50kZP0vbmaCSU0SRNIH6sghb9INs3t38dvp'. +'akUuz8x5DwdN5peS1jV1dSipSiVUigIcdQjQ26lIB/c6r3F86SZpE/zCFJaqsihQNhRgdj3Jyfxo0jDSbXHt9Oph9RAoV3qJGltY'. +'HDOxyb/nRpV0D3RXle21m48XraOk3IUSemUaV4g4Zc9ShcDtgff+tQfwvjq34Dtku7buamFqeJKemCCMxKFsEJU+/FrX8d76sEHG'. +'aNItzr4usVNdG3S0rmRYAVwEUmyjyQLZ11x7aF4zs9DQOyzml29I2cLa/pixIHi99DFCtU9dFuLIaijo9qiYPmR2mZmB9thgAHOD'. +'4+mjUrURyrUNMZFEkkIOFuFAbsP9d/OjVIQ6Vh4tP//Z' ; + +//========================================================== +// lb-small.jpg +//========================================================== +$this->chars['b'][0]= 645 ; +$this->chars['b'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYCAwUH/8QAKxAAAQMDAwMDAwUAAAAAAAAA'. +'AQIDBAAFEQYSIRMxUSJBYQcVI2JxgqHw/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQL/xAAYEQEBAQEBAAAAAAAAAAAAAAAAATERYf/a'. +'AAwDAQACEQMRAD8A6H95mxNYwLXcX+pCuilSLXJ6YSplaUELjqxwe4IJ5PIPamJ2V0bPcS7+NxCX1cHggAnIP+xSd9RyzHh2m7FQ'. +'Q1CvMNQWTjCt+HFD+PB/Y1fI1PL1HFFt0zaGblFdJQ9cJjpZiqPJUlBAKnPcEpGB5NNRKdrOl1NlgiQol4R2w4Sc5VtGf7opZteo'. +'LhdorjUSM5FnQnlR50NeHQysYxtVxlJHIPgjtRRD3xkaghs6juumdHz4+Y7RVPnt59K2mk7W+fcKWsZ7djTXMkW+xMP3GRJjwIEN'. +'HTG/CWx5wPY8AADx2NYk3SL9wukvUjGobnBkORksIbjdMANozgEqSo8qJPGO/wAVO36IsjUmBIfZfuM7epZk3F9UhSSk5O0K9Kcq'. +'8AcU3UzFuhUSBFud6nRXoz96mqmJZWg7m2dqUNhWBwdqQSP1UU5c/FFCn//Z' ; + +//========================================================== +// d6-small.jpg +//========================================================== +$this->chars['6'][0]= 645 ; +$this->chars['6'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAEBAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwMC'. +'BAQEBwAAAAAAAAABAgMEAAURBiESIjFRBxMUQRUWMmFTYnGRkrHC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAA'. +'AAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDslwiR3oDku8ONttsAvDiVyMcO/ET7ke5/aoOz6k1Vr5htNjW7a7M1yO3NTQU9JUDu'. +'GgrlSn8xyf6p4gXaHJvNps9/mKZtSkGdMjRwpfqAFBLLACRlZUrJONsI2717No1lbZ10kx7XGnRpKWQ/6GVGMfzEJ5VFIVtsOH6e'. +'wyKVhYsia0y22pLThSkJK1uniVgdThOM0ol+StIUhpopIyCFq3H8aUVCwnG3PGe4Rp6fLXJtMdyM0ojcIWvIz3HFnAPfrWTXb6GN'. +'WaLXDwZjVz8pKEfhuIUFg/bAz9sVJ61nt61mxJFslLtq7e5yPqiBT4UDklKw4MDpt+u+9bFiu9riXNu83R+fcr6tohuQ5HQhmK37'. +'paaC8DruScmg6X8KkjZEhbaB9KEyFYSOw26Uqd+e7Qerl5z74DY/1SomP//Z' ; + +//========================================================== +// lx-small.jpg +//========================================================== +$this->chars['x'][0]= 650 ; +$this->chars['x'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABMDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUHBgj/xAApEAABAwMDAwQCAwAAAAAAAAAB'. +'AgMEBQYRACFBBxIxFCJRgRNxkcHw/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAMAwEA'. +'AhEDEQA/AH9t3pKvO14UykVARa/HfAlxlDKXR24V2p3z7RlPwdtMep91uWdRGHWELjuTFFtLvcC4SNznnH+21O7ttiodOq1BvC0E'. +'p9I0lSX2kgqCSklK+5PKCMAng6zV2XRO6u3lSIURtbDRShltlZHa0tW7q/0MeTwnjxq1Jiw2xc9xTLbhSVU5iaXUFfqFFILgJOCd'. +'9Gt3SXabR6REpkL8yo0RpLCFNx1qBCRjOQMHxo0pEr6o3um2LVYpMEpTVqg25lHn08dfcB9kEgfZ1LIFDuawqZRb7aQlLTzqglsg'. +'9wQdveOEqBIB425xqhQuk8qo9UKlPrlRblw2ZBeCSVKW6CcoSrI2AGOT41SKzT4dYtmdS5bIXDZhNoWgbZJ94x8AYT/GkM03oNUc'. +'uKgwqtTZDTMOU0FttqRkoHggnPkEEHRrkJ6t1SlSHYUOc6zHaWrsbQrATk5/vRqK/9k=' ; + +//========================================================== +// d2-small.jpg +//========================================================== +$this->chars['2'][0]= 606 ; +$this->chars['2'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEQMBIgACEQEDEQH/xAAYAAEBAQEBAAAAAAAAAAAAAAAFAAQHAv/EACsQAAEDBAEC'. +'BAYDAAAAAAAAAAIBAwQABQYRIRIxQVFhcQcTFSJSU5GU0f/EABcBAAMBAAAAAAAAAAAAAAAAAAECAwT/xAAZEQACAwEAAAAAAAAA'. +'AAAAAAAAARESUUH/2gAMAwEAAhEDEQA/AOqXm/Q8dxmOL4PPSnCSNFixx6nXnkXgRT3Te17JWbGsveueSyLZdbPItNxOKLzTLjou'. +'gYCSoSoY8ISKSbFeUrzkdlnTL1YshskiErkQnFEZaF8kkdBBVdjyi6RNL5+9F486eS/ECVkcBtDt1vZcho5viS8ZCp9C9tAIAm/F'. +'VoPRU+HRtJ5JVRP1kP0PfwP+1VKrHBMliXG4Nw8VgE4xGkuqk2S1wTUNEVdIvgpL9iL6KtNxY7WOwo9tt0RCitj0sR2uCbFPPzH1'. +'7+6rRuSRcljMBMsUy2tky045KOawZk5xtEFBJEROO3hx61kh2rPCIX3MhsyC4QmfTbC6lH8dq5212qwkiG5H6Y/9R2qm+ofxqqsL'. +'DLZ6f//Z' ; + +//========================================================== +// lm-small.jpg +//========================================================== +$this->chars['m'][0]= 649 ; +$this->chars['m'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAcDBAUCBv/EAC0QAAICAQMCBAMJAAAAAAAA'. +'AAECAwQRAAUSBiETMVFhB2KhFSIyQVJxgZHB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgED/8QAGREBAQEAAwAAAAAAAAAAAAAAAQAR'. +'EiEx/9oADAMBAAIRAxEAPwB0MI2lIdgI0Cly3kFXLEn2zx1FDdp7rbpbjUtRWKio3hyxOGQllJzkegX66rQ2qW87Zuk9S5FNVmru'. +'iywyBhjDKTkeXfSr+GRfYtq2KAO32b1BGxAZu0dyJ2DKPTxY1wPddVszycUq2Golq8jRWbcnJWwCVGMjz+VQP50atxMtm2ZUOY4l'. +'4qfUnBP0x/Z0amy4jJm10Tt2yddWasFmfaRfdrlG3UcgArnxKzJ+Fu4DqCMkcgNem2DoWav8PLfTm+FPEkuSNTnqueS5bnHIv6CG'. +'LNjJwM99bm67NB1Ht89KSxNXnr2hNDbiUc47K4KyD2GQMfmMjUnS+7vuIktTqPCaaWCqAMMojPFyw8hyYMQBnAwNJHYGXPTsW9VN'. +'jg2zf50W9zk524GAEihuz+xbIOD82jW5TkjtRPZkTkJ+4VgDhQfuj/f3OjUxl1f/2Q==' ; + +//========================================================== +// lt-small.jpg +//========================================================== +$this->chars['t'][0]= 648 ; +$this->chars['t'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQDBQYH/8QAJxAAAQMDAgYDAQEAAAAAAAAA'. +'AQIDBAUGEQASEyExQVFhIjJxFSP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAP/xAAZEQADAQEBAAAAAAAAAAAAAAAAAREhMUH/2gAM'. +'AwEAAhEDEQA/AO4BLEiEy7uG4IGxxs5IOOx76wd2XYidSp1HoD70240gcNNPbDyI6wQQpaz8E9MczkdhqtbsKYLieDk6WLKmZmmL'. +'Hk7AHVkbkLI+RQc7uRxgkfr1tx2rGu6VbToLVKkhU+kbugGf9WfaknCk5ycaX0zmaa+3JkqvW/CmzojsB9xoF6OoFK0r6HOcEDI0'. +'aefTuKX5ScMdC14HYq8n12zo1DEUcKTGg1Z+hyBwoPBVIiA/VQyOIgedhUCB4WMfXSV3UufVLcTUIqVf26K6mXDbPVRRzKT54iMg'. +'+zjtq6mtsyJjclxpKlUhSXEbkgkqWnBx4+J5e/zU0pZemPvJJQzEPDfQOrwwFY9AZ5eeYPLV6FwhoFYZuigxpkJeIjqAeIoAk9wA'. +'D46EnuD+6Nc1smDNrTlRkxqtMo1vzKhIdYgU9YDqVpISrLhHxSSd21I0aYyqP//Z' ; + +//========================================================== +// li-small.jpg +//========================================================== +$this->chars['i'][0]= 639 ; +$this->chars['i'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABwAGBP/EACcQAAEEAQMEAgIDAAAAAAAAAAEC'. +'AwQRBQAGEiExQVEHExSBFWFx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgMB/8QAGBEBAQEBAQAAAAAAAAAAAAAAAAECMRH/2gAMAwEA'. +'AhEDEQA/AE7c+5M9BeRG29t1WUfKFFYW+GvrI7WD3B9g140YD5T36rcErDjbUR6dCBdejsKUpxITXI2FUrooCh70yvxzHyIlMvuK'. +'eVSH7IKEpJoKqu/ahddLryR/aMiO187bsmrWShhp1AZS2XHHrWhNJrzdf7f7GiVcHk3sptmHkJcJ2DIftS2FrKlJPXudWuLGYeQp'. +'t2fmEIckqIZaaKuSGG0lQ4gduRoFRHQ9AOgs2lOJbk9aSUlpjGvAWeSVH2VKq/2dFPw3IjyJe8s281ct3I9UoHJXGiQkD2STrSZ7'. +'Yf8AOl7JTdw5eOCz0jw3+LbYCfA9nz71msb8KMxoTGTw+5srjsipAdDqFBQBIuiOl6KrdYyJMyTCshlw2G3Fr/HiNqNNAqJJUoGl'. +'KND+h47km1bZwsvCbYYjycxIyK1qDv2yEi0hQviK8atKDcy9j//Z' ; + + +//========================================================== +// lp-small.jpg +//========================================================== +$this->chars['p'][0]= 700 ; +$this->chars['p'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGgAAAQUBAAAAAAAAAAAAAAAAAAECBAUGB//EAC8QAAEDAwMCBAMJAAAAAAAA'. +'AAECAwQFESEABhIiMRMVUWEHFEEWIzIzcYGRocH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAcEQACAgIDAAAAAAAAAAAAAAAA'. +'AQIxAxESIUH/2gAMAwEAAhEDEQA/AOh703xG21DMeOyqoVNDjSzERiwU6Ep5qtZNycA97HTF13d33KWtmlt9xwkLl1NkXVxIuQgK'. +'wLj+hqBvel0qmbR8GnR22nJNZiLeeKr8nDIT1OLJucX+uPbWom7iocRpafOac5MX1ALltp/Cbi+cJH++utdh+WVNL3PNdNYpdWgx'. +'Y0qmLZSrwJJcQoOJ5XKlJFu4HbJOjVbt+V5nu7eopNRivqcdhK+bFnWwA1Y2AOcgjvj9dGlxy0g5y0xd+hNXoG24C4obizq3HZUh'. +'YHqtRHD06bG/8a0MbbG1mqekxaBSGmgkrcdcitlLfrckZIz7DUatbeFak0tyRLUwzT5vmiGm0cufEkFBJItfkD+59tKmiO12atFa'. +'eQukO3ejUxgENqTcfnE5WbkHiOnJ76N2IqI1DibabptS+zkZhtp90F2Y0S026EkAFK/qL46cXv65NVZDfxHmVCK4DE2/RX/lRFbA'. +'C5LwAyq2EtpHZI7mxPYDRqoctdESimz/2Q==' ; + +//========================================================== +// le-small.jpg +//========================================================== +$this->chars['e'][0]= 700 ; +$this->chars['e'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABgDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYEBQcB/8QAKhAAAQMCBAUEAwEAAAAAAAAA'. +'AgEDBAURAAYSIQciMTJBE0JRYRQVFoH/xAAXAQEBAQEAAAAAAAAAAAAAAAAAAgED/8QAGREAAwEBAQAAAAAAAAAAAAAAAAERAjFB'. +'/9oADAMBAAIRAxEAPwDTszvhEYCoS80BTm2bCjQRwdAzVe2yopkpJtpRUVfjEIc4V2oMerByg5Ji30oMyS3GeMunK0upfnu09MdJ'. +'p2scTmWnnGfx6HThktgLfKj7xEOqyr7QBbL41LhBzpxbcOru0LKDLdSnOHoaltNqSC4qWL0x9xbJYum69caczSaHmGmTmpDUYn4l'. +'UiqjkynzAVtwV23Ud+X4Ibpa2DCPkjhfUaRO/p8yzpb+YHhUmhbev6ZEll1lvqK3jt2XrbBgp6HVwsK3THpfEubGSoOUyFMpbJmL'. +'Deh6SgOGKti57EuY6l62JMWdJy7k3hg1LkOozEbVm7suQSkTiKtkEfP1pH664Za/QItccgI4bseTHdNxiXHLQ8yVl7V32XyioqL5'. +'TGc1ng6eYs0idczXUZscBBABWgEhEtfKNuUezwPnBhEuj8X2M21z9BR6NUX211Kk/UKKAjuhkPhL7XVf8vtgw7UPJlEyrDWFSYLb'. +'LBNF6qrzG6t0spEu6+fpL7YMXhUndp//2Q==' ; + +//========================================================== +// la-small.jpg +//========================================================== +$this->chars['a'][0]= 730 ; +$this->chars['a'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABoDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAABgMEBwX/xAAvEAABAwIFAQcCBwAAAAAAAAAB'. +'AgMEBREAEiExQQYHFBUiUXGBE2EyQkNSgpHh/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAMBAv/EABkRAAMBAQEAAAAAAAAAAAAAAAAB'. +'IQIRMf/aAAwDAQACEQMRAD8AfdQ1pxjqZMSn0mRUZRYDaklJCE3OawO2ttTxY4hl07qFMVs1Ku02kpPnRGhsAqz8W9T9wDjozq6o'. +'Q1lDrcZLGVcmUoZg0obpufxK3Ftt9ccqB1GgBcmLSqtVEqOZcr6ARm/kbXHt7DEtc7WTJKTJqEWvRKfLqL9QplSjuPtGVYOJKBrm'. +'t+U+n94WGStZzNypmRWqckUKTbixy6jAfxPxHtCgKqFNlU5huK6pLMndSlegG4J45N8aKmTMKQRBsCNMzwB+RbHWHGEAZlPZX2hx'. +'qZIC34ygZoYUbB50JSkFXFhZR9BrpheR4fIbQ6gvurJ7q02bIQTuAOAN8x40HAxRr3TrNRpBmSHVt1KMlTyJTCsqkKAPlSf28W+c'. +'UGaD1c9HSR1HFUh9tJU45EBcAtcC9+P9wqbg8IAto9o81yputrVGpiUkgHKkqUTZI32+cKm1z1tIUgPBBAKQ4UBQH3uL3xmXSXep'. +'HVDtXStE5K5jlPU7PF3Q41+okJFkjgC+3OuNSYiSzHaLtRcW4UDMpLYSCbakDW3thhum5p//2Q==' ; + +//========================================================== +// d9-small.jpg +//========================================================== +$this->chars['9'][0]= 680 ; +$this->chars['9'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwP/xAArEAABAwMD'. +'AgYBBQAAAAAAAAABAgMEBQYRABIhE1EUIjEzQUIHMlJhcdH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAQD/xAAYEQEAAwEAAAAAAAAA'. +'AAAAAAAAAREhQf/aAAwDAQACEQMRAD8AkK7brF6X7XpMeGoKhFMLEeT4ZUheEhanF4OcZ2pTgDykk92bZpdCsi7aezLjxkIPUZiV'. +'RSCy8hah7EkZ27yM7V+iscal5bE22Lon1qNDmSKROd8Sl+Ix1lMOlIS4HGgQpbStoUCnlJz8HmsXtW3Lst2rmBAelLMRRekOwnYz'. +'Edls9QKKnOVLyk7UgcbzzrdBthqEJJwZbAI4x1U/7o1TaFa9lG36aXaZTy54VrcXUgrzsGdx+T30aNydweqVw1GS87T6Lb86Q4ha'. +'my/IAYjZBx+snKk99oOQMf1AViE65SY348hzFy6hPKnqtKz7DC1lbqyPrvJKUJ7H+M6Wrt3InP7o1brFNp4bCDGhxGAsqz69VSiQ'. +'ORwBxrrQ7itm1ac7Hp0WoGTIc3PSn0pccdcP2WorycfA1RaRHjxosZqOyhtDTSAhCf2gDAGjVHTd9sKSCumynFEZK1tIJUe58/ro'. +'1V1//9k=' ; + +//========================================================== +// d5-small.jpg +//========================================================== +$this->chars['5'][0]= 632 ; +$this->chars['5'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgIFBwT/xAAoEAABAwME'. +'AQQCAwAAAAAAAAABAgMEBQYRABIhIkEUMVFhBxNCgaH/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/EABcRAQEBAQAAAAAAAAAAAAAA'. +'AAABEUH/2gAMAwEAAhEDEQA/ANGvW4YVOeiRX5b4mv5Sin05IdlupPKdo/j2SO3+6TbPNQvOsTVz33KRT4csR3YUF7Dsh5OSFvug'. +'kqG4FPBxnjxpvvi4KZb1pTpU+QwxUi2Y7ZIAefUk5ATxnB9/gbtL/wCH1UpuhPUlZlMVaQ0mS8zJjqZOPfc2TwpIUonI9tw40R1r'. +'WNGq/wBdJR1XT3lqHBUnGCfkfWjRWs1ve249erQqQYjOtN1FqPUpCXQ4WIzQSsJwT0UpRwQPG0nzqyuNHobjsl9kBuWqoOoXtT1/'. +'WppZcA8lKRj64HxqU+3KpAr6plElRVKef3S4E0K9O8pLXVzKcqSsJAB9wSAca6bSoNXeuA1+5pEV+SGFNU1iKVFqI0Vdx2AJUeoz'. +'8DGlTDwG3CAf3q/pI0ah6MDhLz6U+EpXwPoaNMU//9k=' ; + +//========================================================== +// d1-small.jpg +//========================================================== +$this->chars['1'][0]= 646 ; +$this->chars['1'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEwMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABQYCBAf/xAApEAACAQMD'. +'AwQBBQAAAAAAAAABAgMEBREABiESMUEHEyJRkSNCYXGB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAA'. +'AAAAAAEREv/aAAwDAQACEQMRAD8A6jdd4WLbstILnc4Uq0VoWpkJknb6IjXLHJUePOlez923fcW4r1SxWlqC2UbdKirQif3Xw3yA'. +'OFAGT09/kO3OmV3a20MFRf6lIYPcpy7yRRAzgxjIy2M8YwcdiBzpX6d22VNvUlTXsFkuwkrKqNSfnK7F8OTzwrAY+l5zoxKskudN'. +'EgQPUT9PBkWF3DH+1GPxo1mLnRoAqF2VRgGOFmX/AAgY/GjRUP6hVMFv2FuFqUvUGrpDFJMBnpdyF5bsAQew7Hxzp6LZNT0yQ1DI'. +'wp0QCFBhD0jCsfLZHxbx5xxpTuvb1+v9PV7Ztk9roLPLCjmSSN3mX5ZwqjCgZX7PfWxDQb2in96pv9qq46aTE0bW4x9ceAWAYPwS'. +'PsYzoixgmheBGjIVcYCnjp/jHjHbRpe1JLn9OnopE/a0ykvjwDx47aNMXqP/2Q==' ; + +//========================================================== +// ll-small.jpg +//========================================================== +$this->chars['l'][0]= 626 ; +$this->chars['l'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAYEBQf/xAArEAACAQIFAwIGAwAAAAAAAAAB'. +'AgMEEQAFBhIhFEFREzEHFSIyYcFxgZH/xAAXAQEAAwAAAAAAAAAAAAAAAAACAAED/8QAGhEAAwEAAwAAAAAAAAAAAAAAAAECMREh'. +'Qf/aAAwDAQACEQMRAD8A15Zfm1VURj1Fp5AqLKv3OARcL4W5Nzx+MLWjdRz5hqXU6TSb6OCr6WghiQbrJ91gOTy1yT5xZ55myZFk'. +'Gb5ozX6Ondm28XYqpQDwu7jEH4c5S2UaDy4xxrLmlUDWzk8XaQ3O49hbj+RiB85HNg8Ee3aqwIqhDuux7G/HHbvzgxEqaWOvy09R'. +'O0o3hjdQoUji20g+fY3wYSM6pJ4Ylr7V+Zz5PSaezHTlTRNWzxySSxt6q1MSkH6AOT2Fu3Aw7RfF/T9DEkLUeawuF2mKSgdWQj2/'. +'q3+fnDZDlqRZzQGaOGcpTOaeR1u8R+ncN3gj94so2jNWHeMNNKzorEX2qp9v3imNPoRE1zpjUtZ09HJmYq5lury0benZeTww23t3'. +'Ivgw+T0yRRyyxIqNfkLcA8jt7YMKcBWn/9k=' ; + + +//========================================================== +// ls-small.jpg +//========================================================== +$this->chars['s'][0]= 701 ; +$this->chars['s'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAMCBAUGB//EACwQAAEEAQIFAgUFAAAAAAAA'. +'AAECAwQFEQAGEhMUITEiYQcjQVFxFRZCUoH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAZEQADAQEBAAAAAAAAAAAAAAAAAQIR'. +'EiH/2gAMAwEAAhEDEQA/APWZMhmFXSJU+SGmWFiQtAWMJQAnJUr8Z+w/OuQk71uZnMsqnbjy9s8st9UMCQ6kZJdZaIHEkZ/JHceN'. +'N3HtizuY1JLrG48yLBSC9UTFKQiY4nACir+wAOOMEe2rm2bTbzlqtE1MyBuZAPybpw85KSfDRJ4Cg+Pl/wC61hJeGjV31VuuKqwr'. +'LGU+whZZK+Rw+oYJAyj3GjS4dZFpZVkqPLktdfMXNcaU2kBC1BIITkdx6c599GlnvPAa3TL2vNvU76n0063acr3YSLCEjpUpUQtW'. +'Dhf14SMEnOc57aZ8Tegm7dbrEQGZt1PeTDgc1PEW3FeXAvyAkZVkeMDOm2G3f3O7Cl/qEuqkQg4lp6CRxraWfUlRUD24kZA741Ko'. +'2k1HvlT3ri2sLOCgtsyJz6XEtBwZPAgJAGQMHUNPWKqWItsqh0UCFVyLeKhyLHQ2TMdHNVj+RKlAnJyfto1FW2ahgjrq6LYTFjjf'. +'lymUOLdWfJyoHA+gA7AAAaNPE3ysJdLT/9k=' ; + +//========================================================== +// lh-small.jpg +//========================================================== +$this->chars['h'][0]= 677 ; +$this->chars['h'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGgAAAQUBAAAAAAAAAAAAAAAAAAIDBAUGB//EACwQAAIBAwMCBQIHAAAAAAAA'. +'AAECAwQFEQAGEiExExQiQVEVggcyU2GRocH/xAAXAQADAQAAAAAAAAAAAAAAAAAAAwQB/8QAGhEBAQEAAwEAAAAAAAAAAAAAAQAC'. +'AyEyMf/aAAwDAQACEQMRAD8A6DZb95q9bmpK6ieOCzNHJTxmE+NMhQ5fr1fLq3Ejvkak2e7ipiFsqb3R0m4qkPPJRiRXenU9VjKE'. +'5JVcA9R7nWc3/BUbfoKTdO3VRXhpjbZ2D8Rwk6RyZH6chB+46m7i2hDYtgA2ePlV2VkuKysoLzzRnlIScZJZeeevvjtrX7LK2rp7'. +'tTwwJ9WjhILDrTKnIdMEDl2+P80aVdJZb1QW+vgqENLPH4sBCDLIwUgnOf4GjVvDnLgUk79T81voqjb8NnuUx8pVRCiEaYUSuynl'. +'jHU9mOfnOoOx6hqz8PrbNdfEkMUXg1LSM3rKOUywJ7YAJ1ZTWmSpvdvlaVTDSUzJAhH5ZJBgv0x2RSAPlz21WXqoet3ba9nuW8n4'. +'Jr6qTPqnUNxSM/f6mPvxA9zqJnExTbR+h0nkhVu1uE8j0UBRQ9PGxBKFjnkAScdsDp10a0lc7z0tI7Y5YYN+5GAf7GjVXF4Icj3f'. +'/9k=' ; + + +//========================================================== +// ld-small.jpg +//========================================================== +$this->chars['d'][0]= 681 ; +$this->chars['d'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQFBgH/xAAsEAABAwMEAAQFBQAAAAAAAAAB'. +'AgMEBQYRABIhMQcTI0EUMlFhkRgicaGx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAgEA/8QAGBEBAQEBAQAAAAAAAAAAAAAAAAECETH/'. +'2gAMAwEAAhEDEQA/ALUhp6h3W/X63UlypbhCY0WMjLqGzwDtPCfv/WtealNpVInuVBBqCogcdbU36YUkAkJWVHG8YPXBxxzxqPcN'. +'YtWyWnIlUeW05VEOAvrCnnSkftK1H5lKJPHsMDoDUWq+KdrSbIqsalVsImiEtLUZ2MU71bcYJWkhZ/36ayLHhi/IXZVOmzKqp5uU'. +'688hTyjuGVEFJKvoQesD86NL2jGZp1EoLDSmk+ZAQ8d7oPzp3YGesFWMfxo1YGvSzLsT9QExVX8phTlMaFOExAJIBGQjJwCcL+/e'. +'rd+W7GuO0Kw05CQ6+ww69Gfdb2kFIKk7DgEkjgnr86rXRa9HuyP8LV4SH0sIBbWFFDiFEgDaocgdkjo8ccay0qw7ut5nyrcviQqC'. +'slsRKo0HwlODkBRzxj2AGoXTtpzIdQ8MbffUChz4NCPRaClAo9Mn6c7T3o13wytmo0K05VIqkiPJbizFiMWs4CTgnIIHOST796NL'. +'Ia1JX//Z' ; + +//========================================================== +// d8-small.jpg +//========================================================== +$this->chars['8'][0]= 694 ; +$this->chars['8'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AFQMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABgcEBf/EACsQAAEDAwMD'. +'AwMFAAAAAAAAAAECAwQFBhEAEiEUMVEHE0EVYYEiIzJCsf/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/EABcRAQEBAQAAAAAAAAAA'. +'AAAAAAABERL/2gAMAwEAAhEDEQA/AKL6gVVUa0i1T5QjvTprUJMlxW4R9zgQXe/AH+kaWrntqlWjaq7gpcmotXAw82ht9yY4tch8'. +'uAFC0k7VBXPGMY51ruiaue+bThIj+7NbWqS+7HDxajFf6AlB/k44o8ZOABk4xkL0X0tZiojKrlRuGRJjugqldSlKGf6t7BuUQe3J'. +'44xxxrA1a4KVJipLidri8uLHgqOcfjOPxo0o2hdDvS1CmV2Yl6fS5ioipIQR1CAlKkLKR2UUqAI8g6NRSwuuyHab6s1ufLI/Zai7'. +'UBJOxhTS0+6B32pWSFH4CidOdWU0ukLiN1BLr0zG5Sdm3GRvcPhIT858DvjXNrVsSLnm/VIdTXS6tTnFsxZTSN3jchaTwps+O/z9'. +'tcBVq3hIX0tYqlIiQHdy5CqRHKHXEjAOMgBKjnvyRk4xrQa7OiGt1K5biYZL8SoVEpjOqkFsONtJCNwASeCQrn7aNUKnQYtLp7EC'. +'EylmLHQltptPZKQOBo1FzH//2Q==' ; + +//========================================================== +// lz-small.jpg +//========================================================== +$this->chars['z'][0]= 690 ; +$this->chars['z'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABgAHA//EACsQAAEDAwQBAwIHAAAAAAAAAAEC'. +'AwQFESEABhIxBxMiQVFxCCM0UmGRof/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABgRAAMBAQAAAAAAAAAAAAAAAAABEVEC/9oA'. +'DAMBAAIRAxEAPwBTWfLu1KXXZDbM4uewNvLajlwhaCbBAwDe5uehYd3xm6t6bi3jvulwqc7KgxXZZeYQLNLeF73WRg4HEdgfzrSa'. +'P45pNEkznITDc9ypLShtyWhJDJyXC2qxJHZvjoZOjyVv1v8AESt6FFS4ijxvTLbawEApSccrYHJf0+OtJMQ2rNXk7GZMufJgJjTH'. +'Un9M4qzxT7hyCiThIyRnPXWrRvyLElVBUF6vlhl0lwRYCFKcQhAtyWpVhyWTx+w++rUvp4EWjOvbniUOnVatcS43BYDbJSPZyIBw'. +'ejclIx+3Wa+J63T6DQanuGszI0eZVJJV60p0Jum5GEi6le7l0PjvSjyRsaTvJqI1BqhhR46ksuMrQVJcUSEoUbHNr/7o7C8L7eiz'. +'4lLlyJk2cEqW+6V+m0AE9ISLnsj5+O9UhsFK92bZZqb9SRu9p2c4A0OCEqDbYAJSlJwAVZv3fBvbFrg/462btlhuS1RG5nL8pYkq'. +'KrnsKH06I/rVrQKkf//Z' ; + +//========================================================== +// d4-small.jpg +//========================================================== +$this->chars['4'][0]= 643 ; +$this->chars['4'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAYAAADAQEAAAAAAAAAAAAAAAAABAYHAv/EAC0QAAIBAwQA'. +'BAMJAAAAAAAAAAECAwQFEQAGEiETFDFBUmGBByIjUVNxobHR/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAIB/8QAGBEBAAMBAAAAAAAA'. +'AAAAAAAAAAERIVH/2gAMAwEAAhEDEQA/ANjM00Nxmt1xiWW31CZp5uJwoAAaOQ/n7qfcZHqO5my3q5XX7R6ijiqnNut9u4NyJ4yv'. +'JJyjYr8Xhrn5g599J7x3ulBNU7Zo7dXXXcLQ8kURYi4epYtkALjOePv1nUvbLvV7P3BZm3DR3eh88Kp7pVzBZI6iUhGWRRGWwE44'. +'HX3V+uiL1uHgt+vL/H+aNJQ3CSeCOaFqSaJ1DJKs/TqRkMOvQjvRorHE4pRDLNWLGlRHGUeYIORXs9e5B7OP31E0fmdyb/t0DJ4Q'. +'27bfx3YZzPUIoAAz7IpOD6cuxq0uNumqLfVNDOqXBoZEjnZcqhIPXH4c46+WkdoWOltu3IDDLLLVVR83UVcuPEmmcZZ2/rHoAANG'. +'GI7KIY1ijoLeEQBVCwIoAHpgY6Hy0aZe7mJ2jeHLKcEhusj6aNKgzr//2Q==' ; + +//========================================================== +// lv-small.jpg +//========================================================== +$this->chars['v'][0]= 648 ; +$this->chars['v'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQDBQYH/8QAKBAAAQQBAwMEAgMAAAAAAAAA'. +'AQIDBBEFAAYhEzFBEhQiYQdRFTKB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAERIf/aAAwD'. +'AQACEQMRAD8A6Ngt1SZ4yrYgrecgTFsFJA9aGwAUrUaF2D2Avjzq6CIjiBPkB9bwQVIkIYIDae/wq+P9N+dY4SGMf+Txlev7KBmY'. +'PoadKRy4zxSgRxaTwO/x09u7KPYnasmHjlsyFZZXt4K23ezjvBpNGgLUrvXfVZyLLbWambiwEbKvvxYAkeotNlIJW2FEJWb7WBda'. +'NSQI0fHYyJjkrjKRDZQwnpQ1vgBIr+w8+a+9GocZr8iKkuY1eXhsKH8U8iZE9BHz6ZHUc48UfSPqzqH3kfeO9kTTDQYGGietpTaO'. +'shyW6AocpHNIrv8AvWzk9BUSdPdYS4BcRlomkhIV6KP0VE39V+tU2wdlRMHtZUB8NuTQ+51X27+Kr46ZPIAFV540D8zeLsJ5LMHa'. +'ubmMBCVJdjx0pRyLoWR4I8aNIQ8BvZMNtMTeUcsptKfc4tC1gAkCyFC+K0aJtf/Z' ; + +//========================================================== +// lk-small.jpg +//========================================================== +$this->chars['k'][0]= 680 ; +$this->chars['k'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABUDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAUGBAMH/8QALhAAAQMDAwIEBAcAAAAAAAAA'. +'AQIDBAUREgAGITFBEyIyYQcVUYEUIzNicZHx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAwEE/8QAGxEAAwACAwAAAAAAAAAAAAAAAAEC'. +'AxESMeH/2gAMAwEAAhEDEQA/APVK/V36dU6NSJDTT8esPLiqfK8S2cCoeTkKvZQ6jm2ldSqKqbu+OgMOvSX3m4UBrLnDlbqiefKl'. +'Nzz2x1m+IwNP27CkJQ7JkR6rCkMJbP5jp8S2CPfkgD6H+dJ6Ca0nerr+64rTNSqMYrg+C9mmOwhVpDfsuxSbi97DmybaoZeQ5jTl'. +'PEp18JTIfeW3kq3ly4H26aNZqvTWZsjFcZTsVtSg0G8Rio+vr2vb7g6NLPRnuXy8F+8kl+obUh4KXJdqSJJQnohlkZqJPYBXh3P+'. +'a4b5Hyp6k1bO7sOotPyXkj9NlwFl0ewstJA9ifrqkVSmET4csoS7UTHXFQ+6SQlskKUMb/tH9ddLVUmS7DqdBqD7U6OsqfS46jzl'. +'hQ5bXb1K9Scuybdxo2OTu92dwSZkWn0Sb8viQWyn8Qq5D6ifSLd0BIv7q0arTBRSKPToMZbi2GWylsvLK148Wue/XRrRjxOpT2R2'. +'k9aP/9k=' ; + +//========================================================== +// lr-small.jpg +//========================================================== +$this->chars['r'][0]= 681 ; +$this->chars['r'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABYDASIAAhEBAxEB/8QAGgAAAgIDAAAAAAAAAAAAAAAAAAYCBQMEB//EAC4QAAICAQIFAgMJAQAAAAAA'. +'AAECAwQRBQYAEiExQQdRFGFxEyIyM0JSYoGC8P/EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/EABcRAQEBAQAAAAAAAAAAAAAAAAAB'. +'EUH/2gAMAwEAAhEDEQA/AOs0ZdETU54Gt1INSmlPJEsyo7J+jlXPUYBPY9c+eE/dO9tY0a7ren6BVrW7VJTZtW5kZkjXkBSIKveQ'. +'gHp0AAJ4w+q2hVdT2Md0h46+saS4mr3EUK0gWTAB+vQj2PboeL/ZVOqmhaZVjkFmxdC6tctt3tM2G5/7bAx4C4+qxiWwd3prWzKe'. +'r3IBAth5OYxozKsgc8y4GTgnJB9uncdTi6tXq2140rRVM13JMEMAVAg7sMdBjJB/18uDgRO9R2Oo6FX2vShkFzURFUq1whIj+8DI'. +'7EdAFjXv7MeNb0kuStsFEmIaajZaos2fy2Q4VGH7SGxn+Rzw9yMLOm/FzRhZazmOTkP4grYyD3B8j2PTyeFfZ+z7G3BeSS8lmprl'. +'2K2qcnK0Z5S8gPjrgAY8cNEWmq7u23pEos6/Zji+Kd0rLLGWwseA3joeZj/w4OET1g0vlmrWV+ydFnkUxSgsvM4V+YYIwfHz6cHB'. +'ZeKZ1//Z' ; + +//========================================================== +// lg-small.jpg +//========================================================== +$this->chars['g'][0]= 655 ; +$this->chars['g'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAQCBQYH/8QAJxAAAQQBAwQCAgMAAAAAAAAA'. +'AQIDBBEFAAYhBxIxQRNhcYEiQlH/xAAYAQACAwAAAAAAAAAAAAAAAAACAwABBP/EABkRAAMBAQEAAAAAAAAAAAAAAAABAhEhIv/a'. +'AAwDAQACEQMRAD8AayO4t6bq3hmMHtxyLi4OKeKH5jyASiiQCCQeTRNAeB61FrBb+jTGpLO+BMW24EFMhkhpQru8m7B/H70x09Yi'. +'q3nv/vLfwpnJ7UNkqSRbngf2ofWkpXV7brymC2malLfagurjW0aHk89xPJ9cX9aprURHWbYEaMHHEBfwpv8AnXPk+/8AdGqGJOxO'. +'4YbOSxK4y4boIStUWysgkEmxY54r60aOI8oTV9MHtjJwunPUbO46WWo0HLlD8KY4goboFVoquOVEVwLT963WdnxYfT6ZJyz0JvHm'. +'KvtaSkW4tYNVSqKiTwB+fw5n9sY/cuOXCzDDcluyW3Ckd7V+0n0eNZTH9DdouFalHIOJBUhtDki0pNV3UALo81ehG6IdKjPZ6d47'. +'4ywltanVJvuJI+RQs/sHRqy2r003JhsImEc/CUyhxRZBjKV2oJ8eRXNmufPnRo1WIz3DdNn/2Q==' ; + +//========================================================== +// lc-small.jpg +//========================================================== +$this->chars['c'][0]= 629 ; +$this->chars['c'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAUGBwID/8QALRAAAgICAQIEBAYDAAAAAAAA'. +'AQIDBAURACExBhIiQRMVUWEHMkJScYFykaH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAgP/xAAXEQEBAQEAAAAAAAAAAAAAAAAAATER'. +'/9oADAMBAAIRAxEAPwDcoGkmiT4Q8kWvzuPU38D2/v8A1zwrCFayq1qTaFk2H7aJHt05MeMvENzC4upDWkjW9kJXiricAJCigvJN'. +'IB1IVQT5frrv24twPgunk6a288crbklUSJNNdnSTZ2STHHqOP/Eb17njdZtAoqwEvrEiGVyG117/AG6HhyV8H1sljMldoxXTksGC'. +'zV7M0oaWGQOVeGQ92I6EMR22D11w4LmEPjaOL51iL8ssc9Z69zHtZkYCGGeQK0ez2UEoU39wCeX1S/LLiEt+mPSbMLxsGVv2kEjR'. +'305xkaEV/GTULMUT1LD/AAGh8gIZS2jv+vpybb8NMIb0dVLWYWgiiU0vmMphOj6V0TvQI3rfsON1E6dYjGtisa0F1mAWR2NhG0WZ'. +'3Ls3TqNs5Hc9h23w49NWL9K+Q/VD5T/zhwPH/9k=' ; + +//========================================================== +// d7-small.jpg +//========================================================== +$this->chars['7'][0]= 658 ; +$this->chars['7'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABgEFBwT/xAAuEAABAwIE'. +'BAQGAwAAAAAAAAABAgMEBREABiExEhMiQSMyUXEHFBclVJFhk9L/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/8QAGREBAQEAAwAA'. +'AAAAAAAAAAAAAAEREiFR/9oADAMBAAIRAxEAPwDXq9mCjZeQ05VZ5ZST4bfEpa3VdglCbqUe+g9MZ5Uq7V8415WXoMSdQ6etgSps'. +'19wpkCMDZKUpv0FZvbi1NzpYasMDLDUbMVXrtQdbeeU23xLWkj5RlLYK0J7anW9gbAjCzkOtsVSUJUdtc6dVZK51UeaFm4LKbhpC'. +'l7EhIFkDW974GbRI2XorUVls1OTdKAOqUpR0Hc3198GITQ6k+hLwrEpoODiDenRfW23bBicg78JXxPpD0mgVOW5PAivNNpahsPW5'. +'8xxQaSVkboQnhsnYm5OHqDGp1IpsalMKjMsMIC3+XZKbJFth62/QOEfMOZqZXp9JcKZTcGmTky3meSi7xQklI81vMR+sXIz/AEgp'. +'Q0qPNu6ea8Q2jqtbp8+2w9h/OKORc/cpHjt1dDSHOtLZ4ekHW23bBjj+o9H/AB539aP94MG0+L//2Q==' ; + +//========================================================== +// ly-small.jpg +//========================================================== +$this->chars['y'][0]= 672 ; +$this->chars['y'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAQGBQf/xAArEAABAwMEAQIFBQAAAAAAAAAB'. +'AgMEBREhAAYSEzEHIhQkQVGxQmFxgaH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAQL/xAAeEQEAAgEEAwAAAAAAAAAAAAABABECAxIh'. +'MUGR8P/aAAwDAQACEQMRAD8Ar3tys07dVHohemz5dWQ7fk91MsA3IIRY8rkKFySceTqw3JVV0KhyKw+0C1CQp9aUOFSiAk4AIAvn'. +'76xtz0ioVvbcJ6msx2JtOfZmw1PKI5LQcJNh7UqBKcn6+NRfqPu6s1fYc6GxSJsRfWDUVSGA22ygEckJWSexRNgOP0udXzDKOJ0I'. +'yo62mHm25Sy80l1Z4lSgpQvZRGLgWwPGjTjbchyLH+Ejx22EtJSgO8kki3kADA/nOjWjGzv73CyQZjUWNVp7bNSrj7qJDqflqUlQ'. +'DMds24l3HvcNr3Pi9gME6T9WWVsemdYWswwC2lPta4m5WMA3OdUExCmozUJD6g84ntMjrHIFBTdQz5yLDx/WDNytpwW6nAkViqVe'. +'uvmXdlme6n4dCwlRBKEgA2tj99QG7Ilncp5QqpU31PMsJ6x7A32f6SPxo0hPVCD45oVyKf0MtgeT97/nRrO7UOCFla3tn//Z' ; + +//========================================================== +// d3-small.jpg +//========================================================== +$this->chars['3'][0]= 662 ; +$this->chars['3'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD//gAJSnBHcmFwaP/bAEMACAYGBwYFCAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicg'. +'IiwjHBwoNyksMDE0NDQfJzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAB4AEgMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABAUGBwL/xAArEAABBAED'. +'AwMDBQEAAAAAAAABAgMEBREABhIhMUEiMmETFZEHFkJDUdH/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/xAAYEQEBAQEBAAAAAAAA'. +'AAAAAAAAEQExQf/aAAwDAQACEQMRAD8A0vclruBdk3VVLLUNssGRJsZSCtqOjlgJAHvcOD6c4HnOdIbcttw1W5P29cFEhuawqTXS'. +'VsJjnCMBxKkJJx7goAde+ceJfdNxU0UNlyymyXHi6kxWUNl1S3EnkAEIHX2nv86qtTuZr9Q9+1VhRsOoYpYcgSVyAE/TdewkJxnK'. +'sBCjkdPGpnOtFMd3PqsXgfOAgD8Y0aX+11H9rDDjn8lr9yj5J+dGqsqxaw6Cc9cQZU4Sp7zTJsIrKlcUEKwhSin1JABI45GUjqOu'. +'lbOvjbc3Ts9ynjGCy445UuFLYRzbWgrT6fhSCQSMDke+pew2zYVly/d7YchNqkMJZnQpgV9J8IzwWFJyUrAJHYgjvpLbu37G5nR7'. +'vck5C3YRKYEOEVJZj8kjKypXqWvirjk9h+dB9i4faa89TDZUfKlIyT8k+To10a6KTkpcJ/0vL/7o0TS//9k=' ; + +//========================================================== +// ln-small.jpg +//========================================================== +$this->chars['n'][0]= 643 ; +$this->chars['n'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGwAAAgEFAAAAAAAAAAAAAAAAAAYCAQMEBQf/xAAtEAACAQMCBAUCBwAAAAAA'. +'AAABAgMEBREAIQYSE0EHIjFRcWGRIzIzQoGCwf/EABYBAQEBAAAAAAAAAAAAAAAAAAMEAP/EABkRAQEBAQEBAAAAAAAAAAAAAAEA'. +'AhEhUf/aAAwDAQACEQMRAD8A6FR3p7v4oV9rlkMQsjL00RyOss0KkFxnDcrc2PbI1NOJKyTjW+W5OmKeA0UEJx5meRZS2/8AUfbS'. +'LVGS1+K16vCzfiR3GmoqqXGyxz06hWPsFlVMfOmq1iNvE69KjBYo3oJMZ3GKeYYPxg/fW+xzZX1FLQyxwSTcpWNceu4G3+aNSmpY'. +'qmQzzwh2k8yhv2r2H23/AJ0aoy+EWh7I1ntacR3PxDtEzhjWy0wkkIwYmanU5GO6sNh7rrU8AVdTceNbhDXxNHUQvS0tZ3DzwxVA'. +'fB7hj59/XJ08cPWaKj4gvlwSQiG7dCboqvLy9NOmQT9SM7ayJrBa6K5V91hjlWorp4JGUOAglRSiMMDb82/vgaBGTpVvtNUVtyJg'. +'5+WNAh5ZCu/r2+dGrgq0pi0DhmlRsSSAfqMd+b6ZyNu3po1Rk1yNBe3/2Q==' ; + +//========================================================== +// lu-small.jpg +//========================================================== +$this->chars['u'][0]= 671 ; +$this->chars['u'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAYDBAUH/8QAJRAAAQQBAwQDAQEAAAAAAAAA'. +'AQIDBBEFAAYhBxMxYRJBURSB/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAD/8QAGhEBAQEAAwEAAAAAAAAAAAAAAQARITFBAv/aAAwD'. +'AQACEQMRAD8A6dLkQmJzu3WVtHIqjf0duKFNuBr5UTQ45F1R8/XI1PMmsYoJyjhS9iI7BKHeKjkXZVXqhyLHP+rrHeR1pZlx1W1M'. +'wTiW0ukkrS28nn5fV2SPPFfurHUKQhzYG7pLYKEfyBhaSOS7dG/YCki/uvWn3LPDOJrwa4kyEzOYeakqkpC3Hk0bNePQHgDRpchY'. +'leIZwzUWauKtuPctTSUlCAUmrBHIKuAPV/ujQsmHdm7hya43UbbD3ZVElOQJsdTS6IQaQUqBHCk8E2Pocgam6oYwObHy0Zm0oi45'. +'T1KBPdpV2f0pom/1Ws7cmPazu98Ltvcq3VzRHfehz8a4pirFEKRZo8eQT+eCdWYfS/b+WYnxpbuVcDRMdHcyTqg2fiAfiLoi+Rf+'. +'jT7Xc74HtOYnHyUOh8yWUvKeHhy0CiPVUAPoDRrm+OeznTva6lzsyMjCYbbaiNJjJSWElagD5tRpNUSALFeNGoOCH7Bv/9k=' ; + +//========================================================== +// lw-small.jpg +//========================================================== +$this->chars['w'][0]= 673 ; +$this->chars['w'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABcDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAYDBAX/xAAtEAACAQMDAgMHBQAAAAAAAAAB'. +'AgMEBREABhIhMRMUQRUiIzJRYZEWNIGx0f/EABYBAQEBAAAAAAAAAAAAAAAAAAABA//EABoRAAICAwAAAAAAAAAAAAAAAAABERIh'. +'MVH/2gAMAwEAAhEDEQA/AHXbV13ZLu6t2/uaa1JijWopVp4XUTKSAXRyc+6ehBGeoPbTSlwpql0K3GneqpZViqUhI5JzGMEZJGeh'. +'GlXfaFILDf7FQzXC426rDLTojs8sLqVkXBGcfKf40twWbdWzZY75R0s90ul3jPtKjVMJDNn4DDp8iEhW+wJ1WZG2KWt3Lv26U1tv'. +'92o7PaYkgYUbqVepYlmUBlIwqnB++O2jTDt/bBtth9jcpvEWNGqalZQryTlmeR8jPct6+mNGmRC4a1U13htzVFItB5nA/cyOUVfp'. +'7oz/ALqitJulYJKuqvFsppHALLFb3cp9FBaXr+O51bq0q6i38KK5PDVAAxSzU6SIpz3Kjjn8jUFoS7uFmut1gq17xLFQ+DxOccj8'. +'Rsn+tVpiyJnqv09YfOXu5AycgZZQEhBZjgDBOOgwO/po0sttWHdNzqLruioa4UwmdaC3kYp4IwSvJlBHKQ4OSe3po0qxM6P/2Q==' ; + +//========================================================== +// lq-small.jpg +//========================================================== +$this->chars['q'][0]= 671 ; +$this->chars['q'][1]= +'/9j/4AAQSkZJRgABAQEASgBKAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAx'. +'NDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy'. +'MjIyMjIyMjL/wAARCAAeABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAcDBAUG/8QAKRAAAQQBBAICAQQDAAAAAAAA'. +'AQIDBBEFAAYSIQcxIlETCBQVgSNBYf/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMB'. +'AAIRAxEAPwDT3H5Qz+O3LN2vtrF/y86NYLzzVlAABJITQPv2a/17vXMboz3lDEYWPuafNx7CFrS03+2jpK2bs0CUkUa7pRvrUu63'. +'sr438yv7pLEo4XIK5Kcji0uJUkckm+uQUOVH6GsnyJv7A5vaJwuFdkONLmolgONFH4vioKRXYqyCADXvRMh0yspmZ4jyIEtDTK47'. +'aiA0lQUopBJBI/7X9aNT7amRo228e3a31iO3yUzCcdSPiKAIFdCho0TIswZ7GQlO/hlRxBooih1YXzAoKUkX0LPEBX110dJ7zbuv'. +'AORpO04cIpmxH23FSEIRwKuNnsdk0o31702XhFMKbuRUZJWP8LTQ6HBCuIB+iVWSR2BXuqK93/hDlvGzEphmG3Ml5JpDi1I7TzNA'. +'BYFlPafY+/7LBiv1CYDH4iFDOGySlMR22lFP4wCUpANfL11o1r4bxXlWMNEaE/bqlIbCFl/ANPK5Do/M0VDr2Rf3o0TX/9k=' ; + + + + } +} + +class AntiSpam { + + var $iData=''; + var $iDD=null; + + function AntiSpam($aData='') { + $this->iData = $aData; + $this->iDD = new HandDigits(); + } + + function Set($aData) { + $this->iData = $aData; + } + + function Rand($aLen) { + $d=''; + for($i=0; $i < $aLen; ++$i) { + if( rand(0,9) < 6 ) { + // Digits + $d .= chr( ord('1') + rand(0,8) ); + } + else { + // Letters + do { + $offset = rand(0,25); + } while ( $offset==14 ); + $d .= chr( ord('a') + $offset ); + } + } + $this->iData = $d; + return $d; + } + + function Stroke($aStrokeFileName="") { + + $n=strlen($this->iData); + if( $n==0 ) { + return false; + } + + for($i=0; $i < $n; ++$i ) { + if( $this->iData[$i]==='0' || strtolower($this->iData[$i])==='o') { + return false; + } + } + + $img = @imagecreatetruecolor($n*$this->iDD->iWidth, $this->iDD->iHeight); + if( $img < 1 ) { + return false; + } + + $start=0; + for($i=0; $i < $n; ++$i ) { + $dimg = imagecreatefromstring(base64_decode($this->iDD->chars[strtolower($this->iData[$i])][1])); + imagecopy($img,$dimg,$start,0,0,0,imagesx($dimg), $this->iDD->iHeight); + $start += imagesx($dimg); + } + $resimg = @imagecreatetruecolor($start+4, $this->iDD->iHeight+4); + if( $resimg < 1 ) { + return false; + } + + imagecopy($resimg,$img,2,2,0,0,$start, $this->iDD->iHeight); + + if( $aStrokeFileName!="" ) { + if( file_exists($aStrokeFileName) ) { + if( !@unlink($aStrokeFileName) ) + return false; + } + imagejpeg($resimg,$aStrokeFileName); + return; + } + + header("Content-type: image/jpeg"); + $res=imagejpeg($resimg); + return $res; + } +} + +?> diff --git a/html/includes/jpgraph/src/jpgraph_bar.php b/html/includes/jpgraph/src/jpgraph_bar.php new file mode 100644 index 0000000000..c6cbdcbaad --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_bar.php @@ -0,0 +1,1036 @@ +Plot($datay,$datax); + ++$this->numpoints; + } + +//--------------- +// PUBLIC METHODS + + // Set a drop shadow for the bar (or rather an "up-right" shadow) + function SetShadow($color="black",$hsize=3,$vsize=3,$show=true) { + $this->bar_shadow=$show; + $this->bar_shadow_color=$color; + $this->bar_shadow_vsize=$vsize; + $this->bar_shadow_hsize=$hsize; + + // Adjust the value margin to compensate for shadow + $this->value->margin += $vsize; + } + + // DEPRECATED use SetYBase instead + function SetYMin($aYStartValue) { + //die("JpGraph Error: Deprecated function SetYMin. Use SetYBase() instead."); + $this->ybase=$aYStartValue; + } + + // Specify the base value for the bars + function SetYBase($aYStartValue) { + $this->ybase=$aYStartValue; + } + + function Legend(&$graph) { + if( $this->grad && $this->legend!="" && !$this->fill ) { + $color=array($this->grad_fromcolor,$this->grad_tocolor); + // In order to differentiate between gradients and cooors specified as an RGB triple + $graph->legend->Add($this->legend,$color,"",-$this->grad_style, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->legend!="" && ($this->iPattern > -1 || is_array($this->iPattern)) ) { + if( is_array($this->iPattern) ) { + $p1 = $this->iPattern[0]; + $p2 = $this->iPatternColor[0]; + $p3 = $this->iPatternDensity[0]; + } + else { + $p1 = $this->iPattern; + $p2 = $this->iPatternColor; + $p3 = $this->iPatternDensity; + } + $color = array($p1,$p2,$p3,$this->fill_color); + // A kludge: Too mark that we add a pattern we use a type value of < 100 + $graph->legend->Add($this->legend,$color,"",-101, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->fill_color && $this->legend!="" ) { + if( is_array($this->fill_color) ) { + $graph->legend->Add($this->legend,$this->fill_color[0],"",0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + else { + $graph->legend->Add($this->legend,$this->fill_color,"",0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + } + + // Gets called before any axis are stroked + function PreStrokeAdjust(&$graph) { + parent::PreStrokeAdjust($graph); + + // If we are using a log Y-scale we want the base to be at the + // minimum Y-value unless the user have specifically set some other + // value than the default. + if( substr($graph->axtype,-3,3)=="log" && $this->ybase==0 ) + $this->ybase = $graph->yaxis->scale->GetMinVal(); + + // For a "text" X-axis scale we will adjust the + // display of the bars a little bit. + if( substr($graph->axtype,0,3)=="tex" ) { + // Position the ticks between the bars + $graph->xaxis->scale->ticks->SetXLabelOffset(0.5,0); + + // Center the bars + if( $this->abswidth > -1 ) { + $graph->SetTextScaleAbsCenterOff($this->abswidth); + } + else { + if( $this->align == "center" ) + $graph->SetTextScaleOff(0.5-$this->width/2); + elseif( $this->align == "right" ) + $graph->SetTextScaleOff(1-$this->width); + } + + } + /* + elseif( is_a($this,'AccBarPlot') || is_a($this,'GroupBarPlot') ) { + // We only set an absolute width for linear and int scale + // for text scale the width will be set to a fraction of + // the majstep width. + if( $this->abswidth == -1 ) { + // Not set + // set width to a visuable sensible default + $this->abswidth = $graph->img->plotwidth/(2*count($this->coords[0])); + } + } + */ + } + + function Min() { + $m = parent::Min(); + if( $m[1] >= $this->ybase ) + $m[1] = $this->ybase; + return $m; + } + + function Max() { + $m = parent::Max(); + if( $m[1] <= $this->ybase ) + $m[1] = $this->ybase; + return $m; + } + + // Specify width as fractions of the major stepo size + function SetWidth($aWidth) { + if( $aWidth > 1 ) { + // Interpret this as absolute width + $this->abswidth=$aWidth; + } + else + $this->width=$aWidth; + } + + // Specify width in absolute pixels. If specified this + // overrides SetWidth() + function SetAbsWidth($aWidth) { + $this->abswidth=$aWidth; + } + + function SetAlign($aAlign) { + $this->align=$aAlign; + } + + function SetNoFill() { + $this->grad = false; + $this->fill_color=false; + $this->fill=false; + } + + function SetFillColor($aColor) { + $this->fill = true ; + $this->fill_color = $aColor; + } + + function SetFillGradient($aFromColor,$aToColor=null,$aStyle=null) { + $this->grad = true; + $this->grad_fromcolor = $aFromColor; + $this->grad_tocolor = $aToColor; + $this->grad_style = $aStyle; + } + + function SetValuePos($aPos) { + $this->valuepos = $aPos; + } + + function SetPattern($aPattern, $aColor='black'){ + if( is_array($aPattern) ) { + $n = count($aPattern); + $this->iPattern = array(); + $this->iPatternDensity = array(); + if( is_array($aColor) ) { + $this->iPatternColor = array(); + if( count($aColor) != $n ) { + JpGraphError::RaiseL(2001);//('NUmber of colors is not the same as the number of patterns in BarPlot::SetPattern()'); + } + } + else + $this->iPatternColor = $aColor; + for( $i=0; $i < $n; ++$i ) { + $this->_SetPatternHelper($aPattern[$i], $this->iPattern[$i], $this->iPatternDensity[$i]); + if( is_array($aColor) ) { + $this->iPatternColor[$i] = $aColor[$i]; + } + } + } + else { + $this->_SetPatternHelper($aPattern, $this->iPattern, $this->iPatternDensity); + $this->iPatternColor = $aColor; + } + } + + function _SetPatternHelper($aPattern, &$aPatternValue, &$aDensity){ + switch( $aPattern ) { + case PATTERN_DIAG1: + $aPatternValue= 1; + $aDensity = 90; + break; + case PATTERN_DIAG2: + $aPatternValue= 1; + $aDensity = 75; + break; + case PATTERN_DIAG3: + $aPatternValue= 2; + $aDensity = 90; + break; + case PATTERN_DIAG4: + $aPatternValue= 2; + $aDensity = 75; + break; + case PATTERN_CROSS1: + $aPatternValue= 8; + $aDensity = 90; + break; + case PATTERN_CROSS2: + $aPatternValue= 8; + $aDensity = 78; + break; + case PATTERN_CROSS3: + $aPatternValue= 8; + $aDensity = 65; + break; + case PATTERN_CROSS4: + $aPatternValue= 7; + $aDensity = 90; + break; + case PATTERN_STRIPE1: + $aPatternValue= 5; + $aDensity = 95; + break; + case PATTERN_STRIPE2: + $aPatternValue= 5; + $aDensity = 85; + break; + default: + JpGraphError::RaiseL(2002);//('Unknown pattern specified in call to BarPlot::SetPattern()'); + } + } + + function Stroke(&$img,&$xscale,&$yscale) { + + $numpoints = count($this->coords[0]); + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); +//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])."Number of Y-points:$numpoints"); + else + $exist_x = true; + } + else + $exist_x = false; + + + $numbars=count($this->coords[0]); + + // Use GetMinVal() instead of scale[0] directly since in the case + // of log scale we get a correct value. Log scales will have negative + // values for values < 1 while still not representing negative numbers. + if( $yscale->GetMinVal() >= 0 ) + $zp=$yscale->scale_abs[0]; + else { + $zp=$yscale->Translate(0); + } + + if( $this->abswidth > -1 ) { + $abswidth=$this->abswidth; + } + else + $abswidth=round($this->width*$xscale->scale_factor,0); + + // Count potential pattern array to avoid doing the count for each iteration + if( is_array($this->iPattern) ) { + $np = count($this->iPattern); + } + + $grad = null; + for($i=0; $i < $numbars; ++$i) { + + // If value is NULL, or 0 then don't draw a bar at all + if ($this->coords[0][$i] === null || $this->coords[0][$i] === '' ) + continue; + + if( $exist_x ) $x=$this->coords[1][$i]; + else $x=$i; + + $x=$xscale->Translate($x); + +// Comment Note: This confuses the positioning when using acc together with +// grouped bars. Workaround for fixing #191 +/* + if( !$xscale->textscale ) { + if($this->align=="center") + $x -= $abswidth/2; + elseif($this->align=="right") + $x -= $abswidth; + } + +*/ + // Stroke fill color and fill gradient + $pts=array( + $x,$zp, + $x,$yscale->Translate($this->coords[0][$i]), + $x+$abswidth,$yscale->Translate($this->coords[0][$i]), + $x+$abswidth,$zp); + if( $this->grad ) { + if( $grad === null ) + $grad = new Gradient($img); + if( is_array($this->grad_fromcolor) ) { + // The first argument (grad_fromcolor) can be either an array or a single color. If it is an array + // then we have two choices. It can either a) be a single color specified as an RGB triple or it can be + // an array to specify both (from, to style) for each individual bar. The way to know the difference is + // to investgate the first element. If this element is an integer [0,255] then we assume it is an RGB + // triple. + $ng = count($this->grad_fromcolor); + if( $ng === 3 ) { + if( is_numeric($this->grad_fromcolor[0]) && $this->grad_fromcolor[0] > 0 && $this->grad_fromcolor[0] < 256 ) { + // RGB Triple + $fromcolor = $this->grad_fromcolor; + $tocolor = $this->grad_tocolor; + $style = $this->grad_style; + } + } + else { + $fromcolor = $this->grad_fromcolor[$i % $ng][0]; + $tocolor = $this->grad_fromcolor[$i % $ng][1]; + $style = $this->grad_fromcolor[$i % $ng][2]; + } + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $fromcolor,$tocolor,$style); + } + else { + $grad->FilledRectangle($pts[2],$pts[3], + $pts[6],$pts[7], + $this->grad_fromcolor,$this->grad_tocolor,$this->grad_style); + } + + } + elseif( !empty($this->fill_color) ) { + if(is_array($this->fill_color)) { + $img->PushColor($this->fill_color[$i % count($this->fill_color)]); + } else { + $img->PushColor($this->fill_color); + } + $img->FilledPolygon($pts); + $img->PopColor(); + } + + + // Remember value of this bar + $val=$this->coords[0][$i]; + + if( !empty($val) && !is_numeric($val) ) { + JpGraphError::RaiseL(2004,$i,$val); +//('All values for a barplot must be numeric. You have specified value['.$i.'] == \''.$val.'\''); + } + + // Determine the shadow + if( $this->bar_shadow && $val != 0) { + + $ssh = $this->bar_shadow_hsize; + $ssv = $this->bar_shadow_vsize; + // Create points to create a "upper-right" shadow + if( $val > 0 ) { + $sp[0]=$pts[6]; $sp[1]=$pts[7]; + $sp[2]=$pts[4]; $sp[3]=$pts[5]; + $sp[4]=$pts[2]; $sp[5]=$pts[3]; + $sp[6]=$pts[2]+$ssh; $sp[7]=$pts[3]-$ssv; + $sp[8]=$pts[4]+$ssh; $sp[9]=$pts[5]-$ssv; + $sp[10]=$pts[6]+$ssh; $sp[11]=$pts[7]-$ssv; + } + elseif( $val < 0 ) { + $sp[0]=$pts[4]; $sp[1]=$pts[5]; + $sp[2]=$pts[6]; $sp[3]=$pts[7]; + $sp[4]=$pts[0]; $sp[5]=$pts[1]; + $sp[6]=$pts[0]+$ssh; $sp[7]=$pts[1]-$ssv; + $sp[8]=$pts[6]+$ssh; $sp[9]=$pts[7]-$ssv; + $sp[10]=$pts[4]+$ssh; $sp[11]=$pts[5]-$ssv; + } + if( is_array($this->bar_shadow_color) ) { + $numcolors = count($this->bar_shadow_color); + if( $numcolors == 0 ) { + JpGraphError::RaiseL(2005);//('You have specified an empty array for shadow colors in the bar plot.'); + } + $img->PushColor($this->bar_shadow_color[$i % $numcolors]); + } + else { + $img->PushColor($this->bar_shadow_color); + } + $img->FilledPolygon($sp); + $img->PopColor(); + } + + // Stroke the pattern + if( is_array($this->iPattern) ) { + $f = new RectPatternFactory(); + if( is_array($this->iPatternColor) ) { + $pcolor = $this->iPatternColor[$i % $np]; + } + else + $pcolor = $this->iPatternColor; + $prect = $f->Create($this->iPattern[$i % $np],$pcolor,1); + $prect->SetDensity($this->iPatternDensity[$i % $np]); + + if( $val < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + else { + if( $this->iPattern > -1 ) { + $f = new RectPatternFactory(); + $prect = $f->Create($this->iPattern,$this->iPatternColor,1); + $prect->SetDensity($this->iPatternDensity); + if( $val < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + } + // Stroke the outline of the bar + if( is_array($this->color) ) + $img->SetColor($this->color[$i % count($this->color)]); + else + $img->SetColor($this->color); + + $pts[] = $pts[0]; + $pts[] = $pts[1]; + + if( $this->weight > 0 ) { + $img->SetLineWeight($this->weight); + $img->Polygon($pts); + } + + // Determine how to best position the values of the individual bars + $x=$pts[2]+($pts[4]-$pts[2])/2; + $this->value->SetMargin(5); + + if( $this->valuepos=='top' ) { + $y=$pts[3]; + if( $img->a === 90 ) { + if( $val < 0 ) + $this->value->SetAlign('right','center'); + else + $this->value->SetAlign('left','center'); + + } + else { + if( $val < 0 ) { + $this->value->SetMargin(-5); + $y=$pts[1]; + $this->value->SetAlign('center','bottom'); + } + else { + $this->value->SetAlign('center','bottom'); + } + + } + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='max' ) { + $y=$pts[3]; + if( $img->a === 90 ) { + if( $val < 0 ) { + $this->value->SetAlign('left','center'); + } + else { + $this->value->SetAlign('right','center'); + } + } + else { + if( $val < 0 ) { + $this->value->SetAlign('center','bottom'); + } + else { + $this->value->SetAlign('center','top'); + } + } + $this->value->SetMargin(-5); + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='center' ) { + $y = ($pts[3] + $pts[1])/2; + $this->value->SetAlign('center','center'); + $this->value->SetMargin(0); + $this->value->Stroke($img,$val,$x,$y); + } + elseif( $this->valuepos=='bottom' || $this->valuepos=='min' ) { + $y=$pts[1]; + if( $img->a === 90 ) { + if( $val < 0 ) + $this->value->SetAlign('right','center'); + else + $this->value->SetAlign('left','center'); + } + $this->value->SetMargin(3); + $this->value->Stroke($img,$val,$x,$y); + } + else { + JpGraphError::RaiseL(2006,$this->valuepos); +//('Unknown position for values on bars :'.$this->valuepos); + } + if( !empty($this->csimtargets[$i]) ) { + // Create the client side image map + $rpts = $img->ArrRotate($pts); + $csimcoord=round($rpts[0]).", ".round($rpts[1]); + for( $j=1; $j < 4; ++$j){ + $csimcoord .= ", ".round($rpts[2*$j]).", ".round($rpts[2*$j+1]); + } + $this->csimareas .= 'csimareas .= " href=\"".htmlentities($this->csimtargets[$i])."\""; + + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + + $sval=''; + if( !empty($this->csimalts[$i]) ) { + $sval=sprintf($this->csimalts[$i],$this->coords[0][$i]); + $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; + } + $this->csimareas .= " />\n"; + } + } + return true; + } +} // Class + +//=================================================== +// CLASS GroupBarPlot +// Description: Produce grouped bar plots +//=================================================== +class GroupBarPlot extends BarPlot { + var $plots=array(), $nbrplots=0; + var $numpoints; +//--------------- +// CONSTRUCTOR + function GroupBarPlot($plots) { + $this->width=0.5; + $this->plots = $plots; + $this->nbrplots = count($plots); + if( $this->nbrplots < 1 ) { + JpGraphError::RaiseL(2007);//('Cannot create GroupBarPlot from empty plot array.'); + } + for($i=0; $i < $this->nbrplots; ++$i ) { + if( empty($this->plots[$i]) || !isset($this->plots[$i]) ) { + JpGraphError::RaiseL(2008,$i);//("Group bar plot element nbr $i is undefined or empty."); + } + } + $this->numpoints = $plots[0]->numpoints; + } + +//--------------- +// PUBLIC METHODS + function Legend(&$graph) { + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $c = get_class($this->plots[$i]); + if( !is_a($this->plots[$i],'BarPlot') ) { + JpGraphError::RaiseL(2009,$c);//('One of the objects submitted to GroupBar is not a BarPlot. Make sure that you create the Group Bar plot from an array of BarPlot or AccBarPlot objects. (Class = '.$c.')'); + } + $this->plots[$i]->DoLegend($graph); + } + } + + function Min() { + list($xmin,$ymin) = $this->plots[0]->Min(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + list($xm,$ym) = $this->plots[$i]->Min(); + $xmin = max($xmin,$xm); + $ymin = min($ymin,$ym); + } + return array($xmin,$ymin); + } + + function Max() { + list($xmax,$ymax) = $this->plots[0]->Max(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + list($xm,$ym) = $this->plots[$i]->Max(); + $xmax = max($xmax,$xm); + $ymax = max($ymax,$ym); + } + return array($xmax,$ymax); + } + + function GetCSIMareas() { + $n = count($this->plots); + $csimareas=''; + for($i=0; $i < $n; ++$i) { + $csimareas .= $this->plots[$i]->csimareas; + } + return $csimareas; + } + + // Stroke all the bars next to each other + function Stroke(&$img,&$xscale,&$yscale) { + $tmp=$xscale->off; + $n = count($this->plots); + $subwidth = $this->width/$this->nbrplots ; + + for( $i=0; $i < $n; ++$i ) { + $this->plots[$i]->ymin=$this->ybase; + $this->plots[$i]->SetWidth($subwidth); + + // If the client have used SetTextTickInterval() then + // major_step will be > 1 and the positioning will fail. + // If we assume it is always one the positioning will work + // fine with a text scale but this will not work with + // arbitrary linear scale + $xscale->off = $tmp+$i*round($xscale->scale_factor* $subwidth); + $this->plots[$i]->Stroke($img,$xscale,$yscale); + } + $xscale->off=$tmp; + } +} // Class + +//=================================================== +// CLASS AccBarPlot +// Description: Produce accumulated bar plots +//=================================================== +class AccBarPlot extends BarPlot { + var $plots=null,$nbrplots=0,$numpoints=0; +//--------------- +// CONSTRUCTOR + function AccBarPlot($plots) { + $this->plots = $plots; + $this->nbrplots = count($plots); + if( $this->nbrplots < 1 ) { + JpGraphError::RaiseL(2010);//('Cannot create AccBarPlot from empty plot array.'); + } + for($i=0; $i < $this->nbrplots; ++$i ) { + if( empty($this->plots[$i]) || !isset($this->plots[$i]) ) { + JpGraphError::RaiseL(2011,$i);//("Acc bar plot element nbr $i is undefined or empty."); + } + } + $this->numpoints = $plots[0]->numpoints; + $this->value = new DisplayValue(); + } + +//--------------- +// PUBLIC METHODS + function Legend(&$graph) { + $n = count($this->plots); + for( $i=$n-1; $i >= 0; --$i ) { + $c = get_class($this->plots[$i]); + if( !is_a($this->plots[$i],'BarPlot') ) { + JpGraphError::RaiseL(2012,$c);//('One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects.(Class='.$c.')'); + } + $this->plots[$i]->DoLegend($graph); + } + } + + function Max() { + list($xmax) = $this->plots[0]->Max(); + $nmax=0; + for($i=0; $i < count($this->plots); ++$i) { + $n = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$n); + list($x) = $this->plots[$i]->Max(); + $xmax = max($xmax,$x); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for bar $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=0; + if( !isset($this->plots[0]->coords[0][$i]) ) { + JpGraphError::RaiseL(2014); + } + if( $this->plots[0]->coords[0][$i] > 0 ) + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + if( !isset($this->plots[$j]->coords[0][$i]) ) { + JpGraphError::RaiseL(2014); + } + if( $this->plots[$j]->coords[0][$i] > 0 ) + $y += $this->plots[$j]->coords[0][$i]; + } + $ymax[$i] = $y; + } + $ymax = max($ymax); + + // Bar always start at baseline + if( $ymax <= $this->ybase ) + $ymax = $this->ybase; + return array($xmax,$ymax); + } + + function Min() { + $nmax=0; + list($xmin,$ysetmin) = $this->plots[0]->Min(); + for($i=0; $i < count($this->plots); ++$i) { + $n = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$n); + list($x,$y) = $this->plots[$i]->Min(); + $xmin = Min($xmin,$x); + $ysetmin = Min($y,$ysetmin); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for bar $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=0; + if( $this->plots[0]->coords[0][$i] < 0 ) + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + if( $this->plots[$j]->coords[0][$i] < 0 ) + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymin[$i] = $y; + } + $ymin = Min($ysetmin,Min($ymin)); + // Bar always start at baseline + if( $ymin >= $this->ybase ) + $ymin = $this->ybase; + return array($xmin,$ymin); + } + + // Stroke acc bar plot + function Stroke(&$img,&$xscale,&$yscale) { + $pattern=NULL; + $img->SetLineWeight($this->weight); + for($i=0; $i < $this->numpoints-1; $i++) { + $accy = 0; + $accy_neg = 0; + for($j=0; $j < $this->nbrplots; ++$j ) { + $img->SetColor($this->plots[$j]->color); + + if ( $this->plots[$j]->coords[0][$i] >= 0) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy); + $accyt=$yscale->Translate($accy); + $accy+=$this->plots[$j]->coords[0][$i]; + } + else { + //if ( $this->plots[$j]->coords[0][$i] < 0 || $accy_neg < 0 ) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg); + $accyt=$yscale->Translate($accy_neg); + $accy_neg+=$this->plots[$j]->coords[0][$i]; + } + + $xt=$xscale->Translate($i); + + if( $this->abswidth > -1 ) + $abswidth=$this->abswidth; + else + $abswidth=round($this->width*$xscale->scale_factor,0); + + $pts=array($xt,$accyt,$xt,$yt,$xt+$abswidth,$yt,$xt+$abswidth,$accyt); + + if( $this->bar_shadow ) { + $ssh = $this->bar_shadow_hsize; + $ssv = $this->bar_shadow_vsize; + + // We must also differ if we are a positive or negative bar. + if( $j === 0 ) { + // This gets extra complicated since we have to + // see all plots to see if we are negative. It could + // for example be that all plots are 0 until the very + // last one. We therefore need to save the initial setup + // for both the negative and positive case + + // In case the final bar is positive + $sp[0]=$pts[6]+1; $sp[1]=$pts[7]; + $sp[2]=$pts[6]+$ssh; $sp[3]=$pts[7]-$ssv; + + // In case the final bar is negative + $nsp[0]=$pts[0]; $nsp[1]=$pts[1]; + $nsp[2]=$pts[0]+$ssh; $nsp[3]=$pts[1]-$ssv; + $nsp[4]=$pts[6]+$ssh; $nsp[5]=$pts[7]-$ssv; + $nsp[10]=$pts[6]+1; $nsp[11]=$pts[7]; + } + + if( $j === $this->nbrplots-1 ) { + // If this is the last plot of the bar and + // the total value is larger than 0 then we + // add the shadow. + if( is_array($this->bar_shadow_color) ) { + $numcolors = count($this->bar_shadow_color); + if( $numcolors == 0 ) { + JpGraphError::RaiseL(2013);//('You have specified an empty array for shadow colors in the bar plot.'); + } + $img->PushColor($this->bar_shadow_color[$i % $numcolors]); + } + else { + $img->PushColor($this->bar_shadow_color); + } + + if( $accy > 0 ) { + $sp[4]=$pts[4]+$ssh; $sp[5]=$pts[5]-$ssv; + $sp[6]=$pts[2]+$ssh; $sp[7]=$pts[3]-$ssv; + $sp[8]=$pts[2]; $sp[9]=$pts[3]-1; + $sp[10]=$pts[4]+1; $sp[11]=$pts[5]; + $img->FilledPolygon($sp,4); + } + elseif( $accy_neg < 0 ) { + $nsp[6]=$pts[4]+$ssh; $nsp[7]=$pts[5]-$ssv; + $nsp[8]=$pts[4]+1; $nsp[9]=$pts[5]; + $img->FilledPolygon($nsp,4); + } + $img->PopColor(); + } + } + + + // If value is NULL or 0, then don't draw a bar at all + if ($this->plots[$j]->coords[0][$i] == 0 ) continue; + + if( $this->plots[$j]->grad ) { + $grad = new Gradient($img); + $grad->FilledRectangle( + $pts[2],$pts[3], + $pts[6],$pts[7], + $this->plots[$j]->grad_fromcolor, + $this->plots[$j]->grad_tocolor, + $this->plots[$j]->grad_style); + } else { + if (is_array($this->plots[$j]->fill_color) ) { + $numcolors = count($this->plots[$j]->fill_color); + $fillcolor = $this->plots[$j]->fill_color[$i % $numcolors]; + // If the bar is specified to be non filled then the fill color is false + if( $fillcolor !== false ) + $img->SetColor($this->plots[$j]->fill_color[$i % $numcolors]); + } + else { + $fillcolor = $this->plots[$j]->fill_color; + if( $fillcolor !== false ) + $img->SetColor($this->plots[$j]->fill_color); + } + if( $fillcolor !== false ) + $img->FilledPolygon($pts); + $img->SetColor($this->plots[$j]->color); + } + + // Stroke the pattern + if( $this->plots[$j]->iPattern > -1 ) { + if( $pattern===NULL ) + $pattern = new RectPatternFactory(); + + $prect = $pattern->Create($this->plots[$j]->iPattern,$this->plots[$j]->iPatternColor,1); + $prect->SetDensity($this->plots[$j]->iPatternDensity); + if( $this->plots[$j]->coords[0][$i] < 0 ) { + $rx = $pts[0]; + $ry = $pts[1]; + } + else { + $rx = $pts[2]; + $ry = $pts[3]; + } + $width = abs($pts[4]-$pts[0])+1; + $height = abs($pts[1]-$pts[3])+1; + $prect->SetPos(new Rectangle($rx,$ry,$width,$height)); + $prect->Stroke($img); + } + + + // CSIM array + + if( $i < count($this->plots[$j]->csimtargets) ) { + // Create the client side image map + $rpts = $img->ArrRotate($pts); + $csimcoord=round($rpts[0]).", ".round($rpts[1]); + for( $k=1; $k < 4; ++$k){ + $csimcoord .= ", ".round($rpts[2*$k]).", ".round($rpts[2*$k+1]); + } + if( ! empty($this->plots[$j]->csimtargets[$i]) ) { + $this->csimareas.= 'csimareas.= " href=\"".$this->plots[$j]->csimtargets[$i]."\" "; + + if( ! empty($this->plots[$j]->csimwintargets[$i]) ) { + $this->csimareas.= " target=\"".$this->plots[$j]->csimwintargets[$i]."\" "; + } + + $sval=''; + if( !empty($this->plots[$j]->csimalts[$i]) ) { + $sval=sprintf($this->plots[$j]->csimalts[$i],$this->plots[$j]->coords[0][$i]); + $this->csimareas .= " title=\"$sval\" "; + } + $this->csimareas .= " alt=\"$sval\" />\n"; + } + } + + $pts[] = $pts[0]; + $pts[] = $pts[1]; + $img->SetLineWeight($this->plots[$j]->line_weight); + $img->Polygon($pts); + $img->SetLineWeight(1); + } + + // Draw labels for each acc.bar + + $x=$pts[2]+($pts[4]-$pts[2])/2; + if($this->bar_shadow) $x += $ssh; + + // First stroke the accumulated value for the entire bar + // This value is always placed at the top/bottom of the bars + if( $accy_neg < 0 ) { + $y=$yscale->Translate($accy_neg); + $this->value->Stroke($img,$accy_neg,$x,$y); + } + else { + $y=$yscale->Translate($accy); + $this->value->Stroke($img,$accy,$x,$y); + } + + $accy = 0; + $accy_neg = 0; + for($j=0; $j < $this->nbrplots; ++$j ) { + + // We don't print 0 values in an accumulated bar plot + if( $this->plots[$j]->coords[0][$i] == 0 ) continue; + + if ($this->plots[$j]->coords[0][$i] > 0) { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy); + $accyt=$yscale->Translate($accy); + if( $this->plots[$j]->valuepos=='center' ) { + $y = $accyt-($accyt-$yt)/2; + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $y = $accyt; + } + else { // top or max + $y = $accyt-($accyt-$yt); + } + $accy+=$this->plots[$j]->coords[0][$i]; + if( $this->plots[$j]->valuepos=='center' ) { + $this->plots[$j]->value->SetAlign("center","center"); + $this->plots[$j]->value->SetMargin(0); + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $this->plots[$j]->value->SetAlign('center','bottom'); + $this->plots[$j]->value->SetMargin(2); + } + else { + $this->plots[$j]->value->SetAlign('center','top'); + $this->plots[$j]->value->SetMargin(1); + } + } else { + $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg); + $accyt=$yscale->Translate($accy_neg); + $accy_neg+=$this->plots[$j]->coords[0][$i]; + if( $this->plots[$j]->valuepos=='center' ) { + $y = $accyt-($accyt-$yt)/2; + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $y = $accyt; + } + else { + $y = $accyt-($accyt-$yt); + } + if( $this->plots[$j]->valuepos=='center' ) { + $this->plots[$j]->value->SetAlign("center","center"); + $this->plots[$j]->value->SetMargin(0); + } + elseif( $this->plots[$j]->valuepos=='bottom' ) { + $this->plots[$j]->value->SetAlign('center',$j==0 ? 'bottom':'top'); + $this->plots[$j]->value->SetMargin(-2); + } + else { + $this->plots[$j]->value->SetAlign('center','bottom'); + $this->plots[$j]->value->SetMargin(-1); + } + } + $this->plots[$j]->value->Stroke($img,$this->plots[$j]->coords[0][$i],$x,$y); + } + + } + return true; + } +} // Class + +/* EOF */ +?> diff --git a/html/includes/jpgraph/src/jpgraph_canvas.php b/html/includes/jpgraph/src/jpgraph_canvas.php new file mode 100644 index 0000000000..6e6f52a26f --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_canvas.php @@ -0,0 +1,94 @@ +Graph($aWidth,$aHeight,$aCachedName,$timeout,$inline); + } + +//--------------- +// PUBLIC METHODS + + function InitFrame() { + $this->StrokePlotArea(); + } + + // Method description + function Stroke($aStrokeFileName="") { + if( $this->texts != null ) { + for($i=0; $i < count($this->texts); ++$i) { + $this->texts[$i]->Stroke($this->img); + } + } + if( $this->iTables !== null ) { + for($i=0; $i < count($this->iTables); ++$i) { + $this->iTables[$i]->Stroke($this->img); + } + } + $this->StrokeTitles(); + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + if( !$_csim ) { + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans') ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special _IMG_HANDLER + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline,$aStrokeFileName); + return true; + } + } + } +} // Class +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_canvtools.php b/html/includes/jpgraph/src/jpgraph_canvtools.php new file mode 100644 index 0000000000..87b4f747cc --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_canvtools.php @@ -0,0 +1,515 @@ +g = &$graph; + $this->w = $graph->img->width; + $this->h = $graph->img->height; + $this->ixmin = $xmin; + $this->ixmax = $xmax; + $this->iymin = $ymin; + $this->iymax = $ymax; + } + + function Set($xmin=0,$xmax=10,$ymin=0,$ymax=10) { + $this->ixmin = $xmin; + $this->ixmax = $xmax; + $this->iymin = $ymin; + $this->iymax = $ymax; + } + + function Translate($x,$y) { + $xp = round(($x-$this->ixmin)/($this->ixmax - $this->ixmin) * $this->w); + $yp = round(($y-$this->iymin)/($this->iymax - $this->iymin) * $this->h); + return array($xp,$yp); + } + + function TranslateX($x) { + $xp = round(($x-$this->ixmin)/($this->ixmax - $this->ixmin) * $this->w); + return $xp; + } + + function TranslateY($y) { + $yp = round(($y-$this->iymin)/($this->iymax - $this->iymin) * $this->h); + return $yp; + } + +} + + +//=================================================== +// CLASS Shape +// Description: Methods to draw shapes on canvas +//=================================================== +class Shape { + var $img,$scale; + + function Shape(&$aGraph,&$scale) { + $this->img = &$aGraph->img; + $this->img->SetColor('black'); + $this->scale = &$scale; + } + + function SetColor($aColor) { + $this->img->SetColor($aColor); + } + + function Line($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->Line($x1,$y1,$x2,$y2); + } + + function Polygon($p,$aClosed=false) { + $n=count($p); + for($i=0; $i < $n; $i+=2 ) { + $p[$i] = $this->scale->TranslateX($p[$i]); + $p[$i+1] = $this->scale->TranslateY($p[$i+1]); + } + $this->img->Polygon($p,$aClosed); + } + + function FilledPolygon($p) { + $n=count($p); + for($i=0; $i < $n; $i+=2 ) { + $p[$i] = $this->scale->TranslateX($p[$i]); + $p[$i+1] = $this->scale->TranslateY($p[$i+1]); + } + $this->img->FilledPolygon($p); + } + + + // Draw a bezier curve with defining points in the $aPnts array + // using $aSteps steps. + // 0=x0, 1=y0 + // 2=x1, 3=y1 + // 4=x2, 5=y2 + // 6=x3, 7=y3 + function Bezier($p,$aSteps=40) { + $x0 = $p[0]; + $y0 = $p[1]; + // Calculate coefficients + $cx = 3*($p[2]-$p[0]); + $bx = 3*($p[4]-$p[2])-$cx; + $ax = $p[6]-$p[0]-$cx-$bx; + $cy = 3*($p[3]-$p[1]); + $by = 3*($p[5]-$p[3])-$cy; + $ay = $p[7]-$p[1]-$cy-$by; + + // Step size + $delta = 1.0/$aSteps; + + $x_old = $x0; + $y_old = $y0; + for($t=$delta; $t<=1.0; $t+=$delta) { + $tt = $t*$t; $ttt=$tt*$t; + $x = $ax*$ttt + $bx*$tt + $cx*$t + $x0; + $y = $ay*$ttt + $by*$tt + $cy*$t + $y0; + $this->Line($x_old,$y_old,$x,$y); + $x_old = $x; + $y_old = $y; + } + $this->Line($x_old,$y_old,$p[6],$p[7]); + } + + function Rectangle($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->Rectangle($x1,$y1,$x2,$y2); + } + + function FilledRectangle($x1,$y1,$x2,$y2) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + $this->img->FilledRectangle($x1,$y1,$x2,$y2); + } + + function Circle($x1,$y1,$r) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + if( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->Circle($x1,$y1,$r); + } + + function FilledCircle($x1,$y1,$r) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + if( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->FilledCircle($x1,$y1,$r); + } + + function RoundedRectangle($x1,$y1,$x2,$y2,$r=null) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + + if( $r == null ) + $r = 5; + elseif( $r >= 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->RoundedRectangle($x1,$y1,$x2,$y2,$r); + } + + function FilledRoundedRectangle($x1,$y1,$x2,$y2,$r=null) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + + if( $r == null ) + $r = 5; + elseif( $r > 0 ) + $r = $this->scale->TranslateX($r); + else + $r = -$r; + $this->img->FilledRoundedRectangle($x1,$y1,$x2,$y2,$r); + } + + function ShadowRectangle($x1,$y1,$x2,$y2,$fcolor=false,$shadow_width=null,$shadow_color=array(102,102,102)) { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + list($x2,$y2) = $this->scale->Translate($x2,$y2); + if( $shadow_width == null ) + $shadow_width=4; + else + $shadow_width=$this->scale->TranslateX($shadow_width); + $this->img->ShadowRectangle($x1,$y1,$x2,$y2,$fcolor,$shadow_width,$shadow_color); + } + + function SetTextAlign($halign,$valign="bottom") { + $this->img->SetTextAlign($halign,$valign="bottom"); + } + + function StrokeText($x1,$y1,$txt,$dir=0,$paragraph_align="left") { + list($x1,$y1) = $this->scale->Translate($x1,$y1); + $this->img->StrokeText($x1,$y1,$txt,$dir,$paragraph_align); + } + + // A rounded rectangle where one of the corner has been moved "into" the + // rectangle 'iw' width and 'ih' height. Corners: + // 0=Top left, 1=top right, 2=bottom right, 3=bottom left + function IndentedRectangle($xt,$yt,$w,$h,$iw=0,$ih=0,$aCorner=3,$aFillColor="",$r=4) { + + list($xt,$yt) = $this->scale->Translate($xt,$yt); + list($w,$h) = $this->scale->Translate($w,$h); + list($iw,$ih) = $this->scale->Translate($iw,$ih); + + $xr = $xt + $w - 0; + $yl = $yt + $h - 0; + + switch( $aCorner ) { + case 0: // Upper left + + // Bottom line, left & right arc + $this->img->Line($xt+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Right line, Top right arc + $this->img->Line($xr,$yt+$r,$xr,$yl-$r); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Top line, Top left arc + $this->img->Line($xt+$iw+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$iw+$r,$yt+$r,$r*2,$r*2,180,270); + + // Left line + $this->img->Line($xt,$yt+$ih+$r,$xt,$yl-$r); + + // Indent horizontal, Lower left arc + $this->img->Line($xt+$r,$yt+$ih,$xt+$iw-$r,$yt+$ih); + $this->img->Arc($xt+$r,$yt+$ih+$r,$r*2,$r*2,180,270); + + // Indent vertical, Indent arc + $this->img->Line($xt+$iw,$yt+$r,$xt+$iw,$yt+$ih-$r); + $this->img->Arc($xt+$iw-$r,$yt+$ih-$r,$r*2,$r*2,0,90); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xr-$r,$yl-$r,$bc); + $this->img->PopColor(); + } + + break; + + case 1: // Upper right + + // Bottom line, left & right arc + $this->img->Line($xt+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Left line, Top left arc + $this->img->Line($xt,$yt+$r,$xt,$yl-$r); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + + // Top line, Top right arc + $this->img->Line($xt+$r,$yt,$xr-$iw-$r,$yt); + $this->img->Arc($xr-$iw-$r,$yt+$r,$r*2,$r*2,270,360); + + // Right line + $this->img->Line($xr,$yt+$ih+$r,$xr,$yl-$r); + + // Indent horizontal, Lower right arc + $this->img->Line($xr-$iw+$r,$yt+$ih,$xr-$r,$yt+$ih); + $this->img->Arc($xr-$r,$yt+$ih+$r,$r*2,$r*2,270,360); + + // Indent vertical, Indent arc + $this->img->Line($xr-$iw,$yt+$r,$xr-$iw,$yt+$ih-$r); + $this->img->Arc($xr-$iw+$r,$yt+$ih-$r,$r*2,$r*2,90,180); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xt+$r,$yl-$r,$bc); + $this->img->PopColor(); + } + + break; + + case 2: // Lower right + // Top line, Top left & Top right arc + $this->img->Line($xt+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Left line, Bottom left arc + $this->img->Line($xt,$yt+$r,$xt,$yl-$r); + $this->img->Arc($xt+$r,$yl-$r,$r*2,$r*2,90,180); + + // Bottom line, Bottom right arc + $this->img->Line($xt+$r,$yl,$xr-$iw-$r,$yl); + $this->img->Arc($xr-$iw-$r,$yl-$r,$r*2,$r*2,0,90); + + // Right line + $this->img->Line($xr,$yt+$r,$xr,$yl-$ih-$r); + + // Indent horizontal, Lower right arc + $this->img->Line($xr-$r,$yl-$ih,$xr-$iw+$r,$yl-$ih); + $this->img->Arc($xr-$r,$yl-$ih-$r,$r*2,$r*2,0,90); + + // Indent vertical, Indent arc + $this->img->Line($xr-$iw,$yl-$r,$xr-$iw,$yl-$ih+$r); + $this->img->Arc($xr-$iw+$r,$yl-$ih+$r,$r*2,$r*2,180,270); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xt+$r,$yt+$r,$bc); + $this->img->PopColor(); + } + + break; + + case 3: // Lower left + // Top line, Top left & Top right arc + $this->img->Line($xt+$r,$yt,$xr-$r,$yt); + $this->img->Arc($xt+$r,$yt+$r,$r*2,$r*2,180,270); + $this->img->Arc($xr-$r,$yt+$r,$r*2,$r*2,270,360); + + // Right line, Bottom right arc + $this->img->Line($xr,$yt+$r,$xr,$yl-$r); + $this->img->Arc($xr-$r,$yl-$r,$r*2,$r*2,0,90); + + // Bottom line, Bottom left arc + $this->img->Line($xt+$iw+$r,$yl,$xr-$r,$yl); + $this->img->Arc($xt+$iw+$r,$yl-$r,$r*2,$r*2,90,180); + + // Left line + $this->img->Line($xt,$yt+$r,$xt,$yl-$ih-$r); + + // Indent horizontal, Lower left arc + $this->img->Line($xt+$r,$yl-$ih,$xt+$iw-$r,$yl-$ih); + $this->img->Arc($xt+$r,$yl-$ih-$r,$r*2,$r*2,90,180); + + // Indent vertical, Indent arc + $this->img->Line($xt+$iw,$yl-$ih+$r,$xt+$iw,$yl-$r); + $this->img->Arc($xt+$iw-$r,$yl-$ih+$r,$r*2,$r*2,270,360); + + if( $aFillColor != '' ) { + $bc = $this->img->current_color_name; + $this->img->PushColor($aFillColor); + $this->img->FillToBorder($xr-$r,$yt+$r,$bc); + $this->img->PopColor(); + } + + break; + } + } +} + + +//=================================================== +// CLASS RectangleText +// Description: Draws a text paragraph inside a +// rounded, possible filled, rectangle. +//=================================================== +class CanvasRectangleText { + var $ix,$iy,$iw,$ih,$ir=4; + var $iTxt,$iColor='black',$iFillColor='',$iFontColor='black'; + var $iParaAlign='center'; + var $iAutoBoxMargin=5; + var $iShadowWidth=3,$iShadowColor=''; + + function CanvasRectangleText($aTxt='',$xl=0,$yt=0,$w=0,$h=0) { + $this->iTxt = new Text($aTxt); + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function SetShadow($aColor='gray',$aWidth=3) { + $this->iShadowColor = $aColor; + $this->iShadowWidth = $aWidth; + } + + function SetFont($FontFam,$aFontStyle,$aFontSize=12) { + $this->iTxt->SetFont($FontFam,$aFontStyle,$aFontSize); + } + + function SetTxt($aTxt) { + $this->iTxt->Set($aTxt); + } + + function ParagraphAlign($aParaAlign) { + $this->iParaAlign = $aParaAlign; + } + + function SetFillColor($aFillColor) { + $this->iFillColor = $aFillColor; + } + + function SetAutoMargin($aMargin) { + $this->iAutoBoxMargin=$aMargin; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetFontColor($aColor) { + $this->iFontColor = $aColor; + } + + function SetPos($xl=0,$yt=0,$w=0,$h=0) { + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function Pos($xl=0,$yt=0,$w=0,$h=0) { + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function Set($aTxt,$xl,$yt,$w=0,$h=0) { + $this->iTxt->Set($aTxt); + $this->ix = $xl; + $this->iy = $yt; + $this->iw = $w; + $this->ih = $h; + } + + function SetCornerRadius($aRad=5) { + $this->ir = $aRad; + } + + function Stroke($aImg,$scale) { + + // If coordinates are specifed as negative this means we should + // treat them as abolsute (pixels) coordinates + if( $this->ix > 0 ) { + $this->ix = $scale->TranslateX($this->ix) ; + } + else { + $this->ix = -$this->ix; + } + + if( $this->iy > 0 ) { + $this->iy = $scale->TranslateY($this->iy) ; + } + else { + $this->iy = -$this->iy; + } + + list($this->iw,$this->ih) = $scale->Translate($this->iw,$this->ih) ; + + if( $this->iw == 0 ) + $this->iw = round($this->iTxt->GetWidth($aImg) + $this->iAutoBoxMargin); + if( $this->ih == 0 ) { + $this->ih = round($this->iTxt->GetTextHeight($aImg) + $this->iAutoBoxMargin); + } + + if( $this->iShadowColor != '' ) { + $aImg->PushColor($this->iShadowColor); + $aImg->FilledRoundedRectangle($this->ix+$this->iShadowWidth, + $this->iy+$this->iShadowWidth, + $this->ix+$this->iw-1+$this->iShadowWidth, + $this->iy+$this->ih-1+$this->iShadowWidth, + $this->ir); + $aImg->PopColor(); + } + + if( $this->iFillColor != '' ) { + $aImg->PushColor($this->iFillColor); + $aImg->FilledRoundedRectangle($this->ix,$this->iy, + $this->ix+$this->iw-1, + $this->iy+$this->ih-1, + $this->ir); + $aImg->PopColor(); + } + + if( $this->iColor != '' ) { + $aImg->PushColor($this->iColor); + $aImg->RoundedRectangle($this->ix,$this->iy, + $this->ix+$this->iw-1, + $this->iy+$this->ih-1, + $this->ir); + $aImg->PopColor(); + } + + $this->iTxt->Align('center','center'); + $this->iTxt->ParagraphAlign($this->iParaAlign); + $this->iTxt->SetColor($this->iFontColor); + $this->iTxt->Stroke($aImg, $this->ix+$this->iw/2, $this->iy+$this->ih/2); + + return array($this->iw, $this->ih); + + } + +} + + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_date.php b/html/includes/jpgraph/src/jpgraph_date.php new file mode 100644 index 0000000000..672066a2da --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_date.php @@ -0,0 +1,497 @@ +type=$aType; + $this->scale=array($aMin,$aMax); + $this->world_size=$aMax-$aMin; + $this->ticks = new LinearTicks(); + $this->intscale=true; + } + + +//------------------------------------------------------------------------------------------ +// Utility Function AdjDate() +// Description: Will round a given time stamp to an even year, month or day +// argument. +//------------------------------------------------------------------------------------------ + + function AdjDate($aTime,$aRound=0,$aYearType=false,$aMonthType=false,$aDayType=false) { + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h=0;$i=0;$s=0; + if( $aYearType !== false ) { + $yearAdj = array(0=>1, 1=>2, 2=>5); + if( $aRound == 0 ) { + $y = floor($y/$yearAdj[$aYearType])*$yearAdj[$aYearType]; + } + else { + ++$y; + $y = ceil($y/$yearAdj[$aYearType])*$yearAdj[$aYearType]; + } + $m=1;$d=1; + } + elseif( $aMonthType !== false ) { + $monthAdj = array(0=>1, 1=>6); + if( $aRound == 0 ) { + $m = floor($m/$monthAdj[$aMonthType])*$monthAdj[$aMonthType]; + $d=1; + } + else { + ++$m; + $m = ceil($m/$monthAdj[$aMonthType])*$monthAdj[$aMonthType]; + $d=1; + } + } + elseif( $aDayType !== false ) { + if( $aDayType == 0 ) { + if( $aRound == 1 ) { + //++$d; + $h=23;$i=59;$s=59; + } + } + else { + // Adjust to an even week boundary. + $w = (int)date('w',$aTime); // Day of week 0=Sun, 6=Sat + if( true ) { // Adjust to start on Mon + if( $w==0 ) $w=6; + else --$w; + } + if( $aRound == 0 ) { + $d -= $w; + } + else { + $d += (7-$w); + $h=23;$i=59;$s=59; + } + } + } + return mktime($h,$i,$s,$m,$d,$y); + + } + +//------------------------------------------------------------------------------------------ +// Wrapper for AdjDate that will round a timestamp to an even date rounding +// it downwards. +//------------------------------------------------------------------------------------------ + function AdjStartDate($aTime,$aYearType=false,$aMonthType=false,$aDayType=false) { + return $this->AdjDate($aTime,0,$aYearType,$aMonthType,$aDayType); + } + +//------------------------------------------------------------------------------------------ +// Wrapper for AdjDate that will round a timestamp to an even date rounding +// it upwards +//------------------------------------------------------------------------------------------ + function AdjEndDate($aTime,$aYearType=false,$aMonthType=false,$aDayType=false) { + return $this->AdjDate($aTime,1,$aYearType,$aMonthType,$aDayType); + } + +//------------------------------------------------------------------------------------------ +// Utility Function AdjTime() +// Description: Will round a given time stamp to an even time according to +// argument. +//------------------------------------------------------------------------------------------ + + function AdjTime($aTime,$aRound=0,$aHourType=false,$aMinType=false,$aSecType=false) { + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = (int)date('i',$aTime); $s = (int)date('s',$aTime); + if( $aHourType !== false ) { + $aHourType %= 6; + $hourAdj = array(0=>1, 1=>2, 2=>3, 3=>4, 4=>6, 5=>12); + if( $aRound == 0 ) + $h = floor($h/$hourAdj[$aHourType])*$hourAdj[$aHourType]; + else { + if( ($h % $hourAdj[$aHourType]==0) && ($i > 0 || $s > 0) ) { + $h++; + } + $h = ceil($h/$hourAdj[$aHourType])*$hourAdj[$aHourType]; + if( $h >= 24 ) { + $aTime += 86400; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h -= 24; + } + } + $i=0;$s=0; + } + elseif( $aMinType !== false ) { + $aMinType %= 5; + $minAdj = array(0=>1, 1=>5, 2=>10, 3=>15, 4=>30); + if( $aRound == 0 ) { + $i = floor($i/$minAdj[$aMinType])*$minAdj[$aMinType]; + } + else { + if( ($i % $minAdj[$aMinType]==0) && $s > 0 ) { + $i++; + } + $i = ceil($i/$minAdj[$aMinType])*$minAdj[$aMinType]; + if( $i >= 60) { + $aTime += 3600; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = 0; + } + } + $s=0; + } + elseif( $aSecType !== false ) { + $aSecType %= 5; + $secAdj = array(0=>1, 1=>5, 2=>10, 3=>15, 4=>30); + if( $aRound == 0 ) { + $s = floor($s/$secAdj[$aSecType])*$secAdj[$aSecType]; + } + else { + $s = ceil($s/$secAdj[$aSecType]*1.0)*$secAdj[$aSecType]; + if( $s >= 60) { + $s=0; + $aTime += 60; + $y = (int)date('Y',$aTime); $m = (int)date('m',$aTime); $d = (int)date('d',$aTime); + $h = (int)date('H',$aTime); $i = (int)date('i',$aTime); + } + } + } + return mktime($h,$i,$s,$m,$d,$y); + } + +//------------------------------------------------------------------------------------------ +// Wrapper for AdjTime that will round a timestamp to an even time rounding +// it downwards. +// Example: AdjStartTime(mktime(18,27,13,2,22,2005),false,2) => 18:20 +//------------------------------------------------------------------------------------------ + function AdjStartTime($aTime,$aHourType=false,$aMinType=false,$aSecType=false) { + return $this->AdjTime($aTime,0,$aHourType,$aMinType,$aSecType); + } + +//------------------------------------------------------------------------------------------ +// Wrapper for AdjTime that will round a timestamp to an even time rounding +// it upwards +// Example: AdjEndTime(mktime(18,27,13,2,22,2005),false,2) => 18:30 +//------------------------------------------------------------------------------------------ + function AdjEndTime($aTime,$aHourType=false,$aMinType=false,$aSecType=false) { + return $this->AdjTime($aTime,1,$aHourType,$aMinType,$aSecType); + } + +//------------------------------------------------------------------------------------------ +// DateAutoScale +// Autoscale a date axis given start and end time +// Returns an array ($start,$end,$major,$minor,$format) +//------------------------------------------------------------------------------------------ + function DoDateAutoScale($aStartTime,$aEndTime,$aDensity=0,$aAdjust=true) { + // Format of array + // array ( Decision point, array( array( Major-scale-step-array ), + // array( Minor-scale-step-array ), + // array( 0=date-adjust, 1=time-adjust, adjustment-alignment) ) + // + $scalePoints = + array( + /* Intervall larger than 10 years */ + SECPERYEAR*10,array(array(SECPERYEAR*5,SECPERYEAR*2), + array(SECPERYEAR), + array(0,YEARADJ_1, 0,YEARADJ_1) ), + + /* Intervall larger than 2 years */ + SECPERYEAR*2,array(array(SECPERYEAR),array(SECPERYEAR), + array(0,YEARADJ_1) ), + + /* Intervall larger than 90 days (approx 3 month) */ + SECPERDAY*90,array(array(SECPERDAY*30,SECPERDAY*14,SECPERDAY*7,SECPERDAY), + array(SECPERDAY*5,SECPERDAY*7,SECPERDAY,SECPERDAY), + array(0,MONTHADJ_1, 0,DAYADJ_WEEK, 0,DAYADJ_1, 0,DAYADJ_1)), + + /* Intervall larger than 30 days (approx 1 month) */ + SECPERDAY*30,array(array(SECPERDAY*14,SECPERDAY*7,SECPERDAY*2, SECPERDAY), + array(SECPERDAY,SECPERDAY,SECPERDAY,SECPERDAY), + array(0,DAYADJ_WEEK, 0,DAYADJ_1, 0,DAYADJ_1, 0,DAYADJ_1)), + + /* Intervall larger than 7 days */ + SECPERDAY*7,array(array(SECPERDAY,SECPERHOUR*12,SECPERHOUR*6,SECPERHOUR*2), + array(SECPERHOUR*6,SECPERHOUR*3,SECPERHOUR,SECPERHOUR), + array(0,DAYADJ_1, 1,HOURADJ_12, 1,HOURADJ_6, 1,HOURADJ_1)), + + /* Intervall larger than 1 day */ + SECPERDAY,array(array(SECPERDAY,SECPERHOUR*12,SECPERHOUR*6,SECPERHOUR*2,SECPERHOUR), + array(SECPERHOUR*6,SECPERHOUR*2,SECPERHOUR,SECPERHOUR,SECPERHOUR), + array(1,HOURADJ_12, 1,HOURADJ_6, 1,HOURADJ_1, 1,HOURADJ_1)), + + /* Intervall larger than 12 hours */ + SECPERHOUR*12,array(array(SECPERHOUR*2,SECPERHOUR,SECPERMIN*30,900,600), + array(1800,1800,900,300,300), + array(1,HOURADJ_1, 1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 2 hours */ + SECPERHOUR*2,array(array(SECPERHOUR,SECPERMIN*30,900,600,300), + array(1800,900,300,120,60), + array(1,HOURADJ_1, 1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 1 hours */ + SECPERHOUR,array(array(SECPERMIN*30,900,600,300),array(900,300,120,60), + array(1,MINADJ_30, 1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5) ), + + /* Intervall larger than 30 min */ + SECPERMIN*30,array(array(SECPERMIN*15,SECPERMIN*10,SECPERMIN*5,SECPERMIN), + array(300,300,60,10), + array(1,MINADJ_15, 1,MINADJ_10, 1,MINADJ_5, 1,MINADJ_1)), + + /* Intervall larger than 1 min */ + SECPERMIN,array(array(SECPERMIN,15,10,5), + array(15,5,2,1), + array(1,MINADJ_1, 1,SECADJ_15, 1,SECADJ_10, 1,SECADJ_5)), + + /* Intervall larger than 10 sec */ + 10,array(array(5,2), + array(1,1), + array(1,SECADJ_5, 1,SECADJ_1)), + + /* Intervall larger than 1 sec */ + 1,array(array(1), + array(1), + array(1,SECADJ_1)), + ); + + $ns = count($scalePoints); + // Establish major and minor scale units for the date scale + $diff = $aEndTime - $aStartTime; + if( $diff < 1 ) return false; + $done=false; + $i=0; + while( ! $done ) { + if( $diff > $scalePoints[2*$i] ) { + // Get major and minor scale for this intervall + $scaleSteps = $scalePoints[2*$i+1]; + $major = $scaleSteps[0][min($aDensity,count($scaleSteps[0])-1)]; + // Try to find out which minor step looks best + $minor = $scaleSteps[1][min($aDensity,count($scaleSteps[1])-1)]; + if( $aAdjust ) { + // Find out how we should align the start and end timestamps + $idx = 2*min($aDensity,floor(count($scaleSteps[2])/2)-1); + if( $scaleSteps[2][$idx] === 0 ) { + // Use date adjustment + $adj = $scaleSteps[2][$idx+1]; + if( $adj >= 30 ) { + $start = $this->AdjStartDate($aStartTime,$adj-30); + $end = $this->AdjEndDate($aEndTime,$adj-30); + } + elseif( $adj >= 20 ) { + $start = $this->AdjStartDate($aStartTime,false,$adj-20); + $end = $this->AdjEndDate($aEndTime,false,$adj-20); + } + else { + $start = $this->AdjStartDate($aStartTime,false,false,$adj); + $end = $this->AdjEndDate($aEndTime,false,false,$adj); + // We add 1 second for date adjustment to make sure we end on 00:00 the following day + // This makes the final major tick be srawn when we step day-by-day instead of ending + // on xx:59:59 which would not draw the final major tick + $end++; + } + } + else { + // Use time adjustment + $adj = $scaleSteps[2][$idx+1]; + if( $adj >= 30 ) { + $start = $this->AdjStartTime($aStartTime,$adj-30); + $end = $this->AdjEndTime($aEndTime,$adj-30); + } + elseif( $adj >= 20 ) { + $start = $this->AdjStartTime($aStartTime,false,$adj-20); + $end = $this->AdjEndTime($aEndTime,false,$adj-20); + } + else { + $start = $this->AdjStartTime($aStartTime,false,false,$adj); + $end = $this->AdjEndTime($aEndTime,false,false,$adj); + } + } + } + // If the overall date span is larger than 1 day ten we show date + $format = ''; + if( ($end-$start) > SECPERDAY ) { + $format = 'Y-m-d '; + } + // If the major step is less than 1 day we need to whow hours + min + if( $major < SECPERDAY ) { + $format .= 'H:i'; + } + // If the major step is less than 1 min we need to show sec + if( $major < 60 ) { + $format .= ':s'; + } + $done=true; + } + ++$i; + } + return array($start,$end,$major,$minor,$format); + } + + // Overrides the automatic determined date format. Must be a valid date() format string + function SetDateFormat($aFormat) { + $this->date_format = $aFormat; + $this->ticks->SetLabelDateFormat($this->date_format); + } + + function AdjustForDST($aFlg=true) { + $this->ticks->AdjustForDST($aFlg); + } + + + function SetDateAlign($aStartAlign,$aEndAlign=false) { + if( $aEndAlign === false ) { + $aEndAlign=$aStartAlign; + } + $this->iStartAlign = $aStartAlign; + $this->iEndAlign = $aEndAlign; + } + + function SetTimeAlign($aStartAlign,$aEndAlign=false) { + if( $aEndAlign === false ) { + $aEndAlign=$aStartAlign; + } + $this->iStartTimeAlign = $aStartAlign; + $this->iEndTimeAlign = $aEndAlign; + } + + + function AutoScale(&$img,$aStartTime,$aEndTime,$aNumSteps) { + if( $aStartTime == $aEndTime ) { + // Special case when we only have one data point. + // Create a small artifical intervall to do the autoscaling + $aStartTime -= 10; + $aEndTime += 10; + } + $done=false; + $i=0; + while( ! $done && $i < 5) { + list($adjstart,$adjend,$maj,$min,$format) = $this->DoDateAutoScale($aStartTime,$aEndTime,$i); + $n = floor(($adjend-$adjstart)/$maj); + if( $n * 1.7 > $aNumSteps ) { + $done=true; + } + $i++; + } + + /* + if( 0 ) { // DEBUG + echo " Start =".date("Y-m-d H:i:s",$aStartTime)."
    "; + echo " End =".date("Y-m-d H:i:s",$aEndTime)."
    "; + echo "Adj Start =".date("Y-m-d H:i:s",$adjstart)."
    "; + echo "Adj End =".date("Y-m-d H:i:s",$adjend)."

    "; + echo "Major = $maj s, ".floor($maj/60)."min, ".floor($maj/3600)."h, ".floor($maj/86400)."day
    "; + echo "Min = $min s, ".floor($min/60)."min, ".floor($min/3600)."h, ".floor($min/86400)."day
    "; + echo "Format=$format

    "; + } + */ + + if( $this->iStartTimeAlign !== false && $this->iStartAlign !== false ) { + JpGraphError::RaiseL(3001); +//('It is only possible to use either SetDateAlign() or SetTimeAlign() but not both'); + } + + if( $this->iStartTimeAlign !== false ) { + if( $this->iStartTimeAlign >= 30 ) { + $adjstart = $this->AdjStartTime($aStartTime,$this->iStartTimeAlign-30); + } + elseif( $this->iStartTimeAlign >= 20 ) { + $adjstart = $this->AdjStartTime($aStartTime,false,$this->iStartTimeAlign-20); + } + else { + $adjstart = $this->AdjStartTime($aStartTime,false,false,$this->iStartTimeAlign); + } + } + if( $this->iEndTimeAlign !== false ) { + if( $this->iEndTimeAlign >= 30 ) { + $adjend = $this->AdjEndTime($aEndTime,$this->iEndTimeAlign-30); + } + elseif( $this->iEndTimeAlign >= 20 ) { + $adjend = $this->AdjEndTime($aEndTime,false,$this->iEndTimeAlign-20); + } + else { + $adjend = $this->AdjEndTime($aEndTime,false,false,$this->iEndTimeAlign); + } + } + + + + if( $this->iStartAlign !== false ) { + if( $this->iStartAlign >= 30 ) { + $adjstart = $this->AdjStartDate($aStartTime,$this->iStartAlign-30); + } + elseif( $this->iStartAlign >= 20 ) { + $adjstart = $this->AdjStartDate($aStartTime,false,$this->iStartAlign-20); + } + else { + $adjstart = $this->AdjStartDate($aStartTime,false,false,$this->iStartAlign); + } + } + if( $this->iEndAlign !== false ) { + if( $this->iEndAlign >= 30 ) { + $adjend = $this->AdjEndDate($aEndTime,$this->iEndAlign-30); + } + elseif( $this->iEndAlign >= 20 ) { + $adjend = $this->AdjEndDate($aEndTime,false,$this->iEndAlign-20); + } + else { + $adjend = $this->AdjEndDate($aEndTime,false,false,$this->iEndAlign); + } + } + $this->Update($img,$adjstart,$adjend); + if( ! $this->ticks->IsSpecified() ) + $this->ticks->Set($maj,$min); + if( $this->date_format == '' ) + $this->ticks->SetLabelDateFormat($format); + else + $this->ticks->SetLabelDateFormat($this->date_format); + } +} + + +?> diff --git a/html/includes/jpgraph/src/jpgraph_errhandler.inc.php b/html/includes/jpgraph/src/jpgraph_errhandler.inc.php new file mode 100644 index 0000000000..0afb416a56 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_errhandler.inc.php @@ -0,0 +1,277 @@ +lt = $_jpg_messages; + } + + function Get($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) { + GLOBAL $__jpg_err_locale; + if( !isset($this->lt[$errnbr]) ) { + return 'Internal error: The specified error message ('.$errnbr.') does not exist in the chosen locale ('.$__jpg_err_locale.')'; + } + $ea = $this->lt[$errnbr]; + $j=0; + if( $a1 !== null ) { + $argv[$j++] = $a1; + if( $a2 !== null ) { + $argv[$j++] = $a2; + if( $a3 !== null ) { + $argv[$j++] = $a3; + if( $a4 !== null ) { + $argv[$j++] = $a4; + if( $a5 !== null ) { + $argv[$j++] = $a5; + } + } + } + } + } + $numargs = $j; + if( $ea[1] != $numargs ) { + // Error message argument count do not match. + // Just return the error message without arguments. + return $ea[0]; + } + switch( $numargs ) { + case 1: + $msg = sprintf($ea[0],$argv[0]); + break; + case 2: + $msg = sprintf($ea[0],$argv[0],$argv[1]); + break; + case 3: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2]); + break; + case 4: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3]); + break; + case 5: + $msg = sprintf($ea[0],$argv[0],$argv[1],$argv[2],$argv[3],$argv[4]); + break; + case 0: + default: + $msg = sprintf($ea[0]); + break; + } + return $msg; + } +} + +// +// A wrapper class that is used to access the specified error object +// (to hide the global error parameter and avoid having a GLOBAL directive +// in all methods. +// +class JpGraphError { + function Install($aErrObject) { + GLOBAL $__jpg_err; + $__jpg_err = $aErrObject; + } + function SetErrLocale($aLoc) { + GLOBAL $__jpg_err_locale ; + $__jpg_err_locale = $aLoc; + } + function Raise($aMsg,$aHalt=true){ + GLOBAL $__jpg_err; + $tmp = new $__jpg_err; + $tmp->Raise($aMsg,$aHalt); + } + function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) { + GLOBAL $__jpg_err; + $t = new ErrMsgText(); + $msg = $t->Get($errnbr,$a1,$a2,$a3,$a4,$a5); + $tmp = new $__jpg_err; + $tmp->Raise($msg); + } +} + +// The default trivial text error handler. +class JpGraphErrObject { + + var $iTitle = "JpGraph Error"; + var $iDest = false; + + function JpGraphErrObject() { + // Empty. Reserved for future use + } + + function SetTitle($aTitle) { + $this->iTitle = $aTitle; + } + + function SetStrokeDest($aDest) { + $this->iDest = $aDest; + } + + // If aHalt is true then execution can't continue. Typical used for fatal errors. + function Raise($aMsg,$aHalt=true) { + $aMsg = $this->iTitle.' '.$aMsg."\n"; + if ($this->iDest) { + $f = @fopen($this->iDest,'a'); + if( $f ) { + @fwrite($f,$aMsg); + @fclose($f); + } + } + else { + echo $aMsg; + } + if( $aHalt ) + die(); + } +} + +//============================================================== +// An image based error handler +//============================================================== +class JpGraphErrObjectImg extends JpGraphErrObject { + + function Raise($aMsg,$aHalt=true) { + $img_iconerror = + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaV'. + 'BMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'. + 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpY'. + 'iYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACx'. + 'IAAAsSAdLdfvwAAAAHdElNRQfTBgISOCqusfs5AAABLUlEQVR4'. + '2tWV3XKCMBBGWfkranCIVClKLd/7P2Q3QsgCxjDTq+6FE2cPH+'. + 'xJ0Ogn2lQbsT+Wrs+buAZAV4W5T6Bs0YXBBwpKgEuIu+JERAX6'. + 'wM2rHjmDdEITmsQEEmWADgZm6rAjhXsoMGY9B/NZBwJzBvn+e3'. + 'wHntCAJdGu9SviwIwoZVDxPB9+Rc0TSEbQr0j3SA1gwdSn6Db0'. + '6Tm1KfV6yzWGQO7zdpvyKLKBDmRFjzeB3LYgK7r6A/noDAfjtS'. + 'IXaIzbJSv6WgUebTMV4EoRB8a2mQiQjgtF91HdKDKZ1gtFtQjk'. + 'YcWaR5OKOhkYt+ZsTFdJRfPAApOpQYJTNHvCRSJR6SJngQadfc'. + 'vd69OLMddVOPCGVnmrFD8bVYd3JXfxXPtLR/+mtv59/ALWiiMx'. + 'qL72fwAAAABJRU5ErkJggg==' ; + + if( function_exists("imagetypes") ) + $supported = imagetypes(); + else + $supported = 0; + + if( !function_exists('imagecreatefromstring') ) + $supported = 0; + + if( ob_get_length() || headers_sent() || !($supported & IMG_PNG) ) { + // Special case for headers already sent or that the installation doesn't support + // the PNG format (which the error icon is encoded in). + // Dont return an image since it can't be displayed + die($this->iTitle.' '.$aMsg); + } + + $aMsg = wordwrap($aMsg,55); + $lines = substr_count($aMsg,"\n"); + + // Create the error icon GD + $erricon = Image::CreateFromString(base64_decode($img_iconerror)); + + // Create an image that contains the error text. + $w=400; + $h=100 + 15*max(0,$lines-3); + + $img = new Image($w,$h); + + // Drop shadow + $img->SetColor("gray"); + $img->FilledRectangle(5,5,$w-1,$h-1,10); + $img->SetColor("gray:0.7"); + $img->FilledRectangle(5,5,$w-3,$h-3,10); + + // Window background + $img->SetColor("lightblue"); + $img->FilledRectangle(1,1,$w-5,$h-5); + $img->CopyCanvasH($img->img,$erricon,5,30,0,0,40,40); + + // Window border + $img->SetColor("black"); + $img->Rectangle(1,1,$w-5,$h-5); + $img->Rectangle(0,0,$w-4,$h-4); + + // Window top row + $img->SetColor("darkred"); + for($y=3; $y < 18; $y += 2 ) + $img->Line(1,$y,$w-6,$y); + + // "White shadow" + $img->SetColor("white"); + + // Left window edge + $img->Line(2,2,2,$h-5); + $img->Line(2,2,$w-6,2); + + // "Gray button shadow" + $img->SetColor("darkgray"); + + // Gray window shadow + $img->Line(2,$h-6,$w-5,$h-6); + $img->Line(3,$h-7,$w-5,$h-7); + + // Window title + $m = floor($w/2-5); + $l = 100; + $img->SetColor("lightgray:1.3"); + $img->FilledRectangle($m-$l,2,$m+$l,16); + + // Stroke text + $img->SetColor("darkred"); + $img->SetFont(FF_FONT2,FS_BOLD); + $img->StrokeText($m-50,15,$this->iTitle); + $img->SetColor("black"); + $img->SetFont(FF_FONT1,FS_NORMAL); + $txt = new Text($aMsg,52,25); + $txt->Align("left","top"); + $txt->Stroke($img); + if ($this->iDest) { + $img->Stream($this->iDest); + } else { + $img->Headers(); + $img->Stream(); + } + if( $aHalt ) + die(); + } +} + +// Install the default error handler in a global accessible variable +if( USE_IMAGE_ERROR_HANDLER ) { + $__jpg_err = "JpGraphErrObjectImg"; +} +else { + $__jpg_err = "JpGraphErrObject"; +} + + +?> diff --git a/html/includes/jpgraph/src/jpgraph_error.php b/html/includes/jpgraph/src/jpgraph_error.php new file mode 100644 index 0000000000..098741185a --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_error.php @@ -0,0 +1,156 @@ +Plot($datay,$datax); + $this->numpoints /= 2; + } +//--------------- +// PUBLIC METHODS + + // Gets called before any axis are stroked + function PreStrokeAdjust(&$graph) { + if( $this->center ) { + $a=0.5; $b=0.5; + ++$this->numpoints; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + //$graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + + // Method description + function Stroke(&$img,&$xscale,&$yscale) { + $numpoints=count($this->coords[0])/2; + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); +//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + else + $exist_x = true; + } + else + $exist_x = false; + + for( $i=0; $i<$numpoints; ++$i) { + if( $exist_x ) + $x=$this->coords[1][$i]; + else + $x=$i; + + if( !is_numeric($x) || + !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1]) ) { + continue; + } + + $xt = $xscale->Translate($x); + $yt1 = $yscale->Translate($this->coords[0][$i*2]); + $yt2 = $yscale->Translate($this->coords[0][$i*2+1]); + $img->Line($xt,$yt1,$xt,$yt2); + $img->Line($xt-$this->errwidth,$yt1,$xt+$this->errwidth,$yt1); + $img->Line($xt-$this->errwidth,$yt2,$xt+$this->errwidth,$yt2); + } + return true; + } +} // Class + + +//=================================================== +// CLASS ErrorLinePlot +// Description: Combine a line and error plot +// THIS IS A DEPRECATED PLOT TYPE JUST KEPT FOR +// BACKWARD COMPATIBILITY +//=================================================== +class ErrorLinePlot extends ErrorPlot { + var $line=null; +//--------------- +// CONSTRUCTOR + function ErrorLinePlot(&$datay,$datax=false) { + $this->ErrorPlot($datay,$datax); + // Calculate line coordinates as the average of the error limits + $n = count($datay); + for($i=0; $i < $n; $i+=2 ) { + $ly[]=($datay[$i]+$datay[$i+1])/2; + } + $this->line=new LinePlot($ly,$datax); + } + +//--------------- +// PUBLIC METHODS + function Legend(&$graph) { + if( $this->legend != "" ) + $graph->legend->Add($this->legend,$this->color); + $this->line->Legend($graph); + } + + function Stroke(&$img,&$xscale,&$yscale) { + parent::Stroke($img,$xscale,$yscale); + $this->line->Stroke($img,$xscale,$yscale); + } +} // Class + + +//=================================================== +// CLASS LineErrorPlot +// Description: Combine a line and error plot +//=================================================== +class LineErrorPlot extends ErrorPlot { + var $line=null; +//--------------- +// CONSTRUCTOR + // Data is (val, errdeltamin, errdeltamax) + function LineErrorPlot(&$datay,$datax=false) { + $ly=array(); $ey=array(); + $n = count($datay); + if( $n % 3 != 0 ) { + JpGraphError::RaiseL(4002); +//('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3'); + } + for($i=0; $i < $n; $i+=3 ) { + $ly[]=$datay[$i]; + $ey[]=$datay[$i]+$datay[$i+1]; + $ey[]=$datay[$i]+$datay[$i+2]; + } + $this->ErrorPlot($ey,$datax); + $this->line=new LinePlot($ly,$datax); + } + +//--------------- +// PUBLIC METHODS + function Legend(&$graph) { + if( $this->legend != "" ) + $graph->legend->Add($this->legend,$this->color); + $this->line->Legend($graph); + } + + function Stroke(&$img,&$xscale,&$yscale) { + parent::Stroke($img,$xscale,$yscale); + $this->line->Stroke($img,$xscale,$yscale); + } +} // Class + + +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_flags.php b/html/includes/jpgraph/src/jpgraph_flags.php new file mode 100644 index 0000000000..41920d2406 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_flags.php @@ -0,0 +1,376 @@ + 'afgh', + 'Republic of Angola' => 'agla', + 'Republic of Albania' => 'alba', + 'Alderney' => 'alde', + 'Democratic and Popular Republic of Algeria' => 'alge', + 'Territory of American Samoa' => 'amsa', + 'Principality of Andorra' => 'andr', + 'British Overseas Territory of Anguilla' => 'angu', + 'Antarctica' => 'anta', + 'Argentine Republic' => 'arge', + 'League of Arab States' => 'arle', + 'Republic of Armenia' => 'arme', + 'Aruba' => 'arub', + 'Commonwealth of Australia' => 'astl', + 'Republic of Austria' => 'aust', + 'Azerbaijani Republic' => 'azer', + 'Bangladesh' => 'bngl', + 'British Antarctic Territory' => 'bant', + 'Kingdom of Belgium' => 'belg', + 'British Overseas Territory of Bermuda' => 'berm', + 'Commonwealth of the Bahamas' => 'bhms', + 'Kingdom of Bahrain' => 'bhrn', + 'Republic of Belarus' => 'blru', + 'Republic of Bolivia' => 'blva', + 'Belize' => 'blze', + 'Republic of Benin' => 'bnin', + 'Republic of Botswana' => 'bots', + 'Federative Republic of Brazil' => 'braz', + 'Barbados' => 'brbd', + 'British Indian Ocean Territory' => 'brin', + 'Brunei Darussalam' => 'brun', + 'Republic of Burkina' => 'bufa', + 'Republic of Bulgaria' => 'bulg', + 'Republic of Burundi' => 'buru', + 'Overseas Territory of the British Virgin Islands' => 'bvis', + 'Central African Republic' => 'cafr', + 'Kingdom of Cambodia' => 'camb', + 'Republic of Cameroon' => 'came', + 'Dominion of Canada' => 'cana', + 'Caribbean Community' => 'cari', + 'Republic of Cape Verde' => 'cave', + 'Republic of Chad' => 'chad', + 'Republic of Chile' => 'chil', + 'Peoples Republic of China' => 'chin', + 'Territory of Christmas Island' => 'chms', + 'Commonwealth of Independent States' => 'cins', + 'Cook Islands' => 'ckis', + 'Republic of Colombia' => 'clmb', + 'Territory of Cocos Islands' => 'cois', + 'Commonwealth' => 'comn', + 'Union of the Comoros' => 'como', + 'Republic of the Congo' => 'cong', + 'Republic of Costa Rica' => 'corc', + 'Republic of Croatia' => 'croa', + 'Republic of Cuba' => 'cuba', + 'British Overseas Territory of the Cayman Islands' => 'cyis', + 'Republic of Cyprus' => 'cypr', + 'The Czech Republic' => 'czec', + 'Kingdom of Denmark' => 'denm', + 'Republic of Djibouti' => 'djib', + 'Commonwealth of Dominica' => 'domn', + 'Dominican Republic' => 'dore', + 'Republic of Ecuador' => 'ecua', + 'Arab Republic of Egypt' => 'egyp', + 'Republic of El Salvador' => 'elsa', + 'England' => 'engl', + 'Republic of Equatorial Guinea' => 'eqgu', + 'State of Eritrea' => 'erit', + 'Republic of Estonia' => 'estn', + 'Ethiopia' => 'ethp', + 'European Union' => 'euun', + 'British Overseas Territory of the Falkland Islands' => 'fais', + 'International Federation of Vexillological Associations' => 'fiav', + 'Republic of Fiji' => 'fiji', + 'Republic of Finland' => 'finl', + 'Territory of French Polynesia' => 'fpol', + 'French Republic' => 'fran', + 'Overseas Department of French Guiana' => 'frgu', + 'Gabonese Republic' => 'gabn', + 'Republic of the Gambia' => 'gamb', + 'Republic of Georgia' => 'geor', + 'Federal Republic of Germany' => 'germ', + 'Republic of Ghana' => 'ghan', + 'Gibraltar' => 'gibr', + 'Hellenic Republic' => 'grec', + 'State of Grenada' => 'gren', + 'Overseas Department of Guadeloupe' => 'guad', + 'Territory of Guam' => 'guam', + 'Republic of Guatemala' => 'guat', + 'The Bailiwick of Guernsey' => 'guer', + 'Republic of Guinea' => 'guin', + 'Republic of Haiti' => 'hait', + 'Hong Kong Special Administrative Region' => 'hokn', + 'Republic of Honduras' => 'hond', + 'Republic of Hungary' => 'hung', + 'Republic of Iceland' => 'icel', + 'International Committee of the Red Cross' => 'icrc', + 'Republic of India' => 'inda', + 'Republic of Indonesia' => 'indn', + 'Republic of Iraq' => 'iraq', + 'Republic of Ireland' => 'irel', + 'Organization of the Islamic Conference' => 'isco', + 'Isle of Man' => 'isma', + 'State of Israel' => 'isra', + 'Italian Republic' => 'ital', + 'Jamaica' => 'jama', + 'Japan' => 'japa', + 'The Bailiwick of Jersey' => 'jers', + 'Hashemite Kingdom of Jordan' => 'jord', + 'Republic of Kazakhstan' => 'kazk', + 'Republic of Kenya' => 'keny', + 'Republic of Kiribati' => 'kirb', + 'State of Kuwait' => 'kuwa', + 'Kyrgyz Republic' => 'kyrg', + 'Republic of Latvia' => 'latv', + 'Lebanese Republic' => 'leba', + 'Kingdom of Lesotho' => 'lest', + 'Republic of Liberia' => 'libe', + 'Principality of Liechtenstein' => 'liec', + 'Republic of Lithuania' => 'lith', + 'Grand Duchy of Luxembourg' => 'luxe', + 'Macao Special Administrative Region' => 'maca', + 'Republic of Macedonia' => 'mace', + 'Republic of Madagascar' => 'mada', + 'Republic of the Marshall Islands' => 'mais', + 'Republic of Mali' => 'mali', + 'Federation of Malaysia' => 'mals', + 'Republic of Malta' => 'malt', + 'Republic of Malawi' => 'malw', + 'Overseas Department of Martinique' => 'mart', + 'Islamic Republic of Mauritania' => 'maur', + 'Territorial Collectivity of Mayotte' => 'mayt', + 'United Mexican States' => 'mexc', + 'Federated States of Micronesia' => 'micr', + 'Midway Islands' => 'miis', + 'Republic of Moldova' => 'mold', + 'Principality of Monaco' => 'mona', + 'Republic of Mongolia' => 'mong', + 'British Overseas Territory of Montserrat' => 'mont', + 'Kingdom of Morocco' => 'morc', + 'Republic of Mozambique' => 'moza', + 'Republic of Mauritius' => 'mrts', + 'Union of Myanmar' => 'myan', + 'Republic of Namibia' => 'namb', + 'North Atlantic Treaty Organization' => 'nato', + 'Republic of Nauru' => 'naur', + 'Turkish Republic of Northern Cyprus' => 'ncyp', + 'Netherlands Antilles' => 'nean', + 'Kingdom of Nepal' => 'nepa', + 'Kingdom of the Netherlands' => 'neth', + 'Territory of Norfolk Island' => 'nfis', + 'Federal Republic of Nigeria' => 'ngra', + 'Republic of Nicaragua' => 'nica', + 'Republic of Niger' => 'nigr', + 'Niue' => 'niue', + 'Commonwealth of the Northern Mariana Islands' => 'nmar', + 'Province of Northern Ireland' => 'noir', + 'Nordic Council' => 'nord', + 'Kingdom of Norway' => 'norw', + 'Territory of New Caledonia and Dependencies' => 'nwca', + 'New Zealand' => 'nwze', + 'Organization of American States' => 'oast', + 'Organization of African Unity' => 'oaun', + 'International Olympic Committee' => 'olym', + 'Sultanate of Oman' => 'oman', + 'Islamic Republic of Pakistan' => 'paks', + 'Republic of Palau' => 'pala', + 'Independent State of Papua New Guinea' => 'pang', + 'Republic of Paraguay' => 'para', + 'Republic of Peru' => 'peru', + 'Republic of the Philippines' => 'phil', + 'British Overseas Territory of the Pitcairn Islands' => 'piis', + 'Republic of Poland' => 'pola', + 'Republic of Portugal' => 'port', + 'Commonwealth of Puerto Rico' => 'purc', + 'State of Qatar' => 'qata', + 'Russian Federation' => 'russ', + 'Romania' => 'rmna', + 'Republic of Rwanda' => 'rwan', + 'Kingdom of Saudi Arabia' => 'saar', + 'Republic of San Marino' => 'sama', + 'Nordic Sami Conference' => 'sami', + 'Sark' => 'sark', + 'Scotland' => 'scot', + 'Principality of Seborga' => 'sebo', + 'Republic of Serbia' => 'serb', + 'Republic of Sierra Leone' => 'sile', + 'Republic of Singapore' => 'sing', + 'Republic of Korea' => 'skor', + 'Republic of Slovenia' => 'slva', + 'Somali Republic' => 'smla', + 'Republic of Somaliland' => 'smld', + 'Republic of South Africa' => 'soaf', + 'Solomon Islands' => 'sois', + 'Kingdom of Spain' => 'span', + 'Secretariat of the Pacific Community' => 'spco', + 'Democratic Socialist Republic of Sri Lanka' => 'srla', + 'Saint Lucia' => 'stlu', + 'Republic of the Sudan' => 'suda', + 'Republic of Suriname' => 'surn', + 'Slovak Republic' => 'svka', + 'Kingdom of Sweden' => 'swdn', + 'Swiss Confederation' => 'swit', + 'Syrian Arab Republic' => 'syra', + 'Kingdom of Swaziland' => 'szld', + 'Republic of China' => 'taiw', + 'Taiwan' => 'taiw', + 'Republic of Tajikistan' => 'tajk', + 'United Republic of Tanzania' => 'tanz', + 'Kingdom of Thailand' => 'thal', + 'Autonomous Region of Tibet' => 'tibe', + 'Turkmenistan' => 'tkst', + 'Togolese Republic' => 'togo', + 'Tokelau' => 'toke', + 'Kingdom of Tonga' => 'tong', + 'Tristan da Cunha' => 'trdc', + 'Tromelin' => 'tris', + 'Republic of Tunisia' => 'tuns', + 'Republic of Turkey' => 'turk', + 'Tuvalu' => 'tuva', + 'United Arab Emirates' => 'uaem', + 'Republic of Uganda' => 'ugan', + 'Ukraine' => 'ukrn', + 'United Kingdom of Great Britain' => 'unkg', + 'United Nations' => 'unna', + 'United States of America' => 'unst', + 'Oriental Republic of Uruguay' => 'urgy', + 'Virgin Islands of the United States' => 'usvs', + 'Republic of Uzbekistan' => 'uzbk', + 'State of the Vatican City' => 'vacy', + 'Republic of Vanuatu' => 'vant', + 'Bolivarian Republic of Venezuela' => 'venz', + 'Republic of Yemen' => 'yemn', + 'Democratic Republic of Congo' => 'zare', + 'Republic of Zimbabwe' => 'zbwe' ) ; + + + var $iFlagCount = -1; + var $iFlagSetMap = array( + FLAGSIZE1 => 'flags_thumb35x35', + FLAGSIZE2 => 'flags_thumb60x60', + FLAGSIZE3 => 'flags_thumb100x100', + FLAGSIZE4 => 'flags' + ); + + var $iFlagData ; + var $iOrdIdx=array(); + + function FlagImages($aSize=FLAGSIZE1) { + switch($aSize) { + case FLAGSIZE1 : + case FLAGSIZE2 : + case FLAGSIZE3 : + case FLAGSIZE4 : + $file = dirname(__FILE__).'/'.$this->iFlagSetMap[$aSize].'.dat'; + $fp = fopen($file,'rb'); + $rawdata = fread($fp,filesize($file)); + $this->iFlagData = unserialize($rawdata); + break; + default: + JpGraphError::RaiseL(5001,$aSize); +//('Unknown flag size. ('.$aSize.')'); + } + $this->iFlagCount = count($this->iCountryNameMap); + } + + function GetNum() { + return $this->iFlagCount; + } + + function GetImgByName($aName,&$outFullName) { + $idx = $this->GetIdxByName($aName,$outFullName); + return $this->GetImgByIdx($idx); + } + + function GetImgByIdx($aIdx) { + if( array_key_exists($aIdx,$this->iFlagData) ) { + $d = $this->iFlagData[$aIdx][1]; + return Image::CreateFromString($d); + } + else { + JpGraphError::RaiseL(5002,$aIdx); +//("Flag index \" $aIdx\" does not exist."); + } + } + + function GetIdxByOrdinal($aOrd,&$outFullName) { + $aOrd--; + $n = count($this->iOrdIdx); + if( $n == 0 ) { + reset($this->iCountryNameMap); + $this->iOrdIdx=array(); + $i=0; + while( list($key,$val) = each($this->iCountryNameMap) ) { + $this->iOrdIdx[$i++] = array($val,$key); + } + $tmp=$this->iOrdIdx[$aOrd]; + $outFullName = $tmp[1]; + return $tmp[0]; + + } + elseif( $aOrd >= 0 && $aOrd < $n ) { + $tmp=$this->iOrdIdx[$aOrd]; + $outFullName = $tmp[1]; + return $tmp[0]; + } + else { + JpGraphError::RaiseL(5003,$aOrd); +//('Invalid ordinal number specified for flag index.'); + } + } + + function GetIdxByName($aName,&$outFullName) { + + if( is_integer($aName) ) { + $idx = $this->GetIdxByOrdinal($aName,$outFullName); + return $idx; + } + + $found=false; + $aName = strtolower($aName); + $nlen = strlen($aName); + reset($this->iCountryNameMap); + // Start by trying to match exact index name + while( list($key,$val) = each($this->iCountryNameMap) ) { + if( $nlen == strlen($val) && $val == $aName ) { + $found=true; + break; + } + } + if( !$found ) { + reset($this->iCountryNameMap); + // If the exact index doesn't work try a (partial) full name + while( list($key,$val) = each($this->iCountryNameMap) ) { + if( strpos(strtolower($key), $aName) !== false ) { + $found=true; + break; + } + } + } + if( $found ) { + $outFullName = $key; + return $val; + } + else { + JpGraphError::RaiseL(5004,$aName); +//("The (partial) country name \"$aName\" does not have a cooresponding flag image. The flag may still exist but under another name, e.g. insted of \"usa\" try \"united states\"."); + } + } +} + + + + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_gantt.php b/html/includes/jpgraph/src/jpgraph_gantt.php new file mode 100644 index 0000000000..0fd6551076 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_gantt.php @@ -0,0 +1,3808 @@ +vgrid = new LineProperty(); + } + + function Hide($aF=true) { + $this->iShow=!$aF; + } + + function Show($aF=true) { + $this->iShow=$aF; + } + + // Specify font + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function SetColumnMargin($aLeft,$aRight) { + $this->iLeftColMargin = $aLeft; + $this->iRightColMargin = $aRight; + } + + function SetFontColor($aFontColor) { + $this->iFontColor = $aFontColor; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetBackgroundColor($aColor) { + $this->iBackgroundColor = $aColor; + } + + function SetColTitles($aTitles,$aWidth=null) { + $this->iTitles = $aTitles; + $this->iWidth = $aWidth; + } + + function SetMinColWidth($aWidths) { + $n = min(count($this->iTitles),count($aWidths)); + for($i=0; $i < $n; ++$i ) { + if( !empty($aWidths[$i]) ) { + if( empty($this->iWidth[$i]) ) { + $this->iWidth[$i] = $aWidths[$i]; + } + else { + $this->iWidth[$i] = max($this->iWidth[$i],$aWidths[$i]); + } + } + } + } + + function GetWidth(&$aImg) { + $txt = new TextProperty(); + $txt->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $n = count($this->iTitles) ; + $rm=$this->iRightColMargin; + $w = 0; + for($h=0, $i=0; $i < $n; ++$i ) { + $w += $this->iLeftColMargin; + $txt->Set($this->iTitles[$i]); + if( !empty($this->iWidth[$i]) ) { + $w1 = max($txt->GetWidth($aImg)+$rm,$this->iWidth[$i]); + } + else { + $w1 = $txt->GetWidth($aImg)+$rm; + } + $this->iWidth[$i] = $w1; + $w += $w1; + $h = max($h,$txt->GetHeight($aImg)); + } + $this->iHeight = $h+$this->iTopHeaderMargin; + $txt=''; + return $w; + } + + function GetColStart(&$aImg,&$ioStart,$aAddLeftMargin=false) { + $n = count($this->iTitles) ; + $adj = $aAddLeftMargin ? $this->iLeftColMargin : 0; + $ioStart=array($aImg->left_margin+$adj); + for( $i=1; $i < $n; ++$i ) { + $ioStart[$i] = $ioStart[$i-1]+$this->iLeftColMargin+$this->iWidth[$i-1]; + } + } + + // Adjust headers left, right or centered + function SetHeaderAlign($aAlign) { + $this->iHeaderAlign=$aAlign; + } + + function Stroke(&$aImg,$aXLeft,$aYTop,$aXRight,$aYBottom,$aUseTextHeight=false) { + + if( !$this->iShow ) return; + + $txt = new TextProperty(); + $txt->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $txt->SetColor($this->iFontColor); + $txt->SetAlign($this->iHeaderAlign,'top'); + $n=count($this->iTitles); + + if( $n == 0 ) + return; + + $x = $aXLeft; + $h = $this->iHeight; + $yTop = $aUseTextHeight ? $aYBottom-$h-$this->iTopColMargin-$this->iBottomColMargin : $aYTop ; + + if( $h < 0 ) { + JpGraphError::RaiseL(6001); +//('Internal error. Height for ActivityTitles is < 0'); + } + + $aImg->SetLineWeight(1); + // Set background color + $aImg->SetColor($this->iBackgroundColor); + $aImg->FilledRectangle($aXLeft,$yTop,$aXRight,$aYBottom-1); + + if( $this->iStyle == 1 ) { + // Make a 3D effect + $aImg->SetColor('white'); + $aImg->Line($aXLeft,$yTop+1, + $aXRight,$yTop+1); + } + + for($i=0; $i < $n; ++$i ) { + if( $this->iStyle == 1 ) { + // Make a 3D effect + $aImg->SetColor('white'); + $aImg->Line($x+1,$yTop,$x+1,$aYBottom); + } + $x += $this->iLeftColMargin; + $txt->Set($this->iTitles[$i]); + + // Adjust the text anchor position according to the choosen alignment + $xp = $x; + if( $this->iHeaderAlign == 'center' ) { + $xp = (($x-$this->iLeftColMargin)+($x+$this->iWidth[$i]))/2; + } + elseif( $this->iHeaderAlign == 'right' ) { + $xp = $x +$this->iWidth[$i]-$this->iRightColMargin; + } + + $txt->Stroke($aImg,$xp,$yTop+$this->iTopHeaderMargin); + $x += $this->iWidth[$i]; + if( $i < $n-1 ) { + $aImg->SetColor($this->iColor); + $aImg->Line($x,$yTop,$x,$aYBottom); + } + } + + $aImg->SetColor($this->iColor); + $aImg->Line($aXLeft,$yTop, $aXRight,$yTop); + + // Stroke vertical column dividers + $cols=array(); + $this->GetColStart($aImg,$cols); + $n=count($cols); + for( $i=1; $i < $n; ++$i ) { + $this->vgrid->Stroke($aImg,$cols[$i],$aYBottom,$cols[$i], + $aImg->height - $aImg->bottom_margin); + } + } +} + + +//=================================================== +// CLASS GanttGraph +// Description: Main class to handle gantt graphs +//=================================================== +class GanttGraph extends Graph { + var $scale; // Public accessible + var $iObj=array(); // Gantt objects + var $iLabelHMarginFactor=0.2; // 10% margin on each side of the labels + var $iLabelVMarginFactor=0.4; // 40% margin on top and bottom of label + var $iLayout=GANTT_FROMTOP; // Could also be GANTT_EVEN + var $iSimpleFont = FF_FONT1,$iSimpleFontSize=11; + var $iSimpleStyle=GANTT_RDIAG,$iSimpleColor='yellow',$iSimpleBkgColor='red'; + var $iSimpleProgressBkgColor='gray',$iSimpleProgressColor='darkgreen'; + var $iSimpleProgressStyle=GANTT_SOLID; + var $hgrid=null; +//--------------- +// CONSTRUCTOR + // Create a new gantt graph + function GanttGraph($aWidth=0,$aHeight=0,$aCachedName="",$aTimeOut=0,$aInline=true) { + + // Backward compatibility + if( $aWidth == -1 ) $aWidth=0; + if( $aHeight == -1 ) $aHeight=0; + + if( $aWidth< 0 || $aHeight < 0 ) { + JpgraphError::RaiseL(6002); +//("You can't specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension."); + } + Graph::Graph($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline); + $this->scale = new GanttScale($this->img); + + // Default margins + $this->img->SetMargin(15,17,25,15); + + $this->hgrid = new HorizontalGridLine(); + + $this->scale->ShowHeaders(GANTT_HWEEK|GANTT_HDAY); + $this->SetBox(); + } + +//--------------- +// PUBLIC METHODS + + // + + function SetSimpleFont($aFont,$aSize) { + $this->iSimpleFont = $aFont; + $this->iSimpleFontSize = $aSize; + } + + function SetSimpleStyle($aBand,$aColor,$aBkgColor) { + $this->iSimpleStyle = $aBand; + $this->iSimpleColor = $aColor; + $this->iSimpleBkgColor = $aBkgColor; + } + + // A utility function to help create basic Gantt charts + function CreateSimple($data,$constrains=array(),$progress=array()) { + $num = count($data); + for( $i=0; $i < $num; ++$i) { + switch( $data[$i][1] ) { + case ACTYPE_GROUP: + // Create a slightly smaller height bar since the + // "wings" at the end will make it look taller + $a = new GanttBar($data[$i][0],$data[$i][2],$data[$i][3],$data[$i][4],'',8); + $a->title->SetFont($this->iSimpleFont,FS_BOLD,$this->iSimpleFontSize); + $a->rightMark->Show(); + $a->rightMark->SetType(MARK_RIGHTTRIANGLE); + $a->rightMark->SetWidth(8); + $a->rightMark->SetColor('black'); + $a->rightMark->SetFillColor('black'); + + $a->leftMark->Show(); + $a->leftMark->SetType(MARK_LEFTTRIANGLE); + $a->leftMark->SetWidth(8); + $a->leftMark->SetColor('black'); + $a->leftMark->SetFillColor('black'); + + $a->SetPattern(BAND_SOLID,'black'); + $csimpos = 6; + break; + + case ACTYPE_NORMAL: + $a = new GanttBar($data[$i][0],$data[$i][2],$data[$i][3],$data[$i][4],'',10); + $a->title->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $a->SetPattern($this->iSimpleStyle,$this->iSimpleColor); + $a->SetFillColor($this->iSimpleBkgColor); + // Check if this activity should have a constrain line + $n = count($constrains); + for( $j=0; $j < $n; ++$j ) { + if( empty($constrains[$j]) || (count($constrains[$j]) != 3) ) { + JpGraphError::RaiseL(6003,$j); +//("Invalid format for Constrain parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)"); + } + if( $constrains[$j][0]==$data[$i][0] ) { + $a->SetConstrain($constrains[$j][1],$constrains[$j][2],'black',ARROW_S2,ARROWT_SOLID); + } + } + + // Check if this activity have a progress bar + $n = count($progress); + for( $j=0; $j < $n; ++$j ) { + + if( empty($progress[$j]) || (count($progress[$j]) != 2) ) { + JpGraphError::RaiseL(6004,$j); +//("Invalid format for Progress parameter at index=$j in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)"); + } + if( $progress[$j][0]==$data[$i][0] ) { + $a->progress->Set($progress[$j][1]); + $a->progress->SetHeight(0.5); + $a->progress->SetPattern($this->iSimpleProgressStyle, + $this->iSimpleProgressColor); + $a->progress->SetFillColor($this->iSimpleProgressBkgColor); + //$a->progress->SetPattern($progress[$j][2],$progress[$j][3]); + break; + } + } + $csimpos = 6; + break; + + case ACTYPE_MILESTONE: + $a = new MileStone($data[$i][0],$data[$i][2],$data[$i][3]); + $a->title->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $a->caption->SetFont($this->iSimpleFont,FS_NORMAL,$this->iSimpleFontSize); + $csimpos = 5; + break; + default: + die('Unknown activity type'); + break; + } + + // Setup caption + $a->caption->Set($data[$i][$csimpos-1]); + + // Check if this activity should have a CSIM target ? + if( !empty($data[$i][$csimpos]) ) { + $a->SetCSIMTarget($data[$i][$csimpos]); + $a->SetCSIMAlt($data[$i][$csimpos+1]); + } + if( !empty($data[$i][$csimpos+2]) ) { + $a->title->SetCSIMTarget($data[$i][$csimpos+2]); + $a->title->SetCSIMAlt($data[$i][$csimpos+3]); + } + + $this->Add($a); + } + } + + + // Set what headers should be shown + function ShowHeaders($aFlg) { + $this->scale->ShowHeaders($aFlg); + } + + // Specify the fraction of the font height that should be added + // as vertical margin + function SetLabelVMarginFactor($aVal) { + $this->iLabelVMarginFactor = $aVal; + } + + // Synonym to the method above + function SetVMarginFactor($aVal) { + $this->iLabelVMarginFactor = $aVal; + } + + + // Add a new Gantt object + function Add($aObject) { + if( is_array($aObject) && count($aObject) > 0 ) { + $cl = $aObject[0]; + if( is_a($cl,'IconPlot') ) { + $this->AddIcon($aObject); + } + else { + $n = count($aObject); + for($i=0; $i < $n; ++$i) + $this->iObj[] = $aObject[$i]; + } + } + else { + if( is_a($aObject,'IconPlot') ) { + $this->AddIcon($aObject); + } + else { + $this->iObj[] = $aObject; + } + } + } + + // Override inherit method from Graph and give a warning message + function SetScale() { + JpGraphError::RaiseL(6005); +//("SetScale() is not meaningfull with Gantt charts."); + } + + // Specify the date range for Gantt graphs (if this is not set it will be + // automtically determined from the input data) + function SetDateRange($aStart,$aEnd) { + // Adjust the start and end so that the indicate the + // begining and end of respective start and end days + if( strpos($aStart,':') === false ) + $aStart = date('Y-m-d 00:00',strtotime($aStart)); + if( strpos($aEnd,':') === false ) + $aEnd = date('Y-m-d 23:59',strtotime($aEnd)); + $this->scale->SetRange($aStart,$aEnd); + } + + // Get the maximum width of the activity titles columns for the bars + // The name is lightly misleading since we from now on can have + // multiple columns in the label section. When this was first written + // it only supported a single label, hence the name. + function GetMaxLabelWidth() { + $m=50; + if( $this->iObj != null ) { + $marg = $this->scale->actinfo->iLeftColMargin+$this->scale->actinfo->iRightColMargin; + $m = $this->iObj[0]->title->GetWidth($this->img)+$marg; + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + if( !empty($this->iObj[$i]->title) ) { + if( $this->iObj[$i]->title->HasTabs() ) { + list($tot,$w) = $this->iObj[$i]->title->GetWidth($this->img,true); + $m=max($m,$tot); + } + else + $m=max($m,$this->iObj[$i]->title->GetWidth($this->img)); + } + } + } + return $m; + } + + // Get the maximum height of the titles for the bars + function GetMaxLabelHeight() { + $m=0; + if( $this->iObj != null ) { + $m = $this->iObj[0]->title->GetHeight($this->img); + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + if( !empty($this->iObj[$i]->title) ) { + $m=max($m,$this->iObj[$i]->title->GetHeight($this->img)); + } + } + } + return $m; + } + + function GetMaxBarAbsHeight() { + $m=0; + if( $this->iObj != null ) { + $m = $this->iObj[0]->GetAbsHeight($this->img); + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + $m=max($m,$this->iObj[$i]->GetAbsHeight($this->img)); + } + } + return $m; + } + + // Get the maximum used line number (vertical position) for bars + function GetBarMaxLineNumber() { + $m=0; + if( $this->iObj != null ) { + $m = $this->iObj[0]->GetLineNbr(); + $n = count($this->iObj); + for($i=1; $i < $n; ++$i) { + $m=max($m,$this->iObj[$i]->GetLineNbr()); + } + } + return $m; + } + + // Get the minumum and maximum used dates for all bars + function GetBarMinMax() { + $start = 0 ; + $n = count($this->iObj); + + while( $start < $n && $this->iObj[$start]->GetMaxDate() === false ) + ++$start; + if( $start >= $n ) { + JpgraphError::RaiseL(6006); +//('Cannot autoscale Gantt chart. No dated activities exist. [GetBarMinMax() start >= n]'); + } + + $max=$this->scale->NormalizeDate($this->iObj[$start]->GetMaxDate()); + $min=$this->scale->NormalizeDate($this->iObj[$start]->GetMinDate()); + + for($i=$start+1; $i < $n; ++$i) { + $rmax = $this->scale->NormalizeDate($this->iObj[$i]->GetMaxDate()); + if( $rmax != false ) + $max=Max($max,$rmax); + $rmin = $this->scale->NormalizeDate($this->iObj[$i]->GetMinDate()); + if( $rmin != false ) + $min=Min($min,$rmin); + } + $minDate = date("Y-m-d",$min); + $min = strtotime($minDate); + $maxDate = date("Y-m-d 23:59",$max); + $max = strtotime($maxDate); + return array($min,$max); + } + + // Create a new auto sized canvas if the user hasn't specified a size + // The size is determined by what scale the user has choosen and hence + // the minimum width needed to display the headers. Some margins are + // also added to make it better looking. + function AutoSize() { + if( $this->img->img == null ) { + // The predefined left, right, top, bottom margins. + // Note that the top margin might incease depending on + // the title. + $lm = $this->img->left_margin; + $rm = $this->img->right_margin; + $rm += 2 ; + $tm = $this->img->top_margin; + $bm = $this->img->bottom_margin; + $bm += 1; + if( BRAND_TIMING ) $bm += 10; + + // First find out the height + $n=$this->GetBarMaxLineNumber()+1; + $m=max($this->GetMaxLabelHeight(),$this->GetMaxBarAbsHeight()); + $height=$n*((1+$this->iLabelVMarginFactor)*$m); + + // Add the height of the scale titles + $h=$this->scale->GetHeaderHeight(); + $height += $h; + + // Calculate the top margin needed for title and subtitle + if( $this->title->t != "" ) { + $tm += $this->title->GetFontHeight($this->img); + } + if( $this->subtitle->t != "" ) { + $tm += $this->subtitle->GetFontHeight($this->img); + } + + // ...and then take the bottom and top plot margins into account + $height += $tm + $bm + $this->scale->iTopPlotMargin + $this->scale->iBottomPlotMargin; + // Now find the minimum width for the chart required + + // If day scale or smaller is shown then we use the day font width + // as the base size unit. + // If only weeks or above is displayed we use a modified unit to + // get a smaller image. + if( $this->scale->IsDisplayHour() || $this->scale->IsDisplayMinute() ) { + // Add 2 pixel margin on each side + $fw=$this->scale->day->GetFontWidth($this->img)+4; + } + elseif( $this->scale->IsDisplayWeek() ) { + $fw = 8; + } + elseif( $this->scale->IsDisplayMonth() ) { + $fw = 4; + } + else { + $fw = 2; + } + + $nd=$this->scale->GetNumberOfDays(); + + if( $this->scale->IsDisplayDay() ) { + // If the days are displayed we also need to figure out + // how much space each day's title will require. + switch( $this->scale->day->iStyle ) { + case DAYSTYLE_LONG : + $txt = "Monday"; + break; + case DAYSTYLE_LONGDAYDATE1 : + $txt = "Monday 23 Jun"; + break; + case DAYSTYLE_LONGDAYDATE2 : + $txt = "Monday 23 Jun 2003"; + break; + case DAYSTYLE_SHORT : + $txt = "Mon"; + break; + case DAYSTYLE_SHORTDAYDATE1 : + $txt = "Mon 23/6"; + break; + case DAYSTYLE_SHORTDAYDATE2 : + $txt = "Mon 23 Jun"; + break; + case DAYSTYLE_SHORTDAYDATE3 : + $txt = "Mon 23"; + break; + case DAYSTYLE_SHORTDATE1 : + $txt = "23/6"; + break; + case DAYSTYLE_SHORTDATE2 : + $txt = "23 Jun"; + break; + case DAYSTYLE_SHORTDATE3 : + $txt = "Mon 23"; + break; + case DAYSTYLE_SHORTDATE4 : + $txt = "88"; + break; + case DAYSTYLE_CUSTOM : + $txt = date($this->scale->day->iLabelFormStr, + strtotime('2003-12-20 18:00')); + break; + case DAYSTYLE_ONELETTER : + default: + $txt = "M"; + break; + } + $fw = $this->scale->day->GetStrWidth($this->img,$txt)+6; + } + + // If we have hours enabled we must make sure that each day has enough + // space to fit the number of hours to be displayed. + if( $this->scale->IsDisplayHour() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->hour->iStyle ) { + case HOURSTYLE_HMAMPM: + $txt = '12:00pm'; + break; + case HOURSTYLE_H24: + // 13 + $txt = '24'; + break; + case HOURSTYLE_HAMPM: + $txt = '12pm'; + break; + case HOURSTYLE_CUSTOM: + $txt = date($this->scale->hour->iLabelFormStr,strtotime('2003-12-20 18:00')); + break; + case HOURSTYLE_HM24: + default: + $txt = '24:00'; + break; + } + + $hfw = $this->scale->hour->GetStrWidth($this->img,$txt)+6; + $mw = $hfw; + if( $this->scale->IsDisplayMinute() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->minute->iStyle ) { + case HOURSTYLE_CUSTOM: + $txt2 = date($this->scale->minute->iLabelFormStr,strtotime('2005-05-15 18:55')); + break; + case MINUTESTYLE_MM: + default: + $txt2 = '15'; + break; + } + + $mfw = $this->scale->minute->GetStrWidth($this->img,$txt2)+6; + $n2 = ceil(60 / $this->scale->minute->GetIntervall() ); + $mw = $n2 * $mfw; + } + $hfw = $hfw < $mw ? $mw : $hfw ; + $n = ceil(24*60 / $this->scale->TimeToMinutes($this->scale->hour->GetIntervall()) ); + $hw = $n * $hfw; + $fw = $fw < $hw ? $hw : $fw ; + } + + // We need to repeat this code block here as well. + // THIS iS NOT A MISTAKE ! + // We really need it since we need to adjust for minutes both in the case + // where hour scale is shown and when it is not shown. + + if( $this->scale->IsDisplayMinute() ) { + // Depending on what format the user has choose we need different amount + // of space. We therefore create a typical string for the choosen format + // and determine the length of that string. + switch( $this->scale->minute->iStyle ) { + case HOURSTYLE_CUSTOM: + $txt = date($this->scale->minute->iLabelFormStr,strtotime('2005-05-15 18:55')); + break; + case MINUTESTYLE_MM: + default: + $txt = '15'; + break; + } + + $mfw = $this->scale->minute->GetStrWidth($this->img,$txt)+6; + $n = ceil(60 / $this->scale->TimeToMinutes($this->scale->minute->GetIntervall()) ); + $mw = $n * $mfw; + $fw = $fw < $mw ? $mw : $fw ; + } + + // If we display week we must make sure that 7*$fw is enough + // to fit up to 10 characters of the week font (if the week is enabled) + if( $this->scale->IsDisplayWeek() ) { + // Depending on what format the user has choose we need different amount + // of space + $fsw = strlen($this->scale->week->iLabelFormStr); + if( $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $fsw += 8; + } + elseif( $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ) { + $fsw += 7; + } + else { + $fsw += 4; + } + + $ww = $fsw*$this->scale->week->GetFontWidth($this->img); + if( 7*$fw < $ww ) { + $fw = ceil($ww/7); + } + } + + if( !$this->scale->IsDisplayDay() && !$this->scale->IsDisplayHour() && + !( ($this->scale->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->scale->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR) && $this->scale->IsDisplayWeek() ) ) { + // If we don't display the individual days we can shrink the + // scale a little bit. This is a little bit pragmatic at the + // moment and should be re-written to take into account + // a) What scales exactly are shown and + // b) what format do they use so we know how wide we need to + // make each scale text space at minimum. + $fw /= 2; + if( !$this->scale->IsDisplayWeek() ) { + $fw /= 1.8; + } + } + + $cw = $this->GetMaxActInfoColWidth() ; + $this->scale->actinfo->SetMinColWidth($cw); + if( $this->img->width <= 0 ) { + // Now determine the width for the activity titles column + + // Firdst find out the maximum width of each object column + $titlewidth = max(max($this->GetMaxLabelWidth(), + $this->scale->tableTitle->GetWidth($this->img)), + $this->scale->actinfo->GetWidth($this->img)); + + // Add the width of the vertivcal divider line + $titlewidth += $this->scale->divider->iWeight*2; + + + // Now get the total width taking + // titlewidth, left and rigt margin, dayfont size + // into account + $width = $titlewidth + $nd*$fw + $lm+$rm; + } + else { + $width = $this->img->width; + } + + $width = round($width); + $height = round($height); + if( $width > MAX_GANTTIMG_SIZE_W || $height > MAX_GANTTIMG_SIZE_H ) { + JpgraphError::RaiseL(6007,$width,$height); +//("Sanity check for automatic Gantt chart size failed. Either the width (=$width) or height (=$height) is larger than MAX_GANTTIMG_SIZE. This could potentially be caused by a wrong date in one of the activities."); + } + + $this->img->CreateImgCanvas($width,$height); + $this->img->SetMargin($lm,$rm,$tm,$bm); + } + } + + // Return an array width the maximum width for each activity + // column. This is used when we autosize the columns where we need + // to find out the maximum width of each column. In order to do that we + // must walk through all the objects, sigh... + function GetMaxActInfoColWidth() { + $n = count($this->iObj); + if( $n == 0 ) return; + $w = array(); + $m = $this->scale->actinfo->iLeftColMargin + $this->scale->actinfo->iRightColMargin; + + for( $i=0; $i < $n; ++$i ) { + $tmp = $this->iObj[$i]->title->GetColWidth($this->img,$m); + $nn = count($tmp); + for( $j=0; $j < $nn; ++$j ) { + if( empty($w[$j]) ) + $w[$j] = $tmp[$j]; + else + $w[$j] = max($w[$j],$tmp[$j]); + } + } + return $w; + } + + // Stroke the gantt chart + function Stroke($aStrokeFileName="") { + + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // Should we autoscale dates? + if( !$this->scale->IsRangeSet() ) { + list($min,$max) = $this->GetBarMinMax(); + $this->scale->SetRange($min,$max); + } + + $this->scale->AdjustStartEndDay(); + + // Check if we should autoscale the image + $this->AutoSize(); + + // Should we start from the top or just spread the bars out even over the + // available height + $this->scale->SetVertLayout($this->iLayout); + if( $this->iLayout == GANTT_FROMTOP ) { + $maxheight=max($this->GetMaxLabelHeight(),$this->GetMaxBarAbsHeight()); + $this->scale->SetVertSpacing($maxheight*(1+$this->iLabelVMarginFactor)); + } + // If it hasn't been set find out the maximum line number + if( $this->scale->iVertLines == -1 ) + $this->scale->iVertLines = $this->GetBarMaxLineNumber()+1; + + $maxwidth=max($this->scale->actinfo->GetWidth($this->img), + max($this->GetMaxLabelWidth(), + $this->scale->tableTitle->GetWidth($this->img))); + + $this->scale->SetLabelWidth($maxwidth+$this->scale->divider->iWeight);//*(1+$this->iLabelHMarginFactor)); + + if( !$_csim ) { + $this->StrokePlotArea(); + if( $this->iIconDepth == DEPTH_BACK ) { + $this->StrokeIcons(); + } + } + + $this->scale->Stroke(); + + if( !$_csim ) { + // Due to a minor off by 1 bug we need to temporarily adjust the margin + $this->img->right_margin--; + $this->StrokePlotBox(); + $this->img->right_margin++; + } + + // Stroke Grid line + $this->hgrid->Stroke($this->img,$this->scale); + + $n = count($this->iObj); + for($i=0; $i < $n; ++$i) { + //$this->iObj[$i]->SetLabelLeftMargin(round($maxwidth*$this->iLabelHMarginFactor/2)); + $this->iObj[$i]->Stroke($this->img,$this->scale); + } + + $this->StrokeTitles(); + + if( !$_csim ) { + $this->StrokeConstrains(); + $this->footer->Stroke($this->img); + + if( $this->iIconDepth == DEPTH_FRONT) { + $this->StrokeIcons(); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans') ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + } + + function StrokeConstrains() { + $n = count($this->iObj); + + // Stroke all constrains + for($i=0; $i < $n; ++$i) { + + // Some gantt objects may not have constraints associated with them + // for example we can add IconPlots which doesn't have this property. + if( empty($this->iObj[$i]->constraints) ) continue; + + $numConstrains = count($this->iObj[$i]->constraints); + + for( $k = 0; $k < $numConstrains; $k++ ) { + $vpos = $this->iObj[$i]->constraints[$k]->iConstrainRow; + if( $vpos >= 0 ) { + $c1 = $this->iObj[$i]->iConstrainPos; + + // Find out which object is on the target row + $targetobj = -1; + for( $j=0; $j < $n && $targetobj == -1; ++$j ) { + if( $this->iObj[$j]->iVPos == $vpos ) { + $targetobj = $j; + } + } + if( $targetobj == -1 ) { + JpGraphError::RaiseL(6008,$this->iObj[$i]->iVPos,$vpos); +//('You have specifed a constrain from row='.$this->iObj[$i]->iVPos.' to row='.$vpos.' which does not have any activity.'); + } + $c2 = $this->iObj[$targetobj]->iConstrainPos; + if( count($c1) == 4 && count($c2 ) == 4) { + switch( $this->iObj[$i]->constraints[$k]->iConstrainType ) { + case CONSTRAIN_ENDSTART: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[2],$c1[3],$c2[0],$c2[1]); + } + else { + $link = new GanttLink($c1[2],$c1[1],$c2[0],$c2[3]); + } + $link->SetPath(3); + break; + case CONSTRAIN_STARTEND: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[0],$c1[3],$c2[2],$c2[1]); + } + else { + $link = new GanttLink($c1[0],$c1[1],$c2[2],$c2[3]); + } + $link->SetPath(0); + break; + case CONSTRAIN_ENDEND: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[2],$c1[3],$c2[2],$c2[1]); + } + else { + $link = new GanttLink($c1[2],$c1[1],$c2[2],$c2[3]); + } + $link->SetPath(1); + break; + case CONSTRAIN_STARTSTART: + if( $c1[1] < $c2[1] ) { + $link = new GanttLink($c1[0],$c1[3],$c2[0],$c2[1]); + } + else { + $link = new GanttLink($c1[0],$c1[1],$c2[0],$c2[3]); + } + $link->SetPath(3); + break; + default: + JpGraphError::RaiseL(6009,$this->iObj[$i]->iVPos,$vpos); +//('Unknown constrain type specified from row='.$this->iObj[$i]->iVPos.' to row='.$vpos); + break; + } + + $link->SetColor($this->iObj[$i]->constraints[$k]->iConstrainColor); + $link->SetArrow($this->iObj[$i]->constraints[$k]->iConstrainArrowSize, + $this->iObj[$i]->constraints[$k]->iConstrainArrowType); + + $link->Stroke($this->img); + } + } + } + } + } + + function GetCSIMAreas() { + if( !$this->iHasStroked ) + $this->Stroke(_CSIM_SPECIALFILE); + + $csim = $this->title->GetCSIMAreas(); + $csim .= $this->subtitle->GetCSIMAreas(); + $csim .= $this->subsubtitle->GetCSIMAreas(); + + $n = count($this->iObj); + for( $i=$n-1; $i >= 0; --$i ) + $csim .= $this->iObj[$i]->GetCSIMArea(); + return $csim; + } +} + +//=================================================== +// CLASS PredefIcons +// Description: Predefined icons for use with Gantt charts +//=================================================== +DEFINE('GICON_WARNINGRED',0); +DEFINE('GICON_TEXT',1); +DEFINE('GICON_ENDCONS',2); +DEFINE('GICON_MAIL',3); +DEFINE('GICON_STARTCONS',4); +DEFINE('GICON_CALC',5); +DEFINE('GICON_MAGNIFIER',6); +DEFINE('GICON_LOCK',7); +DEFINE('GICON_STOP',8); +DEFINE('GICON_WARNINGYELLOW',9); +DEFINE('GICON_FOLDEROPEN',10); +DEFINE('GICON_FOLDER',11); +DEFINE('GICON_TEXTIMPORTANT',12); + +class PredefIcons { + var $iBuiltinIcon = null; + var $iLen = -1 ; + + function GetLen() { + return $this->iLen ; + } + + function GetImg($aIdx) { + if( $aIdx < 0 || $aIdx >= $this->iLen ) { + JpGraphError::RaiseL(6010,$aIdx); +//('Illegal icon index for Gantt builtin icon ['.$aIdx.']'); + } + return Image::CreateFromString(base64_decode($this->iBuiltinIcon[$aIdx][1])); + } + + function PredefIcons() { + //========================================================== + // warning.png + //========================================================== + $this->iBuiltinIcon[0][0]= 1043 ; + $this->iBuiltinIcon[0][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAA'. + 'B3RJTUUH0wgKFSgilWPhUQAAA6BJREFUeNrtl91rHFUYh5/3zMx+Z5JNUoOamCZNaqTZ6IWIkqRiQWmi1IDetHfeiCiltgXBP8AL'. + '0SIUxf/AvfRSBS9EKILFFqyIH9CEmFZtPqrBJLs7c+b1YneT3WTTbNsUFPLCcAbmzPt73o9zzgzs2Z793231UOdv3w9k9Z2uzOdA'. + '5+2+79yNeL7Hl7hw7oeixRMZ6PJM26W18DNAm/Vh7lR8fqh97NmMF11es1iFpMATqdirwMNA/J4DpIzkr5YsAF1PO6gIMYHRdPwl'. + 'oO2elmB+qH3sm7XozbkgYvy8SzYnZPtcblyM6I+5z3jQ+0vJfgpEu56BfI9vUkbyi2HZd1QJoeWRiAjBd4SDCW8SSAOy6wBHMzF7'. + 'YdV2A+ROuvRPLfHoiSU0EMY/cDAIhxJeGngKaN1VgHyPL7NBxI1K9P4QxBzw3K1zJ/zkG8B9uwaQ7/HNsRZv9kohBGD0o7JqMYS/'. + '/ynPidQw/LrBiPBcS/yFCT95DvB2BWAy4575PaQbQKW+tPd3GCItu2odKI++YxiKu0d26oWmAD7paZU/rLz37VqIijD2YbnzNBBE'. + 'IBHf8K8qjL7vYhCGErEU8CTg3xXAeMp96GrJEqkyXkm9Bhui1xfsunjdGhcYLq+IzjsGmBt5YH/cmJkFq6gIqlon3u4LxdKGuCIo'. + 'Qu41g0E41po+2R33Xt5uz9kRIB2UTle7PnfKrROP1HD4sRjZlq0lzhwoZ6rDNeTi3nEg1si/7FT7kYQbXS6E5E65tA5uRF9tutq0'. + 'K/VwAF+/FbIYWt6+tjQM/AqUms7A4Wy6d7YSfSNxgMmzi0ycWWworio4QJvj4LpuL5BqugTnXzzqJsJwurrlNhJXFaavW67NRw3F'. + 'q+aJcCQVe9fzvJGmAY7/dPH0gi0f64OveGxa+usCuQMeZ0+kt8BVrX+qPO9Bzx0MgqBvs+a2PfDdYIf+WAjXU1ub4tqNaPPzRs8A'. + 'blrli+WVn79cXn0cWKl+tGx7HLc7pu3CSmnfitL+l1UihAhwjFkPQev4K/fSABjBM8JCaFuurJU+rgW41SroA8aNMVNAFtgHJCsn'. + 'XGy/58QVxAC9MccJtZ5kIzNlW440WrJ2ea4YPA9cAooA7i0A/gS+iqLoOpB1HOegqrYB3UBmJrAtQAJwpwPr1Ry92wVlgZsiYlW1'. + 'uX1gU36dymgqYxJIJJNJT1W9QqHgNwFQBGYqo94OwHZQUuPD7ACglSvc+5n5T9m/wfJJX4U9qzEAAAAASUVORK5CYII=' ; + + //========================================================== + // edit.png + //========================================================== + $this->iBuiltinIcon[1][0]= 959 ; + $this->iBuiltinIcon[1][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAFgAWABY9j+ZuwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDAwbIEXOA6AAAAM8SURBVHicpdRPaBxlHMbx76ZvsmOTmm1dsEqQSIIsEmGVBAQjivEQ'. + 'PAUJngpWsAWlBw8egpQepKwplN4ULEG9CjkEyUFKlSJrWTG0IU51pCsdYW2ncUPjdtp9Z+f3vuNhu8nKbmhaf5cZeGc+PO8zf1Lc'. + 'm0KhkACICCKCMeaBjiLC0tLSnjNvPmuOHRpH0TZTU1M8zBi9wakzn7OFTs5sw8YYACYmJrre7HkeuVyu69qPF77hlT1XmZ0eQ03O'. + 'wOLJTvhBx1rLz18VmJ0eY+jVd2FxDkKXnvYLHgb97OgLzE4ON9Hzc1B1QaQzsed5O0Lta3Ec89OnR5h5McfQ+Mw2qgQUnfBOPbZ3'. + 'bK3l+xOvMT0+3ERLp5FNF6UEjcL32+DdVmGt5WLhDYYPZrbRqreFumXwql0S3w9tnDvLWD5PZigPpdOwuYpSCo3C8wU3UHxQdHbf'. + 'cZIkNM6dxcnlUM4k1eUFMlUPpUADbpkttFarHe6oYqeOr6yt4RzMQHYUcUsQVtGicHDwKprViuLDkkOtVnsHCHZVRVy/zcj1i5Af'. + 'h8AjdIts+hUcGcYPK3iBtKM3gD/uAzf/AdY2mmmVgy6X8YNNKmGIvyloPcB8SUin07RQ4EZHFdsdG0wkJEnEaHAJxvKEpSLeaokV'. + 'r4zWmhUZYLlY4b1D03y5eIEWCtS7vsciAgiIxkQRabWOrlQor66y4pUphoJb1jiO4uO5o0S3q6RSqVbiOmC7VCEgAhLSaDQ48dH7'. + 'vD46REY0iysegSjKQciRt99ib7qXwX0O+pG4teM6YKHLB9JMq4mTmF9/+AKA4wvLZByH7OgYL7+UY2qvw/7Bfg5kHiXjJFyv3CGO'. + 'Y1rof+BW4t/XLiPG0DCGr79d4XzRxRnIMn98huXSTYyJ6et1UNYQhRvcinpJq86H3wGPPPM0iBDd+QffD1g4eZjLvuG7S1Wef26E'. + 'J7L7eSx7gAHVg7V3MSbi6m/r93baBd6qQjerAJg/9Ql/XrvG0ON1+vv7GH3qSfY5fahUnSTpwZgIEQesaVXRPbHRG/xyJSAxMYlp'. + 'EOm71HUINiY7mGb95l/8jZCyQmJjMDGJjUmsdCROtZ0n/P/Z8v4Fs2MTUUf7vYoAAAAASUVORK5CYII=' ; + + //========================================================== + // endconstrain.png + //========================================================== + $this->iBuiltinIcon[2][0]= 666 ; + $this->iBuiltinIcon[2][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ALEREILkh0+eQAAAIXSURBVHictZU9aFNRFMd/N81HX77aptJUWmp1LHRpIcWhg5sIDlUQ'. + 'LAXB4t7RRUpwEhy7iQ46CCIoSHcl0CFaoVARU2MFMYktadLXJNok7x2HtCExvuYFmnO4w/3gx+Gc/z1HKRTdMEdXqHbB/sgc/sic'. + 'nDoYAI8XwDa8o1RMLT+2hAsigtTvbIGVqhX46szUifBGswUeCPgAGB7QeLk0X4Ork+HOxo1VgSqGASjMqkn8W4r4vVtEgI/RRQEL'. + 'vaoGD85cl5V3nySR/S1mxWxab7f35PnntNyMJeRr9kCMqiHTy09EoeToLwggx6ymiMOD/VwcD7Oa/MHkcIiQx026WGYto5P/U+ZZ'. + '7gD0QwDuT5z9N3LrVPi0Xs543eQPKkRzaS54eviJIp4tMFQFMllAWN2qcRZHBnixNM8NYD162xq8u7ePSQ+GX2Pjwxc2dB2cLtB8'. + '7GgamCb0anBYBeChMtl8855CarclxU1gvViiUK4w2OMkNDnGeJ8bt9fH90yOnOkCwLFTwhzykhvtYzOWoBBbY//R3dbaNTYhf2RO'. + 'QpeuUMzv188MlwuHy0H13HnE48UzMcL0WAtUHX8OxZHoG1URiFw7rnLLCswuSPD1ulze/iWjT2PSf+dBXRFtVVGIvzqph0pQL7VE'. + 'avXYaXXxPwsnt0imdttCocMmZBdK7YU9D8wuNOW0nXc6QWzPsSa5naZ1beb9BbGB6dxGtMnXAAAAAElFTkSuQmCC' ; + + //========================================================== + // mail.png + //========================================================== + $this->iBuiltinIcon[3][0]= 1122 ; + $this->iBuiltinIcon[3][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AJHAMfFvL9OU8AAAPfSURBVHictZRdaBRXFMd/987H7tbNx8aYtGCrEexDsOBDaKHFxirb'. + 'h0qhsiY0ykppKq1osI99C4H2WSiFFMHWUhXBrjRi0uCmtSEUGgP1QWqhWjGkoW7M1kTX3WRn5p4+TJJNGolQ6IXDnDtz+N0z/3PP'. + 'UWBIpdpYa23b9g09PZ2kUrOrvmUyGVKp1Ao/mUyi56YnVgWfO/P1CihAd/dJMpmaNROIRq8BkM1m0bH6TasC3j6QXgFdXI+DR6PR'. + 'JX/Pno8B+KLnMKqlpUU8z8MYs2RBEDzWf9J+0RcRbMdxGBsbw/fmCXwPMUEYID4iAVp8wIRmDIHMo4yHSIBSASKC+CWE0C/PF9jU'. + '3B6Cp+4M07C5FUtKGNvGwQJctPgIsgD2wRhEIqAMGB+UQYkHJgYYZD7P1HwVlmWhHcfhyk83KeRGUW4t6CgoG5SNUS4KBWgQDUov'. + '7AGlwYASBVqH0Bk49dXpCviVV3dw/tI1Bvr7kMIIlh0NYUpjlF0BAYvcxSXmEVLKceHSCJm+PnbueBHbtkNwTXUNBzo6aGpq4sSZ'. + 'GwT5H7BsF6Wdf1GWHQAoM0upeI9PT1yioS7B7tdaSdSuw7KsUGMAy7HYsmUztTW1nMwM0txssX1rlHjjS5jy/Uq2YkK/eJuLl6/z'. + 'x+1xkslW6mrixGIODx8EFSlEBC0+tmXT0NhA2763iEUjnLv4C8XpUbSbAB1mKkGJ3J83Od77HW5EszvZSqK2iljMIeJaRGNuJePF'. + '6mspY7BJ1DXwQnCd2fxGRq5OUCz8xt72dyhMZcn++Cu3xu9SKhdp2b4ZHWnAtTSxmIWlhcIjlksR3lNBYzlxZsb7+f7ne+xtSzOd'. + 'u83szH1OnThOPp/n+a0beeP1l4mvq+PU2Qyd+5PY1RuwlAqLYFaBfbTbyPSdfgaH77A//QF4f1O/vpr6RJyq+C5Kc/M8FbFxXItY'. + 'xOHDrvfo/fxLDnbsJBp5BowBReVWYAzabeTh5ABDw7cWoNNL3YYYNtSv57lnn6Z+Qx01VeuIuBa2DV1HD3H63BAPZu4u1WGpeLHq'. + 'Rh7+NcjA0O+0p4+CNwXigwnbWlQQdpuEpli+n+PIkcOc//YKuckJJFh2K2anrjFw+QZt6S6kPImIF/b+cqAJD1LihWAxC61twBTo'. + 'fPcQF/oGsVW5ovHQlavs2/8+uYnRVSOUgHAmmAClBIOBwKC0gPjhIRgEIX2wg7NnwpZW3d3d4vs+vu8TBMGK51rvPM9b8hdteZxd'. + 'LBbVR8feJDs0Rlv6GFKeXJ21rNRXESxMPR+CBUl0nN7PjtO+dye7Up/8v1I88bf/ixT/AO1/hZsqW+C6AAAAAElFTkSuQmCC' ; + + //========================================================== + // startconstrain.png + //========================================================== + $this->iBuiltinIcon[4][0]= 725 ; + $this->iBuiltinIcon[4][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDgAACw4BQL7hQQAAAAd0SU1FB9ALEREICJp5fBkAAAJSSURBVHic3dS9a1NRGMfx77kxtS+xqS9FG6p1ER3qVJpBQUUc3CRU'. + 'BwURVLB1EAuKIP0THJQiiNRJBK3iJl18AyeltRZa0bbaJMbUNmlNSm5e7s25j0NqpSSmyag/OMM9POdzDuflwn8djz8gClVRrVEV'. + 'ur4Bl1FTNSzLrSS6vbml0jUUwSXj8Qfk3PkLtLW2AeBIybmrgz3+gFzpucjlE4f4btuFTuWuCF5XDr3a3UPf6cM8GQvxzbsRAJdh'. + 'ScfxSywml5j7mVypN0eGEJ0tebIre+zxB6Tv7jPReS2hREpOvpmUXU+H5eC913JnNCSRVE60pUVbWoZjprR39Yq70bdqj4pW7PEH'. + '5FpvL9e79jOTTHM7ssDL6CJZ08LbvAGnrpZg2mI2Z/MlZfN8IkxuSwu4V9+WIrj7zFlOHfXzKrLIi2SGh5ECKjnNVNxkQEc55vOw'. + 'rb6O8JLFdHyJ+ayFElUeHvjwkfteL/V7fKTSkFvIQE4DoLI2Mz/muTkTApcBKIwaN8pwIUrKw+ajWwDknAO0d/r4zFaMuRS63sWm'. + 'RoOdm+vRIriUYjKexrQV+t1o0YEVwfZSVJmD/dIABJuO0LG3lRFx0GOfiAELE9OgCrfU0XnIp5FwGLEy5WEAOxlR5uN+ARhP7GN3'. + '5w7Gv4bQI2+xpt4jjv2nWBmIlcExE2vDAHYioszBZXw6CPE4ADoWVHmd/tuwlZR9eXYyoszBfpiNQqaAOU5+TXRN+DeeenADPT9b'. + 'EVgKVsutKPl0TGWGhwofoquaoKK4apsq/tH/e/kFwBMXLgAEKK4AAAAASUVORK5CYII=' ; + + //========================================================== + // calc.png + //========================================================== + $this->iBuiltinIcon[5][0]= 589 ; + $this->iBuiltinIcon[5][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAA4AIwBbgMF12wAAAAlwSFlz'. + 'AAALEQAACxEBf2RfkQAAAAd0SU1FB9AHBxQeFsqn0wQAAAHKSURBVHicnZWff+RAGIef3U/gcOEgUAgUCgcLhYXCwsHBQeGgUDgs'. + 'FgMHB4VA/4Bg4XChWFgIFIqBwkJhsRAYeOGF+TQHmWSTTbKd9pU37/x45jvfTDITXEynAbdWKVQB0NazcVm0alcL4rJaRVzm+w/e'. + '3iwAkzbYRcnnYgI04GCvsxxSPabYaEdt2Ra6D0atcvvvDmyrMWBX1zPq2ircP/Tk98DiJtjV/fim6ziOCL6dDHZNhxQ3arIMsox4'. + 'vejleL2Ay9+jaw6A+4OSICG2cacGKhsGxg+CxeqAQS0Y7BYJvowq7iGMOhXHEfzpvpQkA9bLKgOgWKt+4Lo1mM9hs9m17QNsJ70P'. + 'Fjc/O52joogoX8MZKiBiAFxd9Z1vcj9wfSpUlDRNMcYQxzFpmnJ0FPH8nDe1MQaWSz9woQpWSZKEojDkeaWoKAyr1tlu+s48wfVx'. + 'u7n5i7jthmGIiEGcT+36PP+gFeJrxWLhb0UA/lb4ggGs1T0rZs0zwM/ZjNfilcIY5tutPxgOW3F6dUX464LrKILLiw+A7WErrl+2'. + 'rABG1EL/BilZP8DjU2uR4U+2E49P1Z8QJmNXUzl24A9GBT0IruCfi86d9x+D12RGzt+pNAAAAABJRU5ErkJggg==' ; + + //========================================================== + // mag.png + //========================================================== + $this->iBuiltinIcon[6][0]= 1415 ; + $this->iBuiltinIcon[6][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlz'. + 'AAALDAAACwwBP0AiyAAAAAd0SU1FB9ALDxEWDY6Ul+UAAAUESURBVHicdZVrbFRFGIafsyyF0nalV1R6WiggaAptlzsr1OgEogmC'. + '0IgoBAsBgkIrBAPEhBj/AP6xRTCUFEwRI4jcgsitXMrFCJptJWvBNpXYbbXtbtttt6e7e86ec/yxadlCfZPJZDIz73zzzjfvR2VL'. + 'F7U+hf0HD2JduIzTFy6SlJRkPtkcDgdCCE65OxFC8NPV6wghyM7OptankJ2dzbSC5QghEEIgCSHog9PpNAF27dlN6miZuPgElB4/'. + 'nmY3O7ZtByA1NVUCkGWZweD1eklJScESTbqxuIjrd+/x6uIl5M19hSy7nfGOeUxf+g7VjU1sKi7C4/GYsiyz7tAJAD4/cRaA1tZW'. + 'AHIPnECUVGD1+/3U19ebG4uLeHf1akamjsIwoVnVCOvQEdLoVILYYmMo3PIxSBJflpSaDX5FAmju1QAYv/8k/s8+wLVxOU0jR2LZ'. + '8sMFAApWrCApbRRDrRZirBYSLBKaoRPQw3SFernf2sav7T0Ubt4KwL4FMwF4Vu8FoHBCKgCzDhwHwLIhZ7y5a89u4m2JhA0wTdDC'. + 'OrphEjJMNElCHxKDEjaobmvlfo/Krj27CQQCJsCGJW8C0KXqAMxMiosQA8hZWcTFx9OsaniDKh1qmG7VoFsL0x0K06kbeAMhWpRe'. + '/KpG+gwHAKUnz7Dz3BUMw6DK18nuw99wt0Nh6VdHI8RJicmETQgFg7SFwjSrGv+oKp6ghldV6dZ0ugJBlF6FmCESQ2w2AIqXLsan'. + 'BrFYLJTnTCBrdBqveeopWZiPFaBHUegJhegMqGgxEkHDwB/UaQ9rdIV06v0+TD2EEQjQFtAY0dsNgNvt5sialQAIIXh7wQKuVf6J'. + 'gTsSccPDWlQstClBGjr9eHpVWvUQncEwdYEedF8noQ4vmYmpZMTH0nTvDn25vLbrNmu7bvfnsYEbAMnhcPDgwQPzUo2LJusw/mhp'. + 'QwlHNO0KBAnoIfxtrcQMT2De1Mm891wyUzNlUlJSpIyMDBobGzlzr5rFM/Koq6vrP8ASGxsLwPmKcvIShjPGZiPOakE3VFB8hHwd'. + 'vJAxhrk5L7Ly+RQuH/sWgPdXrwFg/6HDFBUsIj09nehfbAWwPWOT9n5RYhqGwarNWxkRM5TRCfF4U1PQsDDJFk9uYhwXvzvKjm3b'. + 'KSsro3DJInNW5RXp7u2bAKSlpeH1esnPz6eqqgqLpmmcr3Fht9ulfaV7mZk1Bs+lM6T1djM9fhg5egDPpTNMy5TZsW07kydPYdWM'. + 'aXx96ixOp9O8cfUa80srmDpjOgAulytiQqZpMnvObLbt/JTtHxXj9/tRVdU0DGOAufRpevPDTeac0hJyc3NxOOawfv161lVWS6eX'. + 'z+9/UOCxu1VWVvaTRGv16NFfjB2bNeAQp9NpTpmSM4DcbrdL0WsGDKLRR+52uwe1yP8jb2lpYfikyY9t80n03UCWZeaXVjw1f+zs'. + 'Oen+/d+pqanhzp2fKSsrw+l0mi6XiyPl5ZGITdN8fAVJwjRNJEmi1qfw1kw7siyTnJxMe3s71dXV3GpoZO64DG41NPJylvxU5D/e'. + 'qJKsfWQD9IkaZ2RmUvr9aV4aGYcQgjfO3aWoYBF5eXm4ewIsu/CbdPz1aWb0/p1bNoOrQxlUiuiaFo3c3FyEEOx9+C9CCD6paaTW'. + 'p/TXyYkTJ0Xe59jf7QOyAKDWp/QXxcFQ61P4pT3ShBBcvnUHIQTjxmX19/8BCeVg+/GPpskAAAAASUVORK5CYII=' ; + + //========================================================== + // lock.png + //========================================================== + $this->iBuiltinIcon[7][0]= 963 ; + $this->iBuiltinIcon[7][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALCwAACwsBbQSEtwAAAAd0SU1FB9AKAw0XDmwMOwIAAANASURBVHic7ZXfS1t3GMY/3+PprI7aisvo2YU6h6ATA8JW4rrlsF4U'. + 'qiAsF9mhl0N2cYTRy9G/wptAYWPD9iJtRy5asDe7cYFmyjaXOLaMImOrmkRrjL9yTmIS3120JybWQgfb3R74wuc8Lzw858vLOUpE'. + 'OK6pqSm2trbY39+nu7tbPHYch7m5OcLhMIA67kWj0aMQEWk6tm17rNm2LSIie3t7ksvlJJ1OSyqVkls3Z8SyLMnlcqTTaVKpFLdu'. + 'zmBZVj1HeY2VUti2TSQSQSml2bZdi0QirK2tMT09zerqKtlslqGhISYnJ4nHv2N+foFsNquOe9FotLlxOBwmk8lgWRbhcFgymYxY'. + 'liUi0mqaJoAuIi2macrdO7fFsizx3to0Te7euV1vrXtXEgqFmJmZYWVlhXK5LB4/U9kwDL784kYV0A3DYHd3m4sXRymXywKoRi8U'. + 'Ch01DgQCJBIJLMsiEAhIIpHw2uLz+eqtYrEYIqKZpimxWEyCwaCMjY01zYPBIJpXqVQqsby8TLVabWKA/v5+RkZGMAyDrq4ulFKH'. + 'HsfjcWZnZ+ns7KTRqwcnk0mKxSKFQqGJlVKtruuSTCYB6O3trW9UI/v9/iZPB/j8s2HOnX0FgHfeXpeffnzK+fWf+fijvhLs0PtG'. + 'D/n1OJ9+MsrlSwb3733DwMCAt1EyPj6uACYmJp56168NU6nUqFSE9nZdPE7+WqC/r4NKTagcCJVqDaUUB5VDAA4Pa9x7sMLlSwan'. + 'WjRmv13D7/erpaWlo604qOp88OF7LC48rPNosMq5Th+Dgxd4/XyA1rbzADi7j8jnf2P++wdcvSr8MJ/i8eomAKlUqn41OsDAQDeD'. + 'g++yuPCwzm/2vU8+n2a7sMFfj79mp7BBuVzioFSiXHJx3SKuW2Rzy0Up9dxnQVvODALQerqNRn4ZKe0Mvtc6TpzpmqbxalcY9Ato'. + '2v06t515C73YQftZB9GLnDrt4LoujuPgOA4Ui+C6yOpXJwZrJ7r/gv4P/u+D9W7fLxTz+1ScQxrZ3atRLaVxdjbY2d184R6/sLHe'. + 'opHP7/Do90Ua+WWUyezzZHObP/7cfX54/dowE1d66s8TV3oE+Mfn+L/zb4XmHPjRG9YjAAAAAElFTkSuQmCC' ; + + //========================================================== + // stop.png + //========================================================== + $this->iBuiltinIcon[8][0]= 889 ; + $this->iBuiltinIcon[8][1]= + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9AJDwEvNyD6M/0AAAL2SURBVHic1ZTLaxVnGIefb2bO5OScHJN4oWrFNqcUJYoUEgU3/Qf6'. + 'F7gwCkIrvdBLUtqqiLhSg9bgBduFSHZdiG5ctkJ3xRDbUFwUmghNzBDanPGMkzOX79LFJGPMOSd204U/+Bbzvd/78F4H/ieJdoad'. + 'pZKxRFszAI/DcP0HazXY22v+HB01kee1PA/v3zfnjx4xgGnHcNZe7OvuNj+cOEF1ZATv5nUA4jhBSgmADCVWo8Ge2Of9wb18P/G7'. + 'oUXmYi30zqlTVEdGWLh1g2D6MYlKkXGE0Vl8aa2GEB149+4xXSzyoOIw/mimiZV/DPb25pFOj13A9gOMEChhUEqhVYqWKUk9QAUp'. + 'sT/P4s8PmKlUmNhQaIJbkDVqBbpw6wZ2zUc4Nm+ePku5p4eOrgpueQOFUoVCVxcD4+N07dpF9+5tVJeWGPBjhvr7WF1zC8ASgtcP'. + 'H8a7eZ1odh4sh50nzwCw9ZNh3M4Stutiu0X2nB/LyjZ6lcIbVTpdQU/jWVPzLADM8+ZGBRdtC7wrF/O7bR99iu26VL86iU4SAH4b'. + 'Po5d6AQhstMSvGyI4wS5FJBKSRwnzF8byx/u+PjzzMF1mfryQ1K/jnCahqp1xEopjFLoNEFJSRJHzF799gWHqa+/QKcSUXBI609f'. + 'Al5W4teQSiHDOipNUKnMI13RvnOXAIEKQixvGWya98SC560MFwPiqEG86JM8q79Q06lvhnOndy5/B6GPCUOMUu3BQgg8z0M3GmBZ'. + 'iGJn3v2VmsqnfzNx7FDueODuj8ROCFpjtG5TCmOYv32bJ09msP0ISydMfnAUgF8/O45RAA6WTPjlvXcB+Gn7FuRf/zAnNX6x3ARe'. + 'PSdmqL+P/YHkwMGDOGWDZTlQcNBRhPEComgB/YeHfq2InF1kLlXUOkpMbio1bd7aATRD/X0M1lPeSlM2vt2X1XBZjZnpLG2tmZO6'. + 'LbQVOIcP+HG2UauH3xgwBqOz9Cc3l1tC24Fz+MvUDroeGNb5if9H/1dM/wLPCYMw9fryKgAAAABJRU5ErkJggg==' ; + + //========================================================== + // error.png + //========================================================== + $this->iBuiltinIcon[9][0]= 541 ; + $this->iBuiltinIcon[9][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAAAaVBMVEX//////2Xy8mLl5V/Z2VvMzFi/v1WyslKlpU+ZmUyMjEh/'. + 'f0VyckJlZT9YWDxMTDjAwMDy8sLl5bnY2K/MzKW/v5yyspKlpYiYmH+MjHY/PzV/f2xycmJlZVlZWU9MTEXY2Ms/PzwyMjLFTjea'. + 'AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAHdElNRQfTCAkUMSj9wWSOAAABLUlEQVR4'. + '2s2U3ZKCMAxGjfzJanFAXFkUle/9H9JUKA1gKTN7Yy6YMjl+kNPK5rlZVSuxf1ZRnlZxFYAm93NnIKvR+MEHUgqBXx93wZGIUrSe'. + 'h+ctEgbpiMo3iQ4kioHCGxir/ZYUbr7AgPXs9bX0BCYM8vN/cPe8oQYzom3tVsSBMVHEoOJ5dm5F1RsIe9CtqGgRacCAkUvRtevT'. + 'e2pd6vOWF+gCuc/brcuhyARakBU9FgK5bUBWdHEH8tHpDsZnRTZQGzdLVvQ3CzyYZiTAmSIODEwzFCAdJopuvbpeZDisJ4pKEcjD'. + 'ijWPJhU1MjCo9dkYfiUVjQNTDKY6CVbR6A0niUSZjRwFanR0l9i/TyvGnFdqwStq5axMfDbyBksld/FUumvxS/Bd9VyJvQDWiiMx'. + 'iOsCHgAAAABJRU5ErkJggg==' ; + + //========================================================== + // openfolder.png + //========================================================== + $this->iBuiltinIcon[10][0]= 2040 ; + $this->iBuiltinIcon[10][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEANAAtwClFht71AAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9AKDQ4RIXMeaLcAAAd1SURBVHicxZd7jBXVHcc/58zcvTNzH8vusqw8FsTsKiCUUh5WBZXG'. + 'GkOptmqwNWsWLKXFGlEpzZI0AWNKSy0WhDS22gJKtWlTsSRqzYIuLGB2WVvDIwQMZQMsy2OFfdzde+/OnHP6x907vJaFpjb9JZM5'. + 'c85Mfp/f9/s7Jxn4P4e41gtSyp78WGvtfdEAcqDFYUOH9HS0NhGk9tPb/ilSyp789UUB2AMuqhQy3Uzm7HGkE6W3dTNZMRI3EcWO'. + 'jf9ClLmWBT3dzW8jUsevWHCG3UpWl+IkHSxnbDh/Mcz12NevBcuWXTmf6TjnXvJ88gDmVB3pw3+nt3UzHa1NqMzBS2zqPLGFjtMN'. + 'ZNr3XdW+qyqwZcFk76HX/tHWfuQvyO4W7qhaHwL8efkMRlRUpPv7rqD0RrJ+FgAjLy1a20OIxZJEEuNCRfIApj+om4bGM3u2/sYU'. + '9J41d8973f3Dhg1pISTV1dXXBRNJxPGFCzhou+DCQrScZOkktNaeDZjamgeZ9MgiYmVDccvHhjAzJw0NTh8/alyZMaVJicp0iTHj'. + 'JpgNv38tjWUhhGROdbUL9W5/MH5XCkjlcibi+KIop5LVHLKEu8A/f4r286doa9pGrGwYAAsfqbbH3b8MgO/Nqgy6WvdbbXHMkEFJ'. + '4xUOMVEvaTZu3BgmvF4Yk4hz9rO/Ulr5cE9owae/rcGxohSOuiWkC2IjcIqKyPZm+OmCH7GhoZEF077EEzVVweAbJ+riEeO0Ey8y'. + 'UubqOHn0AOgMwvf59txnBrSp9dgxKmf/+kIP1NY8SFk0jh5ajmNHAWg5b2E5EexojGHjbiVRMoRMNs0LC+Yz46vTuH3enN7BI8fr'. + 'qFdo0BoVZNC9aVSQ4fNjBzEmQJiARxb+/AqYPMAVB5FsPU5v37g9OxgLhe14ZM5/ju052E6MNZvf5pmHHuLmmWOkEysxUtpGAtme'. + 'dtHTflJkezqQto3jFRnLssyf1jydxiiM7zNnye/c3ZsqLu2BN5fcMfzrv/hby1tPzmRUoihcTJ87CwQI2yLtDcIqsIjYUf51qBlf'. + 'OnScOSrdQUOMURkiXsLUzJnvbGhoBGDHH5cGyZLhOpYoNl5hqYnYEXOu5fDl9eYAHntx98n8hFHZcPHUuTSxSASAeK/CGIOxJJ0f'. + 'bOGNPU280dgkq6Y2yu8vfjCIlwwzr+/ZQ/PHO0gOLuO5qsftDQ2NbN+4OCgqG6WTxWVaq6zpF+DiSHWnicdylp3r6aZTWthIOrNp'. + 'ktHcvBu0sHX1Sm6ozB3B42d90zZA9bQp7PvgPSzXZfnqX/HS4DKKK2+x69Y/HURs26iBAN5ccsfw7774UcumF37C6f07KSt2OHji'. + 'DEUJD0tISjyPrrSPlAKvN0JP/U4O1NfjuhG2rvklN1SOpfXwftpbTqAyKRrff5fb7rs9V1R7m4wlz2ihA3HpmXflUWyOH2umpLiY'. + 'ui3v8M+6bWzfsRNbSgqkxaCkiy0simMuEWEhpcRzIhQWOIAh6tiAwS4owInFiTou5dOnMnl2NR++ujBwXEc9terD6M43nrj6LgAB'. + 'QnDPA9/irtkP8JRS7Hr/3T6YekDQ1pEiEXOwpUVJzCVlZZFS4mZtkpEo9ChAkDp/jtLMBACy6S4RiQghLyv5cgBRPnKUOX6smUGF'. + 'hSil0MYw9d77mPy1e5mnFE3batm3czvb6nYgEJztSFGU9LCRlMRdUjIH0+lnEMIwPNXD3NumoVJnrMCJaiciMUZfvQnz4QcBSvV1'. + 'vjE5GK358t0zmXDnDB79saLpo20c+aSRD+t25JTp7GZQwsEWFiVxl6hlUf/WO9z32CxmL1rOe6u/I2KuwGhzLQCB7/sYY9Bah3el'. + 'FKbvrrVm4vS7GH/7ncx+chEHGz7myCeNbPtoO0JI2jq78WIRLGkzsqs7V5SfFV5EovXACoiqqsfNpk2vo5VCWtYFBfoU0VoTBAFa'. + 'a7TRaK2p+MoURk+cxMzq+Rzbv49DDbuo27UTW9h0dedssPxuK+kIfN8XxhgDYPVXf2Fh4XKtFIl4AiklAlBKAYRKKK36wHIweTCt'. + 'NfHiEkaOn8j0+7/BmDFjaT30GbHywSxcuZkpFfFg+m1jjZ/NmnVvNfRvwd69e8WBA/uNFAIh4JVXXmHsmDHE4vEQQgjQ2lxQIm9N'. + 'nz35q3BEOZOHzaG2thaA4mRU+L29It+IV21CpbRQfeMFC35gRB/M2rVrubnyZmLxWJhECBEmz/eHyo/7lMlH3LFFujsthNFCCGOu'. + '+WNyeUgpjSVzMKtWraKyshLPdcPEeYWCIEBdpIxSivr6eta8vI7d6+cGnhdV06pe1QP+F/QXWmuRL+jZZ58LlVmxYgUVFRV4rhtu'. + '4TzMxXAA6XRaRAtsYUkx8I/JtSJQOlSwpmZpCLN8+fPcdNNoHMfB9/0QJgRoP295TlR7UVv8xxZcHMuWIZ9/Hn35vG3JEGZpzVJG'. + 'jx5N1IlitKahsZE1L69j69qHgx+urFX/lQL9JYdLlfnZihUhzOLFi8N3Ml1dthOxVH/f/8/CtqSJ2JaJ2JZ59J7RPsC/AViJsQS/'. + 'dBntAAAAAElFTkSuQmCC' ; + + //========================================================== + // folder.png + //========================================================== + $this->iBuiltinIcon[11][0]= 1824 ; + $this->iBuiltinIcon[11][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALEAAACxABrSO9dQAAAAd0SU1FB9ECAQgFFyd9cRUAAAadSURBVHiczdhvbBP3Hcfx9/2xfefEOA5JoCNNnIT8AdtZmYBETJsI'. + '6+jQOlQihT1AYgytqzZpD1atfyYqlT1h0lRpT7aRJ4NQpRvZGELVuo5Ua9jEJDIETQsNQyPBsUJMWGPnj//e+e72wNg4xElMR6ed'. + 'ZNln3933dZ/f93f6yfB/sgmrHdDV1WXlPg8NDZUDScD8LFFFEZZlWYZhWMFg0Orq6sq/gDJAfFy1iiZy9OjrVnj4JzQ1rMWqfxm/'. + '309jYyNtbW0kEgnu3bvH4cOH88c/jqSKQl4/XGkd+eVtAN46up1LH92ktqYS++ZX8Pv9NDQ0sGnTJlKpFOFwmO7u7vy5IyMjeVRd'. + 'XV1+WEOh0IrY4pDnq6wXX/sTiCJaMkFZdRNqxefoe7VtCSqXVDqdZnZ2ltraWkzTpKqqijt3JpFlG7dvj7NzZ1f++qFQyA3EClHL'. + 'Ql743nFkhxPDtJAd5eTaYSVUfX09lZWVlJWVIUnSg7sVQMBCUcu4ceMGe/bsIRQK1QAzOcyykIM9P0KyudAyCWyqG8nhwqa4SkLt'. + '3r0bVVVxu924XC40TUOWZUQxe97CwgIdHR2LMHIxSCaVInVvFElxE0vMY1Pd2NUKJMWNTXHlUfF//4vETJCelwbpFm3MjP2dt37x'. + 'AlN+PzU1NViWRSwW4+7du3g8HjweD4qi5EFAJzAExIpCANbooxhplfB0FJvTg6xWIqsVRVF6MopkU3FXPcnkJxGU0VEAdF2noqKC'. + 'W3/8DpnqLjzep2lubsblcjE8PExHR8fboVDID9xYFpLBDpJF0jDQIncQpWlkm31FlFLtp9PfyuW/vYQj1kPSuRW/38+lj27S2Q7v'. + '/aWXUBVUffVNtm3blivVCEwsC5Eyc5iiApEpDEAXMqQdldhSiWVQHjJagud+8Fuexck/zv+K82dfoSbSCsDe75/km+4GVPd6+l5t'. + '4zJHcqVUYN2yEEtZQDCSJCueRAYsPY49HsFIZVG6p25JUumFafT4DKJN4amtT7Nz38sk5+5A70HMtEYyMkFiZhxzjQ/poXrLQrRU'. + 'DFGEeFpAlkQkm4pRiCpIKodKzk0T/2QMh+piPjxKZPwiSkUtu/b9mNnJEWS7E8nhAmvpM60oJDkXJxqNozxRRUxPIesispBBlsXV'. + 'UaKEFo8gzoaJhz8s2lOmrpUG+WBhJ9/60g+Z+fDXTAXfxllRjl1VkO0OFATsYhYliiK21ZKKhhHnFveUqSdKgwAEOp7F2v51vvw8'. + 'XH7/N1wd/BlTweuUV65BdtgfoLTSkipsdD3tRi0VYpommUwGwzDwdT5HYEc3giAwcvH3jLz3BlPB67jWeZBEKYsSBWwpHZtNKo4q'. + 'aHTDsJeeiGEYWJaFZVmYpommaRiGQdPnv0bb1m8gSRL/vPIOV979aR4lmAJ2p4qCgCxksNuKJ6VNpx4NYhgGpmkuQhmGQTqdxjAM'. + 'qr2d7HtxEEEQuH1tkKvvvkF44tqDnrIcKJKAPf1g+LAUElq8dIiu60sApmnm93Pfzc7OYhgGrie+wFe++ztcLhcT1wf54PzPCU9c'. + 'w7XWjWS3IdsdOAUBWZAxrRJnTQ6SG5bce2FCpmkughmGQSqVYm5uDtnj44sH38TtdhP6+Dwf//V4ttHXrkGURZJaic8RgHQ6jWma'. + 'SJKUL5RLKNfIOczDKF3XSSaTRCIRhLJWntp3nGfWrSMxc5OLf3iNP4+68T9Ub9nF76lTpxgfHycajZJKpdA0LZ9GbjYV7hcDWZaF'. + 'pmnMz88Ti8UYunSLmu1HFi2aVkxkaGjINTY2ttDb24vX6+XQoUNs3ryZ8vJyIDu1BUFYkkxhgxeiWlpaOHPmDE1NTdTX1xe98eWG'. + 'JnF/9dQZCoXUYDA4AOD1ejlw4ACtra2Ul5fniwmCkEcUJiUIAoFAgL6+Pnw+H21tbfT39z8SxCS7hHsfWH9/8dL4MKqnp4eWlhac'. + 'TmcekEvMNE2am5s5ceIEgUCA9vZ2Tp48ic/nY3j4UsmQHCYOjJHtpeBKqL1799Lc3IzT6UTXdRobGxkYGKC9vZ3W1tZ8Ko86NJ8a'. + 'tXHjRo4dO8bp06fZsmULGzZsoL+/n0AggNfr5ezZs/8VpGTU5OSkc//+/acBfD4f1dXV7Nq1i4aGBs6dO4fP5+Pq1SuPBbIiyjTN'. + 'RUnV1dUNXLhwAa/Xy44dO4jFYgBEo9FFF1r134BPuYlk16LrAYXsAlmtq6sbKDwoFAp9m+ykuP5ZQVZF3f8tCdwCov8LyHIoAANI'. + 'AXf/A1TI0XCDh7OWAAAAAElFTkSuQmCC' ; + + //========================================================== + // file_important.png + //========================================================== + $this->iBuiltinIcon[12][0]= 1785 ; + $this->iBuiltinIcon[12][1]= + 'iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlz'. + 'AAALDwAACw8BkvkDpQAAAAd0SU1FB9ECDAcjDeD3lKsAAAZ2SURBVHicrZhPaFzHHcc/897s7lutJCsr2VHsOHWMk0MPbsBUrcnF'. + 'OFRdSo6FNhdB6SGHlpDmYtJCDyoxyKe6EBxKQkt7KKL0T6ABo0NbciqigtC6PhWKI2NFqqxdSd7V2/dmftPDvPd212t55dCBYfbN'. + 'zpvfZ77z+/1mdhUjytWrV93Hf/24eD5z9gwiMlDjOKbb7dLtdhER2u02u7u73Lp1CxEZBw4AeZwdNQqkMd9wbziFGINJUt6rRbz5'. + '1ptUq1XK5TJBEAAUMHt7e+zu7gKwvLzMysoKwAng/uNg9CgQgFKlgg1DUJ67Vqtx6tQpZmdniaIIpRTOOZRSdDoddnZ2aLfbLC8v'. + 's7S0xJUrV7ZGwQSj1PhhfRodVdDlMrpc5vup5Z2fvMPdu3fZ29vDWjvwztjYGPV6nVqtRqVS4dKlSywtLQFsAdOH2XwsCEApg3jl'. + 'w98Rak2gvYjNZpNms0mSJDjnHgkDMDc3dySYQ0Ea8w139YUX0OUKulzyg7UmCEO+l1huvHuDra0t9vf3h1TJYSqVypFhHquIrlQI'. + 'S5qv/uIDAC7/4bcEQYAKvK+0Wq1DVQGIoog7d+4cCeaRII35hrt+8SsEOkRlUaEyR0UpFIrXHxyMVKVUKnHv3r0jwRwaNelBjBjL'. + 'Sz/7KYuLiwAsLi7y4z/9kY9e+TpkCuSqjI+Po7XuAWeKXLt2DWNMUZMkwRjDhQsXWFtbK6JpCCT3jfQgxomPtPX19YHWicM5x3c2'. + '73Pj3Ru8/aO3mZqaolKpoHVvyuvXr/Ppnf/Q7uzz380NPtu4y/qnG+ztd1hfX2dtbQ3gIvDnRyqSxl1UoPjyz98D4PTp0wPtq39Z'. + '4fdzLxegrVaLVqvF5OQkYRgWqpRKJZ77wvNsbW1RG5tgfKLOTH2G7Z1twqBQrgrMDvhInjfSOCY5iIv+hYWFgRZArEWsZWF941Bf'. + 'SdMUgMnJCWpjVU4cn+HUyePM1Gc4+fRUPkzBI5w1jbukcczLv/5l0XfmzJmBFuCba38r/CRXpT+CrDUoZ0jjB4RYonJAOYRobJKT'. + 'z5zgqfqxAbsFSH6mpHFM2qdGXh4VnoViD6mSJF2cTQeqDqBaKVHWmonJCWpZjhkC6anR5WsffTgwaHV1FaUUq6urA/2v3f5k4LnV'. + 'arG9tUn3oI2YBCcWHYAxMVYs1qZEZY2SFB2aYZDGfMN9d7uJiWPSeFiNo5Rclc3NTXZbO6RpF7EJVixYA9agwwDnUiqlEPdQ3imi'. + 'Jo27BGHIt/7x9yEjc3Nzh27Na7c/4TdffKl4bja3ae5MUIu0T/HOEIaOpJt4gwoSsVTK4SBIY77hFtY3ABBjBiZ90rKwvsH77/+K'. + 't37wOhO1iPpTk4SBw1mLsz6CnKQ4l3qV+kE+t9XHlNZOk+bUJLVIE1VCcIJWQmJ6qjj30NbcXLkZMt8YPig+Z3n1G5fZ39/j/vY2'. + '9ckqZT2Ochbn0p4qNkU/dDfUADdXbh4HXgRO4zNdEU0XL1784PLly5w9e7Z4SazFOfGrEotDcOKrcoJPmrYIXf/Zop3QNd1skuGt'. + 'cUAb2MgAxvHZTgFUq1Wmp6eZnZ0F8JlTjDduDThBnDeECEoJtbGIp6enqEblzCcEZ1PECU4yVRiOGgd0gc+AB0CZvkv1sWPHOHfu'. + 'HOfPn8da41cpkkltEBEPJhYnBkTQJcdYVKGkgRxCfBsq5xXNgAa2Bn+hjTOgHEKBP8pzRUxykIH4ifLJRTJAl+UMBJzPHQ6bfe/f'. + 'cWIzPxlUpD+zugzIZtVk1d8znBAqRxgoQuVQgSJQ3h9C5QhDRYgjUILCAzlnEdsHYTKfMTEBcP7F54YUGVmc2GLlIn6ve6v0ahSt'. + '8X25TzjJ+rIx1grKpQPWR4LkGVVsMgghvS0qjPdvm5OeceOTWA5Evo2mFzkjQfL7hZPUy5yvvF/uPFQL3+nbDmsLCEmT3sTmCTNr'. + 'rogT6yFsOix3ftw7OwQhkvSU6CuinhCk0+kAkFoBazEEICHaHHiPVmU0gnUp4EAc1mYrF0EBVpwPi34VrBkwPxKk3W5ju/e5/c+d'. + 'bGUHIAIuydTIE5zfc5Wr4lJcahHnHTP3CVGm78DrgY38N+DEibp7dmYKdAQmBh1hjEFjis+9CTWYGK21H6PxPyOI0DobYwzZF/z7'. + '7jadTvJtYG0kCD7lfwl49ijgT1gc0AH+dZSJA/xB+Mz/GSIvFoj/B7H1mAd8CO/zAAAAAElFTkSuQmCC' ; + + $this->iLen = count($this->iBuiltinIcon); + } +} + +//=================================================== +// Global cache for builtin images +//=================================================== +$_gPredefIcons = new PredefIcons(); + +//=================================================== +// CLASS IconImage +// Description: Holds properties for an icon image +//=================================================== +class IconImage { + var $iGDImage=null; + var $iWidth,$iHeight; + var $ixalign='left',$iyalign='center'; + var $iScale=1.0; + + function IconImage($aIcon,$aScale=1) { + GLOBAL $_gPredefIcons ; + if( is_string($aIcon) ) { + $this->iGDImage = Graph::LoadBkgImage('',$aIcon); + } + elseif( is_integer($aIcon) ) { + // Builtin image + $this->iGDImage = $_gPredefIcons->GetImg($aIcon); + } + else { + JpGraphError::RaiseL(6011); +//('Argument to IconImage must be string or integer'); + } + $this->iScale = $aScale; + $this->iWidth = Image::GetWidth($this->iGDImage); + $this->iHeight = Image::GetHeight($this->iGDImage); + } + + function GetWidth() { + return round($this->iScale*$this->iWidth); + } + + function GetHeight() { + return round($this->iScale*$this->iHeight); + } + + function SetAlign($aX='left',$aY='center') { + + $this->ixalign = $aX; + $this->iyalign = $aY; + + } + + function Stroke(&$aImg,$x,$y) { + + if( $this->ixalign == 'right' ) { + $x -= $this->iWidth; + } + elseif( $this->ixalign == 'center' ) { + $x -= round($this->iWidth/2*$this->iScale); + } + + if( $this->iyalign == 'bottom' ) { + $y -= $this->iHeight; + } + elseif( $this->iyalign == 'center' ) { + $y -= round($this->iHeight/2*$this->iScale); + } + + $aImg->Copy($this->iGDImage, + $x,$y,0,0, + round($this->iWidth*$this->iScale),round($this->iHeight*$this->iScale), + $this->iWidth,$this->iHeight); + } +} + + +//=================================================== +// CLASS TextProperty +// Description: Holds properties for a text +//=================================================== +class TextProperty { + var $iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10; + var $iColor="black"; + var $iShow=true; + var $iText=""; + var $iHAlign="left",$iVAlign="bottom"; + var $csimtarget='',$csimwintarget='',$csimalt=''; + +//--------------- +// CONSTRUCTOR + function TextProperty($aTxt='') { + $this->iText = $aTxt; + } + +//--------------- +// PUBLIC METHODS + function Set($aTxt) { + $this->iText = $aTxt; + } + + function SetCSIMTarget($aTarget,$aAltText='',$aWinTarget='') { + if( is_string($aTarget) ) + $aTarget = array($aTarget); + $this->csimtarget=$aTarget; + + if( is_string($aWinTarget) ) + $aWinTarget = array($aWinTarget); + $this->csimwintarget=$aWinTarget; + + if( is_string($aAltText) ) + $aAltText = array($aAltText); + $this->csimalt=$aAltText; + + } + + function SetCSIMAlt($aAltText) { + if( is_string($aAltText) ) + $aAltText = array($aAltText); + $this->csimalt=$aAltText; + } + + // Set text color + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function HasTabs() { + if( is_string($this->iText) ) { + return substr_count($this->iText,"\t") > 0; + } + elseif( is_array($this->iText) ) { + return false; + } + } + + // Get number of tabs in string + function GetNbrTabs() { + if( is_string($this->iText) ) { + return substr_count($this->iText,"\t") ; + } + else{ + return 0; + } + } + + // Set alignment + function Align($aHAlign,$aVAlign="bottom") { + $this->iHAlign=$aHAlign; + $this->iVAlign=$aVAlign; + } + + // Synonym + function SetAlign($aHAlign,$aVAlign="bottom") { + $this->iHAlign=$aHAlign; + $this->iVAlign=$aVAlign; + } + + // Specify font + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function IsColumns() { + return is_array($this->iText) ; + } + + // Get width of text. If text contains several columns separated by + // tabs then return both the total width as well as an array with a + // width for each column. + function GetWidth(&$aImg,$aUseTabs=false,$aTabExtraMargin=1.1) { + $extra_margin=4; + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + if( is_string($this->iText) ) { + if( strlen($this->iText) == 0 ) return 0; + $tmp = split("\t",$this->iText); + if( count($tmp) <= 1 || !$aUseTabs ) { + $w = $aImg->GetTextWidth($this->iText); + return $w + 2*$extra_margin; + } + else { + $tot=0; + $n = count($tmp); + for($i=0; $i < $n; ++$i) { + $res[$i] = $aImg->GetTextWidth($tmp[$i]); + $tot += $res[$i]*$aTabExtraMargin; + } + return array(round($tot),$res); + } + } + elseif( is_object($this->iText) ) { + // A single icon + return $this->iText->GetWidth()+2*$extra_margin; + } + elseif( is_array($this->iText) ) { + // Must be an array of texts. In this case we return the sum of the + // length + a fixed margin of 4 pixels on each text string + $n = count($this->iText); + for( $i=0, $w=0; $i < $n; ++$i ) { + $tmp = $this->iText[$i]; + if( is_string($tmp) ) { + $w += $aImg->GetTextWidth($tmp)+$extra_margin; + } + else { + if( is_object($tmp) === false ) { + JpGraphError::RaiseL(6012); + } + $w += $tmp->GetWidth()+$extra_margin; + } + } + return $w; + } + else { + JpGraphError::RaiseL(6012); + } + } + + // for the case where we have multiple columns this function returns the width of each + // column individually. If there is no columns just return the width of the single + // column as an array of one + function GetColWidth(&$aImg,$aMargin=0) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + if( is_array($this->iText) ) { + $n = count($this->iText); + for( $i=0, $w=array(); $i < $n; ++$i ) { + $tmp = $this->iText[$i]; + if( is_string($tmp) ) { + $w[$i] = $aImg->GetTextWidth($this->iText[$i])+$aMargin; + } + else { + if( is_object($tmp) === false ) { + JpGraphError::RaiseL(6012); + } + $w[$i] = $tmp->GetWidth()+$aMargin; + } + } + return $w; + } + else { + return array($this->GetWidth($aImg)); + } + } + + // Get total height of text + function GetHeight(&$aImg) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetFontHeight(); + } + + // Unhide/hide the text + function Show($aShow=true) { + $this->iShow=$aShow; + } + + // Stroke text at (x,y) coordinates. If the text contains tabs then the + // x parameter should be an array of positions to be used for each successive + // tab mark. If no array is supplied then the tabs will be ignored. + function Stroke(&$aImg,$aX,$aY) { + if( $this->iShow ) { + $aImg->SetColor($this->iColor); + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + $aImg->SetTextAlign($this->iHAlign,$this->iVAlign); + if( $this->GetNbrTabs() <= 1 ) { + if( is_string($this->iText) ) { + // Get rid of any "\t" characters and stroke string + if( is_array($aX) ) $aX=$aX[0]; + if( is_array($aY) ) $aY=$aY[0]; + $aImg->StrokeText($aX,$aY,str_replace("\t"," ",$this->iText)); + } + elseif( is_array($this->iText) && ($n = count($this->iText)) > 0 ) { + $ax = is_array($aX) ; + $ay = is_array($aY) ; + if( $ax && $ay ) { + // Nothing; both are already arrays + } + elseif( $ax ) { + $aY = array_fill(0,$n,$aY); + } + elseif( $ay ) { + $aX = array_fill(0,$n,$aX); + } + else { + $aX = array_fill(0,$n,$aX); + $aY = array_fill(0,$n,$aY); + } + $n = min($n, count($aX) ) ; + $n = min($n, count($aY) ) ; + for($i=0; $i < $n; ++$i ) { + $tmp = $this->iText[$i]; + if( is_object($tmp) ) { + $tmp->Stroke($aImg,$aX[$i],$aY[$i]); + } + else + $aImg->StrokeText($aX[$i],$aY[$i],str_replace("\t"," ",$tmp)); + } + } + } + else { + $tmp = split("\t",$this->iText); + $n = min(count($tmp),count($aX)); + for($i=0; $i < $n; ++$i) { + $aImg->StrokeText($aX[$i],$aY,$tmp[$i]); + } + } + } + } +} + +//=================================================== +// CLASS HeaderProperty +// Description: Data encapsulating class to hold property +// for each type of the scale headers +//=================================================== +class HeaderProperty { + var $iTitleVertMargin=3,$iFFamily=FF_FONT0,$iFStyle=FS_NORMAL,$iFSize=8; + var $iFrameColor="black",$iFrameWeight=1; + var $iShowLabels=true,$iShowGrid=true; + var $iBackgroundColor="white"; + var $iWeekendBackgroundColor="lightgray",$iSundayTextColor="red"; // these are only used with day scale + var $iTextColor="black"; + var $iLabelFormStr="%d"; + var $grid,$iStyle=0; + var $iIntervall = 1; + +//--------------- +// CONSTRUCTOR + function HeaderProperty() { + $this->grid = new LineProperty(); + } + +//--------------- +// PUBLIC METHODS + function Show($aShow=true) { + $this->iShowLabels = $aShow; + } + + function SetIntervall($aInt) { + $this->iIntervall = $aInt; + } + + function GetIntervall() { + return $this->iIntervall ; + } + + function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) { + $this->iFFamily = $aFFamily; + $this->iFStyle = $aFStyle; + $this->iFSize = $aFSize; + } + + function SetFontColor($aColor) { + $this->iTextColor = $aColor; + } + + function GetFontHeight(&$aImg) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetFontHeight(); + } + + function GetFontWidth(&$aImg) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetFontWidth(); + } + + function GetStrWidth(&$aImg,$aStr) { + $aImg->SetFont($this->iFFamily,$this->iFStyle,$this->iFSize); + return $aImg->GetTextWidth($aStr); + } + + function SetStyle($aStyle) { + $this->iStyle = $aStyle; + } + + function SetBackgroundColor($aColor) { + $this->iBackgroundColor=$aColor; + } + + function SetFrameWeight($aWeight) { + $this->iFrameWeight=$aWeight; + } + + function SetFrameColor($aColor) { + $this->iFrameColor=$aColor; + } + + // Only used by day scale + function SetWeekendColor($aColor) { + $this->iWeekendBackgroundColor=$aColor; + } + + // Only used by day scale + function SetSundayFontColor($aColor) { + $this->iSundayTextColor=$aColor; + } + + function SetTitleVertMargin($aMargin) { + $this->iTitleVertMargin=$aMargin; + } + + function SetLabelFormatString($aStr) { + $this->iLabelFormStr=$aStr; + } + + function SetFormatString($aStr) { + $this->SetLabelFormatString($aStr); + } + + +} + +//=================================================== +// CLASS GanttScale +// Description: Responsible for calculating and showing +// the scale in a gantt chart. This includes providing methods for +// converting dates to position in the chart as well as stroking the +// date headers (days, week, etc). +//=================================================== +class GanttScale { + var $minute,$hour,$day,$week,$month,$year; + var $divider,$dividerh,$tableTitle; + var $iStartDate=-1,$iEndDate=-1; + // Number of gantt bar position (n.b not necessariliy the same as the number of bars) + // we could have on bar in position 1, and one bar in position 5 then there are two + // bars but the number of bar positions is 5 + var $iVertLines=-1; + // The width of the labels (defaults to the widest of all labels) + var $iLabelWidth; + // Out image to stroke the scale to + var $iImg; + var $iTableHeaderBackgroundColor="white",$iTableHeaderFrameColor="black"; + var $iTableHeaderFrameWeight=1; + var $iAvailableHeight=-1,$iVertSpacing=-1,$iVertHeaderSize=-1; + var $iDateLocale; + var $iVertLayout=GANTT_EVEN; + var $iTopPlotMargin=10,$iBottomPlotMargin=15; + var $iUsePlotWeekendBackground=true; + var $iWeekStart = 1; // Default to have weekends start on Monday + var $actinfo; + +//--------------- +// CONSTRUCTOR + function GanttScale(&$aImg) { + $this->iImg = &$aImg; + $this->iDateLocale = new DateLocale(); + + $this->minute = new HeaderProperty(); + $this->minute->SetIntervall(15); + $this->minute->SetLabelFormatString('i'); + $this->minute->SetFont(FF_FONT0); + $this->minute->grid->SetColor("gray"); + + $this->hour = new HeaderProperty(); + $this->hour->SetFont(FF_FONT0); + $this->hour->SetIntervall(6); + $this->hour->SetStyle(HOURSTYLE_HM24); + $this->hour->SetLabelFormatString('H:i'); + $this->hour->grid->SetColor("gray"); + + $this->day = new HeaderProperty(); + $this->day->grid->SetColor("gray"); + $this->day->SetLabelFormatString('l'); + + $this->week = new HeaderProperty(); + $this->week->SetLabelFormatString("w%d"); + $this->week->SetFont(FF_FONT1); + + $this->month = new HeaderProperty(); + $this->month->SetFont(FF_FONT1,FS_BOLD); + + $this->year = new HeaderProperty(); + $this->year->SetFont(FF_FONT1,FS_BOLD); + + $this->divider=new LineProperty(); + $this->dividerh=new LineProperty(); + $this->dividerh->SetWeight(2); + $this->divider->SetWeight(6); + $this->divider->SetColor('gray'); + $this->divider->SetStyle('fancy'); + + $this->tableTitle=new TextProperty(); + $this->tableTitle->Show(false); + $this->actinfo = new GanttActivityInfo(); + } + +//--------------- +// PUBLIC METHODS + // Specify what headers should be visible + function ShowHeaders($aFlg) { + $this->day->Show($aFlg & GANTT_HDAY); + $this->week->Show($aFlg & GANTT_HWEEK); + $this->month->Show($aFlg & GANTT_HMONTH); + $this->year->Show($aFlg & GANTT_HYEAR); + $this->hour->Show($aFlg & GANTT_HHOUR); + $this->minute->Show($aFlg & GANTT_HMIN); + + // Make some default settings of gridlines whihc makes sense + if( $aFlg & GANTT_HWEEK ) { + $this->month->grid->Show(false); + $this->year->grid->Show(false); + } + if( $aFlg & GANTT_HHOUR ) { + $this->day->grid->SetColor("black"); + } + } + + // Should the weekend background stretch all the way down in the plotarea + function UseWeekendBackground($aShow) { + $this->iUsePlotWeekendBackground = $aShow; + } + + // Have a range been specified? + function IsRangeSet() { + return $this->iStartDate!=-1 && $this->iEndDate!=-1; + } + + // Should the layout be from top or even? + function SetVertLayout($aLayout) { + $this->iVertLayout = $aLayout; + } + + // Which locale should be used? + function SetDateLocale($aLocale) { + $this->iDateLocale->Set($aLocale); + } + + // Number of days we are showing + function GetNumberOfDays() { + return round(($this->iEndDate-$this->iStartDate)/SECPERDAY); + } + + // The width of the actual plot area + function GetPlotWidth() { + $img=$this->iImg; + return $img->width - $img->left_margin - $img->right_margin; + } + + // Specify the width of the titles(labels) for the activities + // (This is by default set to the minimum width enought for the + // widest title) + function SetLabelWidth($aLabelWidth) { + $this->iLabelWidth=$aLabelWidth; + } + + // Which day should the week start? + // 0==Sun, 1==Monday, 2==Tuesday etc + function SetWeekStart($aStartDay) { + $this->iWeekStart = $aStartDay % 7; + + //Recalculate the startday since this will change the week start + $this->SetRange($this->iStartDate,$this->iEndDate); + } + + // Do we show min scale? + function IsDisplayMinute() { + return $this->minute->iShowLabels; + } + + // Do we show day scale? + function IsDisplayHour() { + return $this->hour->iShowLabels; + } + + + // Do we show day scale? + function IsDisplayDay() { + return $this->day->iShowLabels; + } + + // Do we show week scale? + function IsDisplayWeek() { + return $this->week->iShowLabels; + } + + // Do we show month scale? + function IsDisplayMonth() { + return $this->month->iShowLabels; + } + + // Do we show year scale? + function IsDisplayYear() { + return $this->year->iShowLabels; + } + + // Specify spacing (in percent of bar height) between activity bars + function SetVertSpacing($aSpacing) { + $this->iVertSpacing = $aSpacing; + } + + // Specify scale min and max date either as timestamp or as date strings + // Always round to the nearest week boundary + function SetRange($aMin,$aMax) { + $this->iStartDate = $this->NormalizeDate($aMin); + $this->iEndDate = $this->NormalizeDate($aMax); + } + + + // Adjust the start and end date so they fit to beginning/ending + // of the week taking the specified week start day into account. + function AdjustStartEndDay() { + + if( !($this->IsDisplayYear() ||$this->IsDisplayMonth() || $this->IsDisplayWeek()) ) { + // Don't adjust + return; + } + + // Get day in week for start and ending date (Sun==0) + $ds=strftime("%w",$this->iStartDate); + $de=strftime("%w",$this->iEndDate); + + // We want to start on iWeekStart day. But first we subtract a week + // if the startdate is "behind" the day the week start at. + // This way we ensure that the given start date is always included + // in the range. If we don't do this the nearest correct weekday in the week + // to start at might be later than the start date. + if( $ds < $this->iWeekStart ) + $d = strtotime('-7 day',$this->iStartDate); + else + $d = $this->iStartDate; + $adjdate = strtotime(($this->iWeekStart-$ds).' day',$d /*$this->iStartDate*/ ); + $this->iStartDate = $adjdate; + + // We want to end on the last day of the week + $preferredEndDay = ($this->iWeekStart+6)%7; + if( $preferredEndDay != $de ) { + // Solve equivalence eq: $de + x ~ $preferredDay (mod 7) + $adj = (7+($preferredEndDay - $de)) % 7; + $adjdate = strtotime("+$adj day",$this->iEndDate); + $this->iEndDate = $adjdate; + } + } + + // Specify background for the table title area (upper left corner of the table) + function SetTableTitleBackground($aColor) { + $this->iTableHeaderBackgroundColor = $aColor; + } + +/////////////////////////////////////// +// PRIVATE Methods + + // Determine the height of all the scale headers combined + function GetHeaderHeight() { + $img=$this->iImg; + $height=1; + if( $this->minute->iShowLabels ) { + $height += $this->minute->GetFontHeight($img); + $height += $this->minute->iTitleVertMargin; + } + if( $this->hour->iShowLabels ) { + $height += $this->hour->GetFontHeight($img); + $height += $this->hour->iTitleVertMargin; + } + if( $this->day->iShowLabels ) { + $height += $this->day->GetFontHeight($img); + $height += $this->day->iTitleVertMargin; + } + if( $this->week->iShowLabels ) { + $height += $this->week->GetFontHeight($img); + $height += $this->week->iTitleVertMargin; + } + if( $this->month->iShowLabels ) { + $height += $this->month->GetFontHeight($img); + $height += $this->month->iTitleVertMargin; + } + if( $this->year->iShowLabels ) { + $height += $this->year->GetFontHeight($img); + $height += $this->year->iTitleVertMargin; + } + return $height; + } + + // Get width (in pixels) for a single day + function GetDayWidth() { + return ($this->GetPlotWidth()-$this->iLabelWidth+1)/$this->GetNumberOfDays(); + } + + // Get width (in pixels) for a single hour + function GetHourWidth() { + return $this->GetDayWidth() / 24 ; + } + + function GetMinuteWidth() { + return $this->GetHourWidth() / 60 ; + } + + // Nuber of days in a year + function GetNumDaysInYear($aYear) { + if( $this->IsLeap($aYear) ) + return 366; + else + return 365; + } + + // Get week number + function GetWeekNbr($aDate,$aSunStart=true) { + // We can't use the internal strftime() since it gets the weeknumber + // wrong since it doesn't follow ISO on all systems since this is + // system linrary dependent. + // Even worse is that this works differently if we are on a Windows + // or UNIX box (it even differs between UNIX boxes how strftime() + // is natively implemented) + // + // Credit to Nicolas Hoizey for this elegant + // version of Week Nbr calculation. + + $day = $this->NormalizeDate($aDate) ; + if( $aSunStart ) + $day += 60*60*24; + + /*------------------------------------------------------------------------- + According to ISO-8601 : + "Week 01 of a year is per definition the first week that has the Thursday in this year, + which is equivalent to the week that contains the fourth day of January. + In other words, the first week of a new year is the week that has the majority of its + days in the new year." + + Be carefull, with PHP, -3 % 7 = -3, instead of 4 !!! + + day of year = date("z", $day) + 1 + offset to thursday = 3 - (date("w", $day) + 6) % 7 + first thursday of year = 1 + (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $day)))) % 7 + week number = (thursday's day of year - first thursday's day of year) / 7 + 1 + ---------------------------------------------------------------------------*/ + + $thursday = $day + 60 * 60 * 24 * (3 - (date("w", $day) + 6) % 7); // take week's thursday + $week = 1 + (date("z", $thursday) - (11 - date("w", mktime(0, 0, 0, 1, 1, date("Y", $thursday)))) % 7) / 7; + + return $week; + } + + // Is year a leap year? + function IsLeap($aYear) { + // Is the year a leap year? + //$year = 0+date("Y",$aDate); + if( $aYear % 4 == 0) + if( !($aYear % 100 == 0) || ($aYear % 400 == 0) ) + return true; + return false; + } + + // Get current year + function GetYear($aDate) { + return 0+Date("Y",$aDate); + } + + // Return number of days in a year + function GetNumDaysInMonth($aMonth,$aYear) { + $days=array(31,28,31,30,31,30,31,31,30,31,30,31); + $daysl=array(31,29,31,30,31,30,31,31,30,31,30,31); + if( $this->IsLeap($aYear)) + return $daysl[$aMonth]; + else + return $days[$aMonth]; + } + + // Get day in month + function GetMonthDayNbr($aDate) { + return 0+strftime("%d",$aDate); + } + + // Get day in year + function GetYearDayNbr($aDate) { + return 0+strftime("%j",$aDate); + } + + // Get month number + function GetMonthNbr($aDate) { + return 0+strftime("%m",$aDate); + } + + // Translate a date to screen coordinates (horizontal scale) + function TranslateDate($aDate) { + // + // In order to handle the problem with Daylight savings time + // the scale written with equal number of seconds per day beginning + // with the start date. This means that we "cement" the state of + // DST as it is in the start date. If later the scale includes the + // switchover date (depends on the locale) we need to adjust back + // if the date we try to translate has a different DST status since + // we would otherwise be off by one hour. + $aDate = $this->NormalizeDate($aDate); + $tmp = localtime($aDate); + $cloc = $tmp[8]; + $tmp = localtime($this->iStartDate); + $sloc = $tmp[8]; + $offset = 0; + if( $sloc != $cloc) { + if( $sloc ) + $offset = 3600; + else + $offset = -3600; + } + $img=$this->iImg; + return ($aDate-$this->iStartDate-$offset)/SECPERDAY*$this->GetDayWidth()+$img->left_margin+$this->iLabelWidth;; + } + + // Get screen coordinatesz for the vertical position for a bar + function TranslateVertPos($aPos) { + $img=$this->iImg; + $ph=$this->iAvailableHeight; + if( $aPos > $this->iVertLines ) + JpGraphError::RaiseL(6015,$aPos); +// 'Illegal vertical position %d' + if( $this->iVertLayout == GANTT_EVEN ) { + // Position the top bar at 1 vert spacing from the scale + return round($img->top_margin + $this->iVertHeaderSize + ($aPos+1)*$this->iVertSpacing); + } + else { + // position the top bar at 1/2 a vert spacing from the scale + return round($img->top_margin + $this->iVertHeaderSize + $this->iTopPlotMargin + ($aPos+1)*$this->iVertSpacing); + } + } + + // What is the vertical spacing? + function GetVertSpacing() { + return $this->iVertSpacing; + } + + // Convert a date to timestamp + function NormalizeDate($aDate) { + if( $aDate === false ) return false; + if( is_string($aDate) ) { + $t = strtotime($aDate); + if( $t === FALSE || $t === -1 ) { + JpGraphError::RaiseL(6016,$aDate); +//("Date string ($aDate) specified for Gantt activity can not be interpretated. Please make sure it is a valid time string, e.g. 2005-04-23 13:30"); + } + return $t; + } + elseif( is_int($aDate) || is_float($aDate) ) + return $aDate; + else + JpGraphError::RaiseL(6017,$aDate); +//Unknown date format in GanttScale ($aDate)."); + } + + + // Convert a time string to minutes + + function TimeToMinutes($aTimeString) { + // Split in hours and minutes + $pos=strpos($aTimeString,':'); + $minint=60; + if( $pos === false ) { + $hourint = $aTimeString; + $minint = 0; + } + else { + $hourint = floor(substr($aTimeString,0,$pos)); + $minint = floor(substr($aTimeString,$pos+1)); + } + $minint += 60 * $hourint; + return $minint; + } + + // Stroke the day scale (including gridlines) + function StrokeMinutes($aYCoord,$getHeight=false) { + $img=$this->iImg; + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->minute->iShowLabels ) { + $img->SetFont($this->minute->iFFamily,$this->minute->iFStyle,$this->minute->iFSize); + $yb = $yt + $img->GetFontHeight() + + $this->minute->iTitleVertMargin + $this->minute->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb = $img->width-$img->right_margin+1; + $img->SetColor($this->minute->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $day = date('w',$this->iStartDate); + $minint = $this->minute->GetIntervall() ; + + if( 60 % $minint !== 0 ) { + JpGraphError::RaiseL(6018,$minint); +//'Intervall for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an intervall of '.$minint.' minutes.'); + } + + + $n = 60 / $minint; + $datestamp = $this->iStartDate; + $width = $this->GetHourWidth() / $n ; + if( $width < 8 ) { + // TO small width to draw minute scale + JpGraphError::RaiseL(6019,$width); +//('The available width ('.$width.') for minutes are to small for this scale to be displayed. Please use auto-sizing or increase the width of the graph.'); + } + + $nh = ceil(24*60 / $this->TimeToMinutes($this->hour->GetIntervall()) ); + $nd = $this->GetNumberOfDays(); + // Convert to intervall to seconds + $minint *= 60; + for($j=0; $j < $nd; ++$j, $day += 1, $day %= 7) { + for( $k=0; $k < $nh; ++$k ) { + for($i=0; $i < $n ;++$i, $x+=$width, $datestamp += $minint ) { + if( $day==6 || $day==0 ) { + + $img->PushColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground ) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$yb-$this->day->iFrameWeight); + $img->PopColor(); + + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + + switch( $this->minute->iStyle ) { + case MINUTESTYLE_CUSTOM: + $txt = date($this->minute->iLabelFormStr,$datestamp); + break; + case MINUTESTYLE_MM: + default: + // 15 + $txt = date('i',$datestamp); + break; + } + $img->StrokeText(round($x+$width/2),round($yb-$this->minute->iTitleVertMargin),$txt); + + // FIXME: The rounding problem needs to be solved properly ... + // + // Fix a rounding problem the wrong way .. + // If we also have hour scale then don't draw the firsta or last + // gridline since that will be overwritten by the hour scale gridline if such exists. + // However, due to the propagation of rounding of the 'x+=width' term in the loop + // this might sometimes be one pixel of so we fix this by not drawing it. + // The proper way to fix it would be to re-calculate the scale for each step and + // not using the additive term. + if( !(($i == $n || $i==0) && $this->hour->iShowLabels && $this->hour->grid->iShow) ) { + $img->SetColor($this->minute->grid->iColor); + $img->SetLineWeight($this->minute->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->minute->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + } + } + } + } + $img->SetColor($this->minute->iFrameColor); + $img->SetLineWeight($this->minute->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + // Stroke the day scale (including gridlines) + function StrokeHours($aYCoord,$getHeight=false) { + $img=$this->iImg; + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->hour->iShowLabels ) { + $img->SetFont($this->hour->iFFamily,$this->hour->iFStyle,$this->hour->iFSize); + $yb = $yt + $img->GetFontHeight() + + $this->hour->iTitleVertMargin + $this->hour->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb = $img->width-$img->right_margin+1; + $img->SetColor($this->hour->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $tmp = $this->hour->GetIntervall() ; + $minint = $this->TimeToMinutes($tmp); + if( 1440 % $minint !== 0 ) { + JpGraphError::RaiseL(6020,$tmp); +//('Intervall for hours must divide the day evenly, e.g. 0:30, 1:00, 1:30, 4:00 etc. You have specified an intervall of '.$tmp); + } + + $n = ceil(24*60 / $minint ); + $datestamp = $this->iStartDate; + $day = date('w',$this->iStartDate); + $doback = !$this->minute->iShowLabels; + $width = $this->GetDayWidth() / $n ; + for($j=0; $j < $this->GetNumberOfDays(); ++$j, $day += 1,$day %= 7) { + for($i=0; $i < $n ;++$i, $x+=$width) { + if( $day==6 || $day==0 ) { + + $img->PushColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground && $doback ) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight,$x+$width,$yb-$this->day->iFrameWeight); + $img->PopColor(); + + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + + switch( $this->hour->iStyle ) { + case HOURSTYLE_HMAMPM: + // 1:35pm + $txt = date('g:ia',$datestamp); + break; + case HOURSTYLE_H24: + // 13 + $txt = date('H',$datestamp); + break; + case HOURSTYLE_HAMPM: + $txt = date('ga',$datestamp); + break; + case HOURSTYLE_CUSTOM: + $txt = date($this->hour->iLabelFormStr,$datestamp); + break; + case HOURSTYLE_HM24: + default: + $txt = date('H:i',$datestamp); + break; + } + $img->StrokeText(round($x+$width/2),round($yb-$this->hour->iTitleVertMargin),$txt); + $img->SetColor($this->hour->grid->iColor); + $img->SetLineWeight($this->hour->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->hour->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + //$datestamp += $minint*60 + $datestamp = mktime(date('H',$datestamp),date('i',$datestamp)+$minint,0, + date("m",$datestamp),date("d",$datestamp)+1,date("Y",$datestamp)); + + } + } + $img->SetColor($this->hour->iFrameColor); + $img->SetLineWeight($this->hour->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + + // Stroke the day scale (including gridlines) + function StrokeDays($aYCoord,$getHeight=false) { + $img=$this->iImg; + $daywidth=$this->GetDayWidth(); + $xt=$img->left_margin+$this->iLabelWidth; + $yt=$aYCoord+$img->top_margin; + if( $this->day->iShowLabels ) { + $img->SetFont($this->day->iFFamily,$this->day->iFStyle,$this->day->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->day->iTitleVertMargin + $this->day->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $xb=$img->width-$img->right_margin+1; + $img->SetColor($this->day->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $x = $xt; + $img->SetTextAlign("center"); + $day = date('w',$this->iStartDate); + $datestamp = $this->iStartDate; + + $doback = !($this->hour->iShowLabels || $this->minute->iShowLabels); + + setlocale(LC_TIME,$this->iDateLocale->iLocale); + + for($i=0; $i < $this->GetNumberOfDays(); ++$i, $x+=$daywidth, $day += 1,$day %= 7) { + if( $day==6 || $day==0 ) { + $img->SetColor($this->day->iWeekendBackgroundColor); + if( $this->iUsePlotWeekendBackground && $doback) + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight, + $x+$daywidth,$img->height-$img->bottom_margin); + else + $img->FilledRectangle($x,$yt+$this->day->iFrameWeight, + $x+$daywidth,$yb-$this->day->iFrameWeight); + } + + $mn = strftime('%m',$datestamp); + if( $mn[0]=='0' ) + $mn = $mn[1]; + + switch( $this->day->iStyle ) { + case DAYSTYLE_LONG: + // "Monday" + $txt = strftime('%A',$datestamp); + break; + case DAYSTYLE_SHORT: + // "Mon" + $txt = strftime('%a',$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE1: + // "Mon 23/6" + $txt = strftime('%a %d/'.$mn,$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE2: + // "Mon 23 Jun" + $txt = strftime('%a %d %b',$datestamp); + break; + case DAYSTYLE_SHORTDAYDATE3: + // "Mon 23 Jun 2003" + $txt = strftime('%a %d %b %Y',$datestamp); + break; + case DAYSTYLE_LONGDAYDATE1: + // "Monday 23 Jun" + $txt = strftime('%A %d %b',$datestamp); + break; + case DAYSTYLE_LONGDAYDATE2: + // "Monday 23 Jun 2003" + $txt = strftime('%A %d %b %Y',$datestamp); + break; + case DAYSTYLE_SHORTDATE1: + // "23/6" + $txt = strftime('%d/'.$mn,$datestamp); + break; + case DAYSTYLE_SHORTDATE2: + // "23 Jun" + $txt = strftime('%d %b',$datestamp); + break; + case DAYSTYLE_SHORTDATE3: + // "Mon 23" + $txt = strftime('%a %d',$datestamp); + break; + case DAYSTYLE_SHORTDATE4: + // "23" + $txt = strftime('%d',$datestamp); + break; + case DAYSTYLE_CUSTOM: + // Custom format + $txt = strftime($this->day->iLabelFormStr,$datestamp); + break; + case DAYSTYLE_ONELETTER: + default: + // "M" + $txt = strftime('%A',$datestamp); + $txt = strtoupper($txt[0]); + break; + } + + if( $day==0 ) + $img->SetColor($this->day->iSundayTextColor); + else + $img->SetColor($this->day->iTextColor); + $img->StrokeText(round($x+$daywidth/2+1), + round($yb-$this->day->iTitleVertMargin),$txt); + $img->SetColor($this->day->grid->iColor); + $img->SetLineWeight($this->day->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->day->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $datestamp = mktime(0,0,0,date("m",$datestamp),date("d",$datestamp)+1,date("Y",$datestamp)); + //$datestamp += SECPERDAY; + + } + $img->SetColor($this->day->iFrameColor); + $img->SetLineWeight($this->day->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb - $img->top_margin; + } + return $aYCoord; + } + + // Stroke week header and grid + function StrokeWeeks($aYCoord,$getHeight=false) { + if( $this->week->iShowLabels ) { + $img=$this->iImg; + $yt=$aYCoord+$img->top_margin; + $img->SetFont($this->week->iFFamily,$this->week->iFStyle,$this->week->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->week->iTitleVertMargin + $this->week->iFrameWeight; + + if( $getHeight ) { + return $yb - $img->top_margin; + } + + $xt=$img->left_margin+$this->iLabelWidth; + $weekwidth=$this->GetDayWidth()*7; + $wdays=$this->iDateLocale->GetDayAbb(); + $xb=$img->width-$img->right_margin+1; + $week = $this->iStartDate; + $weeknbr=$this->GetWeekNbr($week); + $img->SetColor($this->week->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $img->SetColor($this->week->grid->iColor); + $x = $xt; + if( $this->week->iStyle==WEEKSTYLE_WNBR ) { + $img->SetTextAlign("center"); + $txtOffset = $weekwidth/2+1; + } + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 || + $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $img->SetTextAlign("left"); + $txtOffset = 3; + } + else + JpGraphError::RaiseL(6021); +//("Unknown formatting style for week."); + + for($i=0; $i<$this->GetNumberOfDays()/7; ++$i, $x+=$weekwidth) { + $img->PushColor($this->week->iTextColor); + + if( $this->week->iStyle==WEEKSTYLE_WNBR ) + $txt = sprintf($this->week->iLabelFormStr,$weeknbr); + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY || + $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR ) + $txt = date("j/n",$week); + elseif( $this->week->iStyle==WEEKSTYLE_FIRSTDAY2 || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $monthnbr = date("n",$week)-1; + $shortmonth = $this->iDateLocale->GetShortMonthName($monthnbr); + $txt = Date("j",$week)." ".$shortmonth; + } + + if( $this->week->iStyle==WEEKSTYLE_FIRSTDAYWNBR || + $this->week->iStyle==WEEKSTYLE_FIRSTDAY2WNBR ) { + $w = sprintf($this->week->iLabelFormStr,$weeknbr); + $txt .= ' '.$w; + } + + $img->StrokeText(round($x+$txtOffset), + round($yb-$this->week->iTitleVertMargin),$txt); + + $week = strtotime('+7 day',$week); + $weeknbr = $this->GetWeekNbr($week); + $img->PopColor(); + $img->SetLineWeight($this->week->grid->iWeight); + $img->Line($x,$yt,$x,$yb); + $this->week->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + } + $img->SetColor($this->week->iFrameColor); + $img->SetLineWeight($this->week->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Format the mont scale header string + function GetMonthLabel($aMonthNbr,$year) { + $sn = $this->iDateLocale->GetShortMonthName($aMonthNbr); + $ln = $this->iDateLocale->GetLongMonthName($aMonthNbr); + switch($this->month->iStyle) { + case MONTHSTYLE_SHORTNAME: + $m=$sn; + break; + case MONTHSTYLE_LONGNAME: + $m=$ln; + break; + case MONTHSTYLE_SHORTNAMEYEAR2: + $m=$sn." '".substr("".$year,2); + break; + case MONTHSTYLE_SHORTNAMEYEAR4: + $m=$sn." ".$year; + break; + case MONTHSTYLE_LONGNAMEYEAR2: + $m=$ln." '".substr("".$year,2); + break; + case MONTHSTYLE_LONGNAMEYEAR4: + $m=$ln." ".$year; + break; + case MONTHSTYLE_FIRSTLETTER: + $m=$sn[0]; + break; + } + return $m; + } + + // Stroke month scale and gridlines + function StrokeMonths($aYCoord,$getHeight=false) { + if( $this->month->iShowLabels ) { + $img=$this->iImg; + $img->SetFont($this->month->iFFamily,$this->month->iFStyle,$this->month->iFSize); + $yt=$aYCoord+$img->top_margin; + $yb=$yt + $img->GetFontHeight() + $this->month->iTitleVertMargin + $this->month->iFrameWeight; + if( $getHeight ) { + return $yb - $img->top_margin; + } + $monthnbr = $this->GetMonthNbr($this->iStartDate)-1; + $xt=$img->left_margin+$this->iLabelWidth; + $xb=$img->width-$img->right_margin+1; + + $img->SetColor($this->month->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + + $img->SetLineWeight($this->month->grid->iWeight); + $img->SetColor($this->month->iTextColor); + $year = 0+strftime("%Y",$this->iStartDate); + $img->SetTextAlign("center"); + if( $this->GetMonthNbr($this->iStartDate) == $this->GetMonthNbr($this->iEndDate) + && $this->GetYear($this->iStartDate)==$this->GetYear($this->iEndDate) ) { + $monthwidth=$this->GetDayWidth()*($this->GetMonthDayNbr($this->iEndDate) - $this->GetMonthDayNbr($this->iStartDate) + 1); + } + else { + $monthwidth=$this->GetDayWidth()*($this->GetNumDaysInMonth($monthnbr,$year)-$this->GetMonthDayNbr($this->iStartDate)+1); + } + // Is it enough space to stroke the first month? + $monthName = $this->GetMonthLabel($monthnbr,$year); + if( $monthwidth >= 1.2*$img->GetTextWidth($monthName) ) { + $img->SetColor($this->month->iTextColor); + $img->StrokeText(round($xt+$monthwidth/2+1), + round($yb-$this->month->iTitleVertMargin), + $monthName); + } + $x = $xt + $monthwidth; + while( $x < $xb ) { + $img->SetColor($this->month->grid->iColor); + $img->Line($x,$yt,$x,$yb); + $this->month->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $monthnbr++; + if( $monthnbr==12 ) { + $monthnbr=0; + $year++; + } + $monthName = $this->GetMonthLabel($monthnbr,$year); + $monthwidth=$this->GetDayWidth()*$this->GetNumDaysInMonth($monthnbr,$year); + if( $x + $monthwidth < $xb ) + $w = $monthwidth; + else + $w = $xb-$x; + if( $w >= 1.2*$img->GetTextWidth($monthName) ) { + $img->SetColor($this->month->iTextColor); + $img->StrokeText(round($x+$w/2+1), + round($yb-$this->month->iTitleVertMargin),$monthName); + } + $x += $monthwidth; + } + $img->SetColor($this->month->iFrameColor); + $img->SetLineWeight($this->month->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Stroke year scale and gridlines + function StrokeYears($aYCoord,$getHeight=false) { + if( $this->year->iShowLabels ) { + $img=$this->iImg; + $yt=$aYCoord+$img->top_margin; + $img->SetFont($this->year->iFFamily,$this->year->iFStyle,$this->year->iFSize); + $yb=$yt + $img->GetFontHeight() + $this->year->iTitleVertMargin + $this->year->iFrameWeight; + + if( $getHeight ) { + return $yb - $img->top_margin; + } + + $xb=$img->width-$img->right_margin+1; + $xt=$img->left_margin+$this->iLabelWidth; + $year = $this->GetYear($this->iStartDate); + $img->SetColor($this->year->iBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $img->SetLineWeight($this->year->grid->iWeight); + $img->SetTextAlign("center"); + if( $year == $this->GetYear($this->iEndDate) ) + $yearwidth=$this->GetDayWidth()*($this->GetYearDayNbr($this->iEndDate)-$this->GetYearDayNbr($this->iStartDate)+1); + else + $yearwidth=$this->GetDayWidth()*($this->GetNumDaysInYear($year)-$this->GetYearDayNbr($this->iStartDate)+1); + + // The space for a year must be at least 20% bigger than the actual text + // so we allow 10% margin on each side + if( $yearwidth >= 1.20*$img->GetTextWidth("".$year) ) { + $img->SetColor($this->year->iTextColor); + $img->StrokeText(round($xt+$yearwidth/2+1), + round($yb-$this->year->iTitleVertMargin), + $year); + } + $x = $xt + $yearwidth; + while( $x < $xb ) { + $img->SetColor($this->year->grid->iColor); + $img->Line($x,$yt,$x,$yb); + $this->year->grid->Stroke($img,$x,$yb,$x,$img->height-$img->bottom_margin); + $year += 1; + $yearwidth=$this->GetDayWidth()*$this->GetNumDaysInYear($year); + if( $x + $yearwidth < $xb ) + $w = $yearwidth; + else + $w = $xb-$x; + if( $w >= 1.2*$img->GetTextWidth("".$year) ) { + $img->SetColor($this->year->iTextColor); + $img->StrokeText(round($x+$w/2+1), + round($yb-$this->year->iTitleVertMargin), + $year); + } + $x += $yearwidth; + } + $img->SetColor($this->year->iFrameColor); + $img->SetLineWeight($this->year->iFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + return $yb-$img->top_margin; + } + return $aYCoord; + } + + // Stroke table title (upper left corner) + function StrokeTableHeaders($aYBottom) { + $img=$this->iImg; + $xt=$img->left_margin; + $yt=$img->top_margin; + $xb=$xt+$this->iLabelWidth; + $yb=$aYBottom+$img->top_margin; + + if( $this->tableTitle->iShow ) { + $img->SetColor($this->iTableHeaderBackgroundColor); + $img->FilledRectangle($xt,$yt,$xb,$yb); + $this->tableTitle->Align("center","top"); + $this->tableTitle->Stroke($img,$xt+($xb-$xt)/2+1,$yt+2); + $img->SetColor($this->iTableHeaderFrameColor); + $img->SetLineWeight($this->iTableHeaderFrameWeight); + $img->Rectangle($xt,$yt,$xb,$yb); + } + + $this->actinfo->Stroke($img,$xt,$yt,$xb,$yb,$this->tableTitle->iShow); + + + // Draw the horizontal dividing line + $this->dividerh->Stroke($img,$xt,$yb,$img->width-$img->right_margin,$yb); + + // Draw the vertical dividing line + // We do the width "manually" since we want the line only to grow + // to the left + $fancy = $this->divider->iStyle == 'fancy' ; + if( $fancy ) { + $this->divider->iStyle = 'solid'; + } + + $tmp = $this->divider->iWeight; + $this->divider->iWeight=1; + $y = $img->height-$img->bottom_margin; + for($i=0; $i < $tmp; ++$i ) { + $this->divider->Stroke($img,$xb-$i,$yt,$xb-$i,$y); + } + + // Should we draw "fancy" divider + if( $fancy ) { + $img->SetLineWeight(1); + $img->SetColor($this->iTableHeaderFrameColor); + $img->Line($xb,$yt,$xb,$y); + $img->Line($xb-$tmp+1,$yt,$xb-$tmp+1,$y); + $img->SetColor('white'); + $img->Line($xb-$tmp+2,$yt,$xb-$tmp+2,$y); + } + } + + // Main entry point to stroke scale + function Stroke() { + if( !$this->IsRangeSet() ) + JpGraphError::RaiseL(6022); +//("Gantt scale has not been specified."); + $img=$this->iImg; + + // If minutes are displayed then hour interval must be 1 + if( $this->IsDisplayMinute() && $this->hour->GetIntervall() > 1 ) { + JpGraphError::RaiseL(6023); +//('If you display both hour and minutes the hour intervall must be 1 (Otherwise it doesn\' make sense to display minutes).'); + } + + // Stroke all headers. As argument we supply the offset from the + // top which depends on any previous headers + + // First find out the height of each header + $offy=$this->StrokeYears(0,true); + $offm=$this->StrokeMonths($offy,true); + $offw=$this->StrokeWeeks($offm,true); + $offd=$this->StrokeDays($offw,true); + $offh=$this->StrokeHours($offd,true); + $offmin=$this->StrokeMinutes($offh,true); + + + // ... then we can stroke them in the "backwards order to ensure that + // the larger scale gridlines is stroked over the smaller scale gridline + $this->StrokeMinutes($offh); + $this->StrokeHours($offd); + $this->StrokeDays($offw); + $this->StrokeWeeks($offm); + $this->StrokeMonths($offy); + $this->StrokeYears(0); + + // Now when we now the oaverall size of the scale headers + // we can stroke the overall table headers + $this->StrokeTableHeaders($offmin); + + // Now we can calculate the correct scaling factor for each vertical position + $this->iAvailableHeight = $img->height - $img->top_margin - $img->bottom_margin - $offd; + $this->iVertHeaderSize = $offmin; + if( $this->iVertSpacing == -1 ) + $this->iVertSpacing = $this->iAvailableHeight / $this->iVertLines; + } +} + + +//=================================================== +// CLASS GanttConstraint +// Just a structure to store all the values for a constraint +//=================================================== +class GanttConstraint { + var $iConstrainType; + var $iConstrainRow; + var $iConstrainColor; + var $iConstrainArrowSize; + var $iConstrainArrowType; + +//--------------- +// CONSTRUCTOR + function GanttConstraint($aRow,$aType,$aColor,$aArrowSize,$aArrowType){ + $this->iConstrainType = $aType; + $this->iConstrainRow = $aRow; + $this->iConstrainColor=$aColor; + $this->iConstrainArrowSize=$aArrowSize; + $this->iConstrainArrowType=$aArrowType; + } +} + + +//=================================================== +// CLASS GanttPlotObject +// The common signature for a Gantt object +//=================================================== +class GanttPlotObject { + var $iVPos=0; // Vertical position + var $iLabelLeftMargin=2; // Title margin + var $iStart=""; // Start date + var $title,$caption; + var $iCaptionMargin=5; + var $csimarea='',$csimtarget='',$csimwintarget='',$csimalt=''; + + var $constraints = array(); + var $iConstrainPos=array(); + + function GanttPlotObject() { + $this->title = new TextProperty(); + $this->title->Align("left","center"); + $this->caption = new TextProperty(); + } + + function GetCSIMArea() { + return $this->csimarea; + } + + function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') { + if( !is_string($aTarget) ) { + $tv = substr(var_export($aTarget,true),0,40); + JpGraphError::RaiseL(6024,$tv); +//('CSIM Target must be specified as a string.'."\nStart of target is:\n$tv"); + } + if( !is_string($aAlt) ) { + $tv = substr(var_export($aAlt,true),0,40); + JpGraphError::RaiseL(6025,$tv); +//('CSIM Alt text must be specified as a string.'."\nStart of alt text is:\n$tv"); + } + + $this->csimtarget=$aTarget; + $this->csimwintarget=$aWinTarget; + $this->csimalt=$aAlt; + } + + function SetCSIMAlt($aAlt) { + if( !is_string($aAlt) ) { + $tv = substr(var_export($aAlt,true),0,40); + JpGraphError::RaiseL(6025,$tv); +//('CSIM Alt text must be specified as a string.'."\nStart of alt text is:\n$tv"); + } + $this->csimalt=$aAlt; + } + + function SetConstrain($aRow,$aType,$aColor='black',$aArrowSize=ARROW_S2,$aArrowType=ARROWT_SOLID) { + $this->constraints[] = new GanttConstraint($aRow, $aType, $aColor, $aArrowSize, $aArrowType); + } + + function SetConstrainPos($xt,$yt,$xb,$yb) { + $this->iConstrainPos = array($xt,$yt,$xb,$yb); + } + + /* + function GetConstrain() { + return array($this->iConstrainRow,$this->iConstrainType); + } + */ + + function GetMinDate() { + return $this->iStart; + } + + function GetMaxDate() { + return $this->iStart; + } + + function SetCaptionMargin($aMarg) { + $this->iCaptionMargin=$aMarg; + } + + function GetAbsHeight(&$aImg) { + return 0; + } + + function GetLineNbr() { + return $this->iVPos; + } + + function SetLabelLeftMargin($aOff) { + $this->iLabelLeftMargin=$aOff; + } + + function StrokeActInfo(&$aImg,$aScale,$aYPos) { + $cols=array(); + $aScale->actinfo->GetColStart($aImg,$cols,true); + $this->title->Stroke($aImg,$cols,$aYPos); + } +} + +//=================================================== +// CLASS Progress +// Holds parameters for the progress indicator +// displyed within a bar +//=================================================== +class Progress { + var $iProgress=-1, $iColor="black", $iFillColor='black'; + var $iPattern=GANTT_SOLID; + var $iDensity=98, $iHeight=0.65; + + function Set($aProg) { + if( $aProg < 0.0 || $aProg > 1.0 ) + JpGraphError::RaiseL(6027); +//("Progress value must in range [0, 1]"); + $this->iProgress = $aProg; + } + + function SetPattern($aPattern,$aColor="blue",$aDensity=98) { + $this->iPattern = $aPattern; + $this->iColor = $aColor; + $this->iDensity = $aDensity; + } + + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + function SetHeight($aHeight) { + $this->iHeight = $aHeight; + } +} + +DEFINE('GANTT_HGRID1',0); +DEFINE('GANTT_HGRID2',1); + +//=================================================== +// CLASS HorizontalGridLine +// Responsible for drawinf horizontal gridlines and filled alternatibg rows +//=================================================== +class HorizontalGridLine { + var $iGraph=NULL; + var $iRowColor1 = '', $iRowColor2 = ''; + var $iShow=false; + var $line=null; + var $iStart=0; // 0=from left margin, 1=just along header + + function HorizontalGridLine() { + $this->line = new LineProperty(); + $this->line->SetColor('gray@0.4'); + $this->line->SetStyle('dashed'); + } + + function Show($aShow=true) { + $this->iShow = $aShow; + } + + function SetRowFillColor($aColor1,$aColor2='') { + $this->iRowColor1 = $aColor1; + $this->iRowColor2 = $aColor2; + } + + function SetStart($aStart) { + $this->iStart = $aStart; + } + + function Stroke(&$aImg,$aScale) { + + if( ! $this->iShow ) return; + + // Get horizontal width of line + /* + $limst = $aScale->iStartDate; + $limen = $aScale->iEndDate; + $xt = round($aScale->TranslateDate($aScale->iStartDate)); + $xb = round($aScale->TranslateDate($limen)); + */ + + if( $this->iStart === 0 ) { + $xt = $aImg->left_margin-1; + } + else { + $xt = round($aScale->TranslateDate($aScale->iStartDate))+1; + } + + $xb = $aImg->width-$aImg->right_margin; + + $yt = round($aScale->TranslateVertPos(0)); + $yb = round($aScale->TranslateVertPos(1)); + $height = $yb - $yt; + + // Loop around for all lines in the chart + for($i=0; $i < $aScale->iVertLines; ++$i ) { + $yb = $yt - $height; + $this->line->Stroke($aImg,$xt,$yb,$xb,$yb); + if( $this->iRowColor1 !== '' ) { + if( $i % 2 == 0 ) { + $aImg->PushColor($this->iRowColor1); + $aImg->FilledRectangle($xt,$yt,$xb,$yb); + $aImg->PopColor(); + } + elseif( $this->iRowColor2 !== '' ) { + $aImg->PushColor($this->iRowColor2); + $aImg->FilledRectangle($xt,$yt,$xb,$yb); + $aImg->PopColor(); + } + } + $yt = round($aScale->TranslateVertPos($i+1)); + } + $yb = $yt - $height; + $this->line->Stroke($aImg,$xt,$yb,$xb,$yb); + } +} + + +//=================================================== +// CLASS GanttBar +// Responsible for formatting individual gantt bars +//=================================================== +class GanttBar extends GanttPlotObject { + var $iEnd; + var $iHeightFactor=0.5; + var $iFillColor="white",$iFrameColor="black"; + var $iShadow=false,$iShadowColor="darkgray",$iShadowWidth=1,$iShadowFrame="black"; + var $iPattern=GANTT_RDIAG,$iPatternColor="blue",$iPatternDensity=95; + var $leftMark,$rightMark; + var $progress; +//--------------- +// CONSTRUCTOR + function GanttBar($aPos,$aLabel,$aStart,$aEnd,$aCaption="",$aHeightFactor=0.6) { + parent::GanttPlotObject(); + $this->iStart = $aStart; + // Is the end date given as a date or as number of days added to start date? + if( is_string($aEnd) ) { + // If end date has been specified without a time we will asssume + // end date is at the end of that date + if( strpos($aEnd,':') === false ) + $this->iEnd = strtotime($aEnd)+SECPERDAY-1; + else + $this->iEnd = $aEnd; + } + elseif(is_int($aEnd) || is_float($aEnd) ) + $this->iEnd = strtotime($aStart)+round($aEnd*SECPERDAY); + $this->iVPos = $aPos; + $this->iHeightFactor = $aHeightFactor; + $this->title->Set($aLabel); + $this->caption = new TextProperty($aCaption); + $this->caption->Align("left","center"); + $this->leftMark =new PlotMark(); + $this->leftMark->Hide(); + $this->rightMark=new PlotMark(); + $this->rightMark->Hide(); + $this->progress = new Progress(); + } + +//--------------- +// PUBLIC METHODS + function SetShadow($aShadow=true,$aColor="gray") { + $this->iShadow=$aShadow; + $this->iShadowColor=$aColor; + } + + function GetMaxDate() { + return $this->iEnd; + } + + function SetHeight($aHeight) { + $this->iHeightFactor = $aHeight; + } + + function SetColor($aColor) { + $this->iFrameColor = $aColor; + } + + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + function GetAbsHeight(&$aImg) { + if( is_int($this->iHeightFactor) || $this->leftMark->show || $this->rightMark->show ) { + $m=-1; + if( is_int($this->iHeightFactor) ) + $m = $this->iHeightFactor; + if( $this->leftMark->show ) + $m = max($m,$this->leftMark->width*2); + if( $this->rightMark->show ) + $m = max($m,$this->rightMark->width*2); + return $m; + } + else + return -1; + } + + function SetPattern($aPattern,$aColor="blue",$aDensity=95) { + $this->iPattern = $aPattern; + $this->iPatternColor = $aColor; + $this->iPatternDensity = $aDensity; + } + + function Stroke(&$aImg,$aScale) { + $factory = new RectPatternFactory(); + $prect = $factory->Create($this->iPattern,$this->iPatternColor); + $prect->SetDensity($this->iPatternDensity); + + // If height factor is specified as a float between 0,1 then we take it as meaning + // percetage of the scale width between horizontal line. + // If it is an integer > 1 we take it to mean the absolute height in pixels + if( $this->iHeightFactor > -0.0 && $this->iHeightFactor <= 1.1) + $vs = $aScale->GetVertSpacing()*$this->iHeightFactor; + elseif(is_int($this->iHeightFactor) && $this->iHeightFactor>2 && $this->iHeightFactor < 200 ) + $vs = $this->iHeightFactor; + else + JpGraphError::RaiseL(6028,$this->iHeightFactor); +//("Specified height (".$this->iHeightFactor.") for gantt bar is out of range."); + + // Clip date to min max dates to show + $st = $aScale->NormalizeDate($this->iStart); + $en = $aScale->NormalizeDate($this->iEnd); + + + $limst = max($st,$aScale->iStartDate); + $limen = min($en,$aScale->iEndDate); + + $xt = round($aScale->TranslateDate($limst)); + $xb = round($aScale->TranslateDate($limen)); + $yt = round($aScale->TranslateVertPos($this->iVPos)-$vs-($aScale->GetVertSpacing()/2-$vs/2)); + $yb = round($aScale->TranslateVertPos($this->iVPos)-($aScale->GetVertSpacing()/2-$vs/2)); + $middle = round($yt+($yb-$yt)/2); + $this->StrokeActInfo($aImg,$aScale,$middle); + + // CSIM for title + if( ! empty($this->title->csimtarget) ) { + $colwidth = $this->title->GetColWidth($aImg); + $colstarts=array(); + $aScale->actinfo->GetColStart($aImg,$colstarts,true); + $n = min(count($colwidth),count($this->title->csimtarget)); + for( $i=0; $i < $n; ++$i ) { + $title_xt = $colstarts[$i]; + $title_xb = $title_xt + $colwidth[$i]; + $coords = "$title_xt,$yt,$title_xb,$yt,$title_xb,$yb,$title_xt,$yb"; + + if( ! empty($this->title->csimtarget[$i]) ) { + $this->csimarea .= "title->csimtarget[$i]."\""; + + if( ! empty($this->title->csimwintarget[$i]) ) { + $this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\" "; + } + + if( ! empty($this->title->csimalt[$i]) ) { + $tmp = $this->title->csimalt[$i]; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + } + } + } + + // Check if the bar is totally outside the current scale range + if( $en < $aScale->iStartDate || $st > $aScale->iEndDate ) + return; + + + // Remember the positions for the bar + $this->SetConstrainPos($xt,$yt,$xb,$yb); + + $prect->ShowFrame(false); + $prect->SetBackground($this->iFillColor); + if( $this->iShadow ) { + $aImg->SetColor($this->iFrameColor); + $aImg->ShadowRectangle($xt,$yt,$xb,$yb,$this->iFillColor,$this->iShadowWidth,$this->iShadowColor); + $prect->SetPos(new Rectangle($xt+1,$yt+1,$xb-$xt-$this->iShadowWidth-2,$yb-$yt-$this->iShadowWidth-2)); + $prect->Stroke($aImg); + } + else { + $prect->SetPos(new Rectangle($xt,$yt,$xb-$xt+1,$yb-$yt+1)); + $prect->Stroke($aImg); + $aImg->SetColor($this->iFrameColor); + $aImg->Rectangle($xt,$yt,$xb,$yb); + } + + // CSIM for bar + if( ! empty($this->csimtarget) ) { + + $coords = "$xt,$yt,$xb,$yt,$xb,$yb,$xt,$yb"; + $this->csimarea .= "csimtarget."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimarea .= " target=\"".$this->csimwintarget."\" "; + } + + if( $this->csimalt != '' ) { + $tmp = $this->csimalt; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + } + + // Draw progress bar inside activity bar + if( $this->progress->iProgress > 0 ) { + + $xtp = $aScale->TranslateDate($st); + $xbp = $aScale->TranslateDate($en); + $len = ($xbp-$xtp)*$this->progress->iProgress; + + $endpos = $xtp+$len; + + // Is the the progress bar visible after the start date? + if( $endpos > $xt ) { + + // Take away the length of the progress that is not visible (before the start date) + $len -= ($xt-$xtp); + + // Is the the progress bar visible after the start date? + if( $xtp < $xt ) + $xtp = $xt; + + // Make sure that the progess bar doesn't extend over the end date + if( $xtp+$len-1 > $xb ) + $len = $xb - $xtp ; + + $prog = $factory->Create($this->progress->iPattern,$this->progress->iColor); + $prog->SetDensity($this->progress->iDensity); + $prog->SetBackground($this->progress->iFillColor); + $barheight = ($yb-$yt+1); + if( $this->iShadow ) + $barheight -= $this->iShadowWidth; + $progressheight = floor($barheight*$this->progress->iHeight); + $marg = ceil(($barheight-$progressheight)/2); + $pos = new Rectangle($xtp,$yt + $marg, $len,$barheight-2*$marg); + $prog->SetPos($pos); + $prog->Stroke($aImg); + } + } + + // We don't plot the end mark if the bar has been capped + if( $limst == $st ) { + $y = $middle; + // We treat the RIGHT and LEFT triangle mark a little bi + // special so that these marks are placed right under the + // bar. + if( $this->leftMark->GetType() == MARK_LEFTTRIANGLE ) { + $y = $yb ; + } + $this->leftMark->Stroke($aImg,$xt,$y); + } + if( $limen == $en ) { + $y = $middle; + // We treat the RIGHT and LEFT triangle mark a little bi + // special so that these marks are placed right under the + // bar. + if( $this->rightMark->GetType() == MARK_RIGHTTRIANGLE ) { + $y = $yb ; + } + $this->rightMark->Stroke($aImg,$xb,$y); + + $margin = $this->iCaptionMargin; + if( $this->rightMark->show ) + $margin += $this->rightMark->GetWidth(); + $this->caption->Stroke($aImg,$xb+$margin,$middle); + } + } +} + +//=================================================== +// CLASS MileStone +// Responsible for formatting individual milestones +//=================================================== +class MileStone extends GanttPlotObject { + var $mark; + +//--------------- +// CONSTRUCTOR + function MileStone($aVPos,$aLabel,$aDate,$aCaption="") { + GanttPlotObject::GanttPlotObject(); + $this->caption->Set($aCaption); + $this->caption->Align("left","center"); + $this->caption->SetFont(FF_FONT1,FS_BOLD); + $this->title->Set($aLabel); + $this->title->SetColor("darkred"); + $this->mark = new PlotMark(); + $this->mark->SetWidth(10); + $this->mark->SetType(MARK_DIAMOND); + $this->mark->SetColor("darkred"); + $this->mark->SetFillColor("darkred"); + $this->iVPos = $aVPos; + $this->iStart = $aDate; + } + +//--------------- +// PUBLIC METHODS + + function GetAbsHeight(&$aImg) { + return max($this->title->GetHeight($aImg),$this->mark->GetWidth()); + } + + function Stroke(&$aImg,$aScale) { + // Put the mark in the middle at the middle of the day + $d = $aScale->NormalizeDate($this->iStart)+SECPERDAY/2; + $x = $aScale->TranslateDate($d); + $y = $aScale->TranslateVertPos($this->iVPos)-($aScale->GetVertSpacing()/2); + + $this->StrokeActInfo($aImg,$aScale,$y); + + // CSIM for title + if( ! empty($this->title->csimtarget) ) { + + $yt = round($y - $this->title->GetHeight($aImg)/2); + $yb = round($y + $this->title->GetHeight($aImg)/2); + + $colwidth = $this->title->GetColWidth($aImg); + $colstarts=array(); + $aScale->actinfo->GetColStart($aImg,$colstarts,true); + $n = min(count($colwidth),count($this->title->csimtarget)); + for( $i=0; $i < $n; ++$i ) { + $title_xt = $colstarts[$i]; + $title_xb = $title_xt + $colwidth[$i]; + $coords = "$title_xt,$yt,$title_xb,$yt,$title_xb,$yb,$title_xt,$yb"; + + if( !empty($this->title->csimtarget[$i]) ) { + + $this->csimarea .= "title->csimtarget[$i]."\""; + + if( !empty($this->title->csimwintarget[$i]) ) { + $this->csimarea .= "target=\"".$this->title->csimwintarget[$i]."\""; + } + + if( ! empty($this->title->csimalt[$i]) ) { + $tmp = $this->title->csimalt[$i]; + $this->csimarea .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimarea .= " />\n"; + + } + } + } + + if( $d < $aScale->iStartDate || $d > $aScale->iEndDate ) + return; + + // Remember the coordinates for any constrains linking to + // this milestone + $w = $this->mark->GetWidth()/2; + $this->SetConstrainPos($x,round($y-$w),$x,round($y+$w)); + + // Setup CSIM + if( $this->csimtarget != '' ) { + $this->mark->SetCSIMTarget( $this->csimtarget ); + $this->mark->SetCSIMAlt( $this->csimalt ); + } + + $this->mark->Stroke($aImg,$x,$y); + $this->caption->Stroke($aImg,$x+$this->mark->width/2+$this->iCaptionMargin,$y); + + $this->csimarea .= $this->mark->GetCSIMAreas(); + } +} + + +//=================================================== +// CLASS GanttVLine +// Responsible for formatting individual milestones +//=================================================== + +class TextPropertyBelow extends TextProperty { + function TextPropertyBelow($aTxt='') { + parent::TextProperty($aTxt); + } + + function GetColWidth(&$aImg,$margin) { + // Since we are not stroking the title in the columns + // but rather under the graph we want this to return 0. + return array(0); + } +} + +class GanttVLine extends GanttPlotObject { + + var $iLine,$title_margin=3; + var $iDayOffset=1; // Defult to right edge of day + +//--------------- +// CONSTRUCTOR + function GanttVLine($aDate,$aTitle="",$aColor="black",$aWeight=3,$aStyle="dashed") { + GanttPlotObject::GanttPlotObject(); + $this->iLine = new LineProperty(); + $this->iLine->SetColor($aColor); + $this->iLine->SetWeight($aWeight); + $this->iLine->SetStyle($aStyle); + $this->iStart = $aDate; + $this->title = new TextPropertyBelow(); + $this->title->Set($aTitle); + } + +//--------------- +// PUBLIC METHODS + + function SetDayOffset($aOff=0.5) { + if( $aOff < 0.0 || $aOff > 1.0 ) + JpGraphError::RaiseL(6029); +//("Offset for vertical line must be in range [0,1]"); + $this->iDayOffset = $aOff; + } + + function SetTitleMargin($aMarg) { + $this->title_margin = $aMarg; + } + + function Stroke(&$aImg,$aScale) { + $d = $aScale->NormalizeDate($this->iStart); + if( $d < $aScale->iStartDate || $d > $aScale->iEndDate ) + return; + if($this->iDayOffset != 0.0) + $d += 24*60*60*$this->iDayOffset; + $x = $aScale->TranslateDate($d); + $y1 = $aScale->iVertHeaderSize+$aImg->top_margin; + $y2 = $aImg->height - $aImg->bottom_margin; + $this->iLine->Stroke($aImg,$x,$y1,$x,$y2); + $this->title->Align("center","top"); + $this->title->Stroke($aImg,$x,$y2+$this->title_margin); + } +} + +//=================================================== +// CLASS LinkArrow +// Handles the drawing of a an arrow +//=================================================== +class LinkArrow { + var $ix,$iy; + var $isizespec = array( + array(2,3),array(3,5),array(3,8),array(6,15),array(8,22)); + var $iDirection=ARROW_DOWN,$iType=ARROWT_SOLID,$iSize=ARROW_S2; + var $iColor='black'; + + function LinkArrow($x,$y,$aDirection,$aType=ARROWT_SOLID,$aSize=ARROW_S2) { + $this->iDirection = $aDirection; + $this->iType = $aType; + $this->iSize = $aSize; + $this->ix = $x; + $this->iy = $y; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetSize($aSize) { + $this->iSize = $aSize; + } + + function SetType($aType) { + $this->iType = $aType; + } + + function Stroke(&$aImg) { + list($dx,$dy) = $this->isizespec[$this->iSize]; + $x = $this->ix; + $y = $this->iy; + switch ( $this->iDirection ) { + case ARROW_DOWN: + $c = array($x,$y,$x-$dx,$y-$dy,$x+$dx,$y-$dy,$x,$y); + break; + case ARROW_UP: + $c = array($x,$y,$x-$dx,$y+$dy,$x+$dx,$y+$dy,$x,$y); + break; + case ARROW_LEFT: + $c = array($x,$y,$x+$dy,$y-$dx,$x+$dy,$y+$dx,$x,$y); + break; + case ARROW_RIGHT: + $c = array($x,$y,$x-$dy,$y-$dx,$x-$dy,$y+$dx,$x,$y); + break; + default: + JpGraphError::RaiseL(6030); +//('Unknown arrow direction for link.'); + die(); + break; + } + $aImg->SetColor($this->iColor); + switch( $this->iType ) { + case ARROWT_SOLID: + $aImg->FilledPolygon($c); + break; + case ARROWT_OPEN: + $aImg->Polygon($c); + break; + default: + JpGraphError::RaiseL(6031); +//('Unknown arrow type for link.'); + die(); + break; + } + } +} + +//=================================================== +// CLASS GanttLink +// Handles the drawing of a link line between 2 points +//=================================================== + +class GanttLink { + var $ix1,$ix2,$iy1,$iy2; + var $iPathType=2,$iPathExtend=15; + var $iColor='black',$iWeight=1; + var $iArrowSize=ARROW_S2,$iArrowType=ARROWT_SOLID; + + function GanttLink($x1=0,$y1=0,$x2=0,$y2=0) { + $this->ix1 = $x1; + $this->ix2 = $x2; + $this->iy1 = $y1; + $this->iy2 = $y2; + } + + function SetPos($x1,$y1,$x2,$y2) { + $this->ix1 = $x1; + $this->ix2 = $x2; + $this->iy1 = $y1; + $this->iy2 = $y2; + } + + function SetPath($aPath) { + $this->iPathType = $aPath; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function SetArrow($aSize,$aType=ARROWT_SOLID) { + $this->iArrowSize = $aSize; + $this->iArrowType = $aType; + } + + function SetWeight($aWeight) { + $this->iWeight = $aWeight; + } + + function Stroke(&$aImg) { + // The way the path for the arrow is constructed is partly based + // on some heuristics. This is not an exact science but draws the + // path in a way that, for me, makes esthetic sence. For example + // if the start and end activities are very close we make a small + // detour to endter the target horixontally. If there are more + // space between axctivities then no suh detour is made and the + // target is "hit" directly vertical. I have tried to keep this + // simple. no doubt this could become almost infinitive complex + // and have some real AI. Feel free to modify this. + // This will no-doubt be tweaked as times go by. One design aim + // is to avoid having the user choose what types of arrow + // he wants. + + // The arrow is drawn between (x1,y1) to (x2,y2) + $x1 = $this->ix1 ; + $x2 = $this->ix2 ; + $y1 = $this->iy1 ; + $y2 = $this->iy2 ; + + // Depending on if the target is below or above we have to + // handle thi different. + if( $y2 > $y1 ) { + $arrowtype = ARROW_DOWN; + $midy = round(($y2-$y1)/2+$y1); + if( $x2 > $x1 ) { + switch ( $this->iPathType ) { + case 0: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 1: + case 2: + case 3: + $c = array($x1,$y1,$x2,$y1,$x2,$y2); + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); +//('Internal error: Unknown path type (='.$this->iPathType .') specified for link.'); + exit(1); + break; + } + } + else { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 2: + // Always extend out horizontally a bit from the first point + // If we draw a link back in time (end to start) and the bars + // are very close we also change the path so it comes in from + // the left on the activity + $c = array($x1,$y1,$x1+$this->iPathExtend,$y1, + $x1+$this->iPathExtend,$midy, + $x2,$midy,$x2,$y2); + break; + case 3: + if( $y2-$midy < 6 ) { + $c = array($x1,$y1,$x1,$midy, + $x2-$this->iPathExtend,$midy, + $x2-$this->iPathExtend,$y2, + $x2,$y2); + $arrowtype = ARROW_RIGHT; + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); +//('Internal error: Unknown path type specified for link.'); + exit(1); + break; + } + } + $arrow = new LinkArrow($x2,$y2,$arrowtype); + } + else { + // Y2 < Y1 + $arrowtype = ARROW_UP; + $midy = round(($y1-$y2)/2+$y2); + if( $x2 > $x1 ) { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 3: + if( $midy-$y2 < 8 ) { + $arrowtype = ARROW_RIGHT; + $c = array($x1,$y1,$x1,$y2,$x2,$y2); + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); +//('Internal error: Unknown path type specified for link.'); + break; + } + } + else { + switch ( $this->iPathType ) { + case 0: + case 1: + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + break; + case 2: + // Always extend out horizontally a bit from the first point + $c = array($x1,$y1,$x1+$this->iPathExtend,$y1, + $x1+$this->iPathExtend,$midy, + $x2,$midy,$x2,$y2); + break; + case 3: + if( $midy-$y2 < 16 ) { + $arrowtype = ARROW_RIGHT; + $c = array($x1,$y1,$x1,$midy,$x2-$this->iPathExtend,$midy, + $x2-$this->iPathExtend,$y2, + $x2,$y2); + } + else { + $c = array($x1,$y1,$x1,$midy,$x2,$midy,$x2,$y2); + } + break; + default: + JpGraphError::RaiseL(6032,$this->iPathType); +//('Internal error: Unknown path type specified for link.'); + break; + } + } + $arrow = new LinkArrow($x2,$y2,$arrowtype); + } + $aImg->SetColor($this->iColor); + $aImg->SetLineWeight($this->iWeight); + $aImg->Polygon($c); + $aImg->SetLineWeight(1); + $arrow->SetColor($this->iColor); + $arrow->SetSize($this->iArrowSize); + $arrow->SetType($this->iArrowType); + $arrow->Stroke($aImg); + } +} + +// +?> diff --git a/html/includes/jpgraph/src/jpgraph_gb2312.php b/html/includes/jpgraph/src/jpgraph_gb2312.php new file mode 100644 index 0000000000..729a02c728 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_gb2312.php @@ -0,0 +1,1552 @@ + 12288, 8482 => 12289, 8483 => 12290, 8484 => 12539, 8485 => 713, + 8486 => 711, 8487 => 168, 8488 => 12291, 8489 => 12293, 8490 => 8213, + 8491 => 65374, 8492 => 8214, 8493 => 8230, 8494 => 8216, 8495 => 8217, + 8496 => 8220, 8497 => 8221, 8498 => 12308, 8499 => 12309, 8500 => 12296, + 8501 => 12297, 8502 => 12298, 8503 => 12299, 8504 => 12300, 8505 => 12301, + 8506 => 12302, 8507 => 12303, 8508 => 12310, 8509 => 12311, 8510 => 12304, + 8511 => 12305, 8512 => 177, 8513 => 215, 8514 => 247, 8515 => 8758, + 8516 => 8743, 8517 => 8744, 8518 => 8721, 8519 => 8719, 8520 => 8746, + 8521 => 8745, 8522 => 8712, 8523 => 8759, 8524 => 8730, 8525 => 8869, + 8526 => 8741, 8527 => 8736, 8528 => 8978, 8529 => 8857, 8530 => 8747, + 8531 => 8750, 8532 => 8801, 8533 => 8780, 8534 => 8776, 8535 => 8765, + 8536 => 8733, 8537 => 8800, 8538 => 8814, 8539 => 8815, 8540 => 8804, + 8541 => 8805, 8542 => 8734, 8543 => 8757, 8544 => 8756, 8545 => 9794, + 8546 => 9792, 8547 => 176, 8548 => 8242, 8549 => 8243, 8550 => 8451, + 8551 => 65284, 8552 => 164, 8553 => 65504, 8554 => 65505, 8555 => 8240, + 8556 => 167, 8557 => 8470, 8558 => 9734, 8559 => 9733, 8560 => 9675, + 8561 => 9679, 8562 => 9678, 8563 => 9671, 8564 => 9670, 8565 => 9633, + 8566 => 9632, 8567 => 9651, 8568 => 9650, 8569 => 8251, 8570 => 8594, + 8571 => 8592, 8572 => 8593, 8573 => 8595, 8574 => 12307, 8753 => 9352, + 8754 => 9353, 8755 => 9354, 8756 => 9355, 8757 => 9356, 8758 => 9357, + 8759 => 9358, 8760 => 9359, 8761 => 9360, 8762 => 9361, 8763 => 9362, + 8764 => 9363, 8765 => 9364, 8766 => 9365, 8767 => 9366, 8768 => 9367, + 8769 => 9368, 8770 => 9369, 8771 => 9370, 8772 => 9371, 8773 => 9332, + 8774 => 9333, 8775 => 9334, 8776 => 9335, 8777 => 9336, 8778 => 9337, + 8779 => 9338, 8780 => 9339, 8781 => 9340, 8782 => 9341, 8783 => 9342, + 8784 => 9343, 8785 => 9344, 8786 => 9345, 8787 => 9346, 8788 => 9347, + 8789 => 9348, 8790 => 9349, 8791 => 9350, 8792 => 9351, 8793 => 9312, + 8794 => 9313, 8795 => 9314, 8796 => 9315, 8797 => 9316, 8798 => 9317, + 8799 => 9318, 8800 => 9319, 8801 => 9320, 8802 => 9321, 8805 => 12832, + 8806 => 12833, 8807 => 12834, 8808 => 12835, 8809 => 12836, 8810 => 12837, + 8811 => 12838, 8812 => 12839, 8813 => 12840, 8814 => 12841, 8817 => 8544, + 8818 => 8545, 8819 => 8546, 8820 => 8547, 8821 => 8548, 8822 => 8549, + 8823 => 8550, 8824 => 8551, 8825 => 8552, 8826 => 8553, 8827 => 8554, + 8828 => 8555, 8993 => 65281, 8994 => 65282, 8995 => 65283, 8996 => 65509, + 8997 => 65285, 8998 => 65286, 8999 => 65287, 9000 => 65288, 9001 => 65289, + 9002 => 65290, 9003 => 65291, 9004 => 65292, 9005 => 65293, 9006 => 65294, + 9007 => 65295, 9008 => 65296, 9009 => 65297, 9010 => 65298, 9011 => 65299, + 9012 => 65300, 9013 => 65301, 9014 => 65302, 9015 => 65303, 9016 => 65304, + 9017 => 65305, 9018 => 65306, 9019 => 65307, 9020 => 65308, 9021 => 65309, + 9022 => 65310, 9023 => 65311, 9024 => 65312, 9025 => 65313, 9026 => 65314, + 9027 => 65315, 9028 => 65316, 9029 => 65317, 9030 => 65318, 9031 => 65319, + 9032 => 65320, 9033 => 65321, 9034 => 65322, 9035 => 65323, 9036 => 65324, + 9037 => 65325, 9038 => 65326, 9039 => 65327, 9040 => 65328, 9041 => 65329, + 9042 => 65330, 9043 => 65331, 9044 => 65332, 9045 => 65333, 9046 => 65334, + 9047 => 65335, 9048 => 65336, 9049 => 65337, 9050 => 65338, 9051 => 65339, + 9052 => 65340, 9053 => 65341, 9054 => 65342, 9055 => 65343, 9056 => 65344, + 9057 => 65345, 9058 => 65346, 9059 => 65347, 9060 => 65348, 9061 => 65349, + 9062 => 65350, 9063 => 65351, 9064 => 65352, 9065 => 65353, 9066 => 65354, + 9067 => 65355, 9068 => 65356, 9069 => 65357, 9070 => 65358, 9071 => 65359, + 9072 => 65360, 9073 => 65361, 9074 => 65362, 9075 => 65363, 9076 => 65364, + 9077 => 65365, 9078 => 65366, 9079 => 65367, 9080 => 65368, 9081 => 65369, + 9082 => 65370, 9083 => 65371, 9084 => 65372, 9085 => 65373, 9086 => 65507, + 9249 => 12353, 9250 => 12354, 9251 => 12355, 9252 => 12356, 9253 => 12357, + 9254 => 12358, 9255 => 12359, 9256 => 12360, 9257 => 12361, 9258 => 12362, + 9259 => 12363, 9260 => 12364, 9261 => 12365, 9262 => 12366, 9263 => 12367, + 9264 => 12368, 9265 => 12369, 9266 => 12370, 9267 => 12371, 9268 => 12372, + 9269 => 12373, 9270 => 12374, 9271 => 12375, 9272 => 12376, 9273 => 12377, + 9274 => 12378, 9275 => 12379, 9276 => 12380, 9277 => 12381, 9278 => 12382, + 9279 => 12383, 9280 => 12384, 9281 => 12385, 9282 => 12386, 9283 => 12387, + 9284 => 12388, 9285 => 12389, 9286 => 12390, 9287 => 12391, 9288 => 12392, + 9289 => 12393, 9290 => 12394, 9291 => 12395, 9292 => 12396, 9293 => 12397, + 9294 => 12398, 9295 => 12399, 9296 => 12400, 9297 => 12401, 9298 => 12402, + 9299 => 12403, 9300 => 12404, 9301 => 12405, 9302 => 12406, 9303 => 12407, + 9304 => 12408, 9305 => 12409, 9306 => 12410, 9307 => 12411, 9308 => 12412, + 9309 => 12413, 9310 => 12414, 9311 => 12415, 9312 => 12416, 9313 => 12417, + 9314 => 12418, 9315 => 12419, 9316 => 12420, 9317 => 12421, 9318 => 12422, + 9319 => 12423, 9320 => 12424, 9321 => 12425, 9322 => 12426, 9323 => 12427, + 9324 => 12428, 9325 => 12429, 9326 => 12430, 9327 => 12431, 9328 => 12432, + 9329 => 12433, 9330 => 12434, 9331 => 12435, 9505 => 12449, 9506 => 12450, + 9507 => 12451, 9508 => 12452, 9509 => 12453, 9510 => 12454, 9511 => 12455, + 9512 => 12456, 9513 => 12457, 9514 => 12458, 9515 => 12459, 9516 => 12460, + 9517 => 12461, 9518 => 12462, 9519 => 12463, 9520 => 12464, 9521 => 12465, + 9522 => 12466, 9523 => 12467, 9524 => 12468, 9525 => 12469, 9526 => 12470, + 9527 => 12471, 9528 => 12472, 9529 => 12473, 9530 => 12474, 9531 => 12475, + 9532 => 12476, 9533 => 12477, 9534 => 12478, 9535 => 12479, 9536 => 12480, + 9537 => 12481, 9538 => 12482, 9539 => 12483, 9540 => 12484, 9541 => 12485, + 9542 => 12486, 9543 => 12487, 9544 => 12488, 9545 => 12489, 9546 => 12490, + 9547 => 12491, 9548 => 12492, 9549 => 12493, 9550 => 12494, 9551 => 12495, + 9552 => 12496, 9553 => 12497, 9554 => 12498, 9555 => 12499, 9556 => 12500, + 9557 => 12501, 9558 => 12502, 9559 => 12503, 9560 => 12504, 9561 => 12505, + 9562 => 12506, 9563 => 12507, 9564 => 12508, 9565 => 12509, 9566 => 12510, + 9567 => 12511, 9568 => 12512, 9569 => 12513, 9570 => 12514, 9571 => 12515, + 9572 => 12516, 9573 => 12517, 9574 => 12518, 9575 => 12519, 9576 => 12520, + 9577 => 12521, 9578 => 12522, 9579 => 12523, 9580 => 12524, 9581 => 12525, + 9582 => 12526, 9583 => 12527, 9584 => 12528, 9585 => 12529, 9586 => 12530, + 9587 => 12531, 9588 => 12532, 9589 => 12533, 9590 => 12534, 9761 => 913, + 9762 => 914, 9763 => 915, 9764 => 916, 9765 => 917, 9766 => 918, + 9767 => 919, 9768 => 920, 9769 => 921, 9770 => 922, 9771 => 923, + 9772 => 924, 9773 => 925, 9774 => 926, 9775 => 927, 9776 => 928, + 9777 => 929, 9778 => 931, 9779 => 932, 9780 => 933, 9781 => 934, + 9782 => 935, 9783 => 936, 9784 => 937, 9793 => 945, 9794 => 946, + 9795 => 947, 9796 => 948, 9797 => 949, 9798 => 950, 9799 => 951, + 9800 => 952, 9801 => 953, 9802 => 954, 9803 => 955, 9804 => 956, + 9805 => 957, 9806 => 958, 9807 => 959, 9808 => 960, 9809 => 961, + 9810 => 963, 9811 => 964, 9812 => 965, 9813 => 966, 9814 => 967, + 9815 => 968, 9816 => 969, 10017 => 1040, 10018 => 1041, 10019 => 1042, + 10020 => 1043, 10021 => 1044, 10022 => 1045, 10023 => 1025, 10024 => 1046, + 10025 => 1047, 10026 => 1048, 10027 => 1049, 10028 => 1050, 10029 => 1051, + 10030 => 1052, 10031 => 1053, 10032 => 1054, 10033 => 1055, 10034 => 1056, + 10035 => 1057, 10036 => 1058, 10037 => 1059, 10038 => 1060, 10039 => 1061, + 10040 => 1062, 10041 => 1063, 10042 => 1064, 10043 => 1065, 10044 => 1066, + 10045 => 1067, 10046 => 1068, 10047 => 1069, 10048 => 1070, 10049 => 1071, + 10065 => 1072, 10066 => 1073, 10067 => 1074, 10068 => 1075, 10069 => 1076, + 10070 => 1077, 10071 => 1105, 10072 => 1078, 10073 => 1079, 10074 => 1080, + 10075 => 1081, 10076 => 1082, 10077 => 1083, 10078 => 1084, 10079 => 1085, + 10080 => 1086, 10081 => 1087, 10082 => 1088, 10083 => 1089, 10084 => 1090, + 10085 => 1091, 10086 => 1092, 10087 => 1093, 10088 => 1094, 10089 => 1095, + 10090 => 1096, 10091 => 1097, 10092 => 1098, 10093 => 1099, 10094 => 1100, + 10095 => 1101, 10096 => 1102, 10097 => 1103, 10273 => 257, 10274 => 225, + 10275 => 462, 10276 => 224, 10277 => 275, 10278 => 233, 10279 => 283, + 10280 => 232, 10281 => 299, 10282 => 237, 10283 => 464, 10284 => 236, + 10285 => 333, 10286 => 243, 10287 => 466, 10288 => 242, 10289 => 363, + 10290 => 250, 10291 => 468, 10292 => 249, 10293 => 470, 10294 => 472, + 10295 => 474, 10296 => 476, 10297 => 252, 10298 => 234, 10309 => 12549, + 10310 => 12550, 10311 => 12551, 10312 => 12552, 10313 => 12553, 10314 => 12554, + 10315 => 12555, 10316 => 12556, 10317 => 12557, 10318 => 12558, 10319 => 12559, + 10320 => 12560, 10321 => 12561, 10322 => 12562, 10323 => 12563, 10324 => 12564, + 10325 => 12565, 10326 => 12566, 10327 => 12567, 10328 => 12568, 10329 => 12569, + 10330 => 12570, 10331 => 12571, 10332 => 12572, 10333 => 12573, 10334 => 12574, + 10335 => 12575, 10336 => 12576, 10337 => 12577, 10338 => 12578, 10339 => 12579, + 10340 => 12580, 10341 => 12581, 10342 => 12582, 10343 => 12583, 10344 => 12584, + 10345 => 12585, 10532 => 9472, 10533 => 9473, 10534 => 9474, 10535 => 9475, + 10536 => 9476, 10537 => 9477, 10538 => 9478, 10539 => 9479, 10540 => 9480, + 10541 => 9481, 10542 => 9482, 10543 => 9483, 10544 => 9484, 10545 => 9485, + 10546 => 9486, 10547 => 9487, 10548 => 9488, 10549 => 9489, 10550 => 9490, + 10551 => 9491, 10552 => 9492, 10553 => 9493, 10554 => 9494, 10555 => 9495, + 10556 => 9496, 10557 => 9497, 10558 => 9498, 10559 => 9499, 10560 => 9500, + 10561 => 9501, 10562 => 9502, 10563 => 9503, 10564 => 9504, 10565 => 9505, + 10566 => 9506, 10567 => 9507, 10568 => 9508, 10569 => 9509, 10570 => 9510, + 10571 => 9511, 10572 => 9512, 10573 => 9513, 10574 => 9514, 10575 => 9515, + 10576 => 9516, 10577 => 9517, 10578 => 9518, 10579 => 9519, 10580 => 9520, + 10581 => 9521, 10582 => 9522, 10583 => 9523, 10584 => 9524, 10585 => 9525, + 10586 => 9526, 10587 => 9527, 10588 => 9528, 10589 => 9529, 10590 => 9530, + 10591 => 9531, 10592 => 9532, 10593 => 9533, 10594 => 9534, 10595 => 9535, + 10596 => 9536, 10597 => 9537, 10598 => 9538, 10599 => 9539, 10600 => 9540, + 10601 => 9541, 10602 => 9542, 10603 => 9543, 10604 => 9544, 10605 => 9545, + 10606 => 9546, 10607 => 9547, 12321 => 21834, 12322 => 38463, 12323 => 22467, + 12324 => 25384, 12325 => 21710, 12326 => 21769, 12327 => 21696, 12328 => 30353, + 12329 => 30284, 12330 => 34108, 12331 => 30702, 12332 => 33406, 12333 => 30861, + 12334 => 29233, 12335 => 38552, 12336 => 38797, 12337 => 27688, 12338 => 23433, + 12339 => 20474, 12340 => 25353, 12341 => 26263, 12342 => 23736, 12343 => 33018, + 12344 => 26696, 12345 => 32942, 12346 => 26114, 12347 => 30414, 12348 => 20985, + 12349 => 25942, 12350 => 29100, 12351 => 32753, 12352 => 34948, 12353 => 20658, + 12354 => 22885, 12355 => 25034, 12356 => 28595, 12357 => 33453, 12358 => 25420, + 12359 => 25170, 12360 => 21485, 12361 => 21543, 12362 => 31494, 12363 => 20843, + 12364 => 30116, 12365 => 24052, 12366 => 25300, 12367 => 36299, 12368 => 38774, + 12369 => 25226, 12370 => 32793, 12371 => 22365, 12372 => 38712, 12373 => 32610, + 12374 => 29240, 12375 => 30333, 12376 => 26575, 12377 => 30334, 12378 => 25670, + 12379 => 20336, 12380 => 36133, 12381 => 25308, 12382 => 31255, 12383 => 26001, + 12384 => 29677, 12385 => 25644, 12386 => 25203, 12387 => 33324, 12388 => 39041, + 12389 => 26495, 12390 => 29256, 12391 => 25198, 12392 => 25292, 12393 => 20276, + 12394 => 29923, 12395 => 21322, 12396 => 21150, 12397 => 32458, 12398 => 37030, + 12399 => 24110, 12400 => 26758, 12401 => 27036, 12402 => 33152, 12403 => 32465, + 12404 => 26834, 12405 => 30917, 12406 => 34444, 12407 => 38225, 12408 => 20621, + 12409 => 35876, 12410 => 33502, 12411 => 32990, 12412 => 21253, 12413 => 35090, + 12414 => 21093, 12577 => 34180, 12578 => 38649, 12579 => 20445, 12580 => 22561, + 12581 => 39281, 12582 => 23453, 12583 => 25265, 12584 => 25253, 12585 => 26292, + 12586 => 35961, 12587 => 40077, 12588 => 29190, 12589 => 26479, 12590 => 30865, + 12591 => 24754, 12592 => 21329, 12593 => 21271, 12594 => 36744, 12595 => 32972, + 12596 => 36125, 12597 => 38049, 12598 => 20493, 12599 => 29384, 12600 => 22791, + 12601 => 24811, 12602 => 28953, 12603 => 34987, 12604 => 22868, 12605 => 33519, + 12606 => 26412, 12607 => 31528, 12608 => 23849, 12609 => 32503, 12610 => 29997, + 12611 => 27893, 12612 => 36454, 12613 => 36856, 12614 => 36924, 12615 => 40763, + 12616 => 27604, 12617 => 37145, 12618 => 31508, 12619 => 24444, 12620 => 30887, + 12621 => 34006, 12622 => 34109, 12623 => 27605, 12624 => 27609, 12625 => 27606, + 12626 => 24065, 12627 => 24199, 12628 => 30201, 12629 => 38381, 12630 => 25949, + 12631 => 24330, 12632 => 24517, 12633 => 36767, 12634 => 22721, 12635 => 33218, + 12636 => 36991, 12637 => 38491, 12638 => 38829, 12639 => 36793, 12640 => 32534, + 12641 => 36140, 12642 => 25153, 12643 => 20415, 12644 => 21464, 12645 => 21342, + 12646 => 36776, 12647 => 36777, 12648 => 36779, 12649 => 36941, 12650 => 26631, + 12651 => 24426, 12652 => 33176, 12653 => 34920, 12654 => 40150, 12655 => 24971, + 12656 => 21035, 12657 => 30250, 12658 => 24428, 12659 => 25996, 12660 => 28626, + 12661 => 28392, 12662 => 23486, 12663 => 25672, 12664 => 20853, 12665 => 20912, + 12666 => 26564, 12667 => 19993, 12668 => 31177, 12669 => 39292, 12670 => 28851, + 12833 => 30149, 12834 => 24182, 12835 => 29627, 12836 => 33760, 12837 => 25773, + 12838 => 25320, 12839 => 38069, 12840 => 27874, 12841 => 21338, 12842 => 21187, + 12843 => 25615, 12844 => 38082, 12845 => 31636, 12846 => 20271, 12847 => 24091, + 12848 => 33334, 12849 => 33046, 12850 => 33162, 12851 => 28196, 12852 => 27850, + 12853 => 39539, 12854 => 25429, 12855 => 21340, 12856 => 21754, 12857 => 34917, + 12858 => 22496, 12859 => 19981, 12860 => 24067, 12861 => 27493, 12862 => 31807, + 12863 => 37096, 12864 => 24598, 12865 => 25830, 12866 => 29468, 12867 => 35009, + 12868 => 26448, 12869 => 25165, 12870 => 36130, 12871 => 30572, 12872 => 36393, + 12873 => 37319, 12874 => 24425, 12875 => 33756, 12876 => 34081, 12877 => 39184, + 12878 => 21442, 12879 => 34453, 12880 => 27531, 12881 => 24813, 12882 => 24808, + 12883 => 28799, 12884 => 33485, 12885 => 33329, 12886 => 20179, 12887 => 27815, + 12888 => 34255, 12889 => 25805, 12890 => 31961, 12891 => 27133, 12892 => 26361, + 12893 => 33609, 12894 => 21397, 12895 => 31574, 12896 => 20391, 12897 => 20876, + 12898 => 27979, 12899 => 23618, 12900 => 36461, 12901 => 25554, 12902 => 21449, + 12903 => 33580, 12904 => 33590, 12905 => 26597, 12906 => 30900, 12907 => 25661, + 12908 => 23519, 12909 => 23700, 12910 => 24046, 12911 => 35815, 12912 => 25286, + 12913 => 26612, 12914 => 35962, 12915 => 25600, 12916 => 25530, 12917 => 34633, + 12918 => 39307, 12919 => 35863, 12920 => 32544, 12921 => 38130, 12922 => 20135, + 12923 => 38416, 12924 => 39076, 12925 => 26124, 12926 => 29462, 13089 => 22330, + 13090 => 23581, 13091 => 24120, 13092 => 38271, 13093 => 20607, 13094 => 32928, + 13095 => 21378, 13096 => 25950, 13097 => 30021, 13098 => 21809, 13099 => 20513, + 13100 => 36229, 13101 => 25220, 13102 => 38046, 13103 => 26397, 13104 => 22066, + 13105 => 28526, 13106 => 24034, 13107 => 21557, 13108 => 28818, 13109 => 36710, + 13110 => 25199, 13111 => 25764, 13112 => 25507, 13113 => 24443, 13114 => 28552, + 13115 => 37108, 13116 => 33251, 13117 => 36784, 13118 => 23576, 13119 => 26216, + 13120 => 24561, 13121 => 27785, 13122 => 38472, 13123 => 36225, 13124 => 34924, + 13125 => 25745, 13126 => 31216, 13127 => 22478, 13128 => 27225, 13129 => 25104, + 13130 => 21576, 13131 => 20056, 13132 => 31243, 13133 => 24809, 13134 => 28548, + 13135 => 35802, 13136 => 25215, 13137 => 36894, 13138 => 39563, 13139 => 31204, +13140 => 21507, 13141 => 30196, 13142 => 25345, 13143 => 21273, 13144 => 27744, +13145 => 36831, 13146 => 24347, 13147 => 39536, 13148 => 32827, 13149 => 40831, +13150 => 20360, 13151 => 23610, 13152 => 36196, 13153 => 32709, 13154 => 26021, +13155 => 28861, 13156 => 20805, 13157 => 20914, 13158 => 34411, 13159 => 23815, +13160 => 23456, 13161 => 25277, 13162 => 37228, 13163 => 30068, 13164 => 36364, +13165 => 31264, 13166 => 24833, 13167 => 31609, 13168 => 20167, 13169 => 32504, +13170 => 30597, 13171 => 19985, 13172 => 33261, 13173 => 21021, 13174 => 20986, +13175 => 27249, 13176 => 21416, 13177 => 36487, 13178 => 38148, 13179 => 38607, +13180 => 28353, 13181 => 38500, 13182 => 26970, 13345 => 30784, 13346 => 20648, +13347 => 30679, 13348 => 25616, 13349 => 35302, 13350 => 22788, 13351 => 25571, +13352 => 24029, 13353 => 31359, 13354 => 26941, 13355 => 20256, 13356 => 33337, +13357 => 21912, 13358 => 20018, 13359 => 30126, 13360 => 31383, 13361 => 24162, +13362 => 24202, 13363 => 38383, 13364 => 21019, 13365 => 21561, 13366 => 28810, +13367 => 25462, 13368 => 38180, 13369 => 22402, 13370 => 26149, 13371 => 26943, +13372 => 37255, 13373 => 21767, 13374 => 28147, 13375 => 32431, 13376 => 34850, +13377 => 25139, 13378 => 32496, 13379 => 30133, 13380 => 33576, 13381 => 30913, +13382 => 38604, 13383 => 36766, 13384 => 24904, 13385 => 29943, 13386 => 35789, +13387 => 27492, 13388 => 21050, 13389 => 36176, 13390 => 27425, 13391 => 32874, +13392 => 33905, 13393 => 22257, 13394 => 21254, 13395 => 20174, 13396 => 19995, +13397 => 20945, 13398 => 31895, 13399 => 37259, 13400 => 31751, 13401 => 20419, +13402 => 36479, 13403 => 31713, 13404 => 31388, 13405 => 25703, 13406 => 23828, +13407 => 20652, 13408 => 33030, 13409 => 30209, 13410 => 31929, 13411 => 28140, +13412 => 32736, 13413 => 26449, 13414 => 23384, 13415 => 23544, 13416 => 30923, +13417 => 25774, 13418 => 25619, 13419 => 25514, 13420 => 25387, 13421 => 38169, +13422 => 25645, 13423 => 36798, 13424 => 31572, 13425 => 30249, 13426 => 25171, +13427 => 22823, 13428 => 21574, 13429 => 27513, 13430 => 20643, 13431 => 25140, +13432 => 24102, 13433 => 27526, 13434 => 20195, 13435 => 36151, 13436 => 34955, +13437 => 24453, 13438 => 36910, 13601 => 24608, 13602 => 32829, 13603 => 25285, +13604 => 20025, 13605 => 21333, 13606 => 37112, 13607 => 25528, 13608 => 32966, +13609 => 26086, 13610 => 27694, 13611 => 20294, 13612 => 24814, 13613 => 28129, +13614 => 35806, 13615 => 24377, 13616 => 34507, 13617 => 24403, 13618 => 25377, +13619 => 20826, 13620 => 33633, 13621 => 26723, 13622 => 20992, 13623 => 25443, +13624 => 36424, 13625 => 20498, 13626 => 23707, 13627 => 31095, 13628 => 23548, +13629 => 21040, 13630 => 31291, 13631 => 24764, 13632 => 36947, 13633 => 30423, +13634 => 24503, 13635 => 24471, 13636 => 30340, 13637 => 36460, 13638 => 28783, +13639 => 30331, 13640 => 31561, 13641 => 30634, 13642 => 20979, 13643 => 37011, +13644 => 22564, 13645 => 20302, 13646 => 28404, 13647 => 36842, 13648 => 25932, +13649 => 31515, 13650 => 29380, 13651 => 28068, 13652 => 32735, 13653 => 23265, +13654 => 25269, 13655 => 24213, 13656 => 22320, 13657 => 33922, 13658 => 31532, +13659 => 24093, 13660 => 24351, 13661 => 36882, 13662 => 32532, 13663 => 39072, +13664 => 25474, 13665 => 28359, 13666 => 30872, 13667 => 28857, 13668 => 20856, +13669 => 38747, 13670 => 22443, 13671 => 30005, 13672 => 20291, 13673 => 30008, +13674 => 24215, 13675 => 24806, 13676 => 22880, 13677 => 28096, 13678 => 27583, +13679 => 30857, 13680 => 21500, 13681 => 38613, 13682 => 20939, 13683 => 20993, +13684 => 25481, 13685 => 21514, 13686 => 38035, 13687 => 35843, 13688 => 36300, +13689 => 29241, 13690 => 30879, 13691 => 34678, 13692 => 36845, 13693 => 35853, +13694 => 21472, 13857 => 19969, 13858 => 30447, 13859 => 21486, 13860 => 38025, +13861 => 39030, 13862 => 40718, 13863 => 38189, 13864 => 23450, 13865 => 35746, +13866 => 20002, 13867 => 19996, 13868 => 20908, 13869 => 33891, 13870 => 25026, +13871 => 21160, 13872 => 26635, 13873 => 20375, 13874 => 24683, 13875 => 20923, +13876 => 27934, 13877 => 20828, 13878 => 25238, 13879 => 26007, 13880 => 38497, +13881 => 35910, 13882 => 36887, 13883 => 30168, 13884 => 37117, 13885 => 30563, +13886 => 27602, 13887 => 29322, 13888 => 29420, 13889 => 35835, 13890 => 22581, +13891 => 30585, 13892 => 36172, 13893 => 26460, 13894 => 38208, 13895 => 32922, +13896 => 24230, 13897 => 28193, 13898 => 22930, 13899 => 31471, 13900 => 30701, +13901 => 38203, 13902 => 27573, 13903 => 26029, 13904 => 32526, 13905 => 22534, +13906 => 20817, 13907 => 38431, 13908 => 23545, 13909 => 22697, 13910 => 21544, +13911 => 36466, 13912 => 25958, 13913 => 39039, 13914 => 22244, 13915 => 38045, +13916 => 30462, 13917 => 36929, 13918 => 25479, 13919 => 21702, 13920 => 22810, +13921 => 22842, 13922 => 22427, 13923 => 36530, 13924 => 26421, 13925 => 36346, +13926 => 33333, 13927 => 21057, 13928 => 24816, 13929 => 22549, 13930 => 34558, +13931 => 23784, 13932 => 40517, 13933 => 20420, 13934 => 39069, 13935 => 35769, +13936 => 23077, 13937 => 24694, 13938 => 21380, 13939 => 25212, 13940 => 36943, +13941 => 37122, 13942 => 39295, 13943 => 24681, 13944 => 32780, 13945 => 20799, +13946 => 32819, 13947 => 23572, 13948 => 39285, 13949 => 27953, 13950 => 20108, +14113 => 36144, 14114 => 21457, 14115 => 32602, 14116 => 31567, 14117 => 20240, +14118 => 20047, 14119 => 38400, 14120 => 27861, 14121 => 29648, 14122 => 34281, +14123 => 24070, 14124 => 30058, 14125 => 32763, 14126 => 27146, 14127 => 30718, +14128 => 38034, 14129 => 32321, 14130 => 20961, 14131 => 28902, 14132 => 21453, +14133 => 36820, 14134 => 33539, 14135 => 36137, 14136 => 29359, 14137 => 39277, +14138 => 27867, 14139 => 22346, 14140 => 33459, 14141 => 26041, 14142 => 32938, +14143 => 25151, 14144 => 38450, 14145 => 22952, 14146 => 20223, 14147 => 35775, +14148 => 32442, 14149 => 25918, 14150 => 33778, 14151 => 38750, 14152 => 21857, +14153 => 39134, 14154 => 32933, 14155 => 21290, 14156 => 35837, 14157 => 21536, +14158 => 32954, 14159 => 24223, 14160 => 27832, 14161 => 36153, 14162 => 33452, +14163 => 37210, 14164 => 21545, 14165 => 27675, 14166 => 20998, 14167 => 32439, +14168 => 22367, 14169 => 28954, 14170 => 27774, 14171 => 31881, 14172 => 22859, +14173 => 20221, 14174 => 24575, 14175 => 24868, 14176 => 31914, 14177 => 20016, +14178 => 23553, 14179 => 26539, 14180 => 34562, 14181 => 23792, 14182 => 38155, +14183 => 39118, 14184 => 30127, 14185 => 28925, 14186 => 36898, 14187 => 20911, +14188 => 32541, 14189 => 35773, 14190 => 22857, 14191 => 20964, 14192 => 20315, +14193 => 21542, 14194 => 22827, 14195 => 25975, 14196 => 32932, 14197 => 23413, +14198 => 25206, 14199 => 25282, 14200 => 36752, 14201 => 24133, 14202 => 27679, +14203 => 31526, 14204 => 20239, 14205 => 20440, 14206 => 26381, 14369 => 28014, +14370 => 28074, 14371 => 31119, 14372 => 34993, 14373 => 24343, 14374 => 29995, +14375 => 25242, 14376 => 36741, 14377 => 20463, 14378 => 37340, 14379 => 26023, +14380 => 33071, 14381 => 33105, 14382 => 24220, 14383 => 33104, 14384 => 36212, +14385 => 21103, 14386 => 35206, 14387 => 36171, 14388 => 22797, 14389 => 20613, +14390 => 20184, 14391 => 38428, 14392 => 29238, 14393 => 33145, 14394 => 36127, +14395 => 23500, 14396 => 35747, 14397 => 38468, 14398 => 22919, 14399 => 32538, +14400 => 21648, 14401 => 22134, 14402 => 22030, 14403 => 35813, 14404 => 25913, +14405 => 27010, 14406 => 38041, 14407 => 30422, 14408 => 28297, 14409 => 24178, +14410 => 29976, 14411 => 26438, 14412 => 26577, 14413 => 31487, 14414 => 32925, +14415 => 36214, 14416 => 24863, 14417 => 31174, 14418 => 25954, 14419 => 36195, +14420 => 20872, 14421 => 21018, 14422 => 38050, 14423 => 32568, 14424 => 32923, +14425 => 32434, 14426 => 23703, 14427 => 28207, 14428 => 26464, 14429 => 31705, +14430 => 30347, 14431 => 39640, 14432 => 33167, 14433 => 32660, 14434 => 31957, +14435 => 25630, 14436 => 38224, 14437 => 31295, 14438 => 21578, 14439 => 21733, +14440 => 27468, 14441 => 25601, 14442 => 25096, 14443 => 40509, 14444 => 33011, +14445 => 30105, 14446 => 21106, 14447 => 38761, 14448 => 33883, 14449 => 26684, +14450 => 34532, 14451 => 38401, 14452 => 38548, 14453 => 38124, 14454 => 20010, +14455 => 21508, 14456 => 32473, 14457 => 26681, 14458 => 36319, 14459 => 32789, +14460 => 26356, 14461 => 24218, 14462 => 32697, 14625 => 22466, 14626 => 32831, +14627 => 26775, 14628 => 24037, 14629 => 25915, 14630 => 21151, 14631 => 24685, +14632 => 40858, 14633 => 20379, 14634 => 36524, 14635 => 20844, 14636 => 23467, +14637 => 24339, 14638 => 24041, 14639 => 27742, 14640 => 25329, 14641 => 36129, +14642 => 20849, 14643 => 38057, 14644 => 21246, 14645 => 27807, 14646 => 33503, +14647 => 29399, 14648 => 22434, 14649 => 26500, 14650 => 36141, 14651 => 22815, +14652 => 36764, 14653 => 33735, 14654 => 21653, 14655 => 31629, 14656 => 20272, +14657 => 27837, 14658 => 23396, 14659 => 22993, 14660 => 40723, 14661 => 21476, +14662 => 34506, 14663 => 39592, 14664 => 35895, 14665 => 32929, 14666 => 25925, +14667 => 39038, 14668 => 22266, 14669 => 38599, 14670 => 21038, 14671 => 29916, +14672 => 21072, 14673 => 23521, 14674 => 25346, 14675 => 35074, 14676 => 20054, +14677 => 25296, 14678 => 24618, 14679 => 26874, 14680 => 20851, 14681 => 23448, +14682 => 20896, 14683 => 35266, 14684 => 31649, 14685 => 39302, 14686 => 32592, +14687 => 24815, 14688 => 28748, 14689 => 36143, 14690 => 20809, 14691 => 24191, +14692 => 36891, 14693 => 29808, 14694 => 35268, 14695 => 22317, 14696 => 30789, +14697 => 24402, 14698 => 40863, 14699 => 38394, 14700 => 36712, 14701 => 39740, +14702 => 35809, 14703 => 30328, 14704 => 26690, 14705 => 26588, 14706 => 36330, +14707 => 36149, 14708 => 21053, 14709 => 36746, 14710 => 28378, 14711 => 26829, +14712 => 38149, 14713 => 37101, 14714 => 22269, 14715 => 26524, 14716 => 35065, +14717 => 36807, 14718 => 21704, 14881 => 39608, 14882 => 23401, 14883 => 28023, +14884 => 27686, 14885 => 20133, 14886 => 23475, 14887 => 39559, 14888 => 37219, +14889 => 25000, 14890 => 37039, 14891 => 38889, 14892 => 21547, 14893 => 28085, +14894 => 23506, 14895 => 20989, 14896 => 21898, 14897 => 32597, 14898 => 32752, +14899 => 25788, 14900 => 25421, 14901 => 26097, 14902 => 25022, 14903 => 24717, +14904 => 28938, 14905 => 27735, 14906 => 27721, 14907 => 22831, 14908 => 26477, +14909 => 33322, 14910 => 22741, 14911 => 22158, 14912 => 35946, 14913 => 27627, +14914 => 37085, 14915 => 22909, 14916 => 32791, 14917 => 21495, 14918 => 28009, +14919 => 21621, 14920 => 21917, 14921 => 33655, 14922 => 33743, 14923 => 26680, +14924 => 31166, 14925 => 21644, 14926 => 20309, 14927 => 21512, 14928 => 30418, +14929 => 35977, 14930 => 38402, 14931 => 27827, 14932 => 28088, 14933 => 36203, +14934 => 35088, 14935 => 40548, 14936 => 36154, 14937 => 22079, 14938 => 40657, +14939 => 30165, 14940 => 24456, 14941 => 29408, 14942 => 24680, 14943 => 21756, +14944 => 20136, 14945 => 27178, 14946 => 34913, 14947 => 24658, 14948 => 36720, +14949 => 21700, 14950 => 28888, 14951 => 34425, 14952 => 40511, 14953 => 27946, +14954 => 23439, 14955 => 24344, 14956 => 32418, 14957 => 21897, 14958 => 20399, +14959 => 29492, 14960 => 21564, 14961 => 21402, 14962 => 20505, 14963 => 21518, +14964 => 21628, 14965 => 20046, 14966 => 24573, 14967 => 29786, 14968 => 22774, +14969 => 33899, 14970 => 32993, 14971 => 34676, 14972 => 29392, 14973 => 31946, +14974 => 28246, 15137 => 24359, 15138 => 34382, 15139 => 21804, 15140 => 25252, +15141 => 20114, 15142 => 27818, 15143 => 25143, 15144 => 33457, 15145 => 21719, +15146 => 21326, 15147 => 29502, 15148 => 28369, 15149 => 30011, 15150 => 21010, +15151 => 21270, 15152 => 35805, 15153 => 27088, 15154 => 24458, 15155 => 24576, +15156 => 28142, 15157 => 22351, 15158 => 27426, 15159 => 29615, 15160 => 26707, +15161 => 36824, 15162 => 32531, 15163 => 25442, 15164 => 24739, 15165 => 21796, +15166 => 30186, 15167 => 35938, 15168 => 28949, 15169 => 28067, 15170 => 23462, +15171 => 24187, 15172 => 33618, 15173 => 24908, 15174 => 40644, 15175 => 30970, +15176 => 34647, 15177 => 31783, 15178 => 30343, 15179 => 20976, 15180 => 24822, +15181 => 29004, 15182 => 26179, 15183 => 24140, 15184 => 24653, 15185 => 35854, +15186 => 28784, 15187 => 25381, 15188 => 36745, 15189 => 24509, 15190 => 24674, +15191 => 34516, 15192 => 22238, 15193 => 27585, 15194 => 24724, 15195 => 24935, +15196 => 21321, 15197 => 24800, 15198 => 26214, 15199 => 36159, 15200 => 31229, +15201 => 20250, 15202 => 28905, 15203 => 27719, 15204 => 35763, 15205 => 35826, +15206 => 32472, 15207 => 33636, 15208 => 26127, 15209 => 23130, 15210 => 39746, +15211 => 27985, 15212 => 28151, 15213 => 35905, 15214 => 27963, 15215 => 20249, +15216 => 28779, 15217 => 33719, 15218 => 25110, 15219 => 24785, 15220 => 38669, +15221 => 36135, 15222 => 31096, 15223 => 20987, 15224 => 22334, 15225 => 22522, +15226 => 26426, 15227 => 30072, 15228 => 31293, 15229 => 31215, 15230 => 31637, +15393 => 32908, 15394 => 39269, 15395 => 36857, 15396 => 28608, 15397 => 35749, +15398 => 40481, 15399 => 23020, 15400 => 32489, 15401 => 32521, 15402 => 21513, +15403 => 26497, 15404 => 26840, 15405 => 36753, 15406 => 31821, 15407 => 38598, +15408 => 21450, 15409 => 24613, 15410 => 30142, 15411 => 27762, 15412 => 21363, +15413 => 23241, 15414 => 32423, 15415 => 25380, 15416 => 20960, 15417 => 33034, +15418 => 24049, 15419 => 34015, 15420 => 25216, 15421 => 20864, 15422 => 23395, +15423 => 20238, 15424 => 31085, 15425 => 21058, 15426 => 24760, 15427 => 27982, +15428 => 23492, 15429 => 23490, 15430 => 35745, 15431 => 35760, 15432 => 26082, +15433 => 24524, 15434 => 38469, 15435 => 22931, 15436 => 32487, 15437 => 32426, +15438 => 22025, 15439 => 26551, 15440 => 22841, 15441 => 20339, 15442 => 23478, +15443 => 21152, 15444 => 33626, 15445 => 39050, 15446 => 36158, 15447 => 30002, +15448 => 38078, 15449 => 20551, 15450 => 31292, 15451 => 20215, 15452 => 26550, +15453 => 39550, 15454 => 23233, 15455 => 27516, 15456 => 30417, 15457 => 22362, +15458 => 23574, 15459 => 31546, 15460 => 38388, 15461 => 29006, 15462 => 20860, +15463 => 32937, 15464 => 33392, 15465 => 22904, 15466 => 32516, 15467 => 33575, +15468 => 26816, 15469 => 26604, 15470 => 30897, 15471 => 30839, 15472 => 25315, +15473 => 25441, 15474 => 31616, 15475 => 20461, 15476 => 21098, 15477 => 20943, +15478 => 33616, 15479 => 27099, 15480 => 37492, 15481 => 36341, 15482 => 36145, +15483 => 35265, 15484 => 38190, 15485 => 31661, 15486 => 20214, 15649 => 20581, +15650 => 33328, 15651 => 21073, 15652 => 39279, 15653 => 28176, 15654 => 28293, +15655 => 28071, 15656 => 24314, 15657 => 20725, 15658 => 23004, 15659 => 23558, +15660 => 27974, 15661 => 27743, 15662 => 30086, 15663 => 33931, 15664 => 26728, +15665 => 22870, 15666 => 35762, 15667 => 21280, 15668 => 37233, 15669 => 38477, +15670 => 34121, 15671 => 26898, 15672 => 30977, 15673 => 28966, 15674 => 33014, +15675 => 20132, 15676 => 37066, 15677 => 27975, 15678 => 39556, 15679 => 23047, +15680 => 22204, 15681 => 25605, 15682 => 38128, 15683 => 30699, 15684 => 20389, +15685 => 33050, 15686 => 29409, 15687 => 35282, 15688 => 39290, 15689 => 32564, +15690 => 32478, 15691 => 21119, 15692 => 25945, 15693 => 37237, 15694 => 36735, +15695 => 36739, 15696 => 21483, 15697 => 31382, 15698 => 25581, 15699 => 25509, +15700 => 30342, 15701 => 31224, 15702 => 34903, 15703 => 38454, 15704 => 25130, +15705 => 21163, 15706 => 33410, 15707 => 26708, 15708 => 26480, 15709 => 25463, +15710 => 30571, 15711 => 31469, 15712 => 27905, 15713 => 32467, 15714 => 35299, +15715 => 22992, 15716 => 25106, 15717 => 34249, 15718 => 33445, 15719 => 30028, +15720 => 20511, 15721 => 20171, 15722 => 30117, 15723 => 35819, 15724 => 23626, +15725 => 24062, 15726 => 31563, 15727 => 26020, 15728 => 37329, 15729 => 20170, +15730 => 27941, 15731 => 35167, 15732 => 32039, 15733 => 38182, 15734 => 20165, +15735 => 35880, 15736 => 36827, 15737 => 38771, 15738 => 26187, 15739 => 31105, +15740 => 36817, 15741 => 28908, 15742 => 28024, 15905 => 23613, 15906 => 21170, +15907 => 33606, 15908 => 20834, 15909 => 33550, 15910 => 30555, 15911 => 26230, +15912 => 40120, 15913 => 20140, 15914 => 24778, 15915 => 31934, 15916 => 31923, +15917 => 32463, 15918 => 20117, 15919 => 35686, 15920 => 26223, 15921 => 39048, +15922 => 38745, 15923 => 22659, 15924 => 25964, 15925 => 38236, 15926 => 24452, +15927 => 30153, 15928 => 38742, 15929 => 31455, 15930 => 31454, 15931 => 20928, +15932 => 28847, 15933 => 31384, 15934 => 25578, 15935 => 31350, 15936 => 32416, +15937 => 29590, 15938 => 38893, 15939 => 20037, 15940 => 28792, 15941 => 20061, +15942 => 37202, 15943 => 21417, 15944 => 25937, 15945 => 26087, 15946 => 33276, +15947 => 33285, 15948 => 21646, 15949 => 23601, 15950 => 30106, 15951 => 38816, +15952 => 25304, 15953 => 29401, 15954 => 30141, 15955 => 23621, 15956 => 39545, +15957 => 33738, 15958 => 23616, 15959 => 21632, 15960 => 30697, 15961 => 20030, +15962 => 27822, 15963 => 32858, 15964 => 25298, 15965 => 25454, 15966 => 24040, +15967 => 20855, 15968 => 36317, 15969 => 36382, 15970 => 38191, 15971 => 20465, +15972 => 21477, 15973 => 24807, 15974 => 28844, 15975 => 21095, 15976 => 25424, +15977 => 40515, 15978 => 23071, 15979 => 20518, 15980 => 30519, 15981 => 21367, +15982 => 32482, 15983 => 25733, 15984 => 25899, 15985 => 25225, 15986 => 25496, +15987 => 20500, 15988 => 29237, 15989 => 35273, 15990 => 20915, 15991 => 35776, +15992 => 32477, 15993 => 22343, 15994 => 33740, 15995 => 38055, 15996 => 20891, +15997 => 21531, 15998 => 23803, 16161 => 20426, 16162 => 31459, 16163 => 27994, +16164 => 37089, 16165 => 39567, 16166 => 21888, 16167 => 21654, 16168 => 21345, +16169 => 21679, 16170 => 24320, 16171 => 25577, 16172 => 26999, 16173 => 20975, +16174 => 24936, 16175 => 21002, 16176 => 22570, 16177 => 21208, 16178 => 22350, +16179 => 30733, 16180 => 30475, 16181 => 24247, 16182 => 24951, 16183 => 31968, +16184 => 25179, 16185 => 25239, 16186 => 20130, 16187 => 28821, 16188 => 32771, +16189 => 25335, 16190 => 28900, 16191 => 38752, 16192 => 22391, 16193 => 33499, +16194 => 26607, 16195 => 26869, 16196 => 30933, 16197 => 39063, 16198 => 31185, +16199 => 22771, 16200 => 21683, 16201 => 21487, 16202 => 28212, 16203 => 20811, +16204 => 21051, 16205 => 23458, 16206 => 35838, 16207 => 32943, 16208 => 21827, +16209 => 22438, 16210 => 24691, 16211 => 22353, 16212 => 21549, 16213 => 31354, +16214 => 24656, 16215 => 23380, 16216 => 25511, 16217 => 25248, 16218 => 21475, +16219 => 25187, 16220 => 23495, 16221 => 26543, 16222 => 21741, 16223 => 31391, +16224 => 33510, 16225 => 37239, 16226 => 24211, 16227 => 35044, 16228 => 22840, +16229 => 22446, 16230 => 25358, 16231 => 36328, 16232 => 33007, 16233 => 22359, +16234 => 31607, 16235 => 20393, 16236 => 24555, 16237 => 23485, 16238 => 27454, +16239 => 21281, 16240 => 31568, 16241 => 29378, 16242 => 26694, 16243 => 30719, +16244 => 30518, 16245 => 26103, 16246 => 20917, 16247 => 20111, 16248 => 30420, +16249 => 23743, 16250 => 31397, 16251 => 33909, 16252 => 22862, 16253 => 39745, +16254 => 20608, 16417 => 39304, 16418 => 24871, 16419 => 28291, 16420 => 22372, +16421 => 26118, 16422 => 25414, 16423 => 22256, 16424 => 25324, 16425 => 25193, +16426 => 24275, 16427 => 38420, 16428 => 22403, 16429 => 25289, 16430 => 21895, +16431 => 34593, 16432 => 33098, 16433 => 36771, 16434 => 21862, 16435 => 33713, +16436 => 26469, 16437 => 36182, 16438 => 34013, 16439 => 23146, 16440 => 26639, +16441 => 25318, 16442 => 31726, 16443 => 38417, 16444 => 20848, 16445 => 28572, +16446 => 35888, 16447 => 25597, 16448 => 35272, 16449 => 25042, 16450 => 32518, +16451 => 28866, 16452 => 28389, 16453 => 29701, 16454 => 27028, 16455 => 29436, +16456 => 24266, 16457 => 37070, 16458 => 26391, 16459 => 28010, 16460 => 25438, +16461 => 21171, 16462 => 29282, 16463 => 32769, 16464 => 20332, 16465 => 23013, +16466 => 37226, 16467 => 28889, 16468 => 28061, 16469 => 21202, 16470 => 20048, +16471 => 38647, 16472 => 38253, 16473 => 34174, 16474 => 30922, 16475 => 32047, +16476 => 20769, 16477 => 22418, 16478 => 25794, 16479 => 32907, 16480 => 31867, +16481 => 27882, 16482 => 26865, 16483 => 26974, 16484 => 20919, 16485 => 21400, +16486 => 26792, 16487 => 29313, 16488 => 40654, 16489 => 31729, 16490 => 29432, +16491 => 31163, 16492 => 28435, 16493 => 29702, 16494 => 26446, 16495 => 37324, +16496 => 40100, 16497 => 31036, 16498 => 33673, 16499 => 33620, 16500 => 21519, +16501 => 26647, 16502 => 20029, 16503 => 21385, 16504 => 21169, 16505 => 30782, +16506 => 21382, 16507 => 21033, 16508 => 20616, 16509 => 20363, 16510 => 20432, +16673 => 30178, 16674 => 31435, 16675 => 31890, 16676 => 27813, 16677 => 38582, +16678 => 21147, 16679 => 29827, 16680 => 21737, 16681 => 20457, 16682 => 32852, +16683 => 33714, 16684 => 36830, 16685 => 38256, 16686 => 24265, 16687 => 24604, +16688 => 28063, 16689 => 24088, 16690 => 25947, 16691 => 33080, 16692 => 38142, +16693 => 24651, 16694 => 28860, 16695 => 32451, 16696 => 31918, 16697 => 20937, +16698 => 26753, 16699 => 31921, 16700 => 33391, 16701 => 20004, 16702 => 36742, +16703 => 37327, 16704 => 26238, 16705 => 20142, 16706 => 35845, 16707 => 25769, +16708 => 32842, 16709 => 20698, 16710 => 30103, 16711 => 29134, 16712 => 23525, +16713 => 36797, 16714 => 28518, 16715 => 20102, 16716 => 25730, 16717 => 38243, +16718 => 24278, 16719 => 26009, 16720 => 21015, 16721 => 35010, 16722 => 28872, +16723 => 21155, 16724 => 29454, 16725 => 29747, 16726 => 26519, 16727 => 30967, +16728 => 38678, 16729 => 20020, 16730 => 37051, 16731 => 40158, 16732 => 28107, +16733 => 20955, 16734 => 36161, 16735 => 21533, 16736 => 25294, 16737 => 29618, +16738 => 33777, 16739 => 38646, 16740 => 40836, 16741 => 38083, 16742 => 20278, +16743 => 32666, 16744 => 20940, 16745 => 28789, 16746 => 38517, 16747 => 23725, +16748 => 39046, 16749 => 21478, 16750 => 20196, 16751 => 28316, 16752 => 29705, +16753 => 27060, 16754 => 30827, 16755 => 39311, 16756 => 30041, 16757 => 21016, +16758 => 30244, 16759 => 27969, 16760 => 26611, 16761 => 20845, 16762 => 40857, +16763 => 32843, 16764 => 21657, 16765 => 31548, 16766 => 31423, 16929 => 38534, +16930 => 22404, 16931 => 25314, 16932 => 38471, 16933 => 27004, 16934 => 23044, +16935 => 25602, 16936 => 31699, 16937 => 28431, 16938 => 38475, 16939 => 33446, +16940 => 21346, 16941 => 39045, 16942 => 24208, 16943 => 28809, 16944 => 25523, +16945 => 21348, 16946 => 34383, 16947 => 40065, 16948 => 40595, 16949 => 30860, +16950 => 38706, 16951 => 36335, 16952 => 36162, 16953 => 40575, 16954 => 28510, +16955 => 31108, 16956 => 24405, 16957 => 38470, 16958 => 25134, 16959 => 39540, +16960 => 21525, 16961 => 38109, 16962 => 20387, 16963 => 26053, 16964 => 23653, +16965 => 23649, 16966 => 32533, 16967 => 34385, 16968 => 27695, 16969 => 24459, +16970 => 29575, 16971 => 28388, 16972 => 32511, 16973 => 23782, 16974 => 25371, +16975 => 23402, 16976 => 28390, 16977 => 21365, 16978 => 20081, 16979 => 25504, +16980 => 30053, 16981 => 25249, 16982 => 36718, 16983 => 20262, 16984 => 20177, +16985 => 27814, 16986 => 32438, 16987 => 35770, 16988 => 33821, 16989 => 34746, +16990 => 32599, 16991 => 36923, 16992 => 38179, 16993 => 31657, 16994 => 39585, +16995 => 35064, 16996 => 33853, 16997 => 27931, 16998 => 39558, 16999 => 32476, +17000 => 22920, 17001 => 40635, 17002 => 29595, 17003 => 30721, 17004 => 34434, +17005 => 39532, 17006 => 39554, 17007 => 22043, 17008 => 21527, 17009 => 22475, +17010 => 20080, 17011 => 40614, 17012 => 21334, 17013 => 36808, 17014 => 33033, +17015 => 30610, 17016 => 39314, 17017 => 34542, 17018 => 28385, 17019 => 34067, +17020 => 26364, 17021 => 24930, 17022 => 28459, 17185 => 35881, 17186 => 33426, +17187 => 33579, 17188 => 30450, 17189 => 27667, 17190 => 24537, 17191 => 33725, +17192 => 29483, 17193 => 33541, 17194 => 38170, 17195 => 27611, 17196 => 30683, +17197 => 38086, 17198 => 21359, 17199 => 33538, 17200 => 20882, 17201 => 24125, +17202 => 35980, 17203 => 36152, 17204 => 20040, 17205 => 29611, 17206 => 26522, +17207 => 26757, 17208 => 37238, 17209 => 38665, 17210 => 29028, 17211 => 27809, +17212 => 30473, 17213 => 23186, 17214 => 38209, 17215 => 27599, 17216 => 32654, +17217 => 26151, 17218 => 23504, 17219 => 22969, 17220 => 23194, 17221 => 38376, +17222 => 38391, 17223 => 20204, 17224 => 33804, 17225 => 33945, 17226 => 27308, +17227 => 30431, 17228 => 38192, 17229 => 29467, 17230 => 26790, 17231 => 23391, +17232 => 30511, 17233 => 37274, 17234 => 38753, 17235 => 31964, 17236 => 36855, +17237 => 35868, 17238 => 24357, 17239 => 31859, 17240 => 31192, 17241 => 35269, +17242 => 27852, 17243 => 34588, 17244 => 23494, 17245 => 24130, 17246 => 26825, +17247 => 30496, 17248 => 32501, 17249 => 20885, 17250 => 20813, 17251 => 21193, +17252 => 23081, 17253 => 32517, 17254 => 38754, 17255 => 33495, 17256 => 25551, +17257 => 30596, 17258 => 34256, 17259 => 31186, 17260 => 28218, 17261 => 24217, +17262 => 22937, 17263 => 34065, 17264 => 28781, 17265 => 27665, 17266 => 25279, +17267 => 30399, 17268 => 25935, 17269 => 24751, 17270 => 38397, 17271 => 26126, +17272 => 34719, 17273 => 40483, 17274 => 38125, 17275 => 21517, 17276 => 21629, +17277 => 35884, 17278 => 25720, 17441 => 25721, 17442 => 34321, 17443 => 27169, +17444 => 33180, 17445 => 30952, 17446 => 25705, 17447 => 39764, 17448 => 25273, +17449 => 26411, 17450 => 33707, 17451 => 22696, 17452 => 40664, 17453 => 27819, +17454 => 28448, 17455 => 23518, 17456 => 38476, 17457 => 35851, 17458 => 29279, +17459 => 26576, 17460 => 25287, 17461 => 29281, 17462 => 20137, 17463 => 22982, +17464 => 27597, 17465 => 22675, 17466 => 26286, 17467 => 24149, 17468 => 21215, +17469 => 24917, 17470 => 26408, 17471 => 30446, 17472 => 30566, 17473 => 29287, +17474 => 31302, 17475 => 25343, 17476 => 21738, 17477 => 21584, 17478 => 38048, +17479 => 37027, 17480 => 23068, 17481 => 32435, 17482 => 27670, 17483 => 20035, +17484 => 22902, 17485 => 32784, 17486 => 22856, 17487 => 21335, 17488 => 30007, +17489 => 38590, 17490 => 22218, 17491 => 25376, 17492 => 33041, 17493 => 24700, +17494 => 38393, 17495 => 28118, 17496 => 21602, 17497 => 39297, 17498 => 20869, +17499 => 23273, 17500 => 33021, 17501 => 22958, 17502 => 38675, 17503 => 20522, +17504 => 27877, 17505 => 23612, 17506 => 25311, 17507 => 20320, 17508 => 21311, +17509 => 33147, 17510 => 36870, 17511 => 28346, 17512 => 34091, 17513 => 25288, +17514 => 24180, 17515 => 30910, 17516 => 25781, 17517 => 25467, 17518 => 24565, +17519 => 23064, 17520 => 37247, 17521 => 40479, 17522 => 23615, 17523 => 25423, +17524 => 32834, 17525 => 23421, 17526 => 21870, 17527 => 38218, 17528 => 38221, +17529 => 28037, 17530 => 24744, 17531 => 26592, 17532 => 29406, 17533 => 20957, +17534 => 23425, 17697 => 25319, 17698 => 27870, 17699 => 29275, 17700 => 25197, +17701 => 38062, 17702 => 32445, 17703 => 33043, 17704 => 27987, 17705 => 20892, +17706 => 24324, 17707 => 22900, 17708 => 21162, 17709 => 24594, 17710 => 22899, +17711 => 26262, 17712 => 34384, 17713 => 30111, 17714 => 25386, 17715 => 25062, +17716 => 31983, 17717 => 35834, 17718 => 21734, 17719 => 27431, 17720 => 40485, +17721 => 27572, 17722 => 34261, 17723 => 21589, 17724 => 20598, 17725 => 27812, +17726 => 21866, 17727 => 36276, 17728 => 29228, 17729 => 24085, 17730 => 24597, +17731 => 29750, 17732 => 25293, 17733 => 25490, 17734 => 29260, 17735 => 24472, +17736 => 28227, 17737 => 27966, 17738 => 25856, 17739 => 28504, 17740 => 30424, +17741 => 30928, 17742 => 30460, 17743 => 30036, 17744 => 21028, 17745 => 21467, +17746 => 20051, 17747 => 24222, 17748 => 26049, 17749 => 32810, 17750 => 32982, +17751 => 25243, 17752 => 21638, 17753 => 21032, 17754 => 28846, 17755 => 34957, +17756 => 36305, 17757 => 27873, 17758 => 21624, 17759 => 32986, 17760 => 22521, +17761 => 35060, 17762 => 36180, 17763 => 38506, 17764 => 37197, 17765 => 20329, +17766 => 27803, 17767 => 21943, 17768 => 30406, 17769 => 30768, 17770 => 25256, +17771 => 28921, 17772 => 28558, 17773 => 24429, 17774 => 34028, 17775 => 26842, +17776 => 30844, 17777 => 31735, 17778 => 33192, 17779 => 26379, 17780 => 40527, +17781 => 25447, 17782 => 30896, 17783 => 22383, 17784 => 30738, 17785 => 38713, +17786 => 25209, 17787 => 25259, 17788 => 21128, 17789 => 29749, 17790 => 27607, +17953 => 21860, 17954 => 33086, 17955 => 30130, 17956 => 30382, 17957 => 21305, +17958 => 30174, 17959 => 20731, 17960 => 23617, 17961 => 35692, 17962 => 31687, +17963 => 20559, 17964 => 29255, 17965 => 39575, 17966 => 39128, 17967 => 28418, +17968 => 29922, 17969 => 31080, 17970 => 25735, 17971 => 30629, 17972 => 25340, +17973 => 39057, 17974 => 36139, 17975 => 21697, 17976 => 32856, 17977 => 20050, +17978 => 22378, 17979 => 33529, 17980 => 33805, 17981 => 24179, 17982 => 20973, +17983 => 29942, 17984 => 35780, 17985 => 23631, 17986 => 22369, 17987 => 27900, +17988 => 39047, 17989 => 23110, 17990 => 30772, 17991 => 39748, 17992 => 36843, +17993 => 31893, 17994 => 21078, 17995 => 25169, 17996 => 38138, 17997 => 20166, +17998 => 33670, 17999 => 33889, 18000 => 33769, 18001 => 33970, 18002 => 22484, +18003 => 26420, 18004 => 22275, 18005 => 26222, 18006 => 28006, 18007 => 35889, +18008 => 26333, 18009 => 28689, 18010 => 26399, 18011 => 27450, 18012 => 26646, +18013 => 25114, 18014 => 22971, 18015 => 19971, 18016 => 20932, 18017 => 28422, +18018 => 26578, 18019 => 27791, 18020 => 20854, 18021 => 26827, 18022 => 22855, +18023 => 27495, 18024 => 30054, 18025 => 23822, 18026 => 33040, 18027 => 40784, +18028 => 26071, 18029 => 31048, 18030 => 31041, 18031 => 39569, 18032 => 36215, +18033 => 23682, 18034 => 20062, 18035 => 20225, 18036 => 21551, 18037 => 22865, +18038 => 30732, 18039 => 22120, 18040 => 27668, 18041 => 36804, 18042 => 24323, +18043 => 27773, 18044 => 27875, 18045 => 35755, 18046 => 25488, 18209 => 24688, +18210 => 27965, 18211 => 29301, 18212 => 25190, 18213 => 38030, 18214 => 38085, +18215 => 21315, 18216 => 36801, 18217 => 31614, 18218 => 20191, 18219 => 35878, +18220 => 20094, 18221 => 40660, 18222 => 38065, 18223 => 38067, 18224 => 21069, +18225 => 28508, 18226 => 36963, 18227 => 27973, 18228 => 35892, 18229 => 22545, +18230 => 23884, 18231 => 27424, 18232 => 27465, 18233 => 26538, 18234 => 21595, +18235 => 33108, 18236 => 32652, 18237 => 22681, 18238 => 34103, 18239 => 24378, +18240 => 25250, 18241 => 27207, 18242 => 38201, 18243 => 25970, 18244 => 24708, +18245 => 26725, 18246 => 30631, 18247 => 20052, 18248 => 20392, 18249 => 24039, +18250 => 38808, 18251 => 25772, 18252 => 32728, 18253 => 23789, 18254 => 20431, +18255 => 31373, 18256 => 20999, 18257 => 33540, 18258 => 19988, 18259 => 24623, +18260 => 31363, 18261 => 38054, 18262 => 20405, 18263 => 20146, 18264 => 31206, +18265 => 29748, 18266 => 21220, 18267 => 33465, 18268 => 25810, 18269 => 31165, +18270 => 23517, 18271 => 27777, 18272 => 38738, 18273 => 36731, 18274 => 27682, +18275 => 20542, 18276 => 21375, 18277 => 28165, 18278 => 25806, 18279 => 26228, +18280 => 27696, 18281 => 24773, 18282 => 39031, 18283 => 35831, 18284 => 24198, +18285 => 29756, 18286 => 31351, 18287 => 31179, 18288 => 19992, 18289 => 37041, +18290 => 29699, 18291 => 27714, 18292 => 22234, 18293 => 37195, 18294 => 27845, +18295 => 36235, 18296 => 21306, 18297 => 34502, 18298 => 26354, 18299 => 36527, +18300 => 23624, 18301 => 39537, 18302 => 28192, 18465 => 21462, 18466 => 23094, +18467 => 40843, 18468 => 36259, 18469 => 21435, 18470 => 22280, 18471 => 39079, +18472 => 26435, 18473 => 37275, 18474 => 27849, 18475 => 20840, 18476 => 30154, +18477 => 25331, 18478 => 29356, 18479 => 21048, 18480 => 21149, 18481 => 32570, +18482 => 28820, 18483 => 30264, 18484 => 21364, 18485 => 40522, 18486 => 27063, +18487 => 30830, 18488 => 38592, 18489 => 35033, 18490 => 32676, 18491 => 28982, +18492 => 29123, 18493 => 20873, 18494 => 26579, 18495 => 29924, 18496 => 22756, +18497 => 25880, 18498 => 22199, 18499 => 35753, 18500 => 39286, 18501 => 25200, +18502 => 32469, 18503 => 24825, 18504 => 28909, 18505 => 22764, 18506 => 20161, +18507 => 20154, 18508 => 24525, 18509 => 38887, 18510 => 20219, 18511 => 35748, +18512 => 20995, 18513 => 22922, 18514 => 32427, 18515 => 25172, 18516 => 20173, +18517 => 26085, 18518 => 25102, 18519 => 33592, 18520 => 33993, 18521 => 33635, +18522 => 34701, 18523 => 29076, 18524 => 28342, 18525 => 23481, 18526 => 32466, +18527 => 20887, 18528 => 25545, 18529 => 26580, 18530 => 32905, 18531 => 33593, +18532 => 34837, 18533 => 20754, 18534 => 23418, 18535 => 22914, 18536 => 36785, +18537 => 20083, 18538 => 27741, 18539 => 20837, 18540 => 35109, 18541 => 36719, +18542 => 38446, 18543 => 34122, 18544 => 29790, 18545 => 38160, 18546 => 38384, +18547 => 28070, 18548 => 33509, 18549 => 24369, 18550 => 25746, 18551 => 27922, +18552 => 33832, 18553 => 33134, 18554 => 40131, 18555 => 22622, 18556 => 36187, +18557 => 19977, 18558 => 21441, 18721 => 20254, 18722 => 25955, 18723 => 26705, +18724 => 21971, 18725 => 20007, 18726 => 25620, 18727 => 39578, 18728 => 25195, +18729 => 23234, 18730 => 29791, 18731 => 33394, 18732 => 28073, 18733 => 26862, +18734 => 20711, 18735 => 33678, 18736 => 30722, 18737 => 26432, 18738 => 21049, +18739 => 27801, 18740 => 32433, 18741 => 20667, 18742 => 21861, 18743 => 29022, +18744 => 31579, 18745 => 26194, 18746 => 29642, 18747 => 33515, 18748 => 26441, +18749 => 23665, 18750 => 21024, 18751 => 29053, 18752 => 34923, 18753 => 38378, +18754 => 38485, 18755 => 25797, 18756 => 36193, 18757 => 33203, 18758 => 21892, +18759 => 27733, 18760 => 25159, 18761 => 32558, 18762 => 22674, 18763 => 20260, +18764 => 21830, 18765 => 36175, 18766 => 26188, 18767 => 19978, 18768 => 23578, +18769 => 35059, 18770 => 26786, 18771 => 25422, 18772 => 31245, 18773 => 28903, +18774 => 33421, 18775 => 21242, 18776 => 38902, 18777 => 23569, 18778 => 21736, +18779 => 37045, 18780 => 32461, 18781 => 22882, 18782 => 36170, 18783 => 34503, +18784 => 33292, 18785 => 33293, 18786 => 36198, 18787 => 25668, 18788 => 23556, +18789 => 24913, 18790 => 28041, 18791 => 31038, 18792 => 35774, 18793 => 30775, +18794 => 30003, 18795 => 21627, 18796 => 20280, 18797 => 36523, 18798 => 28145, +18799 => 23072, 18800 => 32453, 18801 => 31070, 18802 => 27784, 18803 => 23457, +18804 => 23158, 18805 => 29978, 18806 => 32958, 18807 => 24910, 18808 => 28183, +18809 => 22768, 18810 => 29983, 18811 => 29989, 18812 => 29298, 18813 => 21319, +18814 => 32499, 18977 => 30465, 18978 => 30427, 18979 => 21097, 18980 => 32988, +18981 => 22307, 18982 => 24072, 18983 => 22833, 18984 => 29422, 18985 => 26045, +18986 => 28287, 18987 => 35799, 18988 => 23608, 18989 => 34417, 18990 => 21313, +18991 => 30707, 18992 => 25342, 18993 => 26102, 18994 => 20160, 18995 => 39135, +18996 => 34432, 18997 => 23454, 18998 => 35782, 18999 => 21490, 19000 => 30690, +19001 => 20351, 19002 => 23630, 19003 => 39542, 19004 => 22987, 19005 => 24335, +19006 => 31034, 19007 => 22763, 19008 => 19990, 19009 => 26623, 19010 => 20107, +19011 => 25325, 19012 => 35475, 19013 => 36893, 19014 => 21183, 19015 => 26159, +19016 => 21980, 19017 => 22124, 19018 => 36866, 19019 => 20181, 19020 => 20365, +19021 => 37322, 19022 => 39280, 19023 => 27663, 19024 => 24066, 19025 => 24643, +19026 => 23460, 19027 => 35270, 19028 => 35797, 19029 => 25910, 19030 => 25163, +19031 => 39318, 19032 => 23432, 19033 => 23551, 19034 => 25480, 19035 => 21806, +19036 => 21463, 19037 => 30246, 19038 => 20861, 19039 => 34092, 19040 => 26530, +19041 => 26803, 19042 => 27530, 19043 => 25234, 19044 => 36755, 19045 => 21460, +19046 => 33298, 19047 => 28113, 19048 => 30095, 19049 => 20070, 19050 => 36174, +19051 => 23408, 19052 => 29087, 19053 => 34223, 19054 => 26257, 19055 => 26329, +19056 => 32626, 19057 => 34560, 19058 => 40653, 19059 => 40736, 19060 => 23646, +19061 => 26415, 19062 => 36848, 19063 => 26641, 19064 => 26463, 19065 => 25101, +19066 => 31446, 19067 => 22661, 19068 => 24246, 19069 => 25968, 19070 => 28465, +19233 => 24661, 19234 => 21047, 19235 => 32781, 19236 => 25684, 19237 => 34928, +19238 => 29993, 19239 => 24069, 19240 => 26643, 19241 => 25332, 19242 => 38684, +19243 => 21452, 19244 => 29245, 19245 => 35841, 19246 => 27700, 19247 => 30561, +19248 => 31246, 19249 => 21550, 19250 => 30636, 19251 => 39034, 19252 => 33308, +19253 => 35828, 19254 => 30805, 19255 => 26388, 19256 => 28865, 19257 => 26031, +19258 => 25749, 19259 => 22070, 19260 => 24605, 19261 => 31169, 19262 => 21496, +19263 => 19997, 19264 => 27515, 19265 => 32902, 19266 => 23546, 19267 => 21987, +19268 => 22235, 19269 => 20282, 19270 => 20284, 19271 => 39282, 19272 => 24051, +19273 => 26494, 19274 => 32824, 19275 => 24578, 19276 => 39042, 19277 => 36865, +19278 => 23435, 19279 => 35772, 19280 => 35829, 19281 => 25628, 19282 => 33368, +19283 => 25822, 19284 => 22013, 19285 => 33487, 19286 => 37221, 19287 => 20439, +19288 => 32032, 19289 => 36895, 19290 => 31903, 19291 => 20723, 19292 => 22609, +19293 => 28335, 19294 => 23487, 19295 => 35785, 19296 => 32899, 19297 => 37240, +19298 => 33948, 19299 => 31639, 19300 => 34429, 19301 => 38539, 19302 => 38543, +19303 => 32485, 19304 => 39635, 19305 => 30862, 19306 => 23681, 19307 => 31319, +19308 => 36930, 19309 => 38567, 19310 => 31071, 19311 => 23385, 19312 => 25439, +19313 => 31499, 19314 => 34001, 19315 => 26797, 19316 => 21766, 19317 => 32553, +19318 => 29712, 19319 => 32034, 19320 => 38145, 19321 => 25152, 19322 => 22604, +19323 => 20182, 19324 => 23427, 19325 => 22905, 19326 => 22612, 19489 => 29549, +19490 => 25374, 19491 => 36427, 19492 => 36367, 19493 => 32974, 19494 => 33492, +19495 => 25260, 19496 => 21488, 19497 => 27888, 19498 => 37214, 19499 => 22826, +19500 => 24577, 19501 => 27760, 19502 => 22349, 19503 => 25674, 19504 => 36138, +19505 => 30251, 19506 => 28393, 19507 => 22363, 19508 => 27264, 19509 => 30192, +19510 => 28525, 19511 => 35885, 19512 => 35848, 19513 => 22374, 19514 => 27631, +19515 => 34962, 19516 => 30899, 19517 => 25506, 19518 => 21497, 19519 => 28845, +19520 => 27748, 19521 => 22616, 19522 => 25642, 19523 => 22530, 19524 => 26848, +19525 => 33179, 19526 => 21776, 19527 => 31958, 19528 => 20504, 19529 => 36538, +19530 => 28108, 19531 => 36255, 19532 => 28907, 19533 => 25487, 19534 => 28059, +19535 => 28372, 19536 => 32486, 19537 => 33796, 19538 => 26691, 19539 => 36867, +19540 => 28120, 19541 => 38518, 19542 => 35752, 19543 => 22871, 19544 => 29305, +19545 => 34276, 19546 => 33150, 19547 => 30140, 19548 => 35466, 19549 => 26799, +19550 => 21076, 19551 => 36386, 19552 => 38161, 19553 => 25552, 19554 => 39064, +19555 => 36420, 19556 => 21884, 19557 => 20307, 19558 => 26367, 19559 => 22159, +19560 => 24789, 19561 => 28053, 19562 => 21059, 19563 => 23625, 19564 => 22825, +19565 => 28155, 19566 => 22635, 19567 => 30000, 19568 => 29980, 19569 => 24684, +19570 => 33300, 19571 => 33094, 19572 => 25361, 19573 => 26465, 19574 => 36834, +19575 => 30522, 19576 => 36339, 19577 => 36148, 19578 => 38081, 19579 => 24086, +19580 => 21381, 19581 => 21548, 19582 => 28867, 19745 => 27712, 19746 => 24311, +19747 => 20572, 19748 => 20141, 19749 => 24237, 19750 => 25402, 19751 => 33351, +19752 => 36890, 19753 => 26704, 19754 => 37230, 19755 => 30643, 19756 => 21516, +19757 => 38108, 19758 => 24420, 19759 => 31461, 19760 => 26742, 19761 => 25413, +19762 => 31570, 19763 => 32479, 19764 => 30171, 19765 => 20599, 19766 => 25237, +19767 => 22836, 19768 => 36879, 19769 => 20984, 19770 => 31171, 19771 => 31361, +19772 => 22270, 19773 => 24466, 19774 => 36884, 19775 => 28034, 19776 => 23648, +19777 => 22303, 19778 => 21520, 19779 => 20820, 19780 => 28237, 19781 => 22242, +19782 => 25512, 19783 => 39059, 19784 => 33151, 19785 => 34581, 19786 => 35114, +19787 => 36864, 19788 => 21534, 19789 => 23663, 19790 => 33216, 19791 => 25302, +19792 => 25176, 19793 => 33073, 19794 => 40501, 19795 => 38464, 19796 => 39534, +19797 => 39548, 19798 => 26925, 19799 => 22949, 19800 => 25299, 19801 => 21822, +19802 => 25366, 19803 => 21703, 19804 => 34521, 19805 => 27964, 19806 => 23043, +19807 => 29926, 19808 => 34972, 19809 => 27498, 19810 => 22806, 19811 => 35916, +19812 => 24367, 19813 => 28286, 19814 => 29609, 19815 => 39037, 19816 => 20024, +19817 => 28919, 19818 => 23436, 19819 => 30871, 19820 => 25405, 19821 => 26202, +19822 => 30358, 19823 => 24779, 19824 => 23451, 19825 => 23113, 19826 => 19975, +19827 => 33109, 19828 => 27754, 19829 => 29579, 19830 => 20129, 19831 => 26505, +19832 => 32593, 19833 => 24448, 19834 => 26106, 19835 => 26395, 19836 => 24536, +19837 => 22916, 19838 => 23041, 20001 => 24013, 20002 => 24494, 20003 => 21361, +20004 => 38886, 20005 => 36829, 20006 => 26693, 20007 => 22260, 20008 => 21807, +20009 => 24799, 20010 => 20026, 20011 => 28493, 20012 => 32500, 20013 => 33479, +20014 => 33806, 20015 => 22996, 20016 => 20255, 20017 => 20266, 20018 => 23614, +20019 => 32428, 20020 => 26410, 20021 => 34074, 20022 => 21619, 20023 => 30031, +20024 => 32963, 20025 => 21890, 20026 => 39759, 20027 => 20301, 20028 => 28205, +20029 => 35859, 20030 => 23561, 20031 => 24944, 20032 => 21355, 20033 => 30239, +20034 => 28201, 20035 => 34442, 20036 => 25991, 20037 => 38395, 20038 => 32441, +20039 => 21563, 20040 => 31283, 20041 => 32010, 20042 => 38382, 20043 => 21985, +20044 => 32705, 20045 => 29934, 20046 => 25373, 20047 => 34583, 20048 => 28065, +20049 => 31389, 20050 => 25105, 20051 => 26017, 20052 => 21351, 20053 => 25569, +20054 => 27779, 20055 => 24043, 20056 => 21596, 20057 => 38056, 20058 => 20044, +20059 => 27745, 20060 => 35820, 20061 => 23627, 20062 => 26080, 20063 => 33436, +20064 => 26791, 20065 => 21566, 20066 => 21556, 20067 => 27595, 20068 => 27494, +20069 => 20116, 20070 => 25410, 20071 => 21320, 20072 => 33310, 20073 => 20237, +20074 => 20398, 20075 => 22366, 20076 => 25098, 20077 => 38654, 20078 => 26212, +20079 => 29289, 20080 => 21247, 20081 => 21153, 20082 => 24735, 20083 => 35823, +20084 => 26132, 20085 => 29081, 20086 => 26512, 20087 => 35199, 20088 => 30802, +20089 => 30717, 20090 => 26224, 20091 => 22075, 20092 => 21560, 20093 => 38177, +20094 => 29306, 20257 => 31232, 20258 => 24687, 20259 => 24076, 20260 => 24713, +20261 => 33181, 20262 => 22805, 20263 => 24796, 20264 => 29060, 20265 => 28911, +20266 => 28330, 20267 => 27728, 20268 => 29312, 20269 => 27268, 20270 => 34989, +20271 => 24109, 20272 => 20064, 20273 => 23219, 20274 => 21916, 20275 => 38115, +20276 => 27927, 20277 => 31995, 20278 => 38553, 20279 => 25103, 20280 => 32454, +20281 => 30606, 20282 => 34430, 20283 => 21283, 20284 => 38686, 20285 => 36758, +20286 => 26247, 20287 => 23777, 20288 => 20384, 20289 => 29421, 20290 => 19979, +20291 => 21414, 20292 => 22799, 20293 => 21523, 20294 => 25472, 20295 => 38184, +20296 => 20808, 20297 => 20185, 20298 => 40092, 20299 => 32420, 20300 => 21688, +20301 => 36132, 20302 => 34900, 20303 => 33335, 20304 => 38386, 20305 => 28046, +20306 => 24358, 20307 => 23244, 20308 => 26174, 20309 => 38505, 20310 => 29616, +20311 => 29486, 20312 => 21439, 20313 => 33146, 20314 => 39301, 20315 => 32673, +20316 => 23466, 20317 => 38519, 20318 => 38480, 20319 => 32447, 20320 => 30456, +20321 => 21410, 20322 => 38262, 20323 => 39321, 20324 => 31665, 20325 => 35140, +20326 => 28248, 20327 => 20065, 20328 => 32724, 20329 => 31077, 20330 => 35814, +20331 => 24819, 20332 => 21709, 20333 => 20139, 20334 => 39033, 20335 => 24055, +20336 => 27233, 20337 => 20687, 20338 => 21521, 20339 => 35937, 20340 => 33831, +20341 => 30813, 20342 => 38660, 20343 => 21066, 20344 => 21742, 20345 => 22179, +20346 => 38144, 20347 => 28040, 20348 => 23477, 20349 => 28102, 20350 => 26195, +20513 => 23567, 20514 => 23389, 20515 => 26657, 20516 => 32918, 20517 => 21880, +20518 => 31505, 20519 => 25928, 20520 => 26964, 20521 => 20123, 20522 => 27463, +20523 => 34638, 20524 => 38795, 20525 => 21327, 20526 => 25375, 20527 => 25658, +20528 => 37034, 20529 => 26012, 20530 => 32961, 20531 => 35856, 20532 => 20889, +20533 => 26800, 20534 => 21368, 20535 => 34809, 20536 => 25032, 20537 => 27844, +20538 => 27899, 20539 => 35874, 20540 => 23633, 20541 => 34218, 20542 => 33455, +20543 => 38156, 20544 => 27427, 20545 => 36763, 20546 => 26032, 20547 => 24571, +20548 => 24515, 20549 => 20449, 20550 => 34885, 20551 => 26143, 20552 => 33125, +20553 => 29481, 20554 => 24826, 20555 => 20852, 20556 => 21009, 20557 => 22411, +20558 => 24418, 20559 => 37026, 20560 => 34892, 20561 => 37266, 20562 => 24184, +20563 => 26447, 20564 => 24615, 20565 => 22995, 20566 => 20804, 20567 => 20982, +20568 => 33016, 20569 => 21256, 20570 => 27769, 20571 => 38596, 20572 => 29066, +20573 => 20241, 20574 => 20462, 20575 => 32670, 20576 => 26429, 20577 => 21957, +20578 => 38152, 20579 => 31168, 20580 => 34966, 20581 => 32483, 20582 => 22687, +20583 => 25100, 20584 => 38656, 20585 => 34394, 20586 => 22040, 20587 => 39035, +20588 => 24464, 20589 => 35768, 20590 => 33988, 20591 => 37207, 20592 => 21465, +20593 => 26093, 20594 => 24207, 20595 => 30044, 20596 => 24676, 20597 => 32110, +20598 => 23167, 20599 => 32490, 20600 => 32493, 20601 => 36713, 20602 => 21927, +20603 => 23459, 20604 => 24748, 20605 => 26059, 20606 => 29572, 20769 => 36873, +20770 => 30307, 20771 => 30505, 20772 => 32474, 20773 => 38772, 20774 => 34203, +20775 => 23398, 20776 => 31348, 20777 => 38634, 20778 => 34880, 20779 => 21195, +20780 => 29071, 20781 => 24490, 20782 => 26092, 20783 => 35810, 20784 => 23547, +20785 => 39535, 20786 => 24033, 20787 => 27529, 20788 => 27739, 20789 => 35757, +20790 => 35759, 20791 => 36874, 20792 => 36805, 20793 => 21387, 20794 => 25276, +20795 => 40486, 20796 => 40493, 20797 => 21568, 20798 => 20011, 20799 => 33469, +20800 => 29273, 20801 => 34460, 20802 => 23830, 20803 => 34905, 20804 => 28079, +20805 => 38597, 20806 => 21713, 20807 => 20122, 20808 => 35766, 20809 => 28937, +20810 => 21693, 20811 => 38409, 20812 => 28895, 20813 => 28153, 20814 => 30416, +20815 => 20005, 20816 => 30740, 20817 => 34578, 20818 => 23721, 20819 => 24310, +20820 => 35328, 20821 => 39068, 20822 => 38414, 20823 => 28814, 20824 => 27839, +20825 => 22852, 20826 => 25513, 20827 => 30524, 20828 => 34893, 20829 => 28436, +20830 => 33395, 20831 => 22576, 20832 => 29141, 20833 => 21388, 20834 => 30746, +20835 => 38593, 20836 => 21761, 20837 => 24422, 20838 => 28976, 20839 => 23476, +20840 => 35866, 20841 => 39564, 20842 => 27523, 20843 => 22830, 20844 => 40495, +20845 => 31207, 20846 => 26472, 20847 => 25196, 20848 => 20335, 20849 => 30113, +20850 => 32650, 20851 => 27915, 20852 => 38451, 20853 => 27687, 20854 => 20208, +20855 => 30162, 20856 => 20859, 20857 => 26679, 20858 => 28478, 20859 => 36992, +20860 => 33136, 20861 => 22934, 20862 => 29814, 21025 => 25671, 21026 => 23591, +21027 => 36965, 21028 => 31377, 21029 => 35875, 21030 => 23002, 21031 => 21676, +21032 => 33280, 21033 => 33647, 21034 => 35201, 21035 => 32768, 21036 => 26928, +21037 => 22094, 21038 => 32822, 21039 => 29239, 21040 => 37326, 21041 => 20918, +21042 => 20063, 21043 => 39029, 21044 => 25494, 21045 => 19994, 21046 => 21494, +21047 => 26355, 21048 => 33099, 21049 => 22812, 21050 => 28082, 21051 => 19968, +21052 => 22777, 21053 => 21307, 21054 => 25558, 21055 => 38129, 21056 => 20381, +21057 => 20234, 21058 => 34915, 21059 => 39056, 21060 => 22839, 21061 => 36951, +21062 => 31227, 21063 => 20202, 21064 => 33008, 21065 => 30097, 21066 => 27778, +21067 => 23452, 21068 => 23016, 21069 => 24413, 21070 => 26885, 21071 => 34433, +21072 => 20506, 21073 => 24050, 21074 => 20057, 21075 => 30691, 21076 => 20197, +21077 => 33402, 21078 => 25233, 21079 => 26131, 21080 => 37009, 21081 => 23673, +21082 => 20159, 21083 => 24441, 21084 => 33222, 21085 => 36920, 21086 => 32900, +21087 => 30123, 21088 => 20134, 21089 => 35028, 21090 => 24847, 21091 => 27589, +21092 => 24518, 21093 => 20041, 21094 => 30410, 21095 => 28322, 21096 => 35811, +21097 => 35758, 21098 => 35850, 21099 => 35793, 21100 => 24322, 21101 => 32764, +21102 => 32716, 21103 => 32462, 21104 => 33589, 21105 => 33643, 21106 => 22240, +21107 => 27575, 21108 => 38899, 21109 => 38452, 21110 => 23035, 21111 => 21535, +21112 => 38134, 21113 => 28139, 21114 => 23493, 21115 => 39278, 21116 => 23609, +21117 => 24341, 21118 => 38544, 21281 => 21360, 21282 => 33521, 21283 => 27185, +21284 => 23156, 21285 => 40560, 21286 => 24212, 21287 => 32552, 21288 => 33721, +21289 => 33828, 21290 => 33829, 21291 => 33639, 21292 => 34631, 21293 => 36814, +21294 => 36194, 21295 => 30408, 21296 => 24433, 21297 => 39062, 21298 => 30828, +21299 => 26144, 21300 => 21727, 21301 => 25317, 21302 => 20323, 21303 => 33219, +21304 => 30152, 21305 => 24248, 21306 => 38605, 21307 => 36362, 21308 => 34553, +21309 => 21647, 21310 => 27891, 21311 => 28044, 21312 => 27704, 21313 => 24703, +21314 => 21191, 21315 => 29992, 21316 => 24189, 21317 => 20248, 21318 => 24736, +21319 => 24551, 21320 => 23588, 21321 => 30001, 21322 => 37038, 21323 => 38080, +21324 => 29369, 21325 => 27833, 21326 => 28216, 21327 => 37193, 21328 => 26377, +21329 => 21451, 21330 => 21491, 21331 => 20305, 21332 => 37321, 21333 => 35825, +21334 => 21448, 21335 => 24188, 21336 => 36802, 21337 => 28132, 21338 => 20110, +21339 => 30402, 21340 => 27014, 21341 => 34398, 21342 => 24858, 21343 => 33286, +21344 => 20313, 21345 => 20446, 21346 => 36926, 21347 => 40060, 21348 => 24841, +21349 => 28189, 21350 => 28180, 21351 => 38533, 21352 => 20104, 21353 => 23089, +21354 => 38632, 21355 => 19982, 21356 => 23679, 21357 => 31161, 21358 => 23431, +21359 => 35821, 21360 => 32701, 21361 => 29577, 21362 => 22495, 21363 => 33419, +21364 => 37057, 21365 => 21505, 21366 => 36935, 21367 => 21947, 21368 => 23786, +21369 => 24481, 21370 => 24840, 21371 => 27442, 21372 => 29425, 21373 => 32946, +21374 => 35465, 21537 => 28020, 21538 => 23507, 21539 => 35029, 21540 => 39044, +21541 => 35947, 21542 => 39533, 21543 => 40499, 21544 => 28170, 21545 => 20900, +21546 => 20803, 21547 => 22435, 21548 => 34945, 21549 => 21407, 21550 => 25588, +21551 => 36757, 21552 => 22253, 21553 => 21592, 21554 => 22278, 21555 => 29503, +21556 => 28304, 21557 => 32536, 21558 => 36828, 21559 => 33489, 21560 => 24895, +21561 => 24616, 21562 => 38498, 21563 => 26352, 21564 => 32422, 21565 => 36234, +21566 => 36291, 21567 => 38053, 21568 => 23731, 21569 => 31908, 21570 => 26376, +21571 => 24742, 21572 => 38405, 21573 => 32792, 21574 => 20113, 21575 => 37095, +21576 => 21248, 21577 => 38504, 21578 => 20801, 21579 => 36816, 21580 => 34164, +21581 => 37213, 21582 => 26197, 21583 => 38901, 21584 => 23381, 21585 => 21277, +21586 => 30776, 21587 => 26434, 21588 => 26685, 21589 => 21705, 21590 => 28798, +21591 => 23472, 21592 => 36733, 21593 => 20877, 21594 => 22312, 21595 => 21681, +21596 => 25874, 21597 => 26242, 21598 => 36190, 21599 => 36163, 21600 => 33039, +21601 => 33900, 21602 => 36973, 21603 => 31967, 21604 => 20991, 21605 => 34299, +21606 => 26531, 21607 => 26089, 21608 => 28577, 21609 => 34468, 21610 => 36481, +21611 => 22122, 21612 => 36896, 21613 => 30338, 21614 => 28790, 21615 => 29157, +21616 => 36131, 21617 => 25321, 21618 => 21017, 21619 => 27901, 21620 => 36156, +21621 => 24590, 21622 => 22686, 21623 => 24974, 21624 => 26366, 21625 => 36192, +21626 => 25166, 21627 => 21939, 21628 => 28195, 21629 => 26413, 21630 => 36711, +21793 => 38113, 21794 => 38392, 21795 => 30504, 21796 => 26629, 21797 => 27048, +21798 => 21643, 21799 => 20045, 21800 => 28856, 21801 => 35784, 21802 => 25688, +21803 => 25995, 21804 => 23429, 21805 => 31364, 21806 => 20538, 21807 => 23528, +21808 => 30651, 21809 => 27617, 21810 => 35449, 21811 => 31896, 21812 => 27838, +21813 => 30415, 21814 => 26025, 21815 => 36759, 21816 => 23853, 21817 => 23637, +21818 => 34360, 21819 => 26632, 21820 => 21344, 21821 => 25112, 21822 => 31449, +21823 => 28251, 21824 => 32509, 21825 => 27167, 21826 => 31456, 21827 => 24432, +21828 => 28467, 21829 => 24352, 21830 => 25484, 21831 => 28072, 21832 => 26454, +21833 => 19976, 21834 => 24080, 21835 => 36134, 21836 => 20183, 21837 => 32960, +21838 => 30260, 21839 => 38556, 21840 => 25307, 21841 => 26157, 21842 => 25214, +21843 => 27836, 21844 => 36213, 21845 => 29031, 21846 => 32617, 21847 => 20806, +21848 => 32903, 21849 => 21484, 21850 => 36974, 21851 => 25240, 21852 => 21746, +21853 => 34544, 21854 => 36761, 21855 => 32773, 21856 => 38167, 21857 => 34071, +21858 => 36825, 21859 => 27993, 21860 => 29645, 21861 => 26015, 21862 => 30495, +21863 => 29956, 21864 => 30759, 21865 => 33275, 21866 => 36126, 21867 => 38024, +21868 => 20390, 21869 => 26517, 21870 => 30137, 21871 => 35786, 21872 => 38663, +21873 => 25391, 21874 => 38215, 21875 => 38453, 21876 => 33976, 21877 => 25379, +21878 => 30529, 21879 => 24449, 21880 => 29424, 21881 => 20105, 21882 => 24596, +21883 => 25972, 21884 => 25327, 21885 => 27491, 21886 => 25919, 22049 => 24103, +22050 => 30151, 22051 => 37073, 22052 => 35777, 22053 => 33437, 22054 => 26525, +22055 => 25903, 22056 => 21553, 22057 => 34584, 22058 => 30693, 22059 => 32930, +22060 => 33026, 22061 => 27713, 22062 => 20043, 22063 => 32455, 22064 => 32844, +22065 => 30452, 22066 => 26893, 22067 => 27542, 22068 => 25191, 22069 => 20540, +22070 => 20356, 22071 => 22336, 22072 => 25351, 22073 => 27490, 22074 => 36286, +22075 => 21482, 22076 => 26088, 22077 => 32440, 22078 => 24535, 22079 => 25370, +22080 => 25527, 22081 => 33267, 22082 => 33268, 22083 => 32622, 22084 => 24092, +22085 => 23769, 22086 => 21046, 22087 => 26234, 22088 => 31209, 22089 => 31258, +22090 => 36136, 22091 => 28825, 22092 => 30164, 22093 => 28382, 22094 => 27835, +22095 => 31378, 22096 => 20013, 22097 => 30405, 22098 => 24544, 22099 => 38047, +22100 => 34935, 22101 => 32456, 22102 => 31181, 22103 => 32959, 22104 => 37325, +22105 => 20210, 22106 => 20247, 22107 => 33311, 22108 => 21608, 22109 => 24030, +22110 => 27954, 22111 => 35788, 22112 => 31909, 22113 => 36724, 22114 => 32920, +22115 => 24090, 22116 => 21650, 22117 => 30385, 22118 => 23449, 22119 => 26172, +22120 => 39588, 22121 => 29664, 22122 => 26666, 22123 => 34523, 22124 => 26417, +22125 => 29482, 22126 => 35832, 22127 => 35803, 22128 => 36880, 22129 => 31481, +22130 => 28891, 22131 => 29038, 22132 => 25284, 22133 => 30633, 22134 => 22065, +22135 => 20027, 22136 => 33879, 22137 => 26609, 22138 => 21161, 22139 => 34496, +22140 => 36142, 22141 => 38136, 22142 => 31569, 22305 => 20303, 22306 => 27880, +22307 => 31069, 22308 => 39547, 22309 => 25235, 22310 => 29226, 22311 => 25341, +22312 => 19987, 22313 => 30742, 22314 => 36716, 22315 => 25776, 22316 => 36186, +22317 => 31686, 22318 => 26729, 22319 => 24196, 22320 => 35013, 22321 => 22918, +22322 => 25758, 22323 => 22766, 22324 => 29366, 22325 => 26894, 22326 => 38181, +22327 => 36861, 22328 => 36184, 22329 => 22368, 22330 => 32512, 22331 => 35846, +22332 => 20934, 22333 => 25417, 22334 => 25305, 22335 => 21331, 22336 => 26700, +22337 => 29730, 22338 => 33537, 22339 => 37196, 22340 => 21828, 22341 => 30528, +22342 => 28796, 22343 => 27978, 22344 => 20857, 22345 => 21672, 22346 => 36164, +22347 => 23039, 22348 => 28363, 22349 => 28100, 22350 => 23388, 22351 => 32043, +22352 => 20180, 22353 => 31869, 22354 => 28371, 22355 => 23376, 22356 => 33258, +22357 => 28173, 22358 => 23383, 22359 => 39683, 22360 => 26837, 22361 => 36394, +22362 => 23447, 22363 => 32508, 22364 => 24635, 22365 => 32437, 22366 => 37049, +22367 => 36208, 22368 => 22863, 22369 => 25549, 22370 => 31199, 22371 => 36275, +22372 => 21330, 22373 => 26063, 22374 => 31062, 22375 => 35781, 22376 => 38459, +22377 => 32452, 22378 => 38075, 22379 => 32386, 22380 => 22068, 22381 => 37257, +22382 => 26368, 22383 => 32618, 22384 => 23562, 22385 => 36981, 22386 => 26152, +22387 => 24038, 22388 => 20304, 22389 => 26590, 22390 => 20570, 22391 => 20316, +22392 => 22352, 22393 => 24231, 22561 => 20109, 22562 => 19980, 22563 => 20800, +22564 => 19984, 22565 => 24319, 22566 => 21317, 22567 => 19989, 22568 => 20120, +22569 => 19998, 22570 => 39730, 22571 => 23404, 22572 => 22121, 22573 => 20008, +22574 => 31162, 22575 => 20031, 22576 => 21269, 22577 => 20039, 22578 => 22829, +22579 => 29243, 22580 => 21358, 22581 => 27664, 22582 => 22239, 22583 => 32996, +22584 => 39319, 22585 => 27603, 22586 => 30590, 22587 => 40727, 22588 => 20022, +22589 => 20127, 22590 => 40720, 22591 => 20060, 22592 => 20073, 22593 => 20115, +22594 => 33416, 22595 => 23387, 22596 => 21868, 22597 => 22031, 22598 => 20164, +22599 => 21389, 22600 => 21405, 22601 => 21411, 22602 => 21413, 22603 => 21422, +22604 => 38757, 22605 => 36189, 22606 => 21274, 22607 => 21493, 22608 => 21286, +22609 => 21294, 22610 => 21310, 22611 => 36188, 22612 => 21350, 22613 => 21347, +22614 => 20994, 22615 => 21000, 22616 => 21006, 22617 => 21037, 22618 => 21043, +22619 => 21055, 22620 => 21056, 22621 => 21068, 22622 => 21086, 22623 => 21089, +22624 => 21084, 22625 => 33967, 22626 => 21117, 22627 => 21122, 22628 => 21121, +22629 => 21136, 22630 => 21139, 22631 => 20866, 22632 => 32596, 22633 => 20155, +22634 => 20163, 22635 => 20169, 22636 => 20162, 22637 => 20200, 22638 => 20193, +22639 => 20203, 22640 => 20190, 22641 => 20251, 22642 => 20211, 22643 => 20258, +22644 => 20324, 22645 => 20213, 22646 => 20261, 22647 => 20263, 22648 => 20233, +22649 => 20267, 22650 => 20318, 22651 => 20327, 22652 => 25912, 22653 => 20314, +22654 => 20317, 22817 => 20319, 22818 => 20311, 22819 => 20274, 22820 => 20285, +22821 => 20342, 22822 => 20340, 22823 => 20369, 22824 => 20361, 22825 => 20355, +22826 => 20367, 22827 => 20350, 22828 => 20347, 22829 => 20394, 22830 => 20348, +22831 => 20396, 22832 => 20372, 22833 => 20454, 22834 => 20456, 22835 => 20458, +22836 => 20421, 22837 => 20442, 22838 => 20451, 22839 => 20444, 22840 => 20433, +22841 => 20447, 22842 => 20472, 22843 => 20521, 22844 => 20556, 22845 => 20467, +22846 => 20524, 22847 => 20495, 22848 => 20526, 22849 => 20525, 22850 => 20478, +22851 => 20508, 22852 => 20492, 22853 => 20517, 22854 => 20520, 22855 => 20606, +22856 => 20547, 22857 => 20565, 22858 => 20552, 22859 => 20558, 22860 => 20588, +22861 => 20603, 22862 => 20645, 22863 => 20647, 22864 => 20649, 22865 => 20666, +22866 => 20694, 22867 => 20742, 22868 => 20717, 22869 => 20716, 22870 => 20710, +22871 => 20718, 22872 => 20743, 22873 => 20747, 22874 => 20189, 22875 => 27709, +22876 => 20312, 22877 => 20325, 22878 => 20430, 22879 => 40864, 22880 => 27718, +22881 => 31860, 22882 => 20846, 22883 => 24061, 22884 => 40649, 22885 => 39320, +22886 => 20865, 22887 => 22804, 22888 => 21241, 22889 => 21261, 22890 => 35335, +22891 => 21264, 22892 => 20971, 22893 => 22809, 22894 => 20821, 22895 => 20128, +22896 => 20822, 22897 => 20147, 22898 => 34926, 22899 => 34980, 22900 => 20149, +22901 => 33044, 22902 => 35026, 22903 => 31104, 22904 => 23348, 22905 => 34819, +22906 => 32696, 22907 => 20907, 22908 => 20913, 22909 => 20925, 22910 => 20924, +23073 => 20935, 23074 => 20886, 23075 => 20898, 23076 => 20901, 23077 => 35744, +23078 => 35750, 23079 => 35751, 23080 => 35754, 23081 => 35764, 23082 => 35765, +23083 => 35767, 23084 => 35778, 23085 => 35779, 23086 => 35787, 23087 => 35791, +23088 => 35790, 23089 => 35794, 23090 => 35795, 23091 => 35796, 23092 => 35798, +23093 => 35800, 23094 => 35801, 23095 => 35804, 23096 => 35807, 23097 => 35808, +23098 => 35812, 23099 => 35816, 23100 => 35817, 23101 => 35822, 23102 => 35824, +23103 => 35827, 23104 => 35830, 23105 => 35833, 23106 => 35836, 23107 => 35839, +23108 => 35840, 23109 => 35842, 23110 => 35844, 23111 => 35847, 23112 => 35852, +23113 => 35855, 23114 => 35857, 23115 => 35858, 23116 => 35860, 23117 => 35861, +23118 => 35862, 23119 => 35865, 23120 => 35867, 23121 => 35864, 23122 => 35869, +23123 => 35871, 23124 => 35872, 23125 => 35873, 23126 => 35877, 23127 => 35879, +23128 => 35882, 23129 => 35883, 23130 => 35886, 23131 => 35887, 23132 => 35890, +23133 => 35891, 23134 => 35893, 23135 => 35894, 23136 => 21353, 23137 => 21370, +23138 => 38429, 23139 => 38434, 23140 => 38433, 23141 => 38449, 23142 => 38442, +23143 => 38461, 23144 => 38460, 23145 => 38466, 23146 => 38473, 23147 => 38484, +23148 => 38495, 23149 => 38503, 23150 => 38508, 23151 => 38514, 23152 => 38516, +23153 => 38536, 23154 => 38541, 23155 => 38551, 23156 => 38576, 23157 => 37015, +23158 => 37019, 23159 => 37021, 23160 => 37017, 23161 => 37036, 23162 => 37025, +23163 => 37044, 23164 => 37043, 23165 => 37046, 23166 => 37050, 23329 => 37048, +23330 => 37040, 23331 => 37071, 23332 => 37061, 23333 => 37054, 23334 => 37072, +23335 => 37060, 23336 => 37063, 23337 => 37075, 23338 => 37094, 23339 => 37090, +23340 => 37084, 23341 => 37079, 23342 => 37083, 23343 => 37099, 23344 => 37103, +23345 => 37118, 23346 => 37124, 23347 => 37154, 23348 => 37150, 23349 => 37155, +23350 => 37169, 23351 => 37167, 23352 => 37177, 23353 => 37187, 23354 => 37190, +23355 => 21005, 23356 => 22850, 23357 => 21154, 23358 => 21164, 23359 => 21165, +23360 => 21182, 23361 => 21759, 23362 => 21200, 23363 => 21206, 23364 => 21232, +23365 => 21471, 23366 => 29166, 23367 => 30669, 23368 => 24308, 23369 => 20981, +23370 => 20988, 23371 => 39727, 23372 => 21430, 23373 => 24321, 23374 => 30042, +23375 => 24047, 23376 => 22348, 23377 => 22441, 23378 => 22433, 23379 => 22654, +23380 => 22716, 23381 => 22725, 23382 => 22737, 23383 => 22313, 23384 => 22316, +23385 => 22314, 23386 => 22323, 23387 => 22329, 23388 => 22318, 23389 => 22319, +23390 => 22364, 23391 => 22331, 23392 => 22338, 23393 => 22377, 23394 => 22405, +23395 => 22379, 23396 => 22406, 23397 => 22396, 23398 => 22395, 23399 => 22376, +23400 => 22381, 23401 => 22390, 23402 => 22387, 23403 => 22445, 23404 => 22436, +23405 => 22412, 23406 => 22450, 23407 => 22479, 23408 => 22439, 23409 => 22452, +23410 => 22419, 23411 => 22432, 23412 => 22485, 23413 => 22488, 23414 => 22490, +23415 => 22489, 23416 => 22482, 23417 => 22456, 23418 => 22516, 23419 => 22511, +23420 => 22520, 23421 => 22500, 23422 => 22493, 23585 => 22539, 23586 => 22541, +23587 => 22525, 23588 => 22509, 23589 => 22528, 23590 => 22558, 23591 => 22553, +23592 => 22596, 23593 => 22560, 23594 => 22629, 23595 => 22636, 23596 => 22657, +23597 => 22665, 23598 => 22682, 23599 => 22656, 23600 => 39336, 23601 => 40729, +23602 => 25087, 23603 => 33401, 23604 => 33405, 23605 => 33407, 23606 => 33423, +23607 => 33418, 23608 => 33448, 23609 => 33412, 23610 => 33422, 23611 => 33425, +23612 => 33431, 23613 => 33433, 23614 => 33451, 23615 => 33464, 23616 => 33470, +23617 => 33456, 23618 => 33480, 23619 => 33482, 23620 => 33507, 23621 => 33432, +23622 => 33463, 23623 => 33454, 23624 => 33483, 23625 => 33484, 23626 => 33473, +23627 => 33449, 23628 => 33460, 23629 => 33441, 23630 => 33450, 23631 => 33439, +23632 => 33476, 23633 => 33486, 23634 => 33444, 23635 => 33505, 23636 => 33545, +23637 => 33527, 23638 => 33508, 23639 => 33551, 23640 => 33543, 23641 => 33500, +23642 => 33524, 23643 => 33490, 23644 => 33496, 23645 => 33548, 23646 => 33531, +23647 => 33491, 23648 => 33553, 23649 => 33562, 23650 => 33542, 23651 => 33556, +23652 => 33557, 23653 => 33504, 23654 => 33493, 23655 => 33564, 23656 => 33617, +23657 => 33627, 23658 => 33628, 23659 => 33544, 23660 => 33682, 23661 => 33596, +23662 => 33588, 23663 => 33585, 23664 => 33691, 23665 => 33630, 23666 => 33583, +23667 => 33615, 23668 => 33607, 23669 => 33603, 23670 => 33631, 23671 => 33600, +23672 => 33559, 23673 => 33632, 23674 => 33581, 23675 => 33594, 23676 => 33587, +23677 => 33638, 23678 => 33637, 23841 => 33640, 23842 => 33563, 23843 => 33641, +23844 => 33644, 23845 => 33642, 23846 => 33645, 23847 => 33646, 23848 => 33712, +23849 => 33656, 23850 => 33715, 23851 => 33716, 23852 => 33696, 23853 => 33706, +23854 => 33683, 23855 => 33692, 23856 => 33669, 23857 => 33660, 23858 => 33718, +23859 => 33705, 23860 => 33661, 23861 => 33720, 23862 => 33659, 23863 => 33688, +23864 => 33694, 23865 => 33704, 23866 => 33722, 23867 => 33724, 23868 => 33729, +23869 => 33793, 23870 => 33765, 23871 => 33752, 23872 => 22535, 23873 => 33816, +23874 => 33803, 23875 => 33757, 23876 => 33789, 23877 => 33750, 23878 => 33820, +23879 => 33848, 23880 => 33809, 23881 => 33798, 23882 => 33748, 23883 => 33759, +23884 => 33807, 23885 => 33795, 23886 => 33784, 23887 => 33785, 23888 => 33770, +23889 => 33733, 23890 => 33728, 23891 => 33830, 23892 => 33776, 23893 => 33761, +23894 => 33884, 23895 => 33873, 23896 => 33882, 23897 => 33881, 23898 => 33907, +23899 => 33927, 23900 => 33928, 23901 => 33914, 23902 => 33929, 23903 => 33912, +23904 => 33852, 23905 => 33862, 23906 => 33897, 23907 => 33910, 23908 => 33932, +23909 => 33934, 23910 => 33841, 23911 => 33901, 23912 => 33985, 23913 => 33997, +23914 => 34000, 23915 => 34022, 23916 => 33981, 23917 => 34003, 23918 => 33994, +23919 => 33983, 23920 => 33978, 23921 => 34016, 23922 => 33953, 23923 => 33977, +23924 => 33972, 23925 => 33943, 23926 => 34021, 23927 => 34019, 23928 => 34060, +23929 => 29965, 23930 => 34104, 23931 => 34032, 23932 => 34105, 23933 => 34079, +23934 => 34106, 24097 => 34134, 24098 => 34107, 24099 => 34047, 24100 => 34044, +24101 => 34137, 24102 => 34120, 24103 => 34152, 24104 => 34148, 24105 => 34142, +24106 => 34170, 24107 => 30626, 24108 => 34115, 24109 => 34162, 24110 => 34171, +24111 => 34212, 24112 => 34216, 24113 => 34183, 24114 => 34191, 24115 => 34169, +24116 => 34222, 24117 => 34204, 24118 => 34181, 24119 => 34233, 24120 => 34231, +24121 => 34224, 24122 => 34259, 24123 => 34241, 24124 => 34268, 24125 => 34303, +24126 => 34343, 24127 => 34309, 24128 => 34345, 24129 => 34326, 24130 => 34364, +24131 => 24318, 24132 => 24328, 24133 => 22844, 24134 => 22849, 24135 => 32823, +24136 => 22869, 24137 => 22874, 24138 => 22872, 24139 => 21263, 24140 => 23586, +24141 => 23589, 24142 => 23596, 24143 => 23604, 24144 => 25164, 24145 => 25194, +24146 => 25247, 24147 => 25275, 24148 => 25290, 24149 => 25306, 24150 => 25303, +24151 => 25326, 24152 => 25378, 24153 => 25334, 24154 => 25401, 24155 => 25419, +24156 => 25411, 24157 => 25517, 24158 => 25590, 24159 => 25457, 24160 => 25466, +24161 => 25486, 24162 => 25524, 24163 => 25453, 24164 => 25516, 24165 => 25482, +24166 => 25449, 24167 => 25518, 24168 => 25532, 24169 => 25586, 24170 => 25592, +24171 => 25568, 24172 => 25599, 24173 => 25540, 24174 => 25566, 24175 => 25550, +24176 => 25682, 24177 => 25542, 24178 => 25534, 24179 => 25669, 24180 => 25665, +24181 => 25611, 24182 => 25627, 24183 => 25632, 24184 => 25612, 24185 => 25638, +24186 => 25633, 24187 => 25694, 24188 => 25732, 24189 => 25709, 24190 => 25750, +24353 => 25722, 24354 => 25783, 24355 => 25784, 24356 => 25753, 24357 => 25786, +24358 => 25792, 24359 => 25808, 24360 => 25815, 24361 => 25828, 24362 => 25826, +24363 => 25865, 24364 => 25893, 24365 => 25902, 24366 => 24331, 24367 => 24530, +24368 => 29977, 24369 => 24337, 24370 => 21343, 24371 => 21489, 24372 => 21501, +24373 => 21481, 24374 => 21480, 24375 => 21499, 24376 => 21522, 24377 => 21526, +24378 => 21510, 24379 => 21579, 24380 => 21586, 24381 => 21587, 24382 => 21588, +24383 => 21590, 24384 => 21571, 24385 => 21537, 24386 => 21591, 24387 => 21593, +24388 => 21539, 24389 => 21554, 24390 => 21634, 24391 => 21652, 24392 => 21623, +24393 => 21617, 24394 => 21604, 24395 => 21658, 24396 => 21659, 24397 => 21636, +24398 => 21622, 24399 => 21606, 24400 => 21661, 24401 => 21712, 24402 => 21677, +24403 => 21698, 24404 => 21684, 24405 => 21714, 24406 => 21671, 24407 => 21670, +24408 => 21715, 24409 => 21716, 24410 => 21618, 24411 => 21667, 24412 => 21717, +24413 => 21691, 24414 => 21695, 24415 => 21708, 24416 => 21721, 24417 => 21722, +24418 => 21724, 24419 => 21673, 24420 => 21674, 24421 => 21668, 24422 => 21725, +24423 => 21711, 24424 => 21726, 24425 => 21787, 24426 => 21735, 24427 => 21792, +24428 => 21757, 24429 => 21780, 24430 => 21747, 24431 => 21794, 24432 => 21795, +24433 => 21775, 24434 => 21777, 24435 => 21799, 24436 => 21802, 24437 => 21863, +24438 => 21903, 24439 => 21941, 24440 => 21833, 24441 => 21869, 24442 => 21825, +24443 => 21845, 24444 => 21823, 24445 => 21840, 24446 => 21820, 24609 => 21815, +24610 => 21846, 24611 => 21877, 24612 => 21878, 24613 => 21879, 24614 => 21811, +24615 => 21808, 24616 => 21852, 24617 => 21899, 24618 => 21970, 24619 => 21891, +24620 => 21937, 24621 => 21945, 24622 => 21896, 24623 => 21889, 24624 => 21919, +24625 => 21886, 24626 => 21974, 24627 => 21905, 24628 => 21883, 24629 => 21983, +24630 => 21949, 24631 => 21950, 24632 => 21908, 24633 => 21913, 24634 => 21994, +24635 => 22007, 24636 => 21961, 24637 => 22047, 24638 => 21969, 24639 => 21995, +24640 => 21996, 24641 => 21972, 24642 => 21990, 24643 => 21981, 24644 => 21956, +24645 => 21999, 24646 => 21989, 24647 => 22002, 24648 => 22003, 24649 => 21964, +24650 => 21965, 24651 => 21992, 24652 => 22005, 24653 => 21988, 24654 => 36756, +24655 => 22046, 24656 => 22024, 24657 => 22028, 24658 => 22017, 24659 => 22052, +24660 => 22051, 24661 => 22014, 24662 => 22016, 24663 => 22055, 24664 => 22061, +24665 => 22104, 24666 => 22073, 24667 => 22103, 24668 => 22060, 24669 => 22093, +24670 => 22114, 24671 => 22105, 24672 => 22108, 24673 => 22092, 24674 => 22100, +24675 => 22150, 24676 => 22116, 24677 => 22129, 24678 => 22123, 24679 => 22139, +24680 => 22140, 24681 => 22149, 24682 => 22163, 24683 => 22191, 24684 => 22228, +24685 => 22231, 24686 => 22237, 24687 => 22241, 24688 => 22261, 24689 => 22251, +24690 => 22265, 24691 => 22271, 24692 => 22276, 24693 => 22282, 24694 => 22281, +24695 => 22300, 24696 => 24079, 24697 => 24089, 24698 => 24084, 24699 => 24081, +24700 => 24113, 24701 => 24123, 24702 => 24124, 24865 => 24119, 24866 => 24132, +24867 => 24148, 24868 => 24155, 24869 => 24158, 24870 => 24161, 24871 => 23692, +24872 => 23674, 24873 => 23693, 24874 => 23696, 24875 => 23702, 24876 => 23688, +24877 => 23704, 24878 => 23705, 24879 => 23697, 24880 => 23706, 24881 => 23708, +24882 => 23733, 24883 => 23714, 24884 => 23741, 24885 => 23724, 24886 => 23723, +24887 => 23729, 24888 => 23715, 24889 => 23745, 24890 => 23735, 24891 => 23748, +24892 => 23762, 24893 => 23780, 24894 => 23755, 24895 => 23781, 24896 => 23810, +24897 => 23811, 24898 => 23847, 24899 => 23846, 24900 => 23854, 24901 => 23844, +24902 => 23838, 24903 => 23814, 24904 => 23835, 24905 => 23896, 24906 => 23870, +24907 => 23860, 24908 => 23869, 24909 => 23916, 24910 => 23899, 24911 => 23919, +24912 => 23901, 24913 => 23915, 24914 => 23883, 24915 => 23882, 24916 => 23913, +24917 => 23924, 24918 => 23938, 24919 => 23961, 24920 => 23965, 24921 => 35955, +24922 => 23991, 24923 => 24005, 24924 => 24435, 24925 => 24439, 24926 => 24450, +24927 => 24455, 24928 => 24457, 24929 => 24460, 24930 => 24469, 24931 => 24473, +24932 => 24476, 24933 => 24488, 24934 => 24493, 24935 => 24501, 24936 => 24508, +24937 => 34914, 24938 => 24417, 24939 => 29357, 24940 => 29360, 24941 => 29364, +24942 => 29367, 24943 => 29368, 24944 => 29379, 24945 => 29377, 24946 => 29390, +24947 => 29389, 24948 => 29394, 24949 => 29416, 24950 => 29423, 24951 => 29417, +24952 => 29426, 24953 => 29428, 24954 => 29431, 24955 => 29441, 24956 => 29427, +24957 => 29443, 24958 => 29434, 25121 => 29435, 25122 => 29463, 25123 => 29459, +25124 => 29473, 25125 => 29450, 25126 => 29470, 25127 => 29469, 25128 => 29461, +25129 => 29474, 25130 => 29497, 25131 => 29477, 25132 => 29484, 25133 => 29496, +25134 => 29489, 25135 => 29520, 25136 => 29517, 25137 => 29527, 25138 => 29536, +25139 => 29548, 25140 => 29551, 25141 => 29566, 25142 => 33307, 25143 => 22821, +25144 => 39143, 25145 => 22820, 25146 => 22786, 25147 => 39267, 25148 => 39271, +25149 => 39272, 25150 => 39273, 25151 => 39274, 25152 => 39275, 25153 => 39276, +25154 => 39284, 25155 => 39287, 25156 => 39293, 25157 => 39296, 25158 => 39300, +25159 => 39303, 25160 => 39306, 25161 => 39309, 25162 => 39312, 25163 => 39313, +25164 => 39315, 25165 => 39316, 25166 => 39317, 25167 => 24192, 25168 => 24209, +25169 => 24203, 25170 => 24214, 25171 => 24229, 25172 => 24224, 25173 => 24249, +25174 => 24245, 25175 => 24254, 25176 => 24243, 25177 => 36179, 25178 => 24274, +25179 => 24273, 25180 => 24283, 25181 => 24296, 25182 => 24298, 25183 => 33210, +25184 => 24516, 25185 => 24521, 25186 => 24534, 25187 => 24527, 25188 => 24579, +25189 => 24558, 25190 => 24580, 25191 => 24545, 25192 => 24548, 25193 => 24574, +25194 => 24581, 25195 => 24582, 25196 => 24554, 25197 => 24557, 25198 => 24568, +25199 => 24601, 25200 => 24629, 25201 => 24614, 25202 => 24603, 25203 => 24591, +25204 => 24589, 25205 => 24617, 25206 => 24619, 25207 => 24586, 25208 => 24639, +25209 => 24609, 25210 => 24696, 25211 => 24697, 25212 => 24699, 25213 => 24698, +25214 => 24642, 25377 => 24682, 25378 => 24701, 25379 => 24726, 25380 => 24730, +25381 => 24749, 25382 => 24733, 25383 => 24707, 25384 => 24722, 25385 => 24716, +25386 => 24731, 25387 => 24812, 25388 => 24763, 25389 => 24753, 25390 => 24797, +25391 => 24792, 25392 => 24774, 25393 => 24794, 25394 => 24756, 25395 => 24864, +25396 => 24870, 25397 => 24853, 25398 => 24867, 25399 => 24820, 25400 => 24832, +25401 => 24846, 25402 => 24875, 25403 => 24906, 25404 => 24949, 25405 => 25004, +25406 => 24980, 25407 => 24999, 25408 => 25015, 25409 => 25044, 25410 => 25077, +25411 => 24541, 25412 => 38579, 25413 => 38377, 25414 => 38379, 25415 => 38385, +25416 => 38387, 25417 => 38389, 25418 => 38390, 25419 => 38396, 25420 => 38398, +25421 => 38403, 25422 => 38404, 25423 => 38406, 25424 => 38408, 25425 => 38410, +25426 => 38411, 25427 => 38412, 25428 => 38413, 25429 => 38415, 25430 => 38418, +25431 => 38421, 25432 => 38422, 25433 => 38423, 25434 => 38425, 25435 => 38426, +25436 => 20012, 25437 => 29247, 25438 => 25109, 25439 => 27701, 25440 => 27732, +25441 => 27740, 25442 => 27722, 25443 => 27811, 25444 => 27781, 25445 => 27792, +25446 => 27796, 25447 => 27788, 25448 => 27752, 25449 => 27753, 25450 => 27764, +25451 => 27766, 25452 => 27782, 25453 => 27817, 25454 => 27856, 25455 => 27860, +25456 => 27821, 25457 => 27895, 25458 => 27896, 25459 => 27889, 25460 => 27863, +25461 => 27826, 25462 => 27872, 25463 => 27862, 25464 => 27898, 25465 => 27883, +25466 => 27886, 25467 => 27825, 25468 => 27859, 25469 => 27887, 25470 => 27902, +25633 => 27961, 25634 => 27943, 25635 => 27916, 25636 => 27971, 25637 => 27976, +25638 => 27911, 25639 => 27908, 25640 => 27929, 25641 => 27918, 25642 => 27947, +25643 => 27981, 25644 => 27950, 25645 => 27957, 25646 => 27930, 25647 => 27983, +25648 => 27986, 25649 => 27988, 25650 => 27955, 25651 => 28049, 25652 => 28015, +25653 => 28062, 25654 => 28064, 25655 => 27998, 25656 => 28051, 25657 => 28052, +25658 => 27996, 25659 => 28000, 25660 => 28028, 25661 => 28003, 25662 => 28186, +25663 => 28103, 25664 => 28101, 25665 => 28126, 25666 => 28174, 25667 => 28095, +25668 => 28128, 25669 => 28177, 25670 => 28134, 25671 => 28125, 25672 => 28121, +25673 => 28182, 25674 => 28075, 25675 => 28172, 25676 => 28078, 25677 => 28203, +25678 => 28270, 25679 => 28238, 25680 => 28267, 25681 => 28338, 25682 => 28255, +25683 => 28294, 25684 => 28243, 25685 => 28244, 25686 => 28210, 25687 => 28197, +25688 => 28228, 25689 => 28383, 25690 => 28337, 25691 => 28312, 25692 => 28384, +25693 => 28461, 25694 => 28386, 25695 => 28325, 25696 => 28327, 25697 => 28349, +25698 => 28347, 25699 => 28343, 25700 => 28375, 25701 => 28340, 25702 => 28367, +25703 => 28303, 25704 => 28354, 25705 => 28319, 25706 => 28514, 25707 => 28486, +25708 => 28487, 25709 => 28452, 25710 => 28437, 25711 => 28409, 25712 => 28463, +25713 => 28470, 25714 => 28491, 25715 => 28532, 25716 => 28458, 25717 => 28425, +25718 => 28457, 25719 => 28553, 25720 => 28557, 25721 => 28556, 25722 => 28536, +25723 => 28530, 25724 => 28540, 25725 => 28538, 25726 => 28625, 25889 => 28617, +25890 => 28583, 25891 => 28601, 25892 => 28598, 25893 => 28610, 25894 => 28641, +25895 => 28654, 25896 => 28638, 25897 => 28640, 25898 => 28655, 25899 => 28698, +25900 => 28707, 25901 => 28699, 25902 => 28729, 25903 => 28725, 25904 => 28751, +25905 => 28766, 25906 => 23424, 25907 => 23428, 25908 => 23445, 25909 => 23443, +25910 => 23461, 25911 => 23480, 25912 => 29999, 25913 => 39582, 25914 => 25652, +25915 => 23524, 25916 => 23534, 25917 => 35120, 25918 => 23536, 25919 => 36423, +25920 => 35591, 25921 => 36790, 25922 => 36819, 25923 => 36821, 25924 => 36837, +25925 => 36846, 25926 => 36836, 25927 => 36841, 25928 => 36838, 25929 => 36851, +25930 => 36840, 25931 => 36869, 25932 => 36868, 25933 => 36875, 25934 => 36902, +25935 => 36881, 25936 => 36877, 25937 => 36886, 25938 => 36897, 25939 => 36917, +25940 => 36918, 25941 => 36909, 25942 => 36911, 25943 => 36932, 25944 => 36945, +25945 => 36946, 25946 => 36944, 25947 => 36968, 25948 => 36952, 25949 => 36962, +25950 => 36955, 25951 => 26297, 25952 => 36980, 25953 => 36989, 25954 => 36994, +25955 => 37000, 25956 => 36995, 25957 => 37003, 25958 => 24400, 25959 => 24407, +25960 => 24406, 25961 => 24408, 25962 => 23611, 25963 => 21675, 25964 => 23632, +25965 => 23641, 25966 => 23409, 25967 => 23651, 25968 => 23654, 25969 => 32700, +25970 => 24362, 25971 => 24361, 25972 => 24365, 25973 => 33396, 25974 => 24380, +25975 => 39739, 25976 => 23662, 25977 => 22913, 25978 => 22915, 25979 => 22925, +25980 => 22953, 25981 => 22954, 25982 => 22947, 26145 => 22935, 26146 => 22986, +26147 => 22955, 26148 => 22942, 26149 => 22948, 26150 => 22994, 26151 => 22962, +26152 => 22959, 26153 => 22999, 26154 => 22974, 26155 => 23045, 26156 => 23046, +26157 => 23005, 26158 => 23048, 26159 => 23011, 26160 => 23000, 26161 => 23033, +26162 => 23052, 26163 => 23049, 26164 => 23090, 26165 => 23092, 26166 => 23057, +26167 => 23075, 26168 => 23059, 26169 => 23104, 26170 => 23143, 26171 => 23114, +26172 => 23125, 26173 => 23100, 26174 => 23138, 26175 => 23157, 26176 => 33004, +26177 => 23210, 26178 => 23195, 26179 => 23159, 26180 => 23162, 26181 => 23230, +26182 => 23275, 26183 => 23218, 26184 => 23250, 26185 => 23252, 26186 => 23224, +26187 => 23264, 26188 => 23267, 26189 => 23281, 26190 => 23254, 26191 => 23270, +26192 => 23256, 26193 => 23260, 26194 => 23305, 26195 => 23319, 26196 => 23318, +26197 => 23346, 26198 => 23351, 26199 => 23360, 26200 => 23573, 26201 => 23580, +26202 => 23386, 26203 => 23397, 26204 => 23411, 26205 => 23377, 26206 => 23379, +26207 => 23394, 26208 => 39541, 26209 => 39543, 26210 => 39544, 26211 => 39546, +26212 => 39551, 26213 => 39549, 26214 => 39552, 26215 => 39553, 26216 => 39557, +26217 => 39560, 26218 => 39562, 26219 => 39568, 26220 => 39570, 26221 => 39571, +26222 => 39574, 26223 => 39576, 26224 => 39579, 26225 => 39580, 26226 => 39581, +26227 => 39583, 26228 => 39584, 26229 => 39586, 26230 => 39587, 26231 => 39589, +26232 => 39591, 26233 => 32415, 26234 => 32417, 26235 => 32419, 26236 => 32421, +26237 => 32424, 26238 => 32425, 26401 => 32429, 26402 => 32432, 26403 => 32446, +26404 => 32448, 26405 => 32449, 26406 => 32450, 26407 => 32457, 26408 => 32459, +26409 => 32460, 26410 => 32464, 26411 => 32468, 26412 => 32471, 26413 => 32475, +26414 => 32480, 26415 => 32481, 26416 => 32488, 26417 => 32491, 26418 => 32494, +26419 => 32495, 26420 => 32497, 26421 => 32498, 26422 => 32525, 26423 => 32502, +26424 => 32506, 26425 => 32507, 26426 => 32510, 26427 => 32513, 26428 => 32514, +26429 => 32515, 26430 => 32519, 26431 => 32520, 26432 => 32523, 26433 => 32524, +26434 => 32527, 26435 => 32529, 26436 => 32530, 26437 => 32535, 26438 => 32537, +26439 => 32540, 26440 => 32539, 26441 => 32543, 26442 => 32545, 26443 => 32546, +26444 => 32547, 26445 => 32548, 26446 => 32549, 26447 => 32550, 26448 => 32551, +26449 => 32554, 26450 => 32555, 26451 => 32556, 26452 => 32557, 26453 => 32559, +26454 => 32560, 26455 => 32561, 26456 => 32562, 26457 => 32563, 26458 => 32565, +26459 => 24186, 26460 => 30079, 26461 => 24027, 26462 => 30014, 26463 => 37013, +26464 => 29582, 26465 => 29585, 26466 => 29614, 26467 => 29602, 26468 => 29599, +26469 => 29647, 26470 => 29634, 26471 => 29649, 26472 => 29623, 26473 => 29619, +26474 => 29632, 26475 => 29641, 26476 => 29640, 26477 => 29669, 26478 => 29657, +26479 => 39036, 26480 => 29706, 26481 => 29673, 26482 => 29671, 26483 => 29662, +26484 => 29626, 26485 => 29682, 26486 => 29711, 26487 => 29738, 26488 => 29787, +26489 => 29734, 26490 => 29733, 26491 => 29736, 26492 => 29744, 26493 => 29742, +26494 => 29740, 26657 => 29723, 26658 => 29722, 26659 => 29761, 26660 => 29788, +26661 => 29783, 26662 => 29781, 26663 => 29785, 26664 => 29815, 26665 => 29805, +26666 => 29822, 26667 => 29852, 26668 => 29838, 26669 => 29824, 26670 => 29825, +26671 => 29831, 26672 => 29835, 26673 => 29854, 26674 => 29864, 26675 => 29865, +26676 => 29840, 26677 => 29863, 26678 => 29906, 26679 => 29882, 26680 => 38890, +26681 => 38891, 26682 => 38892, 26683 => 26444, 26684 => 26451, 26685 => 26462, +26686 => 26440, 26687 => 26473, 26688 => 26533, 26689 => 26503, 26690 => 26474, +26691 => 26483, 26692 => 26520, 26693 => 26535, 26694 => 26485, 26695 => 26536, +26696 => 26526, 26697 => 26541, 26698 => 26507, 26699 => 26487, 26700 => 26492, +26701 => 26608, 26702 => 26633, 26703 => 26584, 26704 => 26634, 26705 => 26601, +26706 => 26544, 26707 => 26636, 26708 => 26585, 26709 => 26549, 26710 => 26586, +26711 => 26547, 26712 => 26589, 26713 => 26624, 26714 => 26563, 26715 => 26552, +26716 => 26594, 26717 => 26638, 26718 => 26561, 26719 => 26621, 26720 => 26674, +26721 => 26675, 26722 => 26720, 26723 => 26721, 26724 => 26702, 26725 => 26722, +26726 => 26692, 26727 => 26724, 26728 => 26755, 26729 => 26653, 26730 => 26709, +26731 => 26726, 26732 => 26689, 26733 => 26727, 26734 => 26688, 26735 => 26686, +26736 => 26698, 26737 => 26697, 26738 => 26665, 26739 => 26805, 26740 => 26767, +26741 => 26740, 26742 => 26743, 26743 => 26771, 26744 => 26731, 26745 => 26818, +26746 => 26990, 26747 => 26876, 26748 => 26911, 26749 => 26912, 26750 => 26873, +26913 => 26916, 26914 => 26864, 26915 => 26891, 26916 => 26881, 26917 => 26967, +26918 => 26851, 26919 => 26896, 26920 => 26993, 26921 => 26937, 26922 => 26976, +26923 => 26946, 26924 => 26973, 26925 => 27012, 26926 => 26987, 26927 => 27008, +26928 => 27032, 26929 => 27000, 26930 => 26932, 26931 => 27084, 26932 => 27015, +26933 => 27016, 26934 => 27086, 26935 => 27017, 26936 => 26982, 26937 => 26979, +26938 => 27001, 26939 => 27035, 26940 => 27047, 26941 => 27067, 26942 => 27051, +26943 => 27053, 26944 => 27092, 26945 => 27057, 26946 => 27073, 26947 => 27082, +26948 => 27103, 26949 => 27029, 26950 => 27104, 26951 => 27021, 26952 => 27135, +26953 => 27183, 26954 => 27117, 26955 => 27159, 26956 => 27160, 26957 => 27237, +26958 => 27122, 26959 => 27204, 26960 => 27198, 26961 => 27296, 26962 => 27216, +26963 => 27227, 26964 => 27189, 26965 => 27278, 26966 => 27257, 26967 => 27197, +26968 => 27176, 26969 => 27224, 26970 => 27260, 26971 => 27281, 26972 => 27280, +26973 => 27305, 26974 => 27287, 26975 => 27307, 26976 => 29495, 26977 => 29522, +26978 => 27521, 26979 => 27522, 26980 => 27527, 26981 => 27524, 26982 => 27538, +26983 => 27539, 26984 => 27533, 26985 => 27546, 26986 => 27547, 26987 => 27553, +26988 => 27562, 26989 => 36715, 26990 => 36717, 26991 => 36721, 26992 => 36722, +26993 => 36723, 26994 => 36725, 26995 => 36726, 26996 => 36728, 26997 => 36727, +26998 => 36729, 26999 => 36730, 27000 => 36732, 27001 => 36734, 27002 => 36737, +27003 => 36738, 27004 => 36740, 27005 => 36743, 27006 => 36747, 27169 => 36749, +27170 => 36750, 27171 => 36751, 27172 => 36760, 27173 => 36762, 27174 => 36558, +27175 => 25099, 27176 => 25111, 27177 => 25115, 27178 => 25119, 27179 => 25122, +27180 => 25121, 27181 => 25125, 27182 => 25124, 27183 => 25132, 27184 => 33255, +27185 => 29935, 27186 => 29940, 27187 => 29951, 27188 => 29967, 27189 => 29969, +27190 => 29971, 27191 => 25908, 27192 => 26094, 27193 => 26095, 27194 => 26096, +27195 => 26122, 27196 => 26137, 27197 => 26482, 27198 => 26115, 27199 => 26133, +27200 => 26112, 27201 => 28805, 27202 => 26359, 27203 => 26141, 27204 => 26164, +27205 => 26161, 27206 => 26166, 27207 => 26165, 27208 => 32774, 27209 => 26207, +27210 => 26196, 27211 => 26177, 27212 => 26191, 27213 => 26198, 27214 => 26209, +27215 => 26199, 27216 => 26231, 27217 => 26244, 27218 => 26252, 27219 => 26279, +27220 => 26269, 27221 => 26302, 27222 => 26331, 27223 => 26332, 27224 => 26342, +27225 => 26345, 27226 => 36146, 27227 => 36147, 27228 => 36150, 27229 => 36155, +27230 => 36157, 27231 => 36160, 27232 => 36165, 27233 => 36166, 27234 => 36168, +27235 => 36169, 27236 => 36167, 27237 => 36173, 27238 => 36181, 27239 => 36185, +27240 => 35271, 27241 => 35274, 27242 => 35275, 27243 => 35276, 27244 => 35278, +27245 => 35279, 27246 => 35280, 27247 => 35281, 27248 => 29294, 27249 => 29343, +27250 => 29277, 27251 => 29286, 27252 => 29295, 27253 => 29310, 27254 => 29311, +27255 => 29316, 27256 => 29323, 27257 => 29325, 27258 => 29327, 27259 => 29330, +27260 => 25352, 27261 => 25394, 27262 => 25520, 27425 => 25663, 27426 => 25816, +27427 => 32772, 27428 => 27626, 27429 => 27635, 27430 => 27645, 27431 => 27637, +27432 => 27641, 27433 => 27653, 27434 => 27655, 27435 => 27654, 27436 => 27661, +27437 => 27669, 27438 => 27672, 27439 => 27673, 27440 => 27674, 27441 => 27681, +27442 => 27689, 27443 => 27684, 27444 => 27690, 27445 => 27698, 27446 => 25909, +27447 => 25941, 27448 => 25963, 27449 => 29261, 27450 => 29266, 27451 => 29270, +27452 => 29232, 27453 => 34402, 27454 => 21014, 27455 => 32927, 27456 => 32924, +27457 => 32915, 27458 => 32956, 27459 => 26378, 27460 => 32957, 27461 => 32945, +27462 => 32939, 27463 => 32941, 27464 => 32948, 27465 => 32951, 27466 => 32999, +27467 => 33000, 27468 => 33001, 27469 => 33002, 27470 => 32987, 27471 => 32962, +27472 => 32964, 27473 => 32985, 27474 => 32973, 27475 => 32983, 27476 => 26384, +27477 => 32989, 27478 => 33003, 27479 => 33009, 27480 => 33012, 27481 => 33005, +27482 => 33037, 27483 => 33038, 27484 => 33010, 27485 => 33020, 27486 => 26389, +27487 => 33042, 27488 => 35930, 27489 => 33078, 27490 => 33054, 27491 => 33068, +27492 => 33048, 27493 => 33074, 27494 => 33096, 27495 => 33100, 27496 => 33107, +27497 => 33140, 27498 => 33113, 27499 => 33114, 27500 => 33137, 27501 => 33120, +27502 => 33129, 27503 => 33148, 27504 => 33149, 27505 => 33133, 27506 => 33127, +27507 => 22605, 27508 => 23221, 27509 => 33160, 27510 => 33154, 27511 => 33169, +27512 => 28373, 27513 => 33187, 27514 => 33194, 27515 => 33228, 27516 => 26406, +27517 => 33226, 27518 => 33211, 27681 => 33217, 27682 => 33190, 27683 => 27428, +27684 => 27447, 27685 => 27449, 27686 => 27459, 27687 => 27462, 27688 => 27481, +27689 => 39121, 27690 => 39122, 27691 => 39123, 27692 => 39125, 27693 => 39129, +27694 => 39130, 27695 => 27571, 27696 => 24384, 27697 => 27586, 27698 => 35315, +27699 => 26000, 27700 => 40785, 27701 => 26003, 27702 => 26044, 27703 => 26054, +27704 => 26052, 27705 => 26051, 27706 => 26060, 27707 => 26062, 27708 => 26066, +27709 => 26070, 27710 => 28800, 27711 => 28828, 27712 => 28822, 27713 => 28829, +27714 => 28859, 27715 => 28864, 27716 => 28855, 27717 => 28843, 27718 => 28849, +27719 => 28904, 27720 => 28874, 27721 => 28944, 27722 => 28947, 27723 => 28950, +27724 => 28975, 27725 => 28977, 27726 => 29043, 27727 => 29020, 27728 => 29032, +27729 => 28997, 27730 => 29042, 27731 => 29002, 27732 => 29048, 27733 => 29050, +27734 => 29080, 27735 => 29107, 27736 => 29109, 27737 => 29096, 27738 => 29088, +27739 => 29152, 27740 => 29140, 27741 => 29159, 27742 => 29177, 27743 => 29213, +27744 => 29224, 27745 => 28780, 27746 => 28952, 27747 => 29030, 27748 => 29113, +27749 => 25150, 27750 => 25149, 27751 => 25155, 27752 => 25160, 27753 => 25161, +27754 => 31035, 27755 => 31040, 27756 => 31046, 27757 => 31049, 27758 => 31067, +27759 => 31068, 27760 => 31059, 27761 => 31066, 27762 => 31074, 27763 => 31063, +27764 => 31072, 27765 => 31087, 27766 => 31079, 27767 => 31098, 27768 => 31109, +27769 => 31114, 27770 => 31130, 27771 => 31143, 27772 => 31155, 27773 => 24529, +27774 => 24528, 27937 => 24636, 27938 => 24669, 27939 => 24666, 27940 => 24679, +27941 => 24641, 27942 => 24665, 27943 => 24675, 27944 => 24747, 27945 => 24838, +27946 => 24845, 27947 => 24925, 27948 => 25001, 27949 => 24989, 27950 => 25035, +27951 => 25041, 27952 => 25094, 27953 => 32896, 27954 => 32895, 27955 => 27795, +27956 => 27894, 27957 => 28156, 27958 => 30710, 27959 => 30712, 27960 => 30720, +27961 => 30729, 27962 => 30743, 27963 => 30744, 27964 => 30737, 27965 => 26027, +27966 => 30765, 27967 => 30748, 27968 => 30749, 27969 => 30777, 27970 => 30778, +27971 => 30779, 27972 => 30751, 27973 => 30780, 27974 => 30757, 27975 => 30764, +27976 => 30755, 27977 => 30761, 27978 => 30798, 27979 => 30829, 27980 => 30806, +27981 => 30807, 27982 => 30758, 27983 => 30800, 27984 => 30791, 27985 => 30796, +27986 => 30826, 27987 => 30875, 27988 => 30867, 27989 => 30874, 27990 => 30855, +27991 => 30876, 27992 => 30881, 27993 => 30883, 27994 => 30898, 27995 => 30905, +27996 => 30885, 27997 => 30932, 27998 => 30937, 27999 => 30921, 28000 => 30956, +28001 => 30962, 28002 => 30981, 28003 => 30964, 28004 => 30995, 28005 => 31012, +28006 => 31006, 28007 => 31028, 28008 => 40859, 28009 => 40697, 28010 => 40699, +28011 => 40700, 28012 => 30449, 28013 => 30468, 28014 => 30477, 28015 => 30457, +28016 => 30471, 28017 => 30472, 28018 => 30490, 28019 => 30498, 28020 => 30489, +28021 => 30509, 28022 => 30502, 28023 => 30517, 28024 => 30520, 28025 => 30544, +28026 => 30545, 28027 => 30535, 28028 => 30531, 28029 => 30554, 28030 => 30568, +28193 => 30562, 28194 => 30565, 28195 => 30591, 28196 => 30605, 28197 => 30589, +28198 => 30592, 28199 => 30604, 28200 => 30609, 28201 => 30623, 28202 => 30624, +28203 => 30640, 28204 => 30645, 28205 => 30653, 28206 => 30010, 28207 => 30016, +28208 => 30030, 28209 => 30027, 28210 => 30024, 28211 => 30043, 28212 => 30066, +28213 => 30073, 28214 => 30083, 28215 => 32600, 28216 => 32609, 28217 => 32607, +28218 => 35400, 28219 => 32616, 28220 => 32628, 28221 => 32625, 28222 => 32633, +28223 => 32641, 28224 => 32638, 28225 => 30413, 28226 => 30437, 28227 => 34866, +28228 => 38021, 28229 => 38022, 28230 => 38023, 28231 => 38027, 28232 => 38026, +28233 => 38028, 28234 => 38029, 28235 => 38031, 28236 => 38032, 28237 => 38036, +28238 => 38039, 28239 => 38037, 28240 => 38042, 28241 => 38043, 28242 => 38044, +28243 => 38051, 28244 => 38052, 28245 => 38059, 28246 => 38058, 28247 => 38061, +28248 => 38060, 28249 => 38063, 28250 => 38064, 28251 => 38066, 28252 => 38068, +28253 => 38070, 28254 => 38071, 28255 => 38072, 28256 => 38073, 28257 => 38074, +28258 => 38076, 28259 => 38077, 28260 => 38079, 28261 => 38084, 28262 => 38088, +28263 => 38089, 28264 => 38090, 28265 => 38091, 28266 => 38092, 28267 => 38093, +28268 => 38094, 28269 => 38096, 28270 => 38097, 28271 => 38098, 28272 => 38101, +28273 => 38102, 28274 => 38103, 28275 => 38105, 28276 => 38104, 28277 => 38107, +28278 => 38110, 28279 => 38111, 28280 => 38112, 28281 => 38114, 28282 => 38116, +28283 => 38117, 28284 => 38119, 28285 => 38120, 28286 => 38122, 28449 => 38121, +28450 => 38123, 28451 => 38126, 28452 => 38127, 28453 => 38131, 28454 => 38132, +28455 => 38133, 28456 => 38135, 28457 => 38137, 28458 => 38140, 28459 => 38141, +28460 => 38143, 28461 => 38147, 28462 => 38146, 28463 => 38150, 28464 => 38151, +28465 => 38153, 28466 => 38154, 28467 => 38157, 28468 => 38158, 28469 => 38159, +28470 => 38162, 28471 => 38163, 28472 => 38164, 28473 => 38165, 28474 => 38166, +28475 => 38168, 28476 => 38171, 28477 => 38173, 28478 => 38174, 28479 => 38175, +28480 => 38178, 28481 => 38186, 28482 => 38187, 28483 => 38185, 28484 => 38188, +28485 => 38193, 28486 => 38194, 28487 => 38196, 28488 => 38198, 28489 => 38199, +28490 => 38200, 28491 => 38204, 28492 => 38206, 28493 => 38207, 28494 => 38210, +28495 => 38197, 28496 => 38212, 28497 => 38213, 28498 => 38214, 28499 => 38217, +28500 => 38220, 28501 => 38222, 28502 => 38223, 28503 => 38226, 28504 => 38227, +28505 => 38228, 28506 => 38230, 28507 => 38231, 28508 => 38232, 28509 => 38233, +28510 => 38235, 28511 => 38238, 28512 => 38239, 28513 => 38237, 28514 => 38241, +28515 => 38242, 28516 => 38244, 28517 => 38245, 28518 => 38246, 28519 => 38247, +28520 => 38248, 28521 => 38249, 28522 => 38250, 28523 => 38251, 28524 => 38252, +28525 => 38255, 28526 => 38257, 28527 => 38258, 28528 => 38259, 28529 => 38202, +28530 => 30695, 28531 => 30700, 28532 => 38601, 28533 => 31189, 28534 => 31213, +28535 => 31203, 28536 => 31211, 28537 => 31238, 28538 => 23879, 28539 => 31235, +28540 => 31234, 28541 => 31262, 28542 => 31252, 28705 => 31289, 28706 => 31287, +28707 => 31313, 28708 => 40655, 28709 => 39333, 28710 => 31344, 28711 => 30344, +28712 => 30350, 28713 => 30355, 28714 => 30361, 28715 => 30372, 28716 => 29918, +28717 => 29920, 28718 => 29996, 28719 => 40480, 28720 => 40482, 28721 => 40488, +28722 => 40489, 28723 => 40490, 28724 => 40491, 28725 => 40492, 28726 => 40498, +28727 => 40497, 28728 => 40502, 28729 => 40504, 28730 => 40503, 28731 => 40505, +28732 => 40506, 28733 => 40510, 28734 => 40513, 28735 => 40514, 28736 => 40516, +28737 => 40518, 28738 => 40519, 28739 => 40520, 28740 => 40521, 28741 => 40523, +28742 => 40524, 28743 => 40526, 28744 => 40529, 28745 => 40533, 28746 => 40535, +28747 => 40538, 28748 => 40539, 28749 => 40540, 28750 => 40542, 28751 => 40547, +28752 => 40550, 28753 => 40551, 28754 => 40552, 28755 => 40553, 28756 => 40554, +28757 => 40555, 28758 => 40556, 28759 => 40561, 28760 => 40557, 28761 => 40563, +28762 => 30098, 28763 => 30100, 28764 => 30102, 28765 => 30112, 28766 => 30109, +28767 => 30124, 28768 => 30115, 28769 => 30131, 28770 => 30132, 28771 => 30136, +28772 => 30148, 28773 => 30129, 28774 => 30128, 28775 => 30147, 28776 => 30146, +28777 => 30166, 28778 => 30157, 28779 => 30179, 28780 => 30184, 28781 => 30182, +28782 => 30180, 28783 => 30187, 28784 => 30183, 28785 => 30211, 28786 => 30193, +28787 => 30204, 28788 => 30207, 28789 => 30224, 28790 => 30208, 28791 => 30213, +28792 => 30220, 28793 => 30231, 28794 => 30218, 28795 => 30245, 28796 => 30232, +28797 => 30229, 28798 => 30233, 28961 => 30235, 28962 => 30268, 28963 => 30242, +28964 => 30240, 28965 => 30272, 28966 => 30253, 28967 => 30256, 28968 => 30271, +28969 => 30261, 28970 => 30275, 28971 => 30270, 28972 => 30259, 28973 => 30285, +28974 => 30302, 28975 => 30292, 28976 => 30300, 28977 => 30294, 28978 => 30315, +28979 => 30319, 28980 => 32714, 28981 => 31462, 28982 => 31352, 28983 => 31353, +28984 => 31360, 28985 => 31366, 28986 => 31368, 28987 => 31381, 28988 => 31398, +28989 => 31392, 28990 => 31404, 28991 => 31400, 28992 => 31405, 28993 => 31411, +28994 => 34916, 28995 => 34921, 28996 => 34930, 28997 => 34941, 28998 => 34943, +28999 => 34946, 29000 => 34978, 29001 => 35014, 29002 => 34999, 29003 => 35004, +29004 => 35017, 29005 => 35042, 29006 => 35022, 29007 => 35043, 29008 => 35045, +29009 => 35057, 29010 => 35098, 29011 => 35068, 29012 => 35048, 29013 => 35070, +29014 => 35056, 29015 => 35105, 29016 => 35097, 29017 => 35091, 29018 => 35099, +29019 => 35082, 29020 => 35124, 29021 => 35115, 29022 => 35126, 29023 => 35137, +29024 => 35174, 29025 => 35195, 29026 => 30091, 29027 => 32997, 29028 => 30386, +29029 => 30388, 29030 => 30684, 29031 => 32786, 29032 => 32788, 29033 => 32790, +29034 => 32796, 29035 => 32800, 29036 => 32802, 29037 => 32805, 29038 => 32806, +29039 => 32807, 29040 => 32809, 29041 => 32808, 29042 => 32817, 29043 => 32779, +29044 => 32821, 29045 => 32835, 29046 => 32838, 29047 => 32845, 29048 => 32850, +29049 => 32873, 29050 => 32881, 29051 => 35203, 29052 => 39032, 29053 => 39040, +29054 => 39043, 29217 => 39049, 29218 => 39052, 29219 => 39053, 29220 => 39055, +29221 => 39060, 29222 => 39066, 29223 => 39067, 29224 => 39070, 29225 => 39071, +29226 => 39073, 29227 => 39074, 29228 => 39077, 29229 => 39078, 29230 => 34381, +29231 => 34388, 29232 => 34412, 29233 => 34414, 29234 => 34431, 29235 => 34426, +29236 => 34428, 29237 => 34427, 29238 => 34472, 29239 => 34445, 29240 => 34443, +29241 => 34476, 29242 => 34461, 29243 => 34471, 29244 => 34467, 29245 => 34474, +29246 => 34451, 29247 => 34473, 29248 => 34486, 29249 => 34500, 29250 => 34485, +29251 => 34510, 29252 => 34480, 29253 => 34490, 29254 => 34481, 29255 => 34479, +29256 => 34505, 29257 => 34511, 29258 => 34484, 29259 => 34537, 29260 => 34545, +29261 => 34546, 29262 => 34541, 29263 => 34547, 29264 => 34512, 29265 => 34579, +29266 => 34526, 29267 => 34548, 29268 => 34527, 29269 => 34520, 29270 => 34513, +29271 => 34563, 29272 => 34567, 29273 => 34552, 29274 => 34568, 29275 => 34570, +29276 => 34573, 29277 => 34569, 29278 => 34595, 29279 => 34619, 29280 => 34590, +29281 => 34597, 29282 => 34606, 29283 => 34586, 29284 => 34622, 29285 => 34632, +29286 => 34612, 29287 => 34609, 29288 => 34601, 29289 => 34615, 29290 => 34623, +29291 => 34690, 29292 => 34594, 29293 => 34685, 29294 => 34686, 29295 => 34683, +29296 => 34656, 29297 => 34672, 29298 => 34636, 29299 => 34670, 29300 => 34699, +29301 => 34643, 29302 => 34659, 29303 => 34684, 29304 => 34660, 29305 => 34649, +29306 => 34661, 29307 => 34707, 29308 => 34735, 29309 => 34728, 29310 => 34770, +29473 => 34758, 29474 => 34696, 29475 => 34693, 29476 => 34733, 29477 => 34711, +29478 => 34691, 29479 => 34731, 29480 => 34789, 29481 => 34732, 29482 => 34741, +29483 => 34739, 29484 => 34763, 29485 => 34771, 29486 => 34749, 29487 => 34769, +29488 => 34752, 29489 => 34762, 29490 => 34779, 29491 => 34794, 29492 => 34784, +29493 => 34798, 29494 => 34838, 29495 => 34835, 29496 => 34814, 29497 => 34826, +29498 => 34843, 29499 => 34849, 29500 => 34873, 29501 => 34876, 29502 => 32566, +29503 => 32578, 29504 => 32580, 29505 => 32581, 29506 => 33296, 29507 => 31482, +29508 => 31485, 29509 => 31496, 29510 => 31491, 29511 => 31492, 29512 => 31509, +29513 => 31498, 29514 => 31531, 29515 => 31503, 29516 => 31559, 29517 => 31544, +29518 => 31530, 29519 => 31513, 29520 => 31534, 29521 => 31537, 29522 => 31520, +29523 => 31525, 29524 => 31524, 29525 => 31539, 29526 => 31550, 29527 => 31518, +29528 => 31576, 29529 => 31578, 29530 => 31557, 29531 => 31605, 29532 => 31564, +29533 => 31581, 29534 => 31584, 29535 => 31598, 29536 => 31611, 29537 => 31586, +29538 => 31602, 29539 => 31601, 29540 => 31632, 29541 => 31654, 29542 => 31655, +29543 => 31672, 29544 => 31660, 29545 => 31645, 29546 => 31656, 29547 => 31621, +29548 => 31658, 29549 => 31644, 29550 => 31650, 29551 => 31659, 29552 => 31668, +29553 => 31697, 29554 => 31681, 29555 => 31692, 29556 => 31709, 29557 => 31706, +29558 => 31717, 29559 => 31718, 29560 => 31722, 29561 => 31756, 29562 => 31742, +29563 => 31740, 29564 => 31759, 29565 => 31766, 29566 => 31755, 29729 => 31775, +29730 => 31786, 29731 => 31782, 29732 => 31800, 29733 => 31809, 29734 => 31808, +29735 => 33278, 29736 => 33281, 29737 => 33282, 29738 => 33284, 29739 => 33260, +29740 => 34884, 29741 => 33313, 29742 => 33314, 29743 => 33315, 29744 => 33325, +29745 => 33327, 29746 => 33320, 29747 => 33323, 29748 => 33336, 29749 => 33339, +29750 => 33331, 29751 => 33332, 29752 => 33342, 29753 => 33348, 29754 => 33353, +29755 => 33355, 29756 => 33359, 29757 => 33370, 29758 => 33375, 29759 => 33384, +29760 => 34942, 29761 => 34949, 29762 => 34952, 29763 => 35032, 29764 => 35039, +29765 => 35166, 29766 => 32669, 29767 => 32671, 29768 => 32679, 29769 => 32687, +29770 => 32688, 29771 => 32690, 29772 => 31868, 29773 => 25929, 29774 => 31889, +29775 => 31901, 29776 => 31900, 29777 => 31902, 29778 => 31906, 29779 => 31922, +29780 => 31932, 29781 => 31933, 29782 => 31937, 29783 => 31943, 29784 => 31948, +29785 => 31949, 29786 => 31944, 29787 => 31941, 29788 => 31959, 29789 => 31976, +29790 => 33390, 29791 => 26280, 29792 => 32703, 29793 => 32718, 29794 => 32725, +29795 => 32741, 29796 => 32737, 29797 => 32742, 29798 => 32745, 29799 => 32750, +29800 => 32755, 29801 => 31992, 29802 => 32119, 29803 => 32166, 29804 => 32174, +29805 => 32327, 29806 => 32411, 29807 => 40632, 29808 => 40628, 29809 => 36211, +29810 => 36228, 29811 => 36244, 29812 => 36241, 29813 => 36273, 29814 => 36199, +29815 => 36205, 29816 => 35911, 29817 => 35913, 29818 => 37194, 29819 => 37200, +29820 => 37198, 29821 => 37199, 29822 => 37220, 29985 => 37218, 29986 => 37217, +29987 => 37232, 29988 => 37225, 29989 => 37231, 29990 => 37245, 29991 => 37246, +29992 => 37234, 29993 => 37236, 29994 => 37241, 29995 => 37260, 29996 => 37253, +29997 => 37264, 29998 => 37261, 29999 => 37265, 30000 => 37282, 30001 => 37283, +30002 => 37290, 30003 => 37293, 30004 => 37294, 30005 => 37295, 30006 => 37301, +30007 => 37300, 30008 => 37306, 30009 => 35925, 30010 => 40574, 30011 => 36280, +30012 => 36331, 30013 => 36357, 30014 => 36441, 30015 => 36457, 30016 => 36277, +30017 => 36287, 30018 => 36284, 30019 => 36282, 30020 => 36292, 30021 => 36310, +30022 => 36311, 30023 => 36314, 30024 => 36318, 30025 => 36302, 30026 => 36303, +30027 => 36315, 30028 => 36294, 30029 => 36332, 30030 => 36343, 30031 => 36344, +30032 => 36323, 30033 => 36345, 30034 => 36347, 30035 => 36324, 30036 => 36361, +30037 => 36349, 30038 => 36372, 30039 => 36381, 30040 => 36383, 30041 => 36396, +30042 => 36398, 30043 => 36387, 30044 => 36399, 30045 => 36410, 30046 => 36416, +30047 => 36409, 30048 => 36405, 30049 => 36413, 30050 => 36401, 30051 => 36425, +30052 => 36417, 30053 => 36418, 30054 => 36433, 30055 => 36434, 30056 => 36426, +30057 => 36464, 30058 => 36470, 30059 => 36476, 30060 => 36463, 30061 => 36468, +30062 => 36485, 30063 => 36495, 30064 => 36500, 30065 => 36496, 30066 => 36508, +30067 => 36510, 30068 => 35960, 30069 => 35970, 30070 => 35978, 30071 => 35973, +30072 => 35992, 30073 => 35988, 30074 => 26011, 30075 => 35286, 30076 => 35294, +30077 => 35290, 30078 => 35292, 30241 => 35301, 30242 => 35307, 30243 => 35311, +30244 => 35390, 30245 => 35622, 30246 => 38739, 30247 => 38633, 30248 => 38643, +30249 => 38639, 30250 => 38662, 30251 => 38657, 30252 => 38664, 30253 => 38671, +30254 => 38670, 30255 => 38698, 30256 => 38701, 30257 => 38704, 30258 => 38718, +30259 => 40832, 30260 => 40835, 30261 => 40837, 30262 => 40838, 30263 => 40839, +30264 => 40840, 30265 => 40841, 30266 => 40842, 30267 => 40844, 30268 => 40702, +30269 => 40715, 30270 => 40717, 30271 => 38585, 30272 => 38588, 30273 => 38589, +30274 => 38606, 30275 => 38610, 30276 => 30655, 30277 => 38624, 30278 => 37518, +30279 => 37550, 30280 => 37576, 30281 => 37694, 30282 => 37738, 30283 => 37834, +30284 => 37775, 30285 => 37950, 30286 => 37995, 30287 => 40063, 30288 => 40066, +30289 => 40069, 30290 => 40070, 30291 => 40071, 30292 => 40072, 30293 => 31267, +30294 => 40075, 30295 => 40078, 30296 => 40080, 30297 => 40081, 30298 => 40082, +30299 => 40084, 30300 => 40085, 30301 => 40090, 30302 => 40091, 30303 => 40094, +30304 => 40095, 30305 => 40096, 30306 => 40097, 30307 => 40098, 30308 => 40099, +30309 => 40101, 30310 => 40102, 30311 => 40103, 30312 => 40104, 30313 => 40105, +30314 => 40107, 30315 => 40109, 30316 => 40110, 30317 => 40112, 30318 => 40113, +30319 => 40114, 30320 => 40115, 30321 => 40116, 30322 => 40117, 30323 => 40118, +30324 => 40119, 30325 => 40122, 30326 => 40123, 30327 => 40124, 30328 => 40125, +30329 => 40132, 30330 => 40133, 30331 => 40134, 30332 => 40135, 30333 => 40138, +30334 => 40139, 30497 => 40140, 30498 => 40141, 30499 => 40142, 30500 => 40143, +30501 => 40144, 30502 => 40147, 30503 => 40148, 30504 => 40149, 30505 => 40151, +30506 => 40152, 30507 => 40153, 30508 => 40156, 30509 => 40157, 30510 => 40159, +30511 => 40162, 30512 => 38780, 30513 => 38789, 30514 => 38801, 30515 => 38802, +30516 => 38804, 30517 => 38831, 30518 => 38827, 30519 => 38819, 30520 => 38834, +30521 => 38836, 30522 => 39601, 30523 => 39600, 30524 => 39607, 30525 => 40536, +30526 => 39606, 30527 => 39610, 30528 => 39612, 30529 => 39617, 30530 => 39616, +30531 => 39621, 30532 => 39618, 30533 => 39627, 30534 => 39628, 30535 => 39633, +30536 => 39749, 30537 => 39747, 30538 => 39751, 30539 => 39753, 30540 => 39752, +30541 => 39757, 30542 => 39761, 30543 => 39144, 30544 => 39181, 30545 => 39214, +30546 => 39253, 30547 => 39252, 30548 => 39647, 30549 => 39649, 30550 => 39654, +30551 => 39663, 30552 => 39659, 30553 => 39675, 30554 => 39661, 30555 => 39673, +30556 => 39688, 30557 => 39695, 30558 => 39699, 30559 => 39711, 30560 => 39715, +30561 => 40637, 30562 => 40638, 30563 => 32315, 30564 => 40578, 30565 => 40583, +30566 => 40584, 30567 => 40587, 30568 => 40594, 30569 => 37846, 30570 => 40605, +30571 => 40607, 30572 => 40667, 30573 => 40668, 30574 => 40669, 30575 => 40672, +30576 => 40671, 30577 => 40674, 30578 => 40681, 30579 => 40679, 30580 => 40677, +30581 => 40682, 30582 => 40687, 30583 => 40738, 30584 => 40748, 30585 => 40751, +30586 => 40761, 30587 => 40759, 30588 => 40765, 30589 => 40766, 30590 => 40772, +0 => 0 ); + + function gb2utf8($gb) { + if( !trim($gb) ) return $gb; + $utf8=''; + while($gb) { + if( ord(substr($gb,0,1)) > 127 ) { + $t=substr($gb,0,2); + $gb=substr($gb,2); + $utf8 .= $this->u2utf8($this->codetable[hexdec(bin2hex($t))-0x8080]); + } + else { + $t=substr($gb,0,1); + $gb=substr($gb,1); + $utf8 .= $this->u2utf8($t); + } + } + return $utf8; + } + + function u2utf8($c) { + $str=''; + if ($c < 0x80) { + $str.=$c; + } + else if ($c < 0x800) { + $str.=chr(0xC0 | $c>>6); + $str.=chr(0x80 | $c & 0x3F); + } + else if ($c < 0x10000) { + $str.=chr(0xE0 | $c>>12); + $str.=chr(0x80 | $c>>6 & 0x3F); + $str.=chr(0x80 | $c & 0x3F); + } + else if ($c < 0x200000) { + $str.=chr(0xF0 | $c>>18); + $str.=chr(0x80 | $c>>12 & 0x3F); + $str.=chr(0x80 | $c>>6 & 0x3F); + $str.=chr(0x80 | $c & 0x3F); + } + return $str; + } + +} // END Class + +?> diff --git a/html/includes/jpgraph/src/jpgraph_gradient.php b/html/includes/jpgraph/src/jpgraph_gradient.php new file mode 100644 index 0000000000..46144b6e6c --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_gradient.php @@ -0,0 +1,424 @@ +img = &$img; + } + + + function SetNumColors($aNum) { + $this->numcolors=$aNum; + } +//--------------- +// PUBLIC METHODS + // Produce a gradient filled rectangle with a smooth transition between + // two colors. + // ($xl,$yt) Top left corner + // ($xr,$yb) Bottom right + // $from_color Starting color in gradient + // $to_color End color in the gradient + // $style Which way is the gradient oriented? + function FilledRectangle($xl,$yt,$xr,$yb,$from_color,$to_color,$style=1) { + switch( $style ) { + case GRAD_VER: + $steps = ceil(abs($xr-$xl)); + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for( $i=0, $x=$xl; $i < $steps; ++$i ) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yt,$x,$yb); + $x += $delta; + } + break; + + case GRAD_HOR: + $steps = ceil(abs($yb-$yt)); + $delta = $yb>=$yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($i=0,$y=$yt; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + break; + + case GRAD_MIDHOR: + $steps = ceil(abs($yb-$yt)/2); + $delta = $yb >= $yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($y=$yt, $i=0; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + --$i; + if( abs($yb-$yt) % 2 == 1 ) --$steps; + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + $this->img->Line($xl,$y,$xr,$y); + break; + + case GRAD_MIDVER: + $steps = ceil(abs($xr-$xl)/2); + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + for($x=$xl, $i=0; $i < $steps; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + --$i; + if( abs($xr-$xl) % 2 == 1 ) --$steps; + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $this->img->Line($x,$yb,$x,$yt); + break; + + case GRAD_WIDE_MIDVER: + $diff = ceil(abs($xr-$xl)); + $steps = floor(abs($diff)/3); + $firststep = $diff - 2*$steps ; + $delta = $xr >= $xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$firststep,$colors,$this->numcolors); + for($x=$xl, $i=0; $i < $firststep; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + --$i; + $this->img->current_color = $colors[$i]; + for($j=0; $j< $steps; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_WIDE_MIDHOR: + $diff = ceil(abs($yb-$yt)); + $steps = floor(abs($diff)/3); + $firststep = $diff - 2*$steps ; + $delta = $yb >= $yt? 1 : -1; + $this->GetColArray($from_color,$to_color,$firststep,$colors,$this->numcolors); + for($y=$yt, $i=0; $i < $firststep; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + --$i; + $this->img->current_color = $colors[$i]; + for($j=0; $j < $steps; ++$j) { + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + for($j=0; $j < $steps; ++$j, --$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($xl,$y,$xr,$y); + $y += $delta; + } + break; + + case GRAD_LEFT_REFLECTION: + $steps1 = ceil(0.3*abs($xr-$xl)); + $delta = $xr>=$xl ? 1 : -1; + + $from_color = $this->img->rgb->Color($from_color); + $adj = 1.4; + $m = ($adj-1.0)*(255-min(255,min($from_color[0],min($from_color[1],$from_color[2])))); + $from_color2 = array(min(255,$from_color[0]+$m), + min(255,$from_color[1]+$m), min(255,$from_color[2]+$m)); + + $this->GetColArray($from_color2,$to_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps2 = max(1,round(0.08*abs($xr-$xl))); + $this->img->SetColor($to_color); + for($j=0; $j< $steps2; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps = abs($xr-$xl)-$steps1-$steps2; + $this->GetColArray($to_color,$from_color,$steps,$colors,$this->numcolors); + $n = count($colors); + for($i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_RIGHT_REFLECTION: + $steps1 = ceil(0.7*abs($xr-$xl)); + $delta = $xr>=$xl ? 1 : -1; + + $this->GetColArray($from_color,$to_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + $steps2 = max(1,round(0.08*abs($xr-$xl))); + $this->img->SetColor($to_color); + for($j=0; $j< $steps2; ++$j) { + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + $from_color = $this->img->rgb->Color($from_color); + $adj = 1.4; + $m = ($adj-1.0)*(255-min(255,min($from_color[0],min($from_color[1],$from_color[2])))); + $from_color = array(min(255,$from_color[0]+$m), + min(255,$from_color[1]+$m), min(255,$from_color[2]+$m)); + + $steps = abs($xr-$xl)-$steps1-$steps2; + $this->GetColArray($to_color,$from_color,$steps,$colors,$this->numcolors); + $n = count($colors); + for($i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_CENTER: + $steps = ceil(min(($yb-$yt)+1,($xr-$xl)+1)/2); + $this->GetColArray($from_color,$to_color,$steps,$colors,$this->numcolors); + $dx = ($xr-$xl)/2; + $dy = ($yb-$yt)/2; + $x=$xl;$y=$yt;$x2=$xr;$y2=$yb; + $n = count($colors); + for($x=$xl, $i=0; $x < $xl+$dx && $y < $yt+$dy && $i < $n; ++$x, ++$y, --$x2, --$y2, ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Rectangle($x,$y,$x2,$y2); + } + $this->img->Line($x,$y,$x2,$y2); + break; + + case GRAD_RAISED_PANEL: + // right to left + $steps1 = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($to_color,$from_color,$steps1,$colors,$this->numcolors); + $n = count($colors); + for($x=$xl, $i=0; $i < $steps1 && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + + // left to right + $xr -= 3; + $xl += 3; + $yb -= 3; + $yt += 3; + $steps2 = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + for($x=$xl, $j=$steps2; $j >= 0; --$j) { + $this->img->current_color = $colors[$j]; + $this->img->Line($x,$yb,$x,$yt); + $x += $delta; + } + break; + + case GRAD_DIAGONAL: + // use the longer dimension to determine the required number of steps. + // first loop draws from one corner to the mid-diagonal and the second + // loop draws from the mid-diagonal to the opposing corner. + if($xr-$xl > $yb - $yt) { + // width is greater than height -> use x-dimension for steps + $steps = $xr-$xl; + $delta = $xr>=$xl ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps*2,$colors,$this->numcolors); + $n = count($colors); + + for($x=$xl, $i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $y = $yt+($i/$steps)*($yb-$yt)*$delta; + $this->img->Line($x,$yt,$xl,$y); + $x += $delta; + } + + for($x=$xl, $i = 0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$steps+$i]; + $y = $yt+($i/$steps)*($yb-$yt)*$delta; + $this->img->Line($x,$yb,$xr,$y); + $x += $delta; + } + } else { + // height is greater than width -> use y-dimension for steps + $steps = $yb-$yt; + $delta = $yb>=$yt ? 1 : -1; + $this->GetColArray($from_color,$to_color,$steps*2,$colors,$this->numcolors); + $n = count($colors); + + for($y=$yt, $i=0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$i]; + $x = $xl+($i/$steps)*($xr-$xl)*$delta; + $this->img->Line($x,$yt,$xl,$y); + $y += $delta; + } + + for($y=$yt, $i = 0; $i < $steps && $i < $n; ++$i) { + $this->img->current_color = $colors[$steps+$i]; + $x = $xl+($i/$steps)*($xr-$xl)*$delta; + $this->img->Line($x,$yb,$xr,$y); + $x += $delta; + } + + } + break; + + default: + JpGraphError::RaiseL(7001,$style); +//("Unknown gradient style (=$style)."); + break; + } + } + + // Fill a special case of a polygon with a flat bottom + // with a gradient. Can be used for filled line plots. + // Please note that this is NOT a generic gradient polygon fill + // routine. It assumes that the bottom is flat (like a drawing + // of a mountain) + function FilledFlatPolygon($pts,$from_color,$to_color) { + if( count($pts) == 0 ) return; + + $maxy=$pts[1]; + $miny=$pts[1]; + $n = count($pts) ; + for( $i=0, $idx=0; $i < $n; $i += 2) { + $x = floor($pts[$i]); + $y = floor($pts[$i+1]); + $miny = min($miny,$y); + $maxy = max($maxy,$y); + } + + $colors = array(); + $this->GetColArray($from_color,$to_color,abs($maxy-$miny)+1,$colors,$this->numcolors); + for($i=$miny, $idx=0; $i <= $maxy; ++$i ) { + $colmap[$i] = $colors[$idx++]; + } + + $n = count($pts)/2 ; + $idx = 0 ; + while( $idx < $n-1 ) { + $p1 = array(round($pts[$idx*2]),round($pts[$idx*2+1])); + $p2 = array(round($pts[++$idx*2]),round($pts[$idx*2+1])); + + // Find the largest rectangle we can fill + $y = max($p1[1],$p2[1]) ; + for($yy=$maxy; $yy > $y; --$yy) { + $this->img->current_color = $colmap[$yy]; + $this->img->Line($p1[0],$yy,$p2[0]-1,$yy); + } + + if( $p1[1] == $p2[1] ) continue; + + // Fill the rest using lines (slow...) + $slope = ($p2[0]-$p1[0])/($p1[1]-$p2[1]); + $x1 = $p1[0]; + $x2 = $p2[0]-1; + $start = $y; + if( $p1[1] > $p2[1] ) { + while( $y >= $p2[1] ) { + $x1=$slope*($start-$y)+$p1[0]; + $this->img->current_color = $colmap[$y]; + $this->img->Line($x1,$y,$x2,$y); + --$y; + } + } + else { + while( $y >= $p1[1] ) { + $x2=$p2[0]+$slope*($start-$y); + $this->img->current_color = $colmap[$y]; + $this->img->Line($x1,$y,$x2,$y); + --$y; + } + } + } + } + +//--------------- +// PRIVATE METHODS + // Add to the image color map the necessary colors to do the transition + // between the two colors using $numcolors intermediate colors + function GetColArray($from_color,$to_color,$arr_size,&$colors,$numcols=100) { + if( $arr_size==0 ) return; + // If color is given as text get it's corresponding r,g,b values + $from_color = $this->img->rgb->Color($from_color); + $to_color = $this->img->rgb->Color($to_color); + + $rdelta=($to_color[0]-$from_color[0])/$numcols; + $gdelta=($to_color[1]-$from_color[1])/$numcols; + $bdelta=($to_color[2]-$from_color[2])/$numcols; + $colorsperstep = $numcols/$arr_size; + $prevcolnum = -1; + $from_alpha = $from_color[3]; + $to_alpha = $to_color[3]; + $adelta = ( $to_alpha - $from_alpha ) / $numcols ; + for ($i=0; $i < $arr_size; ++$i) { + $colnum = floor($colorsperstep*$i); + if ( $colnum == $prevcolnum ) + $colors[$i] = $colidx; + else { + $r = floor($from_color[0] + $colnum*$rdelta); + $g = floor($from_color[1] + $colnum*$gdelta); + $b = floor($from_color[2] + $colnum*$bdelta); + $alpha = $from_alpha + $colnum*$adelta; + $colidx = $this->img->rgb->Allocate(sprintf("#%02x%02x%02x",$r,$g,$b),$alpha); + $colors[$i] = $colidx; + } + $prevcolnum = $colnum; + } + } +} // Class + +?> diff --git a/html/includes/jpgraph/src/jpgraph_iconplot.php b/html/includes/jpgraph/src/jpgraph_iconplot.php new file mode 100644 index 0000000000..c57db15c14 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_iconplot.php @@ -0,0 +1,189 @@ +iFile = $aFile; + $this->iX=$aX; + $this->iY=$aY; + $this->iScale= $aScale; + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix ; + } + + function CreateFromString($aStr) { + $this->iImgString = $aStr; + } + + function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) { + $this->iCountryFlag = $aFlag; + $this->iX=$aX; + $this->iY=$aY; + $this->iScale= $aScale; + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix; + $this->iCountryStdSize = $aStdSize; + } + + function SetPos($aX,$aY) { + $this->iX=$aX; + $this->iY=$aY; + } + + function SetScalePos($aX,$aY) { + $this->iScalePosX = $aX; + $this->iScalePosY = $aY; + } + + function SetScale($aScale) { + $this->iScale = $aScale; + } + + function SetMix($aMix) { + if( $aMix < 0 || $aMix > 100 ) { + JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.'); + } + $this->iMix = $aMix ; + } + + function SetAnchor($aXAnchor='left',$aYAnchor='center') { + if( !in_array($aXAnchor,$this->iAnchors) || + !in_array($aYAnchor,$this->iAnchors) ) { + JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'"); + } + $this->iHorAnchor=$aXAnchor; + $this->iVertAnchor=$aYAnchor; + } + + function PreStrokeAdjust($aGraph) { + // Nothing to do ... + } + + function DoLegend($aGraph) { + // Nothing to do ... + } + + function Max() { + return array(false,false); + } + + + // The next four function are framework function tht gets called + // from Gantt and is not menaiungfull in the context of Icons but + // they must be implemented to avoid errors. + function GetMaxDate() { return false; } + function GetMinDate() { return false; } + function GetLineNbr() { return 0; } + function GetAbsHeight() {return 0; } + + + function Min() { + return array(false,false); + } + + function StrokeMargin(&$aImg) { + return true; + } + + function Stroke(&$aImg,&$axscale,&$ayscale) { + $this->StrokeWithScale($aImg,$axscale,$ayscale); + } + + function StrokeWithScale(&$aImg,&$axscale,&$ayscale) { + if( $this->iScalePosX === null || + $this->iScalePosY === null ) { + $this->_Stroke($aImg); + } + else { + $this->_Stroke($aImg, + round($axscale->Translate($this->iScalePosX)), + round($ayscale->Translate($this->iScalePosY))); + } + } + + function GetWidthHeight() { + $dummy=0; + return $this->_Stroke($dummy,null,null,true); + } + + function _Stroke(&$aImg,$x=null,$y=null,$aReturnWidthHeight=false) { + if( $this->iFile != '' && $this->iCountryFlag != '' ) { + JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.'); + } + if( $this->iFile != '' ) { + $gdimg = Graph::LoadBkgImage('',$this->iFile); + } + elseif( $this->iImgString != '') { + $gdimg = Image::CreateFromString($this->iImgString); + } + else { + if( ! class_exists('FlagImages') ) { + JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.'); + } + $fobj = new FlagImages($this->iCountryStdSize); + $dummy=''; + $gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy); + } + + $iconw = imagesx($gdimg); + $iconh = imagesy($gdimg); + + if( $aReturnWidthHeight ) { + return array(round($iconw*$this->iScale),round($iconh*$this->iScale)); + } + + if( $x !== null && $y !== null ) { + $this->iX = $x; $this->iY = $y; + } + if( $this->iX >= 0 && $this->iX <= 1.0 ) { + $w = imagesx($aImg->img); + $this->iX = round($w*$this->iX); + } + if( $this->iY >= 0 && $this->iY <= 1.0 ) { + $h = imagesy($aImg->img); + $this->iY = round($h*$this->iY); + } + + if( $this->iHorAnchor == 'center' ) + $this->iX -= round($iconw*$this->iScale/2); + if( $this->iHorAnchor == 'right' ) + $this->iX -= round($iconw*$this->iScale); + if( $this->iVertAnchor == 'center' ) + $this->iY -= round($iconh*$this->iScale/2); + if( $this->iVertAnchor == 'bottom' ) + $this->iY -= round($iconh*$this->iScale); + + $aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0, + round($iconw*$this->iScale),round($iconh*$this->iScale), + $iconw,$iconh, + $this->iMix); + } +} + +?> diff --git a/html/includes/jpgraph/src/jpgraph_imgtrans.php b/html/includes/jpgraph/src/jpgraph_imgtrans.php new file mode 100644 index 0000000000..cca04cb5c6 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_imgtrans.php @@ -0,0 +1,223 @@ +gdImg = $aGdImg; + } + + // -------------------------------------------------------------------- + // _TransVert3D() and _TransHor3D() are helper methods to + // Skew3D(). + // -------------------------------------------------------------------- + function _TransVert3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3D_DOWN,$aMinSize=true,$aFillColor='#FFFFFF',$aQuality=false,$aBorder=false,$aHorizonPos=0.5) { + + + // Parameter check + if( $aHorizonPos < 0 || $aHorizonPos > 1.0 ) { + JpGraphError::RaiseL(9001); +//("Value for image transformation out of bounds.\nVanishing point on horizon must be specified as a value between 0 and 1."); + } + + $w = imagesx($aGdImg); + $h = imagesy($aGdImg); + + // Create new image + $ww = $w; + if( $aMinSize ) + $hh = ceil($h * $aHorizon / ($aSkewDist+$h)); + else + $hh = $h; + + $newgdh = imagecreatetruecolor($ww,$hh); + $crgb = new RGB( $newgdh ); + $fillColor = $crgb->Allocate($aFillColor); + imagefilledrectangle($newgdh,0,0,$ww-1,$hh-1,$fillColor); + + if( $aBorder ) { + $colidx = $crgb->Allocate($aBorder); + imagerectangle($newgdh,0,0,$ww-1,$hh-1,$colidx); + } + + $mid = round($w * $aHorizonPos); + + $last=$h; + for($y=0; $y < $h; ++$y) { + + $yp = $h-$y-1; + $yt = floor($yp * $aHorizon / ($aSkewDist + $yp)); + + if( !$aQuality ) { + if( $last <= $yt ) continue ; + $last = $yt; + } + + for($x=0; $x < $w; ++$x) { + $xt = ($x-$mid) * $aSkewDist / ($aSkewDist + $yp); + if( $aDir == SKEW3D_UP ) + $rgb = imagecolorat($aGdImg,$x,$h-$y-1); + else + $rgb = imagecolorat($aGdImg,$x,$y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $colidx = imagecolorallocate($newgdh,$r,$g,$b); + $xt = round($xt+$mid); + if( $aDir == SKEW3D_UP ) { + $syt = $yt; + } + else { + $syt = $hh-$yt-1; + } + + if( !empty($set[$yt]) ) { + $nrgb = imagecolorat($newgdh,$xt,$syt); + $nr = ($nrgb >> 16) & 0xFF; + $ng = ($nrgb >> 8) & 0xFF; + $nb = $nrgb & 0xFF; + $colidx = imagecolorallocate($newgdh,floor(($r+$nr)/2), + floor(($g+$ng)/2),floor(($b+$nb)/2)); + } + + imagesetpixel($newgdh,$xt,$syt,$colidx); + } + + $set[$yt] = true; + } + + return $newgdh; + } + + // -------------------------------------------------------------------- + // _TransVert3D() and _TransHor3D() are helper methods to + // Skew3D(). + // -------------------------------------------------------------------- + function _TransHor3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3D_LEFT,$aMinSize=true,$aFillColor='#FFFFFF',$aQuality=false,$aBorder=false,$aHorizonPos=0.5) { + + $w = imagesx($aGdImg); + $h = imagesy($aGdImg); + + // Create new image + $hh = $h; + if( $aMinSize ) + $ww = ceil($w * $aHorizon / ($aSkewDist+$w)); + else + $ww = $w; + + $newgdh = imagecreatetruecolor($ww,$hh); + $crgb = new RGB( $newgdh ); + $fillColor = $crgb->Allocate($aFillColor); + imagefilledrectangle($newgdh,0,0,$ww-1,$hh-1,$fillColor); + + if( $aBorder ) { + $colidx = $crgb->Allocate($aBorder); + imagerectangle($newgdh,0,0,$ww-1,$hh-1,$colidx); + } + + $mid = round($h * $aHorizonPos); + + $last = -1; + for($x=0; $x < $w-1; ++$x) { + $xt = floor($x * $aHorizon / ($aSkewDist + $x)); + if( !$aQuality ) { + if( $last >= $xt ) continue ; + $last = $xt; + } + + for($y=0; $y < $h; ++$y) { + $yp = $h-$y-1; + $yt = ($yp-$mid) * $aSkewDist / ($aSkewDist + $x); + + if( $aDir == SKEW3D_RIGHT ) + $rgb = imagecolorat($aGdImg,$w-$x-1,$y); + else + $rgb = imagecolorat($aGdImg,$x,$y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $colidx = imagecolorallocate($newgdh,$r,$g,$b); + $yt = floor($hh-$yt-$mid-1); + if( $aDir == SKEW3D_RIGHT ) { + $sxt = $ww-$xt-1; + } + else + $sxt = $xt ; + + if( !empty($set[$xt]) ) { + $nrgb = imagecolorat($newgdh,$sxt,$yt); + $nr = ($nrgb >> 16) & 0xFF; + $ng = ($nrgb >> 8) & 0xFF; + $nb = $nrgb & 0xFF; + $colidx = imagecolorallocate($newgdh,floor(($r+$nr)/2), + floor(($g+$ng)/2),floor(($b+$nb)/2)); + } + imagesetpixel($newgdh,$sxt,$yt,$colidx); + } + + $set[$xt] = true; + } + + return $newgdh; + } + + // -------------------------------------------------------------------- + // Skew image for the apperance of a 3D effect + // This transforms an image into a 3D-skewed version + // of the image. The transformation is specified by giving the height + // of the artificial horizon and specifying a "skew" factor which + // is the distance on the horizon line between the point of + // convergence and perspective line. + // + // The function returns the GD handle of the transformed image + // leaving the original image untouched. + // + // Parameters: + // * $aGdImg, GD handle to the image to be transformed + // * $aHorizon, Distance to the horizon + // * $aSkewDist, Distance from the horizon point of convergence + // on the horizon line to the perspective points. A larger + // value will fore-shorten the image more + // * $aDir, parameter specifies type of convergence. This of this + // as the walls in a room you are looking at. This specifies if the + // image should be applied on the left,right,top or bottom walls. + // * $aMinSize, true=make the new image just as big as needed, + // false = keep the image the same size as the original image + // * $aFillColor, Background fill color in the image + // * $aHiQuality, true=performa some interpolation that improves + // the image quality but at the expense of performace. Enabling + // high quality will have a dramatic effect on the time it takes + // to transform an image. + // * $aBorder, if set to anything besides false this will draw a + // a border of the speciied color around the image + // -------------------------------------------------------------------- + function Skew3D($aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOWN,$aHiQuality=false,$aMinSize=true,$aFillColor='#FFFFFF',$aBorder=false) { + return $this->_Skew3D($this->gdImg,$aHorizon,$aSkewDist,$aDir,$aHiQuality, + $aMinSize,$aFillColor,$aBorder); + } + + function _Skew3D($aGdImg,$aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOWN,$aHiQuality=false,$aMinSize=true,$aFillColor='#FFFFFF',$aBorder=false) { + if( $aDir == SKEW3D_DOWN || $aDir == SKEW3D_UP ) + return $this->_TransVert3D($aGdImg,$aHorizon,$aSkewDist,$aDir,$aMinSize,$aFillColor,$aHiQuality,$aBorder); + else + return $this->_TransHor3D($aGdImg,$aHorizon,$aSkewDist,$aDir,$aMinSize,$aFillColor,$aHiQuality,$aBorder); + + } + +} + + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_led.php b/html/includes/jpgraph/src/jpgraph_led.php new file mode 100644 index 0000000000..a388afe2a5 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_led.php @@ -0,0 +1,316 @@ + 'L', Cyrilic, other symbols and special symbols for +// simulation some latin and cyrilic chars. +// Added: New Color schemas. +// Deleted: Some minor bugs (StrokeNumber first parameter may be eq empty string, +// false or null - added check see line 294; +// change color schema check for easy maintenance: 291; +// change check on key exist in chars array: moved from StrokeNumber +// function to _GetLED: 251; +// +//======================================================================== + +// Samples for troubled chars: "Ô¡ Ø\r Ù\r Û| ÞÎ Ì\r >\n< W\r" +// Ô Ø Ù Û Þ Ì Æ W + +//---------------------------------------------------------------------------- +// Each character is encoded line by line with the "On"-LEDs corresponding to +// a '1' in the bianry mask of 4 bits. +// +// 4-bit mask: +// +// 0 ____ +// 1 ___x +// 2 __x_ +// 3 __xx +// 4 _x__ +// 5 _x_x +// 6 _xx_ +// 7 _xxx +// 8 x___ +// 9 x__x +// 10 x_x_ +// 11 x_xx +// 12 xx__ +// 13 xx_x +// 14 xxx_ +// 15 xxxx +//---------------------------------------------------------------------------- + +// Constants for color schema. See definition of iColorSchema below +DEFINE('LEDC_RED', 0); +DEFINE('LEDC_GREEN', 1); +DEFINE('LEDC_BLUE', 2); +DEFINE('LEDC_YELLOW', 3); +DEFINE('LEDC_GRAY', 4); +DEFINE('LEDC_CHOCOLATE', 5); +DEFINE('LEDC_PERU', 6); +DEFINE('LEDC_GOLDENROD', 7); +DEFINE('LEDC_KHAKI', 8); +DEFINE('LEDC_OLIVE', 9); +DEFINE('LEDC_LIMEGREEN', 10); +DEFINE('LEDC_FORESTGREEN', 11); +DEFINE('LEDC_TEAL', 12); +DEFINE('LEDC_STEELBLUE', 13); +DEFINE('LEDC_NAVY', 14); +DEFINE('LEDC_INVERTGRAY', 15); +// ! It correlate with two-dimensional array $iColorSchema + +//======================================================================== +// CLASS DigitalLED74 +// Description: +// Construct a number as an image that looks like LED numbers in a +// 7x4 digital matrix +//======================================================================== +class DigitalLED74 +{ + var $iLED_X = 4, $iLED_Y=7, + + // fg-up, fg-down, bg + $iColorSchema = array( + LEDC_RED => array('red','darkred:0.9','red:0.3'),// 0 + LEDC_GREEN => array('green','darkgreen','green:0.3'),// 1 + LEDC_BLUE => array('lightblue:0.9','darkblue:0.85','darkblue:0.7'),// 2 + LEDC_YELLOW => array('yellow','yellow:0.4','yellow:0.3'),// 3 + LEDC_GRAY => array('gray:1.4','darkgray:0.85','darkgray:0.7'), + LEDC_CHOCOLATE => array('chocolate','chocolate:0.7','chocolate:0.5'), + LEDC_PERU => array('peru:0.95','peru:0.6','peru:0.5'), + LEDC_GOLDENROD => array('goldenrod','goldenrod:0.6','goldenrod:0.5'), + LEDC_KHAKI => array('khaki:0.7','khaki:0.4','khaki:0.3'), + LEDC_OLIVE => array('#808000','#808000:0.7','#808000:0.6'), + LEDC_LIMEGREEN => array('limegreen:0.9','limegreen:0.5','limegreen:0.4'), + LEDC_FORESTGREEN => array('forestgreen','forestgreen:0.7','forestgreen:0.5'), + LEDC_TEAL => array('teal','teal:0.7','teal:0.5'), + LEDC_STEELBLUE => array('steelblue','steelblue:0.65','steelblue:0.5'), + LEDC_NAVY => array('navy:1.3','navy:0.95','navy:0.8'),//14 + LEDC_INVERTGRAY => array('darkgray','lightgray:1.5','white')//15 + ), + + $iLEDSpec = array( + 0 => array(6,9,11,15,13,9,6), + //0 => array(6,9,9,9,9,9,6), + //0 => array(15,9,9,9,9,9,15), + 1 => array(2,6,10,2,2,2,2), + 2 => array(6,9,1,2,4,8,15), + 3 => array(6,9,1,6,1,9,6), + 4 => array(1,3,5,9,15,1,1), + 5 => array(15,8,8,14,1,9,6), + 6 => array(6,8,8,14,9,9,6), + 7 => array(15,1,1,2,4,4,4), + 8 => array(6,9,9,6,9,9,6), + 9 => array(6,9,9,7,1,1,6), + '!' => array(4,4,4,4,4,0,4), + '?' => array(6,9,1,2,2,0,2), + '#' => array(0,9,15,9,15,9,0), + '@' => array(6,9,11,11,10,9,6), + '-' => array(0,0,0,15,0,0,0), + '_' => array(0,0,0,0,0,0,15), + '=' => array(0,0,15,0,15,0,0), + '+' => array(0,0,4,14,4,0,0), + '|' => array(4,4,4,4,4,4,4), //vertical line, used for simulate rus 'Û' + ',' => array(0,0,0,0,0,12,4), + '.' => array(0,0,0,0,0,12,12), + ':' => array(12,12,0,0,0,12,12), + ';' => array(12,12,0,0,0,12,4), + '[' => array(3,2,2,2,2,2,3), + ']' => array(12,4,4,4,4,4,12), + '(' => array(1,2,2,2,2,2,1), + ')' => array(8,4,4,4,4,4,8), + '{' => array(3,2,2,6,2,2,3), + '}' => array(12,4,4,6,4,4,12), + '<' => array(1,2,4,8,4,2,1), + '>' => array(8,4,2,1,2,4,8), + '*' => array(9,6,15,6,9,0,0), + '"' => array(10,10,0,0,0,0,0), + '\'' => array(4,4,0,0,0,0,0), + '`' => array(4,2,0,0,0,0,0), + '~' => array(13,11,0,0,0,0,0), + '^' => array(4,10,0,0,0,0,0), + '\\' => array(8,8,4,6,2,1,1), + '/' => array(1,1,2,6,4,8,8), + '%' => array(1,9,2,6,4,9,8), + '&' => array(0,4,10,4,11,10,5), + '$' => array(2,7,8,6,1,14,4), + ' ' => array(0,0,0,0,0,0,0), + '•' => array(0,0,6,6,0,0,0), //149 + '°' => array(14,10,14,0,0,0,0), //176 + '†' => array(4,4,14,4,4,4,4), //134 + '‡' => array(4,4,14,4,14,4,4), //135 + '±' => array(0,4,14,4,0,14,0), //177 + '‰' => array(0,4,2,15,2,4,0), //137 show right arrow + '™' => array(0,2,4,15,4,2,0), //156 show left arrow + '¡' => array(0,0,8,8,0,0,0), //159 show small hi-stick - that need for simulate rus 'Ô' + "\t" => array(8,8,8,0,0,0,0), //show hi-stick - that need for simulate rus 'Ó' + "\r" => array(8,8,8,8,8,8,8), //vertical line - that need for simulate 'M', 'W' and rus 'Ì','Ø' ,'Ù' + "\n" => array(15,15,15,15,15,15,15), //fill up - that need for simulate rus 'Æ' + "¥" => array(10,5,10,5,10,5,10), //chess + "µ" => array(15,0,15,0,15,0,15), //4 horizontal lines +// latin + 'A' => array(6,9,9,15,9,9,9), + 'B' => array(14,9,9,14,9,9,14), + 'C' => array(6,9,8,8,8,9,6), + 'D' => array(14,9,9,9,9,9,14), + 'E' => array(15,8,8,14,8,8,15), + 'F' => array(15,8,8,14,8,8,8), + 'G' => array(6,9,8,8,11,9,6), + 'H' => array(9,9,9,15,9,9,9), + 'I' => array(14,4,4,4,4,4,14), + 'J' => array(15,1,1,1,1,9,6), + 'K' => array(8,9,10,12,12,10,9), + 'L' => array(8,8,8,8,8,8,15), + 'M' => array(8,13,10,8,8,8,8),// need to add \r + 'N' => array(9,9,13,11,9,9,9), + //'O' => array(0,6,9,9,9,9,6), + 'O' => array(6,9,9,9,9,9,6), + 'P' => array(14,9,9,14,8,8,8), + 'Q' => array(6,9,9,9,13,11,6), + 'R' => array(14,9,9,14,12,10,9), + 'S' => array(6,9,8,6,1,9,6), + 'T' => array(14,4,4,4,4,4,4), + 'U' => array(9,9,9,9,9,9,6), + 'V' => array(0,0,0,10,10,10,4), + 'W' => array(8,8,8,8,10,13,8),// need to add \r + 'X' => array(9,9,6,6,6,9,9), + //'Y' => array(9,9,9,9,6,6,6), + 'Y' => array(10,10,10,10,4,4,4), + 'Z' => array(15,1,2,6,4,8,15), +// russian cp1251 + 'À' => array(6,9,9,15,9,9,9), + 'Á' => array(14,8,8,14,9,9,14), + 'Â' => array(14,9,9,14,9,9,14), + 'Ã' => array(15,8,8,8,8,8,8), + 'Ä' => array(14,9,9,9,9,9,14), + 'Å' => array(15,8,8,14,8,8,15), + '¨' => array(6,15,8,14,8,8,15), + //Æ is combine: >\n< + 'Ç' => array(6,9,1,2,1,9,6), + 'È' => array(9,9,9,11,13,9,9), + 'É' => array(13,9,9,11,13,9,9), + 'Ê' => array(9,10,12,10,9,9,9), + 'Ë' => array(7,9,9,9,9,9,9), + 'Ì' => array(8,13,10,8,8,8,8),// need to add \r + 'Í' => array(9,9,9,15,9,9,9), + 'Î' => array(6,9,9,9,9,9,6), + 'Ï' => array(15,9,9,9,9,9,9), + 'Ð' => array(14,9,9,14,8,8,8), + 'Ñ' => array(6,9,8,8,8,9,6), + 'Ò' => array(14,4,4,4,4,4,4), + 'Ó' => array(9,9,9,7,1,9,6), + 'Ô' => array(2,7,10,10,7,2,2),// need to add ¡ + 'Õ' => array(9,9,6,6,6,9,9), + 'Ö' => array(10,10,10,10,10,15,1), + '×' => array(9,9,9,7,1,1,1), + 'Ø' => array(10,10,10,10,10,10,15),// \r + 'Ù' => array(10,10,10,10,10,15,0),// need to add \r + 'Ú' => array(12,4,4,6,5,5,6), + 'Û' => array(8,8,8,14,9,9,14),// need to add | + 'Ü' => array(8,8,8,14,9,9,14), + 'Ý' => array(6,9,1,7,1,9,6), + 'Þ' => array(2,2,2,3,2,2,2),// need to add O + 'ß' => array(7,9,9,7,3,5,9) + ), + + $iSuperSampling = 3, $iMarg = 1, $iRad = 4; + + function DigitalLED74($aRadius = 2, $aMargin= 0.6) { + $this->iRad = $aRadius; + $this->iMarg = $aMargin; + } + + function SetSupersampling($aSuperSampling = 2) { + $this->iSuperSampling = $aSuperSampling; + } + + function _GetLED($aLedIdx, $aColor = 0) { + $width= $this->iLED_X*$this->iRad*2 + ($this->iLED_X+1)*$this->iMarg + $this->iRad ; + $height= $this->iLED_Y*$this->iRad*2 + ($this->iLED_Y)*$this->iMarg + $this->iRad * 2; + + // Adjust radious for supersampling + $rad = $this->iRad * $this->iSuperSampling; + + // Margin in between "Led" dots + $marg = $this->iMarg * $this->iSuperSampling; + + $swidth = $width*$this->iSuperSampling; + $sheight = $height*$this->iSuperSampling; + + $simg = new RotImage($swidth, $sheight, 0, DEFAULT_GFORMAT, false); + $simg->SetColor($this->iColorSchema[$aColor][2]); + $simg->FilledRectangle(0, 0, $swidth-1, $sheight-1); + + if(array_key_exists($aLedIdx, $this->iLEDSpec)) { + $d = $this->iLEDSpec[$aLedIdx]; + } + else { + $d = array(0,0,0,0,0,0,0); + } + + for($r = 0; $r < 7; ++$r) { + $dr = $d[$r]; + for($c = 0; $c < 4; ++$c) { + if( ($dr & pow(2,3-$c)) !== 0 ) { + $color = $this->iColorSchema[$aColor][0]; + } + else { + $color = $this->iColorSchema[$aColor][1]; + } + + $x = 2*$rad*$c+$rad + ($c+1)*$marg + $rad ; + $y = 2*$rad*$r+$rad + ($r+1)*$marg + $rad ; + + $simg->SetColor($color); + $simg->FilledCircle($x,$y,$rad); + } + } + + $img = new Image($width, $height, DEFAULT_GFORMAT, false); + $img->Copy($simg->img, 0, 0, 0, 0, $width, $height, $swidth, $sheight); + $simg->Destroy(); + unset($simg); + return $img; + } + + function StrokeNumber($aValStr, $aColor = 0) { + if($aColor < 0 || $aColor >= sizeof($this->iColorSchema)) + $aColor = 0; + + if(($n = strlen($aValStr)) == 0) { + $aValStr = ' '; + $n = 1; + } + + for($i = 0; $i < $n; ++$i) { + $d = substr($aValStr, $i, 1); + if( $d >= '0' && $d <= '9' ) { + $d = (int)$d; + } + else { + $d = strtoupper($d); + } + $digit_img[$i] = $this->_GetLED($d, $aColor); + } + + $w = imagesx($digit_img[0]->img); + $h = imagesy($digit_img[0]->img); + + $number_img = new Image($w*$n, $h, DEFAULT_GFORMAT, false); + + for($i = 0; $i < $n; ++$i) { + $number_img->Copy($digit_img[$i]->img, $i*$w, 0, 0, 0, $w, $h, $w, $h); + } + + $number_img->Headers(); + $number_img->Stream(); + } +} +?> diff --git a/html/includes/jpgraph/src/jpgraph_line.php b/html/includes/jpgraph/src/jpgraph_line.php new file mode 100644 index 0000000000..5b48826087 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_line.php @@ -0,0 +1,635 @@ +Plot($datay,$datax); + $this->mark = new PlotMark(); + } +//--------------- +// PUBLIC METHODS + + // Set style, filled or open + function SetFilled($aFlag=true) { + JpGraphError::RaiseL(10001);//('LinePlot::SetFilled() is deprecated. Use SetFillColor()'); + } + + function SetBarCenter($aFlag=true) { + $this->barcenter=$aFlag; + } + + function SetStyle($aStyle) { + $this->line_style=$aStyle; + } + + function SetStepStyle($aFlag=true) { + $this->step_style = $aFlag; + } + + function SetColor($aColor) { + parent::SetColor($aColor); + } + + function SetFillFromYMin($f=true) { + $this->fillFromMin = $f ; + } + + function SetFillColor($aColor,$aFilled=true) { + $this->fill_color=$aColor; + $this->filled=$aFilled; + } + + function SetFillGradient($aFromColor,$aToColor,$aNumColors=100,$aFilled=true) { + $this->fillgrad_fromcolor = $aFromColor; + $this->fillgrad_tocolor = $aToColor; + $this->fillgrad_numcolors = $aNumColors; + $this->filled = $aFilled; + $this->fillgrad = true; + } + + function Legend(&$graph) { + if( $this->legend!="" ) { + if( $this->filled && !$this->fillgrad ) { + $graph->legend->Add($this->legend, + $this->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + elseif( $this->fillgrad ) { + $color=array($this->fillgrad_fromcolor,$this->fillgrad_tocolor); + // In order to differentiate between gradients and cooors specified as an RGB triple + $graph->legend->Add($this->legend,$color,"",-2 /* -GRAD_HOR */, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + else { + $graph->legend->Add($this->legend, + $this->color,$this->mark,$this->line_style, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } + } + + function AddArea($aMin=0,$aMax=0,$aFilled=LP_AREA_NOT_FILLED,$aColor="gray9",$aBorder=LP_AREA_BORDER) { + if($aMin > $aMax) { + // swap + $tmp = $aMin; + $aMin = $aMax; + $aMax = $tmp; + } + $this->filledAreas[] = array($aMin,$aMax,$aColor,$aFilled,$aBorder); + } + + // Gets called before any axis are stroked + function PreStrokeAdjust(&$graph) { + + // If another plot type have already adjusted the + // offset we don't touch it. + // (We check for empty in case the scale is a log scale + // and hence doesn't contain any xlabel_offset) + if( empty($graph->xaxis->scale->ticks->xlabel_offset) || + $graph->xaxis->scale->ticks->xlabel_offset == 0 ) { + if( $this->center ) { + ++$this->numpoints; + $a=0.5; $b=0.5; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + //$graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + } + + function SetFastStroke($aFlg=true) { + $this->iFastStroke = $aFlg; + } + + function FastStroke(&$img,&$xscale,&$yscale,$aStartPoint=0,$exist_x=true) { + // An optimized stroke for many data points with no extra + // features but 60% faster. You can't have values or line styles, or null + // values in plots. + $numpoints=count($this->coords[0]); + if( $this->barcenter ) + $textadj = 0.5-$xscale->text_scale_off; + else + $textadj = 0; + + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $pnts=$aStartPoint; + while( $pnts < $numpoints ) { + if( $exist_x ) $x=$this->coords[1][$pnts]; + else $x=$pnts+$textadj; + $xt = $xscale->Translate($x); + $y=$this->coords[0][$pnts]; + $yt = $yscale->Translate($y); + if( is_numeric($y) ) { + $cord[] = $xt; + $cord[] = $yt; + } + elseif( $y == '-' && $pnts > 0 ) { + // Just ignore + } + else { + JpGraphError::RaiseL(10002);//('Plot too complicated for fast line Stroke. Use standard Stroke()'); + return; + } + ++$pnts; + } // WHILE + + $img->Polygon($cord,false,true); + + } + + function Stroke(&$img,&$xscale,&$yscale) { + $idx=0; + $numpoints=count($this->coords[0]); + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$numpoints ) + JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); +//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + else + $exist_x = true; + } + else + $exist_x = false; + + if( $this->barcenter ) + $textadj = 0.5-$xscale->text_scale_off; + else + $textadj = 0; + + // Find the first numeric data point + $startpoint=0; + while( $startpoint < $numpoints && !is_numeric($this->coords[0][$startpoint]) ) + ++$startpoint; + + // Bail out if no data points + if( $startpoint == $numpoints ) + return; + + if( $this->iFastStroke ) { + $this->FastStroke($img,$xscale,$yscale,$startpoint,$exist_x); + return; + } + + if( $exist_x ) + $xs=$this->coords[1][$startpoint]; + else + $xs= $textadj+$startpoint; + + $img->SetStartPoint($xscale->Translate($xs), + $yscale->Translate($this->coords[0][$startpoint])); + + if( $this->filled ) { + $min = $yscale->GetMinVal(); + if( $min > 0 || $this->fillFromMin ) + $fillmin = $yscale->scale_abs[0];//Translate($min); + else + $fillmin = $yscale->Translate(0); + + $cord[$idx++] = $xscale->Translate($xs); + $cord[$idx++] = $fillmin; + } + $xt = $xscale->Translate($xs); + $yt = $yscale->Translate($this->coords[0][$startpoint]); + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + $yt_old = $yt; + $xt_old = $xt; + $y_old = $this->coords[0][$startpoint]; + + $this->value->Stroke($img,$this->coords[0][$startpoint],$xt,$yt); + + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $img->SetLineStyle($this->line_style); + $pnts=$startpoint+1; + $firstnonumeric = false; + while( $pnts < $numpoints ) { + + if( $exist_x ) $x=$this->coords[1][$pnts]; + else $x=$pnts+$textadj; + $xt = $xscale->Translate($x); + $yt = $yscale->Translate($this->coords[0][$pnts]); + + $y=$this->coords[0][$pnts]; + if( $this->step_style ) { + // To handle null values within step style we need to record the + // first non numeric value so we know from where to start if the + // non value is '-'. + if( is_numeric($y) ) { + $firstnonumeric = false; + if( is_numeric($y_old) ) { + $img->StyleLine($xt_old,$yt_old,$xt,$yt_old); + $img->StyleLine($xt,$yt_old,$xt,$yt); + } + elseif( $y_old == '-' ) { + $img->StyleLine($xt_first,$yt_first,$xt,$yt_first); + $img->StyleLine($xt,$yt_first,$xt,$yt); + } + else { + $yt_old = $yt; + $xt_old = $xt; + } + $cord[$idx++] = $xt; + $cord[$idx++] = $yt_old; + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + elseif( $firstnonumeric==false ) { + $firstnonumeric = true; + $yt_first = $yt_old; + $xt_first = $xt_old; + } + } + else { + $tmp1=$y; + $prev=$this->coords[0][$pnts-1]; + if( $tmp1==='' || $tmp1===NULL || $tmp1==='X' ) $tmp1 = 'x'; + if( $prev==='' || $prev===null || $prev==='X' ) $prev = 'x'; + + if( is_numeric($y) || (is_string($y) && $y != '-') ) { + if( is_numeric($y) && (is_numeric($prev) || $prev === '-' ) ) { + $img->StyleLineTo($xt,$yt); + } + else { + $img->SetStartPoint($xt,$yt); + } + } + if( $this->filled && $tmp1 !== '-' ) { + if( $tmp1 === 'x' ) { + $cord[$idx++] = $cord[$idx-3]; + $cord[$idx++] = $fillmin; + } + elseif( $prev === 'x' ) { + $cord[$idx++] = $xt; + $cord[$idx++] = $fillmin; + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + else { + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + } + else { + if( is_numeric($tmp1) && (is_numeric($prev) || $prev === '-' ) ) { + $cord[$idx++] = $xt; + $cord[$idx++] = $yt; + } + } + } + $yt_old = $yt; + $xt_old = $xt; + $y_old = $y; + + $this->StrokeDataValue($img,$this->coords[0][$pnts],$xt,$yt); + + ++$pnts; + } + + if( $this->filled ) { + $cord[$idx++] = $xt; + if( $min > 0 || $this->fillFromMin ) + $cord[$idx++] = $yscale->Translate($min); + else + $cord[$idx++] = $yscale->Translate(0); + if( $this->fillgrad ) { + $img->SetLineWeight(1); + $grad = new Gradient($img); + $grad->SetNumColors($this->fillgrad_numcolors); + $grad->FilledFlatPolygon($cord,$this->fillgrad_fromcolor,$this->fillgrad_tocolor); + $img->SetLineWeight($this->weight); + } + else { + $img->SetColor($this->fill_color); + $img->FilledPolygon($cord); + } + if( $this->line_weight > 0 ) { + $img->SetColor($this->color); + $img->Polygon($cord); + } + } + + if(!empty($this->filledAreas)) { + + $minY = $yscale->Translate($yscale->GetMinVal()); + $factor = ($this->step_style ? 4 : 2); + + for($i = 0; $i < sizeof($this->filledAreas); ++$i) { + // go through all filled area elements ordered by insertion + // fill polygon array + $areaCoords[] = $cord[$this->filledAreas[$i][0] * $factor]; + $areaCoords[] = $minY; + + $areaCoords = + array_merge($areaCoords, + array_slice($cord, + $this->filledAreas[$i][0] * $factor, + ($this->filledAreas[$i][1] - $this->filledAreas[$i][0] + ($this->step_style ? 0 : 1)) * $factor)); + $areaCoords[] = $areaCoords[sizeof($areaCoords)-2]; // last x + $areaCoords[] = $minY; // last y + + if($this->filledAreas[$i][3]) { + $img->SetColor($this->filledAreas[$i][2]); + $img->FilledPolygon($areaCoords); + $img->SetColor($this->color); + } + // Check if we should draw the frame. + // If not we still re-draw the line since it might have been + // partially overwritten by the filled area and it doesn't look + // very good. + // TODO: The behaviour is undefined if the line does not have + // any line at the position of the area. + if( $this->filledAreas[$i][4] ) + $img->Polygon($areaCoords); + else + $img->Polygon($cord); + + $areaCoords = array(); + } + } + + if( $this->mark->type == -1 || $this->mark->show == false ) + return; + + for( $pnts=0; $pnts<$numpoints; ++$pnts) { + + if( $exist_x ) $x=$this->coords[1][$pnts]; + else $x=$pnts+$textadj; + $xt = $xscale->Translate($x); + $yt = $yscale->Translate($this->coords[0][$pnts]); + + if( is_numeric($this->coords[0][$pnts]) ) { + if( !empty($this->csimtargets[$pnts]) ) { + if( !empty($this->csimwintargets[$pnts]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$pnts],$this->csimwintargets[$pnts]); + } + else { + $this->mark->SetCSIMTarget($this->csimtargets[$pnts]); + } + $this->mark->SetCSIMAlt($this->csimalts[$pnts]); + } + if( $exist_x ) + $x=$this->coords[1][$pnts]; + else + $x=$pnts; + $this->mark->SetCSIMAltVal($this->coords[0][$pnts],$x); + $this->mark->Stroke($img,$xt,$yt); + $this->csimareas .= $this->mark->GetCSIMAreas(); + } + } + + + } +} // Class + + +//=================================================== +// CLASS AccLinePlot +// Description: +//=================================================== +class AccLinePlot extends Plot { + var $plots=null,$nbrplots=0,$numpoints=0; + var $iStartEndZero=true; +//--------------- +// CONSTRUCTOR + function AccLinePlot($plots) { + $this->plots = $plots; + $this->nbrplots = count($plots); + $this->numpoints = $plots[0]->numpoints; + + // Verify that all plots have the same number of data points + for( $i=1; $i < $this->nbrplots; ++$i ) { + if( $plots[$i]->numpoints != $this->numpoints ) { + JpGraphError::RaiseL(10003);//('Each plot in an accumulated lineplot must have the same number of data points',0) + } + } + + for($i=0; $i < $this->nbrplots; ++$i ) { + $this->LineInterpolate($this->plots[$i]->coords[0]); + } + } + +//--------------- +// PUBLIC METHODS + function Legend(&$graph) { + $n=count($this->plots); + for($i=0; $i < $n; ++$i ) + $this->plots[$i]->DoLegend($graph); + } + + function Max() { + list($xmax) = $this->plots[0]->Max(); + $nmax=0; + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $nc = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$nc); + list($x) = $this->plots[$i]->Max(); + $xmax = Max($xmax,$x); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for line $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots max y-value since that + // would in most cases give to large y-value. + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymax[$i] = $y; + } + $ymax = max($ymax); + return array($xmax,$ymax); + } + + function Min() { + $nmax=0; + list($xmin,$ysetmin) = $this->plots[0]->Min(); + $n = count($this->plots); + for($i=0; $i < $n; ++$i) { + $nc = count($this->plots[$i]->coords[0]); + $nmax = max($nmax,$nc); + list($x,$y) = $this->plots[$i]->Min(); + $xmin = Min($xmin,$x); + $ysetmin = Min($y,$ysetmin); + } + for( $i = 0; $i < $nmax; $i++ ) { + // Get y-value for line $i by adding the + // individual bars from all the plots added. + // It would be wrong to just add the + // individual plots min y-value since that + // would in most cases give to small y-value. + $y=$this->plots[0]->coords[0][$i]; + for( $j = 1; $j < $this->nbrplots; $j++ ) { + $y += $this->plots[ $j ]->coords[0][$i]; + } + $ymin[$i] = $y; + } + $ymin = Min($ysetmin,Min($ymin)); + return array($xmin,$ymin); + } + + // Gets called before any axis are stroked + function PreStrokeAdjust(&$graph) { + + // If another plot type have already adjusted the + // offset we don't touch it. + // (We check for empty in case the scale is a log scale + // and hence doesn't contain any xlabel_offset) + + if( empty($graph->xaxis->scale->ticks->xlabel_offset) || + $graph->xaxis->scale->ticks->xlabel_offset == 0 ) { + if( $this->center ) { + ++$this->numpoints; + $a=0.5; $b=0.5; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + $graph->xaxis->scale->ticks->SupressMinorTickMarks(); + } + + } + + function SetInterpolateMode($aIntMode) { + $this->iStartEndZero=$aIntMode; + } + + // Replace all '-' with an interpolated value. We use straightforward + // linear interpolation. If the data starts with one or several '-' they + // will be replaced by the the first valid data point + function LineInterpolate(&$aData) { + + $n=count($aData); + $i=0; + + // If first point is undefined we will set it to the same as the first + // valid data + if( $aData[$i]==='-' ) { + // Find the first valid data + while( $i < $n && $aData[$i]==='-' ) { + ++$i; + } + if( $i < $n ) { + for($j=0; $j < $i; ++$j ) { + if( $this->iStartEndZero ) + $aData[$i] = 0; + else + $aData[$j] = $aData[$i]; + } + } + else { + // All '-' => Error + return false; + } + } + + while($i < $n) { + while( $i < $n && $aData[$i] !== '-' ) { + ++$i; + } + if( $i < $n ) { + $pstart=$i-1; + + // Now see how long this segment of '-' are + while( $i < $n && $aData[$i] === '-' ) + ++$i; + if( $i < $n ) { + $pend=$i; + $size=$pend-$pstart; + $k=($aData[$pend]-$aData[$pstart])/$size; + // Replace the segment of '-' with a linear interpolated value. + for($j=1; $j < $size; ++$j ) { + $aData[$pstart+$j] = $aData[$pstart] + $j*$k ; + } + } + else { + // There are no valid end point. The '-' goes all the way to the end + // In that case we just set all the remaining values the the same as the + // last valid data point. + for( $j=$pstart+1; $j < $n; ++$j ) + if( $this->iStartEndZero ) + $aData[$j] = 0; + else + $aData[$j] = $aData[$pstart] ; + } + } + } + return true; + } + + + + // To avoid duplicate of line drawing code here we just + // change the y-values for each plot and then restore it + // after we have made the stroke. We must do this copy since + // it wouldn't be possible to create an acc line plot + // with the same graphs, i.e AccLinePlot(array($pl,$pl,$pl)); + // since this method would have a side effect. + function Stroke(&$img,&$xscale,&$yscale) { + $img->SetLineWeight($this->weight); + $this->numpoints = count($this->plots[0]->coords[0]); + // Allocate array + $coords[$this->nbrplots][$this->numpoints]=0; + for($i=0; $i<$this->numpoints; $i++) { + $coords[0][$i]=$this->plots[0]->coords[0][$i]; + $accy=$coords[0][$i]; + for($j=1; $j<$this->nbrplots; ++$j ) { + $coords[$j][$i] = $this->plots[$j]->coords[0][$i]+$accy; + $accy = $coords[$j][$i]; + } + } + for($j=$this->nbrplots-1; $j>=0; --$j) { + $p=$this->plots[$j]; + for( $i=0; $i<$this->numpoints; ++$i) { + $tmp[$i]=$p->coords[0][$i]; + $p->coords[0][$i]=$coords[$j][$i]; + } + $p->Stroke($img,$xscale,$yscale); + for( $i=0; $i<$this->numpoints; ++$i) + $p->coords[0][$i]=$tmp[$i]; + $p->coords[0][]=$tmp; + } + } +} // Class + + +/* EOF */ +?> diff --git a/html/includes/jpgraph/src/jpgraph_log.php b/html/includes/jpgraph/src/jpgraph_log.php new file mode 100644 index 0000000000..36b1a8210e --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_log.php @@ -0,0 +1,282 @@ +LinearScale($min,$max,$type); + $this->ticks = new LogTicks(); + $this->name = 'log'; + } + +//---------------- +// PUBLIC METHODS + + // Translate between world and screen + function Translate($a) { + if( !is_numeric($a) ) { + if( $a != '' && $a != '-' && $a != 'x' ) + JpGraphError::RaiseL(11001); +//('Your data contains non-numeric values.'); + return 1; + } + if( $a < 0 ) { + JpGraphError::RaiseL(11002); +//("Negative data values can not be used in a log scale."); + exit(1); + } + if( $a==0 ) $a=1; + $a=log10($a); + return ceil($this->off + ($a*1.0 - $this->scale[0]) * $this->scale_factor); + } + + // Relative translate (don't include offset) usefull when we just want + // to know the relative position (in pixels) on the axis + function RelTranslate($a) { + if( !is_numeric($a) ) { + if( $a != '' && $a != '-' && $a != 'x' ) + JpGraphError::RaiseL(11001); +//('Your data contains non-numeric values.'); + return 1; + } + if( $a==0 ) $a=1; + $a=log10($a); + return round(($a*1.0 - $this->scale[0]) * $this->scale_factor); + } + + // Use bcpow() for increased precision + function GetMinVal() { + if( function_exists("bcpow") ) + return round(bcpow(10,$this->scale[0],15),14); + else + return round(pow(10,$this->scale[0]),14); + } + + function GetMaxVal() { + if( function_exists("bcpow") ) + return round(bcpow(10,$this->scale[1],15),14); + else + return round(pow(10,$this->scale[1]),14); + } + + // Logarithmic autoscaling is much simplier since we just + // set the min and max to logs of the min and max values. + // Note that for log autoscale the "maxstep" the fourth argument + // isn't used. This is just included to give the method the same + // signature as the linear counterpart. + function AutoScale(&$img,$min,$max,$dummy) { + if( $min==0 ) $min=1; + + if( $max <= 0 ) { + JpGraphError::RaiseL(11004); +//('Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.'); + } + if( is_numeric($this->autoscale_min) ) { + $smin = round($this->autoscale_min); + $smax = ceil(log10($max)); + if( $min >= $max ) { + JpGraphError::RaiseL(25071);//('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.'); + } + } + else { + $smin = floor(log10($min)); + if( is_numeric($this->autoscale_max) ) { + $smax = round($this->autoscale_max); + if( $smin >= $smax ) { + JpGraphError::RaiseL(25072);//('You have specified a max value with SetAutoMax() which is smaller than the miminum value used for the scale. This is not possible.'); + } + } + else + $smax = ceil(log10($max)); + } + $this->Update($img,$smin,$smax); + } +//--------------- +// PRIVATE METHODS +} // Class + +//=================================================== +// CLASS LogTicks +// Description: +//=================================================== +class LogTicks extends Ticks{ + var $label_logtype=LOGLABELS_MAGNITUDE; +//--------------- +// CONSTRUCTOR + function LogTicks() { + } +//--------------- +// PUBLIC METHODS + function IsSpecified() { + return true; + } + + function SetLabelLogType($aType) { + $this->label_logtype = $aType; + } + + // For log scale it's meaningless to speak about a major step + // We just return -1 to make the framework happy (specifically + // StrokeLabels() ) + function GetMajor() { + return -1; + } + + function SetTextLabelStart($aStart) { + JpGraphError::RaiseL(11005); +//('Specifying tick interval for a logarithmic scale is undefined. Remove any calls to SetTextLabelStart() or SetTextTickInterval() on the logarithmic scale.'); + } + + function SetXLabelOffset($dummy) { + // For log scales we dont care about XLabel offset + } + + // Draw ticks on image "img" using scale "scale". The axis absolute + // position in the image is specified in pos, i.e. for an x-axis + // it specifies the absolute y-coord and for Y-ticks it specified the + // absolute x-position. + function Stroke(&$img,&$scale,$pos) { + $start = $scale->GetMinVal(); + $limit = $scale->GetMaxVal(); + $nextMajor = 10*$start; + $step = $nextMajor / 10.0; + + + $img->SetLineWeight($this->weight); + + if( $scale->type == "y" ) { + // member direction specified if the ticks should be on + // left or right side. + $a=$pos + $this->direction*$this->GetMinTickAbsSize(); + $a2=$pos + $this->direction*$this->GetMajTickAbsSize(); + + $count=1; + $this->maj_ticks_pos[0]=$scale->Translate($start); + $this->maj_ticklabels_pos[0]=$scale->Translate($start); + if( $this->supress_first ) + $this->maj_ticks_label[0]=""; + else { + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[0]=call_user_func($f,$start); + } + elseif( $this->label_logtype == LOGLABELS_PLAIN ) + $this->maj_ticks_label[0]=$start; + else + $this->maj_ticks_label[0]='10^'.round(log10($start)); + } + $i=1; + for($y=$start; $y<=$limit; $y+=$step,++$count ) { + $ys=$scale->Translate($y); + $this->ticks_pos[]=$ys; + $this->ticklabels_pos[]=$ys; + if( $count % 10 == 0 ) { + if( !$this->supress_tickmarks ) { + if( $this->majcolor!="" ) { + $img->PushColor($this->majcolor); + $img->Line($pos,$ys,$a2,$ys); + $img->PopColor(); + } + else + $img->Line($pos,$ys,$a2,$ys); + } + + $this->maj_ticks_pos[$i]=$ys; + $this->maj_ticklabels_pos[$i]=$ys; + + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[$i]=call_user_func($f,$nextMajor); + } + elseif( $this->label_logtype == 0 ) + $this->maj_ticks_label[$i]=$nextMajor; + else + $this->maj_ticks_label[$i]='10^'.round(log10($nextMajor)); + ++$i; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor!="" ) $img->PushColor($this->mincolor); + $img->Line($pos,$ys,$a,$ys); + if( $this->mincolor!="" ) $img->PopColor(); + } + } + } + } + else { + $a=$pos - $this->direction*$this->GetMinTickAbsSize(); + $a2=$pos - $this->direction*$this->GetMajTickAbsSize(); + $count=1; + $this->maj_ticks_pos[0]=$scale->Translate($start); + $this->maj_ticklabels_pos[0]=$scale->Translate($start); + if( $this->supress_first ) + $this->maj_ticks_label[0]=""; + else { + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[0]=call_user_func($f,$start); + } + elseif( $this->label_logtype == 0 ) + $this->maj_ticks_label[0]=$start; + else + $this->maj_ticks_label[0]='10^'.round(log10($start)); + } + $i=1; + for($x=$start; $x<=$limit; $x+=$step,++$count ) { + $xs=$scale->Translate($x); + $this->ticks_pos[]=$xs; + $this->ticklabels_pos[]=$xs; + if( $count % 10 == 0 ) { + if( !$this->supress_tickmarks ) { + $img->Line($xs,$pos,$xs,$a2); + } + $this->maj_ticks_pos[$i]=$xs; + $this->maj_ticklabels_pos[$i]=$xs; + + if( $this->label_formfunc != '' ) { + $f = $this->label_formfunc; + $this->maj_ticks_label[$i]=call_user_func($f,$nextMajor); + } + elseif( $this->label_logtype == 0 ) + $this->maj_ticks_label[$i]=$nextMajor; + else + $this->maj_ticks_label[$i]='10^'.round(log10($nextMajor)); + ++$i; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else { + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + $img->Line($xs,$pos,$xs,$a); + } + } + } + } + return true; + } +} // Class +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_mgraph.php b/html/includes/jpgraph/src/jpgraph_mgraph.php new file mode 100644 index 0000000000..f53db9f7b6 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_mgraph.php @@ -0,0 +1,381 @@ +iWidth = $aWidth; + $this->iHeight = $aHeight; + } + + // Specify background fill color for the combined graph + function SetFillColor($aColor) { + $this->iFillColor = $aColor; + } + + // Add a frame around the combined graph + function SetFrame($aFlg,$aColor='black',$aWeight=1) { + $this->iDoFrame = $aFlg; + $this->iFrameColor = $aColor; + $this->iFrameWeight = $aWeight; + } + + // Specify a background image blend + function SetBackgroundImageMix($aMix) { + $this->background_image_mix = $aMix ; + } + + // Specify a background image + function SetBackgroundImage($aFileName,$aCenter_aX=NULL,$aY=NULL) { + // Second argument can be either a boolean value or + // a numeric + $aCenter=TRUE; + $aX=NULL; + + if( is_numeric($aCenter_aX) ) { + $aX=$aCenter_aX; + } + + // Get extension to determine image type + $e = explode('.',$aFileName); + if( !$e ) { + JpGraphError::RaiseL(12002,$aFileName); +//('Incorrect file name for MGraph::SetBackgroundImage() : '.$aFileName.' Must have a valid image extension (jpg,gif,png) when using autodetection of image type'); + } + + $valid_formats = array('png', 'jpg', 'gif'); + $aImgFormat = strtolower($e[count($e)-1]); + if ($aImgFormat == 'jpeg') { + $aImgFormat = 'jpg'; + } + elseif (!in_array($aImgFormat, $valid_formats) ) { + JpGraphError::RaiseL(12003,$aImgFormat,$aFileName); +//('Unknown file extension ($aImgFormat) in MGraph::SetBackgroundImage() for filename: '.$aFileName); + } + + $this->background_image = $aFileName; + $this->background_image_center=$aCenter; + $this->background_image_format=$aImgFormat; + $this->background_image_x = $aX; + $this->background_image_y = $aY; + } + + + // Private helper function for backgound image + function _loadBkgImage($aFile='') { + if( $aFile == '' ) + $aFile = $this->background_image; + + // Remove case sensitivity and setup appropriate function to create image + // Get file extension. This should be the LAST '.' separated part of the filename + $e = explode('.',$aFile); + $ext = strtolower($e[count($e)-1]); + if ($ext == "jpeg") { + $ext = "jpg"; + } + + if( trim($ext) == '' ) + $ext = 'png'; // Assume PNG if no extension specified + + $supported = imagetypes(); + if( ( $ext == 'jpg' && !($supported & IMG_JPG) ) || + ( $ext == 'gif' && !($supported & IMG_GIF) ) || + ( $ext == 'png' && !($supported & IMG_PNG) ) ) { + JpGraphError::RaiseL(12004,$aFile);//('The image format of your background image ('.$aFile.') is not supported in your system configuration. '); + } + + if( $ext == "jpg" || $ext == "jpeg") { + $f = "imagecreatefromjpeg"; + $ext = "jpg"; + } + else { + $f = "imagecreatefrom".$ext; + } + + $img = @$f($aFile); + if( !$img ) { + JpGraphError::RaiseL(12005,$aFile); +//(" Can't read background image: '".$aFile."'"); + } + return $img; + } + + function _strokeBackgroundImage() { + if( $this->background_image == '' ) + return; + + $bkgimg = $this->_loadBkgImage(); + // Background width & Heoght + $bw = imagesx($bkgimg); + $bh = imagesy($bkgimg); + // Canvas width and height + $cw = imagesx($this->img); + $ch = imagesy($this->img); + + if( $this->background_image_x === NULL || $this->background_image_y === NULL ) { + if( $this->background_image_center ) { + // Center original image in the plot area + $x = round($cw/2-$bw/2); $y = round($ch/2-$bh/2); + } + else { + // Just copy the image from left corner, no resizing + $x=0; $y=0; + } + } + else { + $x = $this->background_image_x; + $y = $this->background_image_y; + } + $this->_imageCp($bkgimg,$x,$y,0,0,$bw,$bh,$this->background_image_mix); + } + + function _imageCp($aSrcImg,$x,$y,$fx,$fy,$w,$h,$mix=100) { + imagecopymerge($this->img,$aSrcImg,$x,$y,$fx,$fy,$w,$h,$mix); + } + + function _imageCreate($aWidth,$aHeight) { + if( $aWidth <= 1 || $aHeight <= 1 ) { + JpGraphError::RaiseL(12006,$aWidth,$aHeight); +//("Illegal sizes specified for width or height when creating an image, (width=$aWidth, height=$aHeight)"); + } + $this->img = @imagecreatetruecolor($aWidth, $aHeight); + if( $this->img < 1 ) { + JpGraphError::RaiseL(12011); +// die("JpGraph Error: Can't create truecolor image. Check that you really have GD2 library installed."); + } + ImageAlphaBlending($this->img,true); + } + + function _polygon($p,$closed=FALSE) { + if( $this->iLineWeight==0 ) return; + $n=count($p); + $oldx = $p[0]; + $oldy = $p[1]; + for( $i=2; $i < $n; $i+=2 ) { + imageline($this->img,$oldx,$oldy,$p[$i],$p[$i+1],$this->iCurrentColor); + $oldx = $p[$i]; + $oldy = $p[$i+1]; + } + if( $closed ) { + imageline($this->img,$p[$n*2-2],$p[$n*2-1],$p[0],$p[1],$this->iCurrentColor); + } + } + + function _filledPolygon($pts) { + $n=count($pts); + for($i=0; $i < $n; ++$i) + $pts[$i] = round($pts[$i]); + imagefilledpolygon($this->img,$pts,count($pts)/2,$this->iCurrentColor); + } + + function _rectangle($xl,$yu,$xr,$yl) { + for($i=0; $i < $this->iLineWeight; ++$i ) + $this->_polygon(array($xl+$i,$yu+$i,$xr-$i,$yu+$i, + $xr-$i,$yl-$i,$xl+$i,$yl-$i, + $xl+$i,$yu+$i)); + } + + function _filledRectangle($xl,$yu,$xr,$yl) { + $this->_filledPolygon(array($xl,$yu,$xr,$yu,$xr,$yl,$xl,$yl)); + } + + function _setColor($aColor) { + $this->iCurrentColor = $this->iRGB->Allocate($aColor); + } + + function AddMix($aGraph,$x=0,$y=0,$mix=100,$fx=0,$fy=0,$w=0,$h=0) { + $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h,$mix); + } + + function Add($aGraph,$x=0,$y=0,$fx=0,$fy=0,$w=0,$h=0) { + $this->_gdImgHandle($aGraph->Stroke( _IMG_HANDLER),$x,$y,$fx=0,$fy=0,$w,$h); + } + + function _gdImgHandle($agdCanvas,$x,$y,$fx=0,$fy=0,$w=0,$h=0,$mix=100) { + if( $w == 0 ) $w = @imagesx($agdCanvas); + if( $w === NULL ) { + JpGraphError::RaiseL(12007); +//('Argument to MGraph::Add() is not a valid GD image handle.'); + return; + } + if( $h == 0 ) $h = @imagesy($agdCanvas); + $this->iGraphs[$this->iCnt++] = array($agdCanvas,$x,$y,$fx,$fy,$w,$h,$mix); + } + + function SetMargin($lm,$rm,$tm,$bm) { + $this->lm = $lm; + $this->rm = $rm; + $this->tm = $tm; + $this->bm = $bm; + } + + function SetExpired($aFlg=true) { + $this->expired = $aFlg; + } + + // Generate image header + function Headers() { + + // In case we are running from the command line with the client version of + // PHP we can't send any headers. + $sapi = php_sapi_name(); + if( $sapi == 'cli' ) + return; + + if( headers_sent() ) { + + echo "
    JpGraph Error: +HTTP headers have already been sent.
    Explanation:
    HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it's image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).

    Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

    For example it is a common mistake to leave a blank line before the opening \"<?php\".

    "; + + die(); + + } + + + if ($this->expired) { + header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); + header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); + header("Cache-Control: no-cache, must-revalidate"); + header("Pragma: no-cache"); + } + header("Content-type: image/$this->img_format"); + } + + function SetImgFormat($aFormat,$aQuality=75) { + $this->image_quality = $aQuality; + $aFormat = strtolower($aFormat); + $tst = true; + $supported = imagetypes(); + if( $aFormat=="auto" ) { + if( $supported & IMG_PNG ) + $this->img_format="png"; + elseif( $supported & IMG_JPG ) + $this->img_format="jpeg"; + elseif( $supported & IMG_GIF ) + $this->img_format="gif"; + else + JpGraphError::RaiseL(12008); +//(" Your PHP (and GD-lib) installation does not appear to support any known graphic formats.". + return true; + } + else { + if( $aFormat=="jpeg" || $aFormat=="png" || $aFormat=="gif" ) { + if( $aFormat=="jpeg" && !($supported & IMG_JPG) ) + $tst=false; + elseif( $aFormat=="png" && !($supported & IMG_PNG) ) + $tst=false; + elseif( $aFormat=="gif" && !($supported & IMG_GIF) ) + $tst=false; + else { + $this->img_format=$aFormat; + return true; + } + } + else + $tst=false; + if( !$tst ) + JpGraphError::RaiseL(12009,$aFormat); +//(" Your PHP installation does not support the chosen graphic format: $aFormat"); + } + } + + // Stream image to browser or to file + function Stream($aFile="") { + $func="image".$this->img_format; + if( $this->img_format=="jpeg" && $this->image_quality != null ) { + $res = @$func($this->img,$aFile,$this->image_quality); + } + else { + if( $aFile != "" ) { + $res = @$func($this->img,$aFile); + } + else + $res = @$func($this->img); + } + if( !$res ) + JpGraphError::RaiseL(12010,$aFile); +//("Can't create or stream image to file $aFile Check that PHP has enough permission to write a file to the current directory."); + } + + function Stroke($aFileName='') { + // Find out the necessary size for the container image + $w=0; $h=0; + for($i=0; $i < $this->iCnt; ++$i ) { + $maxw = $this->iGraphs[$i][1]+$this->iGraphs[$i][5]; + $maxh = $this->iGraphs[$i][2]+$this->iGraphs[$i][6]; + $w = max( $w, $maxw ); + $h = max( $h, $maxh ); + } + $w += $this->lm+$this->rm; + $h += $this->tm+$this->bm; + + // User specified width,height overrides + if( $this->iWidth !== NULL ) $w = $this->iWidth; + if( $this->iHeight!== NULL ) $h = $this->iHeight; + + $this->_imageCreate($w,$h); + $this->iRGB = new RGB($this->img); + + $this->_setcolor($this->iFillColor); + $this->_filledRectangle(0,0,$w-1,$h-1); + + $this->_strokeBackgroundImage(); + + if( $this->iDoFrame ) { + $this->_setColor($this->iFrameColor); + $this->iLineWeight=$this->iFrameWeight; + $this->_rectangle(0,0,$w-1,$h-1); + } + + // Copy all sub graphs to the container + for($i=0; $i < $this->iCnt; ++$i ) { + $this->_imageCp($this->iGraphs[$i][0], + $this->iGraphs[$i][1]+$this->lm,$this->iGraphs[$i][2]+$this->tm, + $this->iGraphs[$i][3],$this->iGraphs[$i][4], + $this->iGraphs[$i][5],$this->iGraphs[$i][6], + $this->iGraphs[$i][7]); + } + + // Output image + if( $aFileName == _IMG_HANDLER ) { + return $this->img; + } + else { + if( $aFileName != '' ) { + $this->Stream($aFileName); + } + else { + $this->Headers(); + $this->Stream(); + } + } + } +} + +?> diff --git a/html/includes/jpgraph/src/jpgraph_pie.php b/html/includes/jpgraph/src/jpgraph_pie.php new file mode 100644 index 0000000000..f52b59e71a --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_pie.php @@ -0,0 +1,1437 @@ + array(136,34,40,45,46,62,63,134,74,10,120,136,141,168,180,77,209,218,346,395,89,430), + "pastel" => array(27,415,128,59,66,79,105,110,42,147,152,230,236,240,331,337,405,38), + "water" => array(8,370,24,40,335,56,213,237,268,14,326,387,10,388), + "sand" => array(27,168,34,170,19,50,65,72,131,209,46,393)); + var $theme="earth"; + var $setslicecolors=array(); + var $labeltype=0; // Default to percentage + var $pie_border=true,$pie_interior_border=true; + var $value; + var $ishadowcolor='',$ishadowdrop=4; + var $ilabelposadj=1; + var $legendcsimtargets = array(); + var $legendcsimwintargets = array(); + var $legendcsimalts = array(); + var $adjusted_data = array(); + var $guideline = null,$guidelinemargin=10; + var $iShowGuideLineForSingle = false; + var $iGuideLineCurve = false,$iGuideVFactor=1.4,$iGuideLineRFactor=0.8; + var $la = array(); // Holds the angle for each label +//--------------- +// CONSTRUCTOR + function PiePlot($data) { + $this->data = array_reverse($data); + $this->title = new Text(""); + $this->title->SetFont(FF_FONT1,FS_BOLD); + $this->value = new DisplayValue(); + $this->value->Show(); + $this->value->SetFormat('%.1f%%'); + $this->guideline = new LineProperty(); + } + +//--------------- +// PUBLIC METHODS + function SetCenter($x,$y=0.5) { + $this->posx = $x; + $this->posy = $y; + } + + // Enable guideline and set drwaing policy + function SetGuideLines($aFlg=true,$aCurved=true,$aAlways=false) { + $this->guideline->Show($aFlg); + $this->iShowGuideLineForSingle = $aAlways; + $this->iGuideLineCurve = $aCurved; + } + + // Adjuste the distance between labels and labels and pie + function SetGuideLinesAdjust($aVFactor,$aRFactor=0.8) { + $this->iGuideVFactor=$aVFactor; + $this->iGuideLineRFactor=$aRFactor; + } + + function SetColor($aColor) { + $this->color = $aColor; + } + + function SetSliceColors($aColors) { + $this->setslicecolors = $aColors; + } + + function SetShadow($aColor='darkgray',$aDropWidth=4) { + $this->ishadowcolor = $aColor; + $this->ishadowdrop = $aDropWidth; + } + + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets=array_reverse($aTargets); + if( is_array($aWinTargets) ) + $this->csimwintargets=array_reverse($aWinTargets); + if( is_array($aAlts) ) + $this->csimalts=array_reverse($aAlts); + } + + function GetCSIMareas() { + return $this->csimareas; + } + + function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) { + + //Slice number, ellipse centre (x,y), height, width, start angle, end angle + while( $sa > 2*M_PI ) $sa = $sa - 2*M_PI; + while( $ea > 2*M_PI ) $ea = $ea - 2*M_PI; + + $sa = 2*M_PI - $sa; + $ea = 2*M_PI - $ea; + + // Special case when we have only one slice since then both start and end + // angle will be == 0 + if( abs($sa - $ea) < 0.0001 ) { + $sa=2*M_PI; $ea=0; + } + + //add coordinates of the centre to the map + $xc = floor($xc);$yc=floor($yc); + $coords = "$xc, $yc"; + + //add coordinates of the first point on the arc to the map + $xp = floor(($radius*cos($ea))+$xc); + $yp = floor($yc-$radius*sin($ea)); + $coords.= ", $xp, $yp"; + //add coordinates every 0.2 radians + $a=$ea+0.2; + + // If we cross the 260-limit with a slice we need to handle + // the fact that end angle is smaller than start + if( $sa < $ea ) { + while ($a <= 2*M_PI) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.2; + } + $a -= 2*M_PI; + } + + while ($a < $sa) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.2; + } + + //Add the last point on the arc + $xp = floor($radius*cos($sa)+$xc); + $yp = floor($yc-$radius*sin($sa)); + $coords.= ", $xp, $yp"; + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + $tmp=""; + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + + function SetTheme($aTheme) { + if( in_array($aTheme,array_keys($this->themearr)) ) + $this->theme = $aTheme; + else + JpGraphError::RaiseL(15001,$aTheme);//("PiePLot::SetTheme() Unknown theme: $aTheme"); + } + + function ExplodeSlice($e,$radius=20) { + if( ! is_integer($e) ) + JpGraphError::RaiseL(15002);//('Argument to PiePlot::ExplodeSlice() must be an integer'); + $this->explode_radius[$e]=$radius; + } + + function ExplodeAll($radius=20) { + $this->explode_all=true; + $this->explode_r = $radius; + } + + function Explode($aExplodeArr) { + if( !is_array($aExplodeArr) ) { + JpGraphError::RaiseL(15003); +//("Argument to PiePlot::Explode() must be an array with integer distances."); + } + $this->explode_radius = $aExplodeArr; + } + + function SetStartAngle($aStart) { + if( $aStart < 0 || $aStart > 360 ) { + JpGraphError::RaiseL(15004);//('Slice start angle must be between 0 and 360 degrees.'); + } + $this->startangle = 360-$aStart; + $this->startangle *= M_PI/180; + } + + function SetFont($family,$style=FS_NORMAL,$size=10) { + JpGraphError::RaiseL(15005);//('PiePlot::SetFont() is deprecated. Use PiePlot->value->SetFont() instead.'); + } + + // Size in percentage + function SetSize($aSize) { + if( ($aSize>0 && $aSize<=0.5) || ($aSize>10 && $aSize<1000) ) + $this->radius = $aSize; + else + JpGraphError::RaiseL(15006); +//("PiePlot::SetSize() Radius for pie must either be specified as a fraction [0, 0.5] of the size of the image or as an absolute size in pixels in the range [10, 1000]"); + } + + function SetFontColor($aColor) { + JpGraphError::RaiseL(15007); +//('PiePlot::SetFontColor() is deprecated. Use PiePlot->value->SetColor() instead.'); + } + + // Set label arrays + function SetLegends($aLegend) { + $this->legends = $aLegend; + } + + // Set text labels for slices + function SetLabels($aLabels,$aLblPosAdj="auto") { + $this->labels = array_reverse($aLabels); + $this->ilabelposadj=$aLblPosAdj; + } + + function SetLabelPos($aLblPosAdj) { + $this->ilabelposadj=$aLblPosAdj; + } + + // Should we display actual value or percentage? + function SetLabelType($t) { + if( $t < 0 || $t > 2 ) + JpGraphError::RaiseL(15008,$t); +//("PiePlot::SetLabelType() Type for pie plots must be 0 or 1 (not $t)."); + $this->labeltype=$t; + } + + // Deprecated. + function SetValueType($aType) { + $this->SetLabelType($aType); + } + + // Should the circle around a pie plot be displayed + function ShowBorder($exterior=true,$interior=true) { + $this->pie_border = $exterior; + $this->pie_interior_border = $interior; + } + + // Setup the legends (Framework method) + function Legend(&$graph) { + $colors = array_keys($graph->img->rgb->rgb_table); + sort($colors); + $ta=$this->themearr[$this->theme]; + $n = count($this->data); + + if( $this->setslicecolors==null ) { + $numcolors=count($ta); + if( is_a($this,'PiePlot3D') ) { + $ta = array_reverse(array_slice($ta,0,$n)); + } + } + else { + $this->setslicecolors = array_slice($this->setslicecolors,0,$n); + $numcolors=count($this->setslicecolors); + if( $graph->pieaa && !is_a($this,'PiePlot3D') ) { + $this->setslicecolors = array_reverse($this->setslicecolors); + } + } + + $sum=0; + for($i=0; $i < $n; ++$i) + $sum += $this->data[$i]; + + // Bail out with error if the sum is 0 + if( $sum==0 ) + JpGraphError::RaiseL(15009);//("Illegal pie plot. Sum of all data is zero for Pie!"); + + // Make sure we don't plot more values than data points + // (in case the user added more legends than data points) + $n = min(count($this->legends),count($this->data)); + if( $this->legends != "" ) { + $this->legends = array_reverse(array_slice($this->legends,0,$n)); + } + for( $i=$n-1; $i >= 0; --$i ) { + $l = $this->legends[$i]; + // Replace possible format with actual values + if( count($this->csimalts) > $i ) { + $fmt = $this->csimalts[$i]; + } + else { + $fmt = "%d"; // Deafult Alt if no other has been specified + } + if( $this->labeltype==0 ) { + $l = sprintf($l,100*$this->data[$i]/$sum); + $alt = sprintf($fmt,$this->data[$i]); + + } + elseif( $this->labeltype == 1) { + $l = sprintf($l,$this->data[$i]); + $alt = sprintf($fmt,$this->data[$i]); + + } + else { + $l = sprintf($l,$this->adjusted_data[$i]); + $alt = sprintf($fmt,$this->adjusted_data[$i]); + } + + if( empty($this->csimwintargets[$i]) ) { + $wintarg = ''; + } + else { + $wintarg = $this->csimwintargets[$i]; + } + + if( $this->setslicecolors==null ) { + $graph->legend->Add($l,$colors[$ta[$i%$numcolors]],"",0,$this->csimtargets[$i],$alt,$wintarg); + } + else { + $graph->legend->Add($l,$this->setslicecolors[$i%$numcolors],"",0,$this->csimtargets[$i],$alt,$wintarg); + } + } + } + + // Adjust the rounded percetage value so that the sum of + // of the pie slices are always 100% + // Using the Hare/Niemeyer method + function AdjPercentage($aData,$aPrec=0) { + $mul=100; + if( $aPrec > 0 && $aPrec < 3 ) { + if( $aPrec == 1 ) + $mul=1000; + else + $mul=10000; + } + + $tmp = array(); + $result = array(); + $quote_sum=0; + $n = count($aData) ; + for( $i=0, $sum=0; $i < $n; ++$i ) + $sum+=$aData[$i]; + foreach($aData as $index => $value) { + $tmp_percentage=$value/$sum*$mul; + $result[$index]=floor($tmp_percentage); + $tmp[$index]=$tmp_percentage-$result[$index]; + $quote_sum+=$result[$index]; + } + if( $quote_sum == $mul) { + if( $mul > 100 ) { + $tmp = $mul / 100; + for( $i=0; $i < $n; ++$i ) { + $result[$i] /= $tmp ; + } + } + return $result; + } + arsort($tmp,SORT_NUMERIC); + reset($tmp); + for($i=0; $i < $mul-$quote_sum; $i++) + { + $result[key($tmp)]++; + next($tmp); + } + if( $mul > 100 ) { + $tmp = $mul / 100; + for( $i=0; $i < $n; ++$i ) { + $result[$i] /= $tmp ; + } + } + return $result; + } + + + function Stroke(&$img,$aaoption=0) { + // aaoption is used to handle antialias + // aaoption == 0 a normal pie + // aaoption == 1 just the body + // aaoption == 2 just the values + + // Explode scaling. If anti anti alias we scale the image + // twice and we also need to scale the exploding distance + $expscale = $aaoption === 1 ? 2 : 1; + + if( $this->labeltype == 2 ) { + // Adjust the data so that it will add up to 100% + $this->adjusted_data = $this->AdjPercentage($this->data); + } + + $colors = array_keys($img->rgb->rgb_table); + sort($colors); + $ta=$this->themearr[$this->theme]; + $n = count($this->data); + + if( $this->setslicecolors==null ) { + $numcolors=count($ta); + } + else { + $this->setslicecolors = array_reverse(array_slice($this->setslicecolors,0,$n)); + $numcolors=count($this->setslicecolors); + $tt = array_slice($this->setslicecolors,$n % $numcolors); + $tt2 = array_slice($this->setslicecolors,0,$n % $numcolors); + $tt2 = array_merge($tt, $tt2); + $this->setslicecolors = $tt + $tt2; + } + + // Draw the slices + $sum=0; + for($i=0; $i < $n; ++$i) + $sum += $this->data[$i]; + + // Bail out with error if the sum is 0 + if( $sum==0 ) + JpGraphError::RaiseL(15009);//("Sum of all data is 0 for Pie."); + + // Set up the pie-circle + if( $this->radius <= 1 ) + $radius = floor($this->radius*min($img->width,$img->height)); + else { + $radius = $aaoption === 1 ? $this->radius*2 : $this->radius; + } + + if( $this->posx <= 1 && $this->posx > 0 ) + $xc = round($this->posx*$img->width); + else + $xc = $this->posx ; + + if( $this->posy <= 1 && $this->posy > 0 ) + $yc = round($this->posy*$img->height); + else + $yc = $this->posy ; + + $n = count($this->data); + + if( $this->explode_all ) + for($i=0; $i < $n; ++$i) + $this->explode_radius[$i]=$this->explode_r; + + // If we have a shadow and not just drawing the labels + if( $this->ishadowcolor != "" && $aaoption !== 2) { + $accsum=0; + $angle2 = $this->startangle; + $img->SetColor($this->ishadowcolor); + for($i=0; $sum > 0 && $i < $n; ++$i) { + $j = $n-$i-1; + $d = $this->data[$i]; + $angle1 = $angle2; + $accsum += $d; + $angle2 = $this->startangle+2*M_PI*$accsum/$sum; + if( empty($this->explode_radius[$j]) ) + $this->explode_radius[$j]=0; + + if( $d < 0.00001 ) continue; + + $la = 2*M_PI - (abs($angle2-$angle1)/2.0+$angle1); + + $xcm = $xc + $this->explode_radius[$j]*cos($la)*$expscale; + $ycm = $yc - $this->explode_radius[$j]*sin($la)*$expscale; + + $xcm += $this->ishadowdrop*$expscale; + $ycm += $this->ishadowdrop*$expscale; + + $_sa = round($angle1*180/M_PI); + $_ea = round($angle2*180/M_PI); + + // The CakeSlice method draws a full circle in case of start angle = end angle + // for pie slices we don't want this behaviour unless we only have one + // slice in the pie in case it is the wanted behaviour + if( $_ea-$_sa > 0.1 || $n==1 ) { + $img->CakeSlice($xcm,$ycm,$radius-1,$radius-1, + $angle1*180/M_PI,$angle2*180/M_PI,$this->ishadowcolor); + } + } + } + + //-------------------------------------------------------------------------------- + // This is the main loop to draw each cake slice + //-------------------------------------------------------------------------------- + + // Set up the accumulated sum, start angle for first slice and border color + $accsum=0; + $angle2 = $this->startangle; + $img->SetColor($this->color); + + // Loop though all the slices if there is a pie to draw (sum>0) + // There are n slices in total + for($i=0; $sum>0 && $i < $n; ++$i) { + + // $j is the actual index used for the slice + $j = $n-$i-1; + + // Make sure we havea valid distance to explode the slice + if( empty($this->explode_radius[$j]) ) + $this->explode_radius[$j]=0; + + // The actual numeric value for the slice + $d = $this->data[$i]; + + $angle1 = $angle2; + + // Accumlate the sum + $accsum += $d; + + // The new angle when we add the "size" of this slice + // angle1 is then the start and angle2 the end of this slice + $angle2 = $this->NormAngle($this->startangle+2*M_PI*$accsum/$sum); + + // We avoid some trouble by not allowing end angle to be 0, in that case + // we translate to 360 + + + // la is used to hold the label angle, which is centered on the slice + if( $angle2 < 0.0001 && $angle1 > 0.0001 ) { + $this->la[$i] = 2*M_PI - (abs(2*M_PI-$angle1)/2.0+$angle1); + } + elseif( $angle1 > $angle2 ) { + // The case where the slice crosses the 3 a'clock line + $this->la[$i] = 2*M_PI-$this->NormAngle($angle1 + ((2*M_PI - $angle1)+$angle2)/2); + } + else { + $this->la[$i] = 2*M_PI - (abs($angle2-$angle1)/2.0+$angle1); + } + + //$_sa = round($angle1*180/M_PI); + //$_ea = round($angle2*180/M_PI); + //$_la = round($this->la[$i]*180/M_PI); + //echo "ang1=$_sa , ang2=$_ea - la=$_la
    "; + + // Too avoid rounding problems we skip the slice if it is too small + if( $d < 0.00001 ) continue; + + // If the user has specified an array of colors for each slice then use + // that a color otherwise use the theme array (ta) of colors + if( $this->setslicecolors==null ) + $slicecolor=$colors[$ta[$i%$numcolors]]; + else + $slicecolor=$this->setslicecolors[$i%$numcolors]; + + // If we have enabled antialias then we don't draw any border so + // make the bordedr color the same as the slice color + if( $this->pie_interior_border && $aaoption===0 ) + $img->SetColor($this->color); + else + $img->SetColor($slicecolor); + $arccolor = $this->pie_border && $aaoption===0 ? $this->color : ""; + + // Calculate the x,y coordinates for the base of this slice taking + // the exploded distance into account. Here we use the mid angle as the + // ray of extension and we have the mid angle handy as it is also the + // label angle + $xcm = $xc + $this->explode_radius[$j]*cos($this->la[$i])*$expscale; + $ycm = $yc - $this->explode_radius[$j]*sin($this->la[$i])*$expscale; + + // If we are not just drawing the labels then draw this cake slice + if( $aaoption !== 2 ) { + + + $_sa = round($angle1*180/M_PI); + $_ea = round($angle2*180/M_PI); + $_la = round($this->la[$i]*180/M_PI); + //echo "[$i] sa=$_sa, ea=$_ea, la[$i]=$_la, (color=$slicecolor)
    "; + + + // The CakeSlice method draws a full circle in case of start angle = end angle + // for pie slices we don't want this behaviour unless we only have one + // slice in the pie in case it is the wanted behaviour + if( abs($_ea-$_sa) > 0.1 || $n==1 ) { + $img->CakeSlice($xcm,$ycm,$radius-1,$radius-1,$_sa,$_ea,$slicecolor,$arccolor); + } + } + + // If the CSIM is used then make sure we register a CSIM area for this slice as well + if( $this->csimtargets && $aaoption !== 1 ) { + $this->AddSliceToCSIM($i,$xcm,$ycm,$radius,$angle1,$angle2); + } + } + + // Format the titles for each slice + if( $aaoption!==2) { + for( $i=0; $i < $n; ++$i) { + if( $this->labeltype==0 ) { + if( $sum != 0 ) + $l = 100.0*$this->data[$i]/$sum; + else + $l = 0.0; + } + elseif( $this->labeltype==1 ) { + $l = $this->data[$i]*1.0; + } + else { + $l = $this->adjusted_data[$i]; + } + if( isset($this->labels[$i]) && is_string($this->labels[$i]) ) + $this->labels[$i]=sprintf($this->labels[$i],$l); + else + $this->labels[$i]=$l; + } + } + + If( $this->value->show && $aaoption !== 1 ) { + $this->StrokeAllLabels($img,$xc,$yc,$radius); + } + + // Adjust title position + if( $aaoption !== 1 ) { + $this->title->Pos($xc, + $yc-$this->title->GetFontHeight($img)-$radius-$this->title->margin, + "center","bottom"); + $this->title->Stroke($img); + } + + } + +//--------------- +// PRIVATE METHODS + + function NormAngle($a) { + while( $a < 0 ) $a += 2*M_PI; + while( $a > 2*M_PI ) $a -= 2*M_PI; + return $a; + } + + function Quadrant($a) { + $a=$this->NormAngle($a); + if( $a > 0 && $a <= M_PI/2 ) + return 0; + if( $a > M_PI/2 && $a <= M_PI ) + return 1; + if( $a > M_PI && $a <= 1.5*M_PI ) + return 2; + if( $a > 1.5*M_PI ) + return 3; + } + + function StrokeGuideLabels(&$img,$xc,$yc,$radius) { + $n = count($this->labels); + + //----------------------------------------------------------------------- + // Step 1 of the algorithm is to construct a number of clusters + // a cluster is defined as all slices within the same quadrant (almost) + // that has an angular distance less than the treshold + //----------------------------------------------------------------------- + $tresh_hold=25 * M_PI/180; // 25 degrees difference to be in a cluster + $incluster=false; // flag if we are currently in a cluster or not + $clusters = array(); // array of clusters + $cidx=-1; // running cluster index + + // Go through all the labels and construct a number of clusters + for($i=0; $i < $n-1; ++$i) { + // Calc the angle distance between two consecutive slices + $a1=$this->la[$i]; + $a2=$this->la[$i+1]; + $q1 = $this->Quadrant($a1); + $q2 = $this->Quadrant($a2); + $diff = abs($a1-$a2); + if( $diff < $tresh_hold ) { + if( $incluster ) { + $clusters[$cidx][1]++; + // Each cluster can only cover one quadrant + // Do we cross a quadrant ( and must break the cluster) + if( $q1 != $q2 ) { + // If we cross a quadrant boundary we normally start a + // new cluster. However we need to take the 12'a clock + // and 6'a clock positions into a special consideration. + // Case 1: WE go from q=1 to q=2 if the last slice on + // the cluster for q=1 is close to 12'a clock and the + // first slice in q=0 is small we extend the previous + // cluster + if( $q1 == 1 && $q2 == 0 && $a2 > (90-15)*M_PI/180 ) { + if( $i < $n-2 ) { + $a3 = $this->la[$i+2]; + // If there isn't a cluster coming up with the next-next slice + // we extend the previous cluster to cover this slice as well + if( abs($a3-$a2) >= $tresh_hold ) { + $clusters[$cidx][1]++; + $i++; + } + } + } + elseif( $q1 == 3 && $q2 == 2 && $a2 > (270-15)*M_PI/180 ) { + if( $i < $n-2 ) { + $a3 = $this->la[$i+2]; + // If there isn't a cluster coming up with the next-next slice + // we extend the previous cluster to cover this slice as well + if( abs($a3-$a2) >= $tresh_hold ) { + $clusters[$cidx][1]++; + $i++; + } + } + } + + if( $q1==2 && $q2==1 && $a2 > (180-15)*M_PI/180 ) { + $clusters[$cidx][1]++; + $i++; + } + + $incluster = false; + } + } + elseif( $q1 == $q2) { + $incluster = true; + // Now we have a special case for quadrant 0. If we previously + // have a cluster of one in quadrant 0 we just extend that + // cluster. If we don't do this then we risk that the label + // for the cluster of one will cross the guide-line + if( $q1 == 0 && $cidx > -1 && + $clusters[$cidx][1] == 1 && + $this->Quadrant($this->la[$clusters[$cidx][0]]) == 0 ) { + $clusters[$cidx][1]++; + } + else { + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + else { + // Create a "cluster" of one since we are just crossing + // a quadrant + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + else { + if( $incluster ) { + // Add the last slice + $clusters[$cidx][1]++; + $incluster = false; + } + else { // Create a "cluster" of one + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + } + } + // Handle the very last slice + if( $incluster ) { + $clusters[$cidx][1]++; + } + else { // Create a "cluster" of one + $cidx++; + $clusters[$cidx][0] = $i; + $clusters[$cidx][1] = 1; + } + + /* + if( true ) { + // Debug printout in labels + for( $i=0; $i <= $cidx; ++$i ) { + for( $j=0; $j < $clusters[$i][1]; ++$j ) { + $a = $this->la[$clusters[$i][0]+$j]; + $aa = round($a*180/M_PI); + $q = $this->Quadrant($a); + $this->labels[$clusters[$i][0]+$j]="[$q:$aa] $i:$j"; + } + } + } + */ + + //----------------------------------------------------------------------- + // Step 2 of the algorithm is use the clusters and draw the labels + // and guidelines + //----------------------------------------------------------------------- + + // We use the font height as the base factor for how far we need to + // spread the labels in the Y-direction. + $img->SetFont($this->value->ff,$this->value->fs,$this->value->fsize); + $fh = $img->GetFontHeight(); + $origvstep=$fh*$this->iGuideVFactor; + $this->value->SetMargin(0); + + // Number of clusters found + $nc = count($clusters); + + // Walk through all the clusters + for($i=0; $i < $nc; ++$i) { + + // Start angle and number of slices in this cluster + $csize = $clusters[$i][1]; + $a = $this->la[$clusters[$i][0]]; + $q = $this->Quadrant($a); + + // Now set up the start and end conditions to make sure that + // in each cluster we walk through the all the slices starting with the slice + // closest to the equator. Since all slices are numbered clockwise from "3'a clock" + // we have different conditions depending on in which quadrant the slice lies within. + if( $q == 0 ) { + $start = $csize-1; $idx = $start; $step = -1; $vstep = -$origvstep; + } + elseif( $q == 1 ) { + $start = 0; $idx = $start; $step = 1; $vstep = -$origvstep; + } + elseif( $q == 2 ) { + $start = $csize-1; $idx = $start; $step = -1; $vstep = $origvstep; + } + elseif( $q == 3 ) { + $start = 0; $idx = $start; $step = 1; $vstep = $origvstep; + } + + // Walk through all slices within this cluster + for($j=0; $j < $csize; ++$j) { + // Now adjust the position of the labels in each cluster starting + // with the slice that is closest to the equator of the pie + $a = $this->la[$clusters[$i][0]+$idx]; + + // Guide line start in the center of the arc of the slice + $r = $radius+$this->explode_radius[$n-1-($clusters[$i][0]+$idx)]; + $x = round($r*cos($a)+$xc); + $y = round($yc-$r*sin($a)); + + // The distance from the arc depends on chosen font and the "R-Factor" + $r += $fh*$this->iGuideLineRFactor; + + // Should the labels be placed curved along the pie or in straight columns + // outside the pie? + if( $this->iGuideLineCurve ) + $xt=round($r*cos($a)+$xc); + + // If this is the first slice in the cluster we need some first time + // proessing + if( $idx == $start ) { + if( ! $this->iGuideLineCurve ) + $xt=round($r*cos($a)+$xc); + $yt=round($yc-$r*sin($a)); + + // Some special consideration in case this cluster starts + // in quadrant 1 or 3 very close to the "equator" (< 20 degrees) + // and the previous clusters last slice is within the tolerance. + // In that case we add a font height to this labels Y-position + // so it doesn't collide with + // the slice in the previous cluster + $prevcluster = ($i + ($nc-1) ) % $nc; + $previdx=$clusters[$prevcluster][0]+$clusters[$prevcluster][1]-1; + if( $q == 1 && $a > 160*M_PI/180 ) { + // Get the angle for the previous clusters last slice + $diff = abs($a-$this->la[$previdx]); + if( $diff < $tresh_hold ) { + $yt -= $fh; + } + } + elseif( $q == 3 && $a > 340*M_PI/180 ) { + // We need to subtract 360 to compare angle distance between + // q=0 and q=3 + $diff = abs($a-$this->la[$previdx]-360*M_PI/180); + if( $diff < $tresh_hold ) { + $yt += $fh; + } + } + + } + else { + // The step is at minimum $vstep but if the slices are relatively large + // we make sure that we add at least a step that corresponds to the vertical + // distance between the centers at the arc on the slice + $prev_a = $this->la[$clusters[$i][0]+($idx-$step)]; + $dy = abs($radius*(sin($a)-sin($prev_a))*1.2); + if( $vstep > 0 ) + $yt += max($vstep,$dy); + else + $yt += min($vstep,-$dy); + } + + $label = $this->labels[$clusters[$i][0]+$idx]; + + if( $csize == 1 ) { + // A "meta" cluster with only one slice + $r = $radius+$this->explode_radius[$n-1-($clusters[$i][0]+$idx)]; + $rr = $r+$img->GetFontHeight()/2; + $xt=round($rr*cos($a)+$xc); + $yt=round($yc-$rr*sin($a)); + $this->StrokeLabel($label,$img,$xc,$yc,$a,$r); + if( $this->iShowGuideLineForSingle ) + $this->guideline->Stroke($img,$x,$y,$xt,$yt); + } + else { + $this->guideline->Stroke($img,$x,$y,$xt,$yt); + if( $q==1 || $q==2 ) { + // Left side of Pie + $this->guideline->Stroke($img,$xt,$yt,$xt-$this->guidelinemargin,$yt); + $lbladj = -$this->guidelinemargin-5; + $this->value->halign = "right"; + $this->value->valign = "center"; + } + else { + // Right side of pie + $this->guideline->Stroke($img,$xt,$yt,$xt+$this->guidelinemargin,$yt); + $lbladj = $this->guidelinemargin+5; + $this->value->halign = "left"; + $this->value->valign = "center"; + } + $this->value->Stroke($img,$label,$xt+$lbladj,$yt); + } + + // Udate idx to point to next slice in the cluster to process + $idx += $step; + } + } + } + + function StrokeAllLabels(&$img,$xc,$yc,$radius) { + // First normalize all angles for labels + $n = count($this->la); + for($i=0; $i < $n; ++$i) { + $this->la[$i] = $this->NormAngle($this->la[$i]); + } + if( $this->guideline->iShow ) { + $this->StrokeGuideLabels($img,$xc,$yc,$radius); + } + else { + $n = count($this->labels); + for($i=0; $i < $n; ++$i) { + $this->StrokeLabel($this->labels[$i],$img,$xc,$yc, + $this->la[$i], + $radius + $this->explode_radius[$n-1-$i]); + } + } + } + + // Position the labels of each slice + function StrokeLabel($label,&$img,$xc,$yc,$a,$radius) { + + // Default value + if( $this->ilabelposadj === 'auto' ) + $this->ilabelposadj = 0.65; + $r = $radius; + + // We position the values diferently depending on if they are inside + // or outside the pie + if( $this->ilabelposadj < 1.0 ) { + + $this->value->SetAlign('center','center'); + $this->value->margin = 0; + + $xt=round($this->ilabelposadj*$r*cos($a)+$xc); + $yt=round($yc-$this->ilabelposadj*$r*sin($a)); + + $this->value->Stroke($img,$label,$xt,$yt); + } + else { + + $this->value->halign = "left"; + $this->value->valign = "top"; + $this->value->margin = 0; + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + $img->SetFont($this->value->ff,$this->value->fs,$this->value->fsize); + $h=$img->GetTextHeight($label); + // For numeric values the format of the display value + // must be taken into account + if( is_numeric($label) ) { + if( $label > 0 ) + $w=$img->GetTextWidth(sprintf($this->value->format,$label)); + else + $w=$img->GetTextWidth(sprintf($this->value->negformat,$label)); + } + else + $w=$img->GetTextWidth($label); + if( $this->ilabelposadj > 1.0 && $this->ilabelposadj < 5.0) { + $r *= $this->ilabelposadj; + } + + $r += $img->GetFontHeight()/1.5; + + $xt=round($r*cos($a)+$xc); + $yt=round($yc-$r*sin($a)); + + // Normalize angle + while( $a < 0 ) $a += 2*M_PI; + while( $a > 2*M_PI ) $a -= 2*M_PI; + + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(1-$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + + $this->value->Stroke($img,$label,$xt-$dx*$w,$yt-$dy*$h); + } + } +} // Class + + +//=================================================== +// CLASS PiePlotC +// Description: Same as a normal pie plot but with a +// filled circle in the center +//=================================================== +class PiePlotC extends PiePlot { + var $imidsize=0.5; // Fraction of total width + var $imidcolor='white'; + var $midtitle=''; + var $middlecsimtarget='',$middlecsimwintarget='',$middlecsimalt=''; + + function PiePlotC($data,$aCenterTitle='') { + parent::PiePlot($data); + $this->midtitle = new Text(); + $this->midtitle->ParagraphAlign('center'); + } + + function SetMid($aTitle,$aColor='white',$aSize=0.5) { + $this->midtitle->Set($aTitle); + + $this->imidsize = $aSize ; + $this->imidcolor = $aColor ; + } + + function SetMidTitle($aTitle) { + $this->midtitle->Set($aTitle); + } + + function SetMidSize($aSize) { + $this->imidsize = $aSize ; + } + + function SetMidColor($aColor) { + $this->imidcolor = $aColor ; + } + + function SetMidCSIM($aTarget,$aAlt='',$aWinTarget='') { + $this->middlecsimtarget = $aTarget; + $this->middlecsimwintarget = $aWinTarget; + $this->middlecsimalt = $aAlt; + } + + function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) { + + //Slice number, ellipse centre (x,y), radius, start angle, end angle + while( $sa > 2*M_PI ) $sa = $sa - 2*M_PI; + while( $ea > 2*M_PI ) $ea = $ea - 2*M_PI; + + $sa = 2*M_PI - $sa; + $ea = 2*M_PI - $ea; + + // Special case when we have only one slice since then both start and end + // angle will be == 0 + if( abs($sa - $ea) < 0.0001 ) { + $sa=2*M_PI; $ea=0; + } + + // Add inner circle first point + $xp = floor(($this->imidsize*$radius*cos($ea))+$xc); + $yp = floor($yc-($this->imidsize*$radius*sin($ea))); + $coords = "$xp, $yp"; + + //add coordinates every 0.25 radians + $a=$ea+0.25; + + // If we cross the 260-limit with a slice we need to handle + // the fact that end angle is smaller than start + if( $sa < $ea ) { + while ($a <= 2*M_PI) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a += 0.25; + } + $a -= 2*M_PI; + } + + while ($a < $sa) { + $xp = floor(($this->imidsize*$radius*cos($a)+$xc)); + $yp = floor($yc-($this->imidsize*$radius*sin($a))); + $coords.= ", $xp, $yp"; + $a += 0.25; + } + + // Make sure we end at the last point + $xp = floor(($this->imidsize*$radius*cos($sa)+$xc)); + $yp = floor($yc-($this->imidsize*$radius*sin($sa))); + $coords.= ", $xp, $yp"; + + // Straight line to outer circle + $xp = floor($radius*cos($sa)+$xc); + $yp = floor($yc-$radius*sin($sa)); + $coords.= ", $xp, $yp"; + + //add coordinates every 0.25 radians + $a=$sa - 0.25; + while ($a > $ea) { + $xp = floor($radius*cos($a)+$xc); + $yp = floor($yc-$radius*sin($a)); + $coords.= ", $xp, $yp"; + $a -= 0.25; + } + + //Add the last point on the arc + $xp = floor($radius*cos($ea)+$xc); + $yp = floor($yc-$radius*sin($ea)); + $coords.= ", $xp, $yp"; + + // Close the arc + $xp = floor(($this->imidsize*$radius*cos($ea))+$xc); + $yp = floor($yc-($this->imidsize*$radius*sin($ea))); + $coords .= ", $xp, $yp"; + + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + + function Stroke(&$img,$aaoption=0) { + + // Stroke the pie but don't stroke values + $tmp = $this->value->show; + $this->value->show = false; + parent::Stroke($img,$aaoption); + $this->value->show = $tmp; + + $xc = round($this->posx*$img->width); + $yc = round($this->posy*$img->height); + + $radius = floor($this->radius * min($img->width,$img->height)) ; + + + if( $this->imidsize > 0 && $aaoption !== 2 ) { + + if( $this->ishadowcolor != "" ) { + $img->SetColor($this->ishadowcolor); + $img->FilledCircle($xc+$this->ishadowdrop,$yc+$this->ishadowdrop, + round($radius*$this->imidsize)); + } + + $img->SetColor($this->imidcolor); + $img->FilledCircle($xc,$yc,round($radius*$this->imidsize)); + + if( $this->pie_border && $aaoption === 0 ) { + $img->SetColor($this->color); + $img->Circle($xc,$yc,round($radius*$this->imidsize)); + } + + if( !empty($this->middlecsimtarget) ) + $this->AddMiddleCSIM($xc,$yc,round($radius*$this->imidsize)); + + } + + if( $this->value->show && $aaoption !== 1) { + $this->StrokeAllLabels($img,$xc,$yc,$radius); + $this->midtitle->Pos($xc,$yc,'center','center'); + $this->midtitle->Stroke($img); + } + + } + + function AddMiddleCSIM($xc,$yc,$r) { + $xc=round($xc);$yc=round($yc);$r=round($r); + $this->csimareas .= "middlecsimtarget."\""; + if( !empty($this->middlecsimwintarget) ) { + $this->csimareas .= " target=\"".$this->middlecsimwintarget."\""; + } + if( !empty($this->middlecsimalt) ) { + $tmp = $this->middlecsimalt; + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + function StrokeLabel($label,$img,$xc,$yc,$a,$r) { + + if( $this->ilabelposadj === 'auto' ) + $this->ilabelposadj = (1-$this->imidsize)/2+$this->imidsize; + + parent::StrokeLabel($label,$img,$xc,$yc,$a,$r); + + } + +} + + +//=================================================== +// CLASS PieGraph +// Description: +//=================================================== +class PieGraph extends Graph { + var $posx, $posy, $radius; + var $legends=array(); + var $plots=array(); + var $pieaa = false ; +//--------------- +// CONSTRUCTOR + function PieGraph($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) { + $this->Graph($width,$height,$cachedName,$timeout,$inline); + $this->posx=$width/2; + $this->posy=$height/2; + $this->SetColor(array(255,255,255)); + } + +//--------------- +// PUBLIC METHODS + function Add($aObj) { + + if( is_array($aObj) && count($aObj) > 0 ) + $cl = $aObj[0]; + else + $cl = $aObj; + + if( is_a($cl,'Text') ) + $this->AddText($aObj); + elseif( is_a($cl,'IconPlot') ) + $this->AddIcon($aObj); + else { + if( is_array($aObj) ) { + $n = count($aObj); + for($i=0; $i < $n; ++$i ) { + $this->plots[] = $aObj[$i]; + } + } + else { + $this->plots[] = $aObj; + } + } + } + + function SetAntiAliasing($aFlg=true) { + $this->pieaa = $aFlg; + } + + function SetColor($c) { + $this->SetMarginColor($c); + } + + function DisplayCSIMAreas() { + $csim=""; + foreach($this->plots as $p ) { + $csim .= $p->GetCSIMareas(); + } + //$csim.= $this->legend->GetCSIMareas(); + if (preg_match_all("/area shape=\"(\w+)\" coords=\"([0-9\, ]+)\"/", $csim, $coords)) { + $this->img->SetColor($this->csimcolor); + $n = count($coords[0]); + for ($i=0; $i < $n; $i++) { + if ($coords[1][$i]=="poly") { + preg_match_all('/\s*([0-9]+)\s*,\s*([0-9]+)\s*,*/',$coords[2][$i],$pts); + $this->img->SetStartPoint($pts[1][count($pts[0])-1],$pts[2][count($pts[0])-1]); + $m = count($pts[0]); + for ($j=0; $j < $m; $j++) { + $this->img->LineTo($pts[1][$j],$pts[2][$j]); + } + } else if ($coords[1][$i]=="rect") { + $pts = preg_split('/,/', $coords[2][$i]); + $this->img->SetStartPoint($pts[0],$pts[1]); + $this->img->LineTo($pts[2],$pts[1]); + $this->img->LineTo($pts[2],$pts[3]); + $this->img->LineTo($pts[0],$pts[3]); + $this->img->LineTo($pts[0],$pts[1]); + + } + } + } + } + + // Method description + function Stroke($aStrokeFileName="") { + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + $n = count($this->plots); + + if( $this->pieaa ) { + + if( !$_csim ) { + if( $this->background_image != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + } + } + + + $w = $this->img->width; + $h = $this->img->height; + $oldimg = $this->img->img; + + $this->img->CreateImgCanvas(2*$w,2*$h); + + $this->img->SetColor( $this->margin_color ); + $this->img->FilledRectangle(0,0,2*$w-1,2*$h-1); + + // Make all icons *2 i size since we will be scaling down the + // image to do the anti aliasing + $ni = count($this->iIcons); + for($i=0; $i < $ni; ++$i) { + $this->iIcons[$i]->iScale *= 2 ; + if( $this->iIcons[$i]->iX > 1 ) + $this->iIcons[$i]->iX *= 2 ; + if( $this->iIcons[$i]->iY > 1 ) + $this->iIcons[$i]->iY *= 2 ; + } + + $this->StrokeIcons(); + + for($i=0; $i < $n; ++$i) { + if( $this->plots[$i]->posx > 1 ) + $this->plots[$i]->posx *= 2 ; + if( $this->plots[$i]->posy > 1 ) + $this->plots[$i]->posy *= 2 ; + + $this->plots[$i]->Stroke($this->img,1); + + if( $this->plots[$i]->posx > 1 ) + $this->plots[$i]->posx /= 2 ; + if( $this->plots[$i]->posy > 1 ) + $this->plots[$i]->posy /= 2 ; + } + $indent = $this->doframe ? ($this->frame_weight + ($this->doshadow ? $this->shadow_width : 0 )) : 0 ; + $indent += $this->framebevel ? $this->framebeveldepth + 1 : 0 ; + $this->img->CopyCanvasH($oldimg,$this->img->img,$indent,$indent,$indent,$indent, + $w-2*$indent,$h-2*$indent,2*($w-$indent),2*($h-$indent)); + + $this->img->img = $oldimg ; + $this->img->width = $w ; + $this->img->height = $h ; + + for($i=0; $i < $n; ++$i) { + $this->plots[$i]->Stroke($this->img,2); // Stroke labels + $this->plots[$i]->Legend($this); + } + + } + else { + // No antialias + if( !$_csim ) { + if( $this->background_image != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + $this->StrokeBackgroundGrad(); + } + } + + $this->StrokeIcons(); + for($i=0; $i < $n; ++$i) { + $this->plots[$i]->Stroke($this->img); + $this->plots[$i]->Legend($this); + } + } + + $this->legend->Stroke($this->img); + $this->footer->Stroke($this->img); + $this->StrokeTitles(); + + if( !$_csim ) { + + // Stroke texts + if( $this->texts != null ) { + $n = count($this->texts); + for($i=0; $i < $n; ++$i ) { + $this->texts[$i]->Stroke($this->img); + } + } + + if( _JPG_DEBUG ) { + $this->DisplayCSIMAreas(); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans') ) { + require_once('jpgraph_imgtrans.php'); + //JpGraphError::Raise('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + } +} // Class + +/* EOF */ +?> diff --git a/html/includes/jpgraph/src/jpgraph_pie3d.php b/html/includes/jpgraph/src/jpgraph_pie3d.php new file mode 100644 index 0000000000..82afcdc803 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_pie3d.php @@ -0,0 +1,923 @@ +radius = 0.5; + $this->data = $data; + $this->title = new Text(""); + $this->title->SetFont(FF_FONT1,FS_BOLD); + $this->value = new DisplayValue(); + $this->value->Show(); + $this->value->SetFormat('%.0f%%'); + } + +//--------------- +// PUBLIC METHODS + + // Set label arrays + function SetLegends($aLegend) { + $this->legends = array_reverse(array_slice($aLegend,0,count($this->data))); + } + + function SetSliceColors($aColors) { + $this->setslicecolors = $aColors; + } + + function Legend(&$aGraph) { + parent::Legend($aGraph); + $aGraph->legend->txtcol = array_reverse($aGraph->legend->txtcol); + } + + function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') { + $this->csimtargets = $aTargets; + $this->csimwintargets = $aWinTargets; + $this->csimalts = $aAlts; + } + + // Should the slices be separated by a line? If color is specified as "" no line + // will be used to separate pie slices. + function SetEdge($aColor='black',$aWeight=1) { + $this->edgecolor = $aColor; + $this->edgeweight = $aWeight; + } + + // Dummy function to make Pie3D behave in a similair way to 2D + function ShowBorder($exterior=true,$interior=true) { + JpGraphError::RaiseL(14001); +//('Pie3D::ShowBorder() . Deprecated function. Use Pie3D::SetEdge() to control the edges around slices.'); + } + + // Specify projection angle for 3D in degrees + // Must be between 20 and 70 degrees + function SetAngle($a) { + if( $a<5 || $a>90 ) + JpGraphError::RaiseL(14002); +//("PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees."); + else + $this->angle = $a; + } + + function AddSliceToCSIM($i,$xc,$yc,$height,$width,$thick,$sa,$ea) { //Slice number, ellipse centre (x,y), height, width, start angle, end angle + + $sa *= M_PI/180; + $ea *= M_PI/180; + + //add coordinates of the centre to the map + $coords = "$xc, $yc"; + + //add coordinates of the first point on the arc to the map + $xp = floor($width*cos($sa)/2+$xc); + $yp = floor($yc-$height*sin($sa)/2); + $coords.= ", $xp, $yp"; + + //If on the front half, add the thickness offset + if ($sa >= M_PI && $sa <= 2*M_PI*1.01) { + $yp = floor($yp+$thick); + $coords.= ", $xp, $yp"; + } + + //add coordinates every 0.2 radians + $a=$sa+0.2; + while ($a<$ea) { + $xp = floor($width*cos($a)/2+$xc); + if ($a >= M_PI && $a <= 2*M_PI*1.01) { + $yp = floor($yc-($height*sin($a)/2)+$thick); + } else { + $yp = floor($yc-$height*sin($a)/2); + } + $coords.= ", $xp, $yp"; + $a += 0.2; + } + + //Add the last point on the arc + $xp = floor($width*cos($ea)/2+$xc); + $yp = floor($yc-$height*sin($ea)/2); + + + if ($ea >= M_PI && $ea <= 2*M_PI*1.01) { + $coords.= ", $xp, ".floor($yp+$thick); + } + $coords.= ", $xp, $yp"; + $alt=''; + + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas .= "csimtargets[$i]."\""; + + if( !empty($this->csimwintargets[$i]) ) { + $this->csimareas .= " target=\"".$this->csimwintargets[$i]."\" "; + } + + if( !empty($this->csimalts[$i]) ) { + $tmp=sprintf($this->csimalts[$i],$this->data[$i]); + $this->csimareas .= "alt=\"$tmp\" title=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + } + + function SetLabels($aLabels,$aLblPosAdj="auto") { + $this->labels = $aLabels; + $this->ilabelposadj=$aLblPosAdj; + } + + + // Distance from the pie to the labels + function SetLabelMargin($m) { + $this->value->SetMargin($m); + } + + // Show a thin line from the pie to the label for a specific slice + function ShowLabelHint($f=true) { + $this->showlabelhint=$f; + } + + // Set color of hint line to label for each slice + function SetLabelHintColor($c) { + $this->labelhintcolor=$c; + } + + function SetHeight($aHeight) { + $this->iThickness = $aHeight; + } + + +// Normalize Angle between 0-360 + function NormAngle($a) { + // Normalize anle to 0 to 2M_PI + // + if( $a > 0 ) { + while($a > 360) $a -= 360; + } + else { + while($a < 0) $a += 360; + } + if( $a < 0 ) + $a = 360 + $a; + + if( $a == 360 ) $a=0; + return $a; + } + + + +// Draw one 3D pie slice at position ($xc,$yc) with height $z + function Pie3DSlice(&$img,$xc,$yc,$w,$h,$sa,$ea,$z,$fillcolor,$shadow=0.65) { + + // Due to the way the 3D Pie algorithm works we are + // guaranteed that any slice we get into this method + // belongs to either the left or right side of the + // pie ellipse. Hence, no slice will cross 90 or 270 + // point. + if( ($sa < 90 && $ea > 90) || ( ($sa > 90 && $sa < 270) && $ea > 270) ) { + JpGraphError::RaiseL(14003);//('Internal assertion failed. Pie3D::Pie3DSlice'); + exit(1); + } + + $p[] = array(); + + // Setup pre-calculated values + $rsa = $sa/180*M_PI; // to Rad + $rea = $ea/180*M_PI; // to Rad + $sinsa = sin($rsa); + $cossa = cos($rsa); + $sinea = sin($rea); + $cosea = cos($rea); + + // p[] is the points for the overall slice and + // pt[] is the points for the top pie + + // Angular step when approximating the arc with a polygon train. + $step = 0.05; + + if( $sa >= 270 ) { + if( $ea > 360 || ($ea > 0 && $ea <= 90) ) { + if( $ea > 0 && $ea <= 90 ) { + // Adjust angle to simplify conditions in loops + $rea += 2*M_PI; + } + + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa); + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + for( $a=$rsa; $a < 2*M_PI; $a += $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w; + $pt[] = $yc; + + $p[] = $xc+$w; + $p[] = $z+$yc; + $p[] = $xc+$w; + $p[] = $yc; + $p[] = $xc; + $p[] = $yc; + + for( $a=2*M_PI+$step; $a < $rea; $a += $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + + } + else { + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa); + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + $rea = $rea == 0.0 ? 2*M_PI : $rea; + for( $a=$rsa; $a < $rea; $a += $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + + $p[] = $xc+$w*$cosea; + $p[] = $z+$yc-$h*$sinea; + $p[] = $xc+$w*$cosea; + $p[] = $yc-$h*$sinea; + $p[] = $xc; + $p[] = $yc; + } + } + elseif( $sa >= 180 ) { + $p = array($xc,$yc,$xc,$yc+$z,$xc+$w*$cosea,$z+$yc-$h*$sinea); + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a>$rsa; $a -= $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z+$yc-$h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + $p[] = $xc+$w*$cossa; + $p[] = $z+$yc-$h*$sinsa; + $p[] = $xc+$w*$cossa; + $p[] = $yc-$h*$sinsa; + $p[] = $xc; + $p[] = $yc; + + } + elseif( $sa >= 90 ) { + if( $ea > 180 ) { + $p = array($xc,$yc,$xc,$yc+$z,$xc+$w*$cosea,$z+$yc-$h*$sinea); + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a > M_PI; $a -= $step ) { + $tca = cos($a); + $tsa = sin($a); + $p[] = $xc+$w*$tca; + $p[] = $z + $yc - $h*$tsa; + $pt[] = $xc+$w*$tca; + $pt[] = $yc-$h*$tsa; + } + + $p[] = $xc-$w; + $p[] = $z+$yc; + $p[] = $xc-$w; + $p[] = $yc; + $p[] = $xc; + $p[] = $yc; + + $pt[] = $xc-$w; + $pt[] = $z+$yc; + $pt[] = $xc-$w; + $pt[] = $yc; + + for( $a=M_PI-$step; $a > $rsa; $a -= $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + } + else { // $sa >= 90 && $ea <= 180 + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cosea,$z+$yc-$h*$sinea, + $xc+$w*$cosea,$yc-$h*$sinea, + $xc,$yc); + + $pt = array($xc,$yc,$xc+$w*$cosea,$yc-$h*$sinea); + + for( $a=$rea; $a>$rsa; $a -= $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cossa; + $pt[] = $yc-$h*$sinsa; + $pt[] = $xc; + $pt[] = $yc; + + } + } + else { // sa > 0 && ea < 90 + + $p = array($xc,$yc,$xc,$yc+$z, + $xc+$w*$cossa,$z+$yc-$h*$sinsa, + $xc+$w*$cossa,$yc-$h*$sinsa, + $xc,$yc); + + $pt = array($xc,$yc,$xc+$w*$cossa,$yc-$h*$sinsa); + + for( $a=$rsa; $a < $rea; $a += $step ) { + $pt[] = $xc + $w*cos($a); + $pt[] = $yc - $h*sin($a); + } + + $pt[] = $xc+$w*$cosea; + $pt[] = $yc-$h*$sinea; + $pt[] = $xc; + $pt[] = $yc; + } + + $img->PushColor($fillcolor.":".$shadow); + $img->FilledPolygon($p); + $img->PopColor(); + + $img->PushColor($fillcolor); + $img->FilledPolygon($pt); + $img->PopColor(); + } + + function SetStartAngle($aStart) { + if( $aStart < 0 || $aStart > 360 ) { + JpGraphError::RaiseL(14004);//('Slice start angle must be between 0 and 360 degrees.'); + } + $this->startangle = $aStart; + } + +// Draw a 3D Pie + function Pie3D($aaoption,&$img,$data,$colors,$xc,$yc,$d,$angle,$z, + $shadow=0.65,$startangle=0,$edgecolor="",$edgeweight=1) { + + //--------------------------------------------------------------------------- + // As usual the algorithm get more complicated than I originally + // envisioned. I believe that this is as simple as it is possible + // to do it with the features I want. It's a good exercise to start + // thinking on how to do this to convince your self that all this + // is really needed for the general case. + // + // The algorithm two draw 3D pies without "real 3D" is done in + // two steps. + // First imagine the pie cut in half through a thought line between + // 12'a clock and 6'a clock. It now easy to imagine that we can plot + // the individual slices for each half by starting with the topmost + // pie slice and continue down to 6'a clock. + // + // In the algortithm this is done in three principal steps + // Step 1. Do the knife cut to ensure by splitting slices that extends + // over the cut line. This is done by splitting the original slices into + // upto 3 subslices. + // Step 2. Find the top slice for each half + // Step 3. Draw the slices from top to bottom + // + // The thing that slightly complicates this scheme with all the + // angle comparisons below is that we can have an arbitrary start + // angle so we must take into account the different equivalence classes. + // For the same reason we must walk through the angle array in a + // modulo fashion. + // + // Limitations of algorithm: + // * A small exploded slice which crosses the 270 degree point + // will get slightly nagged close to the center due to the fact that + // we print the slices in Z-order and that the slice left part + // get printed first and might get slightly nagged by a larger + // slice on the right side just before the right part of the small + // slice. Not a major problem though. + //--------------------------------------------------------------------------- + + + // Determine the height of the ellippse which gives an + // indication of the inclination angle + $h = ($angle/90.0)*$d; + $sum = 0; + for($i=0; $ilabeltype == 2 ) { + $this->adjusted_data = $this->AdjPercentage($data); + } + + // Setup the start + $accsum = 0; + $a = $startangle; + $a = $this->NormAngle($a); + + // + // Step 1 . Split all slices that crosses 90 or 270 + // + $idx=0; + $adjexplode=array(); + $numcolors = count($colors); + for($i=0; $iexplode_radius[$i]) ) + $this->explode_radius[$i]=0; + + $expscale=1; + if( $aaoption == 1 ) + $expscale=2; + + $la = $a + $da/2; + $explode = array( $xc + $this->explode_radius[$i]*cos($la*M_PI/180)*$expscale, + $yc - $this->explode_radius[$i]*sin($la*M_PI/180) * ($h/$d) *$expscale ); + $adjexplode[$idx] = $explode; + $labeldata[$i] = array($la,$explode[0],$explode[1]); + $originalangles[$i] = array($a,$a+$da); + + $ne = $this->NormAngle($a+$da); + if( $da <= 180 ) { + // If the slice size is <= 90 it can at maximum cut across + // one boundary (either 90 or 270) where it needs to be split + $split=-1; // no split + if( ($da<=90 && ($a <= 90 && $ne > 90)) || + (($da <= 180 && $da >90) && (($a < 90 || $a >= 270) && $ne > 90)) ) { + $split = 90; + } + elseif( ($da<=90 && ($a <= 270 && $ne > 270)) || + (($da<=180 && $da>90) && ($a >= 90 && $a < 270 && ($a+$da) > 270 )) ) { + $split = 270; + } + if( $split > 0 ) { // split in two + $angles[$idx] = array($a,$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + $angles[++$idx] = array($split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + else { // no split + $angles[$idx] = array($a,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + } + else { + // da>180 + // Slice may, depending on position, cross one or two + // bonudaries + + if( $a < 90 ) + $split = 90; + elseif( $a <= 270 ) + $split = 270; + else + $split = 90; + + $angles[$idx] = array($a,$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + //if( $a+$da > 360-$split ) { + // For slices larger than 270 degrees we might cross + // another boundary as well. This means that we must + // split the slice further. The comparison gets a little + // bit complicated since we must take into accound that + // a pie might have a startangle >0 and hence a slice might + // wrap around the 0 angle. + // Three cases: + // a) Slice starts before 90 and hence gets a split=90, but + // we must also check if we need to split at 270 + // b) Slice starts after 90 but before 270 and slices + // crosses 90 (after a wrap around of 0) + // c) If start is > 270 (hence the firstr split is at 90) + // and the slice is so large that it goes all the way + // around 270. + if( ($a < 90 && ($a+$da > 270)) || + ($a > 90 && $a<=270 && ($a+$da>360+90) ) || + ($a > 270 && $this->NormAngle($a+$da)>270) ) { + $angles[++$idx] = array($split,360-$split); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + $angles[++$idx] = array(360-$split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + else { + // Just a simple split to the previous decided + // angle. + $angles[++$idx] = array($split,$ne); + $adjcolors[$idx] = $colors[$i % $numcolors]; + $adjexplode[$idx] = $explode; + } + } + $a += $da; + $a = $this->NormAngle($a); + } + + // Total number of slices + $n = count($angles); + + for($i=0; $i<$n; ++$i) { + list($dbgs,$dbge) = $angles[$i]; + } + + // + // Step 2. Find start index (first pie that starts in upper left quadrant) + // + $minval = $angles[0][0]; + $min = 0; + for( $i=0; $i<$n; ++$i ) { + if( $angles[$i][0] < $minval ) { + $minval = $angles[$i][0]; + $min = $i; + } + } + $j = $min; + $cnt = 0; + while( $angles[$j][1] <= 90 ) { + $j++; + if( $j>=$n) { + $j=0; + } + if( $cnt > $n ) { + JpGraphError::RaiseL(14005); +//("Pie3D Internal error (#1). Trying to wrap twice when looking for start index"); + } + ++$cnt; + } + $start = $j; + + // + // Step 3. Print slices in z-order + // + $cnt = 0; + + // First stroke all the slices between 90 and 270 (left half circle) + // counterclockwise + + while( $angles[$j][0] < 270 && $aaoption !== 2 ) { + + list($x,$y) = $adjexplode[$j]; + + $this->Pie3DSlice($img,$x,$y,$d,$h,$angles[$j][0],$angles[$j][1], + $z,$adjcolors[$j],$shadow); + + $last = array($x,$y,$j); + + $j++; + if( $j >= $n ) $j=0; + if( $cnt > $n ) { + JpGraphError::RaiseL(14006); +//("Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking."); + } + ++$cnt; + } + + $slice_left = $n-$cnt; + $j=$start-1; + if($j<0) $j=$n-1; + $cnt = 0; + + // The stroke all slices from 90 to -90 (right half circle) + // clockwise + while( $cnt < $slice_left && $aaoption !== 2 ) { + + list($x,$y) = $adjexplode[$j]; + + $this->Pie3DSlice($img,$x,$y,$d,$h,$angles[$j][0],$angles[$j][1], + $z,$adjcolors[$j],$shadow); + $j--; + if( $cnt > $n ) { + JpGraphError::RaiseL(14006); +//("Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking."); + } + if($j<0) $j=$n-1; + $cnt++; + } + + // Now do a special thing. Stroke the last slice on the left + // halfcircle one more time. This is needed in the case where + // the slice close to 270 have been exploded. In that case the + // part of the slice close to the center of the pie might be + // slightly nagged. + if( $aaoption !== 2 ) + $this->Pie3DSlice($img,$last[0],$last[1],$d,$h,$angles[$last[2]][0], + $angles[$last[2]][1],$z,$adjcolors[$last[2]],$shadow); + + + if( $aaoption !== 1 ) { + // Now print possible labels and add csim + $img->SetFont($this->value->ff,$this->value->fs); + $margin = $img->GetFontHeight()/2 + $this->value->margin ; + for($i=0; $i < count($data); ++$i ) { + $la = $labeldata[$i][0]; + $x = $labeldata[$i][1] + cos($la*M_PI/180)*($d+$margin)*$this->ilabelposadj; + $y = $labeldata[$i][2] - sin($la*M_PI/180)*($h+$margin)*$this->ilabelposadj; + if( $this->ilabelposadj >= 1.0 ) { + if( $la > 180 && $la < 360 ) $y += $z; + } + if( $this->labeltype == 0 ) { + if( $sum > 0 ) + $l = 100*$data[$i]/$sum; + else + $l = 0; + } + elseif( $this->labeltype == 1 ) { + $l = $data[$i]; + } + else { + $l = $this->adjusted_data[$i]; + } + if( isset($this->labels[$i]) && is_string($this->labels[$i]) ) + $l=sprintf($this->labels[$i],$l); + + $this->StrokeLabels($l,$img,$labeldata[$i][0]*M_PI/180,$x,$y,$z); + + $this->AddSliceToCSIM($i,$labeldata[$i][1],$labeldata[$i][2],$h*2,$d*2,$z, + $originalangles[$i][0],$originalangles[$i][1]); + } + } + + // + // Finally add potential lines in pie + // + + if( $edgecolor=="" || $aaoption !== 0 ) return; + + $accsum = 0; + $a = $startangle; + $a = $this->NormAngle($a); + + $a *= M_PI/180.0; + + $idx=0; + $img->PushColor($edgecolor); + $img->SetLineWeight($edgeweight); + + $fulledge = true; + for($i=0; $i < count($data) && $fulledge; ++$i ) { + if( empty($this->explode_radius[$i]) ) + $this->explode_radius[$i]=0; + if( $this->explode_radius[$i] > 0 ) { + $fulledge = false; + } + } + + + for($i=0; $i < count($data); ++$i, ++$idx ) { + + $da = $data[$i]/$sum * 2*M_PI; + $this->StrokeFullSliceFrame($img,$xc,$yc,$a,$a+$da,$d,$h,$z,$edgecolor, + $this->explode_radius[$i],$fulledge); + $a += $da; + } + $img->PopColor(); + } + + function StrokeFullSliceFrame(&$img,$xc,$yc,$sa,$ea,$w,$h,$z,$edgecolor,$exploderadius,$fulledge) { + $step = 0.02; + + if( $exploderadius > 0 ) { + $la = ($sa+$ea)/2; + $xc += $exploderadius*cos($la); + $yc -= $exploderadius*sin($la) * ($h/$w) ; + + } + + $p = array($xc,$yc,$xc+$w*cos($sa),$yc-$h*sin($sa)); + + for($a=$sa; $a < $ea; $a += $step ) { + $p[] = $xc + $w*cos($a); + $p[] = $yc - $h*sin($a); + } + + $p[] = $xc+$w*cos($ea); + $p[] = $yc-$h*sin($ea); + $p[] = $xc; + $p[] = $yc; + + $img->SetColor($edgecolor); + $img->Polygon($p); + + // Unfortunately we can't really draw the full edge around the whole of + // of the slice if any of the slices are exploded. The reason is that + // this algorithm is to simply. There are cases where the edges will + // "overwrite" other slices when they have been exploded. + // Doing the full, proper 3D hidden lines stiff is actually quite + // tricky. So for exploded pies we only draw the top edge. Not perfect + // but the "real" solution is much more complicated. + if( $fulledge && !( $sa > 0 && $sa < M_PI && $ea < M_PI) ) { + + if($sa < M_PI && $ea > M_PI) + $sa = M_PI; + + if($sa < 2*M_PI && (($ea >= 2*M_PI) || ($ea > 0 && $ea < $sa ) ) ) + $ea = 2*M_PI; + + if( $sa >= M_PI && $ea <= 2*M_PI ) { + $p = array($xc + $w*cos($sa),$yc - $h*sin($sa), + $xc + $w*cos($sa),$z + $yc - $h*sin($sa)); + + for($a=$sa+$step; $a < $ea; $a += $step ) { + $p[] = $xc + $w*cos($a); + $p[] = $z + $yc - $h*sin($a); + } + $p[] = $xc + $w*cos($ea); + $p[] = $z + $yc - $h*sin($ea); + $p[] = $xc + $w*cos($ea); + $p[] = $yc - $h*sin($ea); + $img->SetColor($edgecolor); + $img->Polygon($p); + } + } + } + + function Stroke(&$img,$aaoption=0) { + $n = count($this->data); + + // If user hasn't set the colors use the theme array + if( $this->setslicecolors==null ) { + $colors = array_keys($img->rgb->rgb_table); + sort($colors); + $idx_a=$this->themearr[$this->theme]; + $ca = array(); + $m = count($idx_a); + for($i=0; $i < $m; ++$i) + $ca[$i] = $colors[$idx_a[$i]]; + $ca = array_reverse(array_slice($ca,0,$n)); + } + else { + $ca = $this->setslicecolors; + } + + + if( $this->posx <= 1 && $this->posx > 0 ) + $xc = round($this->posx*$img->width); + else + $xc = $this->posx ; + + if( $this->posy <= 1 && $this->posy > 0 ) + $yc = round($this->posy*$img->height); + else + $yc = $this->posy ; + + if( $this->radius <= 1 ) { + $width = floor($this->radius*min($img->width,$img->height)); + // Make sure that the pie doesn't overflow the image border + // The 0.9 factor is simply an extra margin to leave some space + // between the pie an the border of the image. + $width = min($width,min($xc*0.9,($yc*90/$this->angle-$width/4)*0.9)); + } + else { + $width = $this->radius * ($aaoption === 1 ? 2 : 1 ) ; + } + + // Add a sanity check for width + if( $width < 1 ) { + JpGraphError::RaiseL(14007);//("Width for 3D Pie is 0. Specify a size > 0"); + } + + // Establish a thickness. By default the thickness is a fifth of the + // pie slice width (=pie radius) but since the perspective depends + // on the inclination angle we use some heuristics to make the edge + // slightly thicker the less the angle. + + // Has user specified an absolute thickness? In that case use + // that instead + + if( $this->iThickness ) { + $thick = $this->iThickness; + $thick *= ($aaoption === 1 ? 2 : 1 ); + } + else + $thick = $width/12; + $a = $this->angle; + if( $a <= 30 ) $thick *= 1.6; + elseif( $a <= 40 ) $thick *= 1.4; + elseif( $a <= 50 ) $thick *= 1.2; + elseif( $a <= 60 ) $thick *= 1.0; + elseif( $a <= 70 ) $thick *= 0.8; + elseif( $a <= 80 ) $thick *= 0.7; + else $thick *= 0.6; + + $thick = floor($thick); + + if( $this->explode_all ) + for($i=0; $i < $n; ++$i) + $this->explode_radius[$i]=$this->explode_r; + + $this->Pie3D($aaoption,$img,$this->data, $ca, $xc, $yc, $width, $this->angle, + $thick, 0.65, $this->startangle, $this->edgecolor, $this->edgeweight); + + // Adjust title position + if( $aaoption != 1 ) { + $this->title->Pos($xc,$yc-$this->title->GetFontHeight($img)-$width/2-$this->title->margin, "center","bottom"); + $this->title->Stroke($img); + } + } + +//--------------- +// PRIVATE METHODS + + // Position the labels of each slice + function StrokeLabels($label,&$img,$a,$xp,$yp,$z) { + $this->value->halign="left"; + $this->value->valign="top"; + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + $img->SetFont($this->value->ff,$this->value->fs,$this->value->fsize); + $h=$img->GetTextHeight($label); + // For numeric values the format of the display value + // must be taken into account + if( is_numeric($label) ) { + if( $label >= 0 ) + $w=$img->GetTextWidth(sprintf($this->value->format,$label)); + else + $w=$img->GetTextWidth(sprintf($this->value->negformat,$label)); + } + else + $w=$img->GetTextWidth($label); + while( $a > 2*M_PI ) $a -= 2*M_PI; + if( $a>=7*M_PI/4 || $a <= M_PI/4 ) $dx=0; + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dx=($a-M_PI/4)*2/M_PI; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dx=1; + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dx=(1-($a-M_PI*5/4)*2/M_PI); + + if( $a>=7*M_PI/4 ) $dy=(($a-M_PI)-3*M_PI/4)*2/M_PI; + if( $a<=M_PI/4 ) $dy=(1-$a*2/M_PI); + if( $a>=M_PI/4 && $a <= 3*M_PI/4 ) $dy=1; + if( $a>=3*M_PI/4 && $a <= 5*M_PI/4 ) $dy=(1-($a-3*M_PI/4)*2/M_PI); + if( $a>=5*M_PI/4 && $a <= 7*M_PI/4 ) $dy=0; + + $x = round($xp-$dx*$w); + $y = round($yp-$dy*$h); + + + // Mark anchor point for debugging + /* + $img->SetColor('red'); + $img->Line($xp-10,$yp,$xp+10,$yp); + $img->Line($xp,$yp-10,$xp,$yp+10); + */ + $oldmargin = $this->value->margin; + $this->value->margin=0; + $this->value->Stroke($img,$label,$x,$y); + $this->value->margin=$oldmargin; + + } +} // Class + +/* EOF */ +?> diff --git a/html/includes/jpgraph/src/jpgraph_plotband.php b/html/includes/jpgraph/src/jpgraph_plotband.php new file mode 100644 index 0000000000..33e5d05754 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_plotband.php @@ -0,0 +1,634 @@ +x=$aX; + $this->y=$aY; + $this->w=$aWidth; + $this->h=$aHeight; + $this->xe=$aX+$aWidth-1; + $this->ye=$aY+$aHeight-1; + } +} + +//===================================================================== +// Class RectPattern +// Base class for pattern hierarchi that is used to display patterned +// bands on the graph. Any subclass that doesn't override Stroke() +// must at least implement method DoPattern(&$aImg) which is responsible +// for drawing the pattern onto the graph. +//===================================================================== +class RectPattern { + var $color; + var $weight; + var $rect=null; + var $doframe=true; + var $linespacing; // Line spacing in pixels + var $iBackgroundColor=-1; // Default is no background fill + + function RectPattern($aColor,$aWeight=1) { + $this->color = $aColor; + $this->weight = $aWeight; + } + + function SetBackground($aBackgroundColor) { + $this->iBackgroundColor=$aBackgroundColor; + } + + function SetPos(&$aRect) { + $this->rect = $aRect; + } + + function ShowFrame($aShow=true) { + $this->doframe=$aShow; + } + + function SetDensity($aDens) { + if( $aDens < 1 || $aDens > 100 ) + JpGraphError::RaiseL(16001,$aDens); +//(" Desity for pattern must be between 1 and 100. (You tried $aDens)"); + // 1% corresponds to linespacing=50 + // 100 % corresponds to linespacing 1 + $this->linespacing = floor(((100-$aDens)/100.0)*50)+1; + + } + + function Stroke(&$aImg) { + if( $this->rect == null ) + JpGraphError::RaiseL(16002); +//(" No positions specified for pattern."); + + if( !(is_numeric($this->iBackgroundColor) && $this->iBackgroundColor==-1) ) { + $aImg->SetColor($this->iBackgroundColor); + $aImg->FilledRectangle($this->rect->x,$this->rect->y,$this->rect->xe,$this->rect->ye); + } + + $aImg->SetColor($this->color); + $aImg->SetLineWeight($this->weight); + + // Virtual function implemented by subclass + $this->DoPattern($aImg); + + // Frame around the pattern area + if( $this->doframe ) + $aImg->Rectangle($this->rect->x,$this->rect->y,$this->rect->xe,$this->rect->ye); + } + +} + + +//===================================================================== +// Class RectPatternSolid +// Implements a solid band +//===================================================================== +class RectPatternSolid extends RectPattern { + + function RectPatternSolid($aColor="black",$aWeight=1) { + parent::RectPattern($aColor,$aWeight); + } + + function DoPattern(&$aImg) { + $aImg->SetColor($this->color); + $aImg->FilledRectangle($this->rect->x,$this->rect->y, + $this->rect->xe,$this->rect->ye); + } +} + +//===================================================================== +// Class RectPatternHor +// Implements horizontal line pattern +//===================================================================== +class RectPatternHor extends RectPattern { + + function RectPatternHor($aColor="black",$aWeight=1,$aLineSpacing=7) { + parent::RectPattern($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + function DoPattern(&$aImg) { + $x0 = $this->rect->x; + $x1 = $this->rect->xe; + $y = $this->rect->y; + while( $y < $this->rect->ye ) { + $aImg->Line($x0,$y,$x1,$y); + $y += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPatternVert +// Implements vertical line pattern +//===================================================================== +class RectPatternVert extends RectPattern { + var $linespacing=10; // Line spacing in pixels + + function RectPatternVert($aColor="black",$aWeight=1,$aLineSpacing=7) { + parent::RectPattern($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + //-------------------- + // Private methods + // + function DoPattern(&$aImg) { + $x = $this->rect->x; + $y0 = $this->rect->y; + $y1 = $this->rect->ye; + while( $x < $this->rect->xe ) { + $aImg->Line($x,$y0,$x,$y1); + $x += $this->linespacing; + } + } +} + + +//===================================================================== +// Class RectPatternRDiag +// Implements right diagonal pattern +//===================================================================== +class RectPatternRDiag extends RectPattern { + var $linespacing; // Line spacing in pixels + + function RectPatternRDiag($aColor="black",$aWeight=1,$aLineSpacing=12) { + parent::RectPattern($aColor,$aWeight); + $this->linespacing = $aLineSpacing; + } + + function DoPattern(&$aImg) { + // -------------------- + // | / / / / /| + // |/ / / / / | + // | / / / / | + // -------------------- + $xe = $this->rect->xe; + $ye = $this->rect->ye; + $x0 = $this->rect->x + round($this->linespacing/2); + $y0 = $this->rect->y; + $x1 = $this->rect->x; + $y1 = $this->rect->y + round($this->linespacing/2); + + while($x0<=$xe && $y1<=$ye) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $y1 += $this->linespacing; + } + + if( $xe-$x1 > $ye-$y0 ) { + // Width larger than height + $x1 = $this->rect->x + ($y1-$ye); + $y1 = $ye; + $y0 = $this->rect->y; + while( $x0 <= $xe ) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $x1 += $this->linespacing; + } + + $y0=$this->rect->y + ($x0-$xe); + $x0=$xe; + } + else { + // Height larger than width + $diff = $x0-$xe; + $y0 = $diff+$this->rect->y; + $x0 = $xe; + $x1 = $this->rect->x; + while( $y1 <= $ye ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y1 += $this->linespacing; + $y0 += $this->linespacing; + } + + $diff = $y1-$ye; + $y1 = $ye; + $x1 = $diff + $this->rect->x; + } + + while( $y0 <= $ye ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 += $this->linespacing; + $x1 += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPatternLDiag +// Implements left diagonal pattern +//===================================================================== +class RectPatternLDiag extends RectPattern { + var $linespacing; // Line spacing in pixels + + function RectPatternLDiag($aColor="black",$aWeight=1,$aLineSpacing=12) { + $this->linespacing = $aLineSpacing; + parent::RectPattern($aColor,$aWeight); + } + + function DoPattern(&$aImg) { + // -------------------- + // |\ \ \ \ \ | + // | \ \ \ \ \| + // | \ \ \ \ | + // |------------------| + $xe = $this->rect->xe; + $ye = $this->rect->ye; + $x0 = $this->rect->x + round($this->linespacing/2); + $y0 = $this->rect->ye; + $x1 = $this->rect->x; + $y1 = $this->rect->ye - round($this->linespacing/2); + + while($x0<=$xe && $y1>=$this->rect->y) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $y1 -= $this->linespacing; + } + if( $xe-$x1 > $ye-$this->rect->y ) { + // Width larger than height + $x1 = $this->rect->x + ($this->rect->y-$y1); + $y0=$ye; $y1=$this->rect->y; + while( $x0 <= $xe ) { + $aImg->Line($x0,$y0,$x1,$y1); + $x0 += $this->linespacing; + $x1 += $this->linespacing; + } + + $y0=$this->rect->ye - ($x0-$xe); + $x0=$xe; + } + else { + // Height larger than width + $diff = $x0-$xe; + $y0 = $ye-$diff; + $x0 = $xe; + while( $y1 >= $this->rect->y ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 -= $this->linespacing; + $y1 -= $this->linespacing; + } + $diff = $this->rect->y - $y1; + $x1 = $this->rect->x + $diff; + $y1 = $this->rect->y; + } + while( $y0 >= $this->rect->y ) { + $aImg->Line($x0,$y0,$x1,$y1); + $y0 -= $this->linespacing; + $x1 += $this->linespacing; + } + } +} + +//===================================================================== +// Class RectPattern3DPlane +// Implements "3D" plane pattern +//===================================================================== +class RectPattern3DPlane extends RectPattern { + var $alpha=50; // Parameter that specifies the distance + // to "simulated" horizon in pixel from the + // top of the band. Specifies how fast the lines + // converge. + + function RectPattern3DPlane($aColor="black",$aWeight=1) { + parent::RectPattern($aColor,$aWeight); + $this->SetDensity(10); // Slightly larger default + } + + function SetHorizon($aHorizon) { + $this->alpha=$aHorizon; + } + + function DoPattern(&$aImg) { + // "Fake" a nice 3D grid-effect. + $x0 = $this->rect->x + $this->rect->w/2; + $y0 = $this->rect->y; + $x1 = $x0; + $y1 = $this->rect->ye; + $x0_right = $x0; + $x1_right = $x1; + + // BTW "apa" means monkey in Swedish but is really a shortform for + // "alpha+a" which was the labels I used on paper when I derived the + // geometric to get the 3D perspective right. + // $apa is the height of the bounding rectangle plus the distance to the + // artifical horizon (alpha) + $apa = $this->rect->h + $this->alpha; + + // Three cases and three loops + // 1) The endpoint of the line ends on the bottom line + // 2) The endpoint ends on the side + // 3) Horizontal lines + + // Endpoint falls on bottom line + $middle=$this->rect->x + $this->rect->w/2; + $dist=$this->linespacing; + $factor=$this->alpha /($apa); + while($x1>$this->rect->x) { + $aImg->Line($x0,$y0,$x1,$y1); + $aImg->Line($x0_right,$y0,$x1_right,$y1); + $x1 = $middle - $dist; + $x0 = $middle - $dist * $factor; + $x1_right = $middle + $dist; + $x0_right = $middle + $dist * $factor; + $dist += $this->linespacing; + } + + // Endpoint falls on sides + $dist -= $this->linespacing; + $d=$this->rect->w/2; + $c = $apa - $d*$apa/$dist; + while( $x0>$this->rect->x ) { + $aImg->Line($x0,$y0,$this->rect->x,$this->rect->ye-$c); + $aImg->Line($x0_right,$y0,$this->rect->xe,$this->rect->ye-$c); + $dist += $this->linespacing; + $x0 = $middle - $dist * $factor; + $x1 = $middle - $dist; + $x0_right = $middle + $dist * $factor; + $c = $apa - $d*$apa/$dist; + } + + // Horizontal lines + // They need some serious consideration since they are a function + // of perspective depth (alpha) and density (linespacing) + $x0=$this->rect->x; + $x1=$this->rect->xe; + $y=$this->rect->ye; + + // The first line is drawn directly. Makes the loop below slightly + // more readable. + $aImg->Line($x0,$y,$x1,$y); + $hls = $this->linespacing; + + // A correction factor for vertical "brick" line spacing to account for + // a) the difference in number of pixels hor vs vert + // b) visual apperance to make the first layer of "bricks" look more + // square. + $vls = $this->linespacing*0.6; + + $ds = $hls*($apa-$vls)/$apa; + // Get the slope for the "perspective line" going from bottom right + // corner to top left corner of the "first" brick. + + // Uncomment the following lines if you want to get a visual understanding + // of what this helpline does. BTW this mimics the way you would get the + // perspective right when drawing on paper. + /* + $x0 = $middle; + $y0 = $this->rect->ye; + $len=floor(($this->rect->ye-$this->rect->y)/$vls); + $x1 = $middle+round($len*$ds); + $y1 = $this->rect->ye-$len*$vls; + $aImg->PushColor("red"); + $aImg->Line($x0,$y0,$x1,$y1); + $aImg->PopColor(); + */ + + $y -= $vls; + $k=($this->rect->ye-($this->rect->ye-$vls))/($middle-($middle-$ds)); + $dist = $hls; + while( $y>$this->rect->y ) { + $aImg->Line($this->rect->x,$y,$this->rect->xe,$y); + $adj = $k*$dist/(1+$dist*$k/$apa); + if( $adj < 2 ) $adj=1; + $y = $this->rect->ye - round($adj); + $dist += $hls; + } + } +} + +//===================================================================== +// Class RectPatternCross +// Vert/Hor crosses +//===================================================================== +class RectPatternCross extends RectPattern { + var $vert=null; + var $hor=null; + function RectPatternCross($aColor="black",$aWeight=1) { + parent::RectPattern($aColor,$aWeight); + $this->vert = new RectPatternVert($aColor,$aWeight); + $this->hor = new RectPatternHor($aColor,$aWeight); + } + + function SetOrder($aDepth) { + $this->vert->SetOrder($aDepth); + $this->hor->SetOrder($aDepth); + } + + function SetPos(&$aRect) { + parent::SetPos($aRect); + $this->vert->SetPos($aRect); + $this->hor->SetPos($aRect); + } + + function SetDensity($aDens) { + $this->vert->SetDensity($aDens); + $this->hor->SetDensity($aDens); + } + + function DoPattern(&$aImg) { + $this->vert->DoPattern($aImg); + $this->hor->DoPattern($aImg); + } +} + +//===================================================================== +// Class RectPatternDiagCross +// Vert/Hor crosses +//===================================================================== + +class RectPatternDiagCross extends RectPattern { + var $left=null; + var $right=null; + function RectPatternDiagCross($aColor="black",$aWeight=1) { + parent::RectPattern($aColor,$aWeight); + $this->right = new RectPatternRDiag($aColor,$aWeight); + $this->left = new RectPatternLDiag($aColor,$aWeight); + } + + function SetOrder($aDepth) { + $this->left->SetOrder($aDepth); + $this->right->SetOrder($aDepth); + } + + function SetPos(&$aRect) { + parent::SetPos($aRect); + $this->left->SetPos($aRect); + $this->right->SetPos($aRect); + } + + function SetDensity($aDens) { + $this->left->SetDensity($aDens); + $this->right->SetDensity($aDens); + } + + function DoPattern(&$aImg) { + $this->left->DoPattern($aImg); + $this->right->DoPattern($aImg); + } + +} + +//===================================================================== +// Class RectPatternFactory +// Factory class for rectangular pattern +//===================================================================== +class RectPatternFactory { + function RectPatternFactory() { + // Empty + } + function Create($aPattern,$aColor,$aWeight=1) { + switch($aPattern) { + case BAND_RDIAG: + $obj = new RectPatternRDiag($aColor,$aWeight); + break; + case BAND_LDIAG: + $obj = new RectPatternLDiag($aColor,$aWeight); + break; + case BAND_SOLID: + $obj = new RectPatternSolid($aColor,$aWeight); + break; + case BAND_VLINE: + $obj = new RectPatternVert($aColor,$aWeight); + break; + case BAND_HLINE: + $obj = new RectPatternHor($aColor,$aWeight); + break; + case BAND_3DPLANE: + $obj = new RectPattern3DPlane($aColor,$aWeight); + break; + case BAND_HVCROSS: + $obj = new RectPatternCross($aColor,$aWeight); + break; + case BAND_DIAGCROSS: + $obj = new RectPatternDiagCross($aColor,$aWeight); + break; + default: + JpGraphError::RaiseL(16003,$aPattern); +//(" Unknown pattern specification ($aPattern)"); + } + return $obj; + } +} + + +//===================================================================== +// Class PlotBand +// Factory class which is used by the client. +// It is responsible for factoring the corresponding pattern +// concrete class. +//===================================================================== +class PlotBand { + var $prect=null; + var $depth; + var $dir, $min, $max; + + function PlotBand($aDir,$aPattern,$aMin,$aMax,$aColor="black",$aWeight=1,$aDepth=DEPTH_BACK) { + $f = new RectPatternFactory(); + $this->prect = $f->Create($aPattern,$aColor,$aWeight); + if( is_numeric($aMin) && is_numeric($aMax) && ($aMin > $aMax) ) + JpGraphError::RaiseL(16004); +//('Min value for plotband is larger than specified max value. Please correct.'); + $this->dir = $aDir; + $this->min = $aMin; + $this->max = $aMax; + $this->depth=$aDepth; + } + + // Set position. aRect contains absolute image coordinates + function SetPos(&$aRect) { + assert( $this->prect != null ) ; + $this->prect->SetPos($aRect); + } + + function ShowFrame($aFlag=true) { + $this->prect->ShowFrame($aFlag); + } + + // Set z-order. In front of pplot or in the back + function SetOrder($aDepth) { + $this->depth=$aDepth; + } + + function SetDensity($aDens) { + $this->prect->SetDensity($aDens); + } + + function GetDir() { + return $this->dir; + } + + function GetMin() { + return $this->min; + } + + function GetMax() { + return $this->max; + } + + // Display band + function Stroke(&$aImg,&$aXScale,&$aYScale) { + assert( $this->prect != null ) ; + if( $this->dir == HORIZONTAL ) { + if( $this->min === 'min' ) $this->min = $aYScale->GetMinVal(); + if( $this->max === 'max' ) $this->max = $aYScale->GetMaxVal(); + + // Only draw the bar if it actually appears in the range + if ($this->min < $aYScale->GetMaxVal() && $this->max > $aYScale->GetMinVal()) { + + // Trucate to limit of axis + $this->min = max($this->min, $aYScale->GetMinVal()); + $this->max = min($this->max, $aYScale->GetMaxVal()); + + $x=$aXScale->scale_abs[0]; + $y=$aYScale->Translate($this->max); + $width=$aXScale->scale_abs[1]-$aXScale->scale_abs[0]+1; + $height=abs($y-$aYScale->Translate($this->min))+1; + $this->prect->SetPos(new Rectangle($x,$y,$width,$height)); + $this->prect->Stroke($aImg); + } + } + else { // VERTICAL + if( $this->min === 'min' ) $this->min = $aXScale->GetMinVal(); + if( $this->max === 'max' ) $this->max = $aXScale->GetMaxVal(); + + // Only draw the bar if it actually appears in the range + if ($this->min < $aXScale->GetMaxVal() && $this->max > $aXScale->GetMinVal()) { + + // Trucate to limit of axis + $this->min = max($this->min, $aXScale->GetMinVal()); + $this->max = min($this->max, $aXScale->GetMaxVal()); + + $y=$aYScale->scale_abs[1]; + $x=$aXScale->Translate($this->min); + $height=abs($aYScale->scale_abs[1]-$aYScale->scale_abs[0]); + $width=abs($x-$aXScale->Translate($this->max)); + $this->prect->SetPos(new Rectangle($x,$y,$width,$height)); + $this->prect->Stroke($aImg); + } + } + } +} + + +?> diff --git a/html/includes/jpgraph/src/jpgraph_plotmark.inc.php b/html/includes/jpgraph/src/jpgraph_plotmark.inc.php new file mode 100644 index 0000000000..bf1e151489 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_plotmark.inc.php @@ -0,0 +1,496 @@ +an[$aMark]; + if( is_string($aIdx) ) { + if( !in_array($aIdx,$this->colors) ) { + JpGraphError::RaiseL(23001,$this->name,$aIdx); //('This marker "'.($this->name).'" does not exist in color: '.$aIdx); + } + $idx = $this->index[$aIdx]; + } + elseif( !is_integer($aIdx) || + (is_integer($aIdx) && $aIdx > $this->maxidx ) ) { + JpGraphError::RaiseL(23002,$this->name); +//('Mark color index too large for marker "'.($this->name).'"'); + } + else + $idx = $aIdx ; + return Image::CreateFromString(base64_decode($this->{$n}[$idx][1])); + } + function GetAnchor() { + return array($this->anchor_x,$this->anchor_y); + } +} + + +// Keep a global flag cache to reduce memory usage +$_gFlagCache=array( + 1 => null, + 2 => null, + 3 => null, + 4 => null, +); +// Only supposed to b called as statics +class FlagCache { + function GetFlagImgByName($aSize,$aName) { + global $_gFlagCache; + require_once('jpgraph_flags.php'); + if( $_gFlagCache[$aSize] === null ) { + $_gFlagCache[$aSize] =& new FlagImages($aSize); + } + $f =& $_gFlagCache[$aSize]; + $idx = $f->GetIdxByName($aName,$aFullName); + return $f->GetImgByIdx($idx); + } +} + +//=================================================== +// CLASS PlotMark +// Description: Handles the plot marks in graphs +//=================================================== +class PlotMark { + var $title, $show=true; + var $type,$weight=1; + var $color="black", $width=4, $fill_color="blue"; + var $yvalue,$xvalue='',$csimtarget='',$csimwintarget='',$csimalt='',$csimareas; + var $iFormatCallback=""; + var $iFormatCallback2=""; + var $markimg='',$iScale=1.0; + var $oldfilename='',$iFileName=''; + var $imgdata_balls = null; + var $imgdata_diamonds = null; + var $imgdata_squares = null; + var $imgdata_bevels = null; + var $imgdata_stars = null; + var $imgdata_pushpins = null; + +//-------------- +// CONSTRUCTOR + function PlotMark() { + $this->title = new Text(); + $this->title->Hide(); + $this->csimareas = ''; + $this->type=-1; + } +//--------------- +// PUBLIC METHODS + function SetType($aType,$aFileName='',$aScale=1.0) { + $this->type = $aType; + if( $aType == MARK_IMG && $aFileName=='' ) { + JpGraphError::RaiseL(23003);//('A filename must be specified if you set the mark type to MARK_IMG.'); + } + $this->iFileName = $aFileName; + $this->iScale = $aScale; + } + + function SetCallback($aFunc) { + $this->iFormatCallback = $aFunc; + } + + function SetCallbackYX($aFunc) { + $this->iFormatCallback2 = $aFunc; + } + + function GetType() { + return $this->type; + } + + function SetColor($aColor) { + $this->color=$aColor; + } + + function SetFillColor($aFillColor) { + $this->fill_color = $aFillColor; + } + + function SetWeight($aWeight) { + $this->weight = $aWeight; + } + + // Synonym for SetWidth() + function SetSize($aWidth) { + $this->width=$aWidth; + } + + function SetWidth($aWidth) { + $this->width=$aWidth; + } + + function SetDefaultWidth() { + switch( $this->type ) { + case MARK_CIRCLE: + case MARK_FILLEDCIRCLE: + $this->width=4; + break; + default: + $this->width=7; + } + } + + function GetWidth() { + return $this->width; + } + + function Hide($aHide=true) { + $this->show = !$aHide; + } + + function Show($aShow=true) { + $this->show = $aShow; + } + + function SetCSIMAltVal($aY,$aX='') { + $this->yvalue=$aY; + $this->xvalue=$aX; + } + + function SetCSIMTarget($aTarget,$aWinTarget='') { + $this->csimtarget=$aTarget; + $this->csimwintarget=$aWinTarget; + } + + function SetCSIMAlt($aAlt) { + $this->csimalt=$aAlt; + } + + function GetCSIMAreas(){ + return $this->csimareas; + } + + function AddCSIMPoly($aPts) { + $coords = round($aPts[0]).", ".round($aPts[1]); + $n = count($aPts)/2; + for( $i=1; $i < $n; ++$i){ + $coords .= ", ".round($aPts[2*$i]).", ".round($aPts[2*$i+1]); + } + $this->csimareas=""; + if( !empty($this->csimtarget) ) { + $this->csimareas .= "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + function AddCSIMCircle($x,$y,$r) { + $x = round($x); $y=round($y); $r=round($r); + $this->csimareas=""; + if( !empty($this->csimtarget) ) { + $this->csimareas .= "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + } + + function Stroke(&$img,$x,$y) { + if( !$this->show ) return; + + if( $this->iFormatCallback != '' || $this->iFormatCallback2 != '' ) { + + if( $this->iFormatCallback != '' ) { + $f = $this->iFormatCallback; + list($width,$color,$fcolor) = call_user_func($f,$this->yvalue); + $filename = $this->iFileName; + $imgscale = $this->iScale; + } + else { + $f = $this->iFormatCallback2; + list($width,$color,$fcolor,$filename,$imgscale) = call_user_func($f,$this->yvalue,$this->xvalue); + if( $filename=="" ) $filename = $this->iFileName; + if( $imgscale=="" ) $imgscale = $this->iScale; + } + + if( $width=="" ) $width = $this->width; + if( $color=="" ) $color = $this->color; + if( $fcolor=="" ) $fcolor = $this->fill_color; + + } + else { + $fcolor = $this->fill_color; + $color = $this->color; + $width = $this->width; + $filename = $this->iFileName; + $imgscale = $this->iScale; + } + + if( $this->type == MARK_IMG || + ($this->type >= MARK_FLAG1 && $this->type <= MARK_FLAG4 ) || + $this->type >= MARK_IMG_PUSHPIN ) { + + // Note: For the builtin images we use the "filename" parameter + // to denote the color + $anchor_x = 0.5; + $anchor_y = 0.5; + switch( $this->type ) { + case MARK_FLAG1: + case MARK_FLAG2: + case MARK_FLAG3: + case MARK_FLAG4: + $this->markimg = FlagCache::GetFlagImgByName($this->type-MARK_FLAG1+1,$filename); + break; + + case MARK_IMG : + // Load an image and use that as a marker + // Small optimization, if we have already read an image don't + // waste time reading it again. + if( $this->markimg == '' || !($this->oldfilename === $filename) ) { + $this->markimg = Graph::LoadBkgImage('',$filename); + $this->oldfilename = $filename ; + } + break; + + case MARK_IMG_PUSHPIN: + case MARK_IMG_SPUSHPIN: + case MARK_IMG_LPUSHPIN: + if( $this->imgdata_pushpins == null ) { + require_once 'imgdata_pushpins.inc.php'; + $this->imgdata_pushpins = new ImgData_PushPins(); + } + $this->markimg = $this->imgdata_pushpins->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_pushpins->GetAnchor(); + break; + + case MARK_IMG_SQUARE: + if( $this->imgdata_squares == null ) { + require_once 'imgdata_squares.inc.php'; + $this->imgdata_squares = new ImgData_Squares(); + } + $this->markimg = $this->imgdata_squares->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_squares->GetAnchor(); + break; + + case MARK_IMG_STAR: + if( $this->imgdata_stars == null ) { + require_once 'imgdata_stars.inc.php'; + $this->imgdata_stars = new ImgData_Stars(); + } + $this->markimg = $this->imgdata_stars->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_stars->GetAnchor(); + break; + + case MARK_IMG_BEVEL: + if( $this->imgdata_bevels == null ) { + require_once 'imgdata_bevels.inc.php'; + $this->imgdata_bevels = new ImgData_Bevels(); + } + $this->markimg = $this->imgdata_bevels->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_bevels->GetAnchor(); + break; + + case MARK_IMG_DIAMOND: + if( $this->imgdata_diamonds == null ) { + require_once 'imgdata_diamonds.inc.php'; + $this->imgdata_diamonds = new ImgData_Diamonds(); + } + $this->markimg = $this->imgdata_diamonds->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_diamonds->GetAnchor(); + break; + + case MARK_IMG_BALL: + case MARK_IMG_SBALL: + case MARK_IMG_MBALL: + case MARK_IMG_LBALL: + if( $this->imgdata_balls == null ) { + require_once 'imgdata_balls.inc.php'; + $this->imgdata_balls = new ImgData_Balls(); + } + $this->markimg = $this->imgdata_balls->GetImg($this->type,$filename); + list($anchor_x,$anchor_y) = $this->imgdata_balls->GetAnchor(); + break; + } + + $w = $img->GetWidth($this->markimg); + $h = $img->GetHeight($this->markimg); + + $dw = round($imgscale * $w ); + $dh = round($imgscale * $h ); + + // Do potential rotation + list($x,$y) = $img->Rotate($x,$y); + + $dx = round($x-$dw*$anchor_x); + $dy = round($y-$dh*$anchor_y); + + $this->width = max($dx,$dy); + + $img->Copy($this->markimg,$dx,$dy,0,0,$dw,$dh,$w,$h); + if( !empty($this->csimtarget) ) { + $this->csimareas = "csimtarget)."\""; + + if( !empty($this->csimwintarget) ) { + $this->csimareas .= " target=\"".$this->csimwintarget."\" "; + } + + if( !empty($this->csimalt) ) { + $tmp=sprintf($this->csimalt,$this->yvalue,$this->xvalue); + $this->csimareas .= " title=\"$tmp\" alt=\"$tmp\" "; + } + $this->csimareas .= " />\n"; + } + + // Stroke title + $this->title->Align("center","top"); + $this->title->Stroke($img,$x,$y+round($dh/2)); + return; + } + + $weight = $this->weight; + $dx=round($width/2,0); + $dy=round($width/2,0); + $pts=0; + + switch( $this->type ) { + case MARK_SQUARE: + $c[]=$x-$dx;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y-$dy; + $pts=5; + break; + case MARK_UTRIANGLE: + ++$dx;++$dy; + $c[]=$x-$dx;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $c[]=$x;$c[]=$y-0.87*$dy; + $c[]=$x+$dx;$c[]=$y+0.87*$dy; + $c[]=$x-$dx;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $pts=4; + break; + case MARK_DTRIANGLE: + ++$dx;++$dy; + $c[]=$x;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $c[]=$x-$dx;$c[]=$y-0.87*$dy; + $c[]=$x+$dx;$c[]=$y-0.87*$dy; + $c[]=$x;$c[]=$y+0.87*$dy; // tan(60)/2*$dx + $pts=4; + break; + case MARK_DIAMOND: + $c[]=$x;$c[]=$y+$dy; + $c[]=$x-$dx;$c[]=$y; + $c[]=$x;$c[]=$y-$dy; + $c[]=$x+$dx;$c[]=$y; + $c[]=$x;$c[]=$y+$dy; + $pts=5; + break; + case MARK_LEFTTRIANGLE: + $c[]=$x;$c[]=$y; + $c[]=$x;$c[]=$y+2*$dy; + $c[]=$x+$dx*2;$c[]=$y; + $c[]=$x;$c[]=$y; + $pts=4; + break; + case MARK_RIGHTTRIANGLE: + $c[]=$x-$dx*2;$c[]=$y; + $c[]=$x;$c[]=$y+2*$dy; + $c[]=$x;$c[]=$y; + $c[]=$x-$dx*2;$c[]=$y; + $pts=4; + break; + case MARK_FLASH: + $dy *= 2; + $c[]=$x+$dx/2; $c[]=$y-$dy; + $c[]=$x-$dx+$dx/2; $c[]=$y+$dy*0.7-$dy; + $c[]=$x+$dx/2; $c[]=$y+$dy*1.3-$dy; + $c[]=$x-$dx+$dx/2; $c[]=$y+2*$dy-$dy; + $img->SetLineWeight($weight); + $img->SetColor($color); + $img->Polygon($c); + $img->SetLineWeight(1); + $this->AddCSIMPoly($c); + break; + } + + if( $pts>0 ) { + $this->AddCSIMPoly($c); + $img->SetLineWeight($weight); + $img->SetColor($fcolor); + $img->FilledPolygon($c); + $img->SetColor($color); + $img->Polygon($c); + $img->SetLineWeight(1); + } + elseif( $this->type==MARK_CIRCLE ) { + $img->SetColor($color); + $img->Circle($x,$y,$width); + $this->AddCSIMCircle($x,$y,$width); + } + elseif( $this->type==MARK_FILLEDCIRCLE ) { + $img->SetColor($fcolor); + $img->FilledCircle($x,$y,$width); + $img->SetColor($color); + $img->Circle($x,$y,$width); + $this->AddCSIMCircle($x,$y,$width); + } + elseif( $this->type==MARK_CROSS ) { + // Oversize by a pixel to match the X + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x,$y+$dy+1,$x,$y-$dy-1); + $img->Line($x-$dx-1,$y,$x+$dx+1,$y); + $this->AddCSIMCircle($x,$y,$dx); + } + elseif( $this->type==MARK_X ) { + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x+$dx,$y+$dy,$x-$dx,$y-$dy); + $img->Line($x-$dx,$y+$dy,$x+$dx,$y-$dy); + $this->AddCSIMCircle($x,$y,$dx+$dy); + } + elseif( $this->type==MARK_STAR ) { + $img->SetColor($color); + $img->SetLineWeight($weight); + $img->Line($x+$dx,$y+$dy,$x-$dx,$y-$dy); + $img->Line($x-$dx,$y+$dy,$x+$dx,$y-$dy); + // Oversize by a pixel to match the X + $img->Line($x,$y+$dy+1,$x,$y-$dy-1); + $img->Line($x-$dx-1,$y,$x+$dx+1,$y); + $this->AddCSIMCircle($x,$y,$dx+$dy); + } + + // Stroke title + $this->title->Align("center","center"); + $this->title->Stroke($img,$x,$y); + } +} // Class + + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_polar.php b/html/includes/jpgraph/src/jpgraph_polar.php new file mode 100644 index 0000000000..346ffcb0b5 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_polar.php @@ -0,0 +1,839 @@ +numpoints = $n/2; + $this->coord = $aData; + $this->mark = new PlotMark(); + } + + function SetWeight($aWeight) { + $this->iLineWeight = $aWeight; + } + + function SetColor($aColor){ + $this->iColor = $aColor; + } + + function SetFillColor($aColor){ + $this->iFillColor = $aColor; + } + + function Max() { + $m = $this->coord[1]; + $i=1; + while( $i < $this->numpoints ) { + $m = max($m,$this->coord[2*$i+1]); + ++$i; + } + return $m; + } + // Set href targets for CSIM + function SetCSIMTargets($aTargets,$aAlts=null) { + $this->csimtargets=$aTargets; + $this->csimalts=$aAlts; + } + + // Get all created areas + function GetCSIMareas() { + return $this->csimareas; + } + + function SetLegend($aLegend,$aCSIM="",$aCSIMAlt="") { + $this->legend = $aLegend; + $this->legendcsimtarget = $aCSIM; + $this->legendcsimalt = $aCSIMAlt; + } + + // Private methods + + function Legend(&$aGraph) { + $color = $this->iColor ; + if( $this->legend != "" ) { + if( $this->iFillColor!='' ) { + $color = $this->iFillColor; + $aGraph->legend->Add($this->legend,$color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt); + } + else { + $aGraph->legend->Add($this->legend,$color,$this->mark,$this->line_style, + $this->legendcsimtarget,$this->legendcsimalt); + } + } + } + + function Stroke(&$img,$scale) { + + $i=0; + $p=array(); + $this->csimareas=''; + while($i < $this->numpoints) { + list($x1,$y1) = $scale->PTranslate($this->coord[2*$i],$this->coord[2*$i+1]); + $p[2*$i] = $x1; + $p[2*$i+1] = $y1; + + if( isset($this->csimtargets[$i]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$i]); + $this->mark->SetCSIMAlt($this->csimalts[$i]); + $this->mark->SetCSIMAltVal($this->coord[2*$i], $this->coord[2*$i+1]); + $this->mark->Stroke($img,$x1,$y1); + $this->csimareas .= $this->mark->GetCSIMAreas(); + } + else + $this->mark->Stroke($img,$x1,$y1); + + ++$i; + } + + if( $this->iFillColor != '' ) { + $img->SetColor($this->iFillColor); + $img->FilledPolygon($p); + } + $img->SetLineWeight($this->iLineWeight); + $img->SetColor($this->iColor); + $img->Polygon($p,$this->iFillColor!=''); + } +} + +//-------------------------------------------------------------------------- +// class PolarAxis +//-------------------------------------------------------------------------- +class PolarAxis extends Axis { + var $angle_step=15,$angle_color='lightgray',$angle_label_color='black'; + var $angle_fontfam=FF_FONT1,$angle_fontstyle=FS_NORMAL,$angle_fontsize=10; + var $angle_fontcolor = 'navy'; + var $gridminor_color='lightgray',$gridmajor_color='lightgray'; + var $show_minor_grid = false, $show_major_grid = true ; + var $show_angle_mark=true, $show_angle_grid=true, $show_angle_label=true; + var $angle_tick_len=3, $angle_tick_len2=3, $angle_tick_color='black'; + var $show_angle_tick=true; + var $radius_tick_color='black'; + + function PolarAxis(&$img,&$aScale) { + parent::Axis($img,$aScale); + } + + function ShowAngleDegreeMark($aFlg=true) { + $this->show_angle_mark = $aFlg; + } + + function SetAngleStep($aStep) { + $this->angle_step=$aStep; + } + + function HideTicks($aFlg=true,$aAngleFlg=true) { + parent::HideTicks($aFlg,$aFlg); + $this->show_angle_tick = !$aAngleFlg; + } + + function ShowAngleLabel($aFlg=true) { + $this->show_angle_label = $aFlg; + } + + function ShowGrid($aMajor=true,$aMinor=false,$aAngle=true) { + $this->show_minor_grid = $aMinor; + $this->show_major_grid = $aMajor; + $this->show_angle_grid = $aAngle ; + } + + function SetAngleFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=10) { + $this->angle_fontfam = $aFontFam; + $this->angle_fontstyle = $aFontStyle; + $this->angle_fontsize = $aFontSize; + } + + function SetColor($aColor,$aRadColor='',$aAngleColor='') { + if( $aAngleColor == '' ) + $aAngleColor=$aColor; + parent::SetColor($aColor,$aRadColor); + $this->angle_fontcolor = $aAngleColor; + } + + function SetGridColor($aMajorColor,$aMinorColor='',$aAngleColor='') { + if( $aMinorColor == '' ) + $aMinorColor = $aMajorColor; + if( $aAngleColor == '' ) + $aAngleColor = $aMajorColor; + + $this->gridminor_color = $aMinorColor; + $this->gridmajor_color = $aMajorColor; + $this->angle_color = $aAngleColor; + } + + function SetTickColors($aRadColor,$aAngleColor='') { + $this->radius_tick_color = $aRadColor; + $this->angle_tick_color = $aAngleColor; + } + + // Private methods + function StrokeGrid($pos) { + $x = round($this->img->left_margin + $this->img->plotwidth/2); + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + + // Stroke the minor arcs + $pmin = array(); + $p = $this->scale->ticks->ticks_pos; + $n = count($p); + $i = 0; + $this->img->SetColor($this->gridminor_color); + while( $i < $n ) { + $r = $p[$i]-$x+1; + $pmin[]=$r; + if( $this->show_minor_grid ) { + $this->img->Circle($x,$pos,$r); + } + $i++; + } + + $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; + while( $r < $limit ) { + $off = $r; + $i=1; + $r = $off + round($p[$i]-$x+1); + while( $r < $limit && $i < $n ) { + $r = $off+$p[$i]-$x; + $pmin[]=$r; + if( $this->show_minor_grid ) { + $this->img->Circle($x,$pos,$r); + } + $i++; + } + } + + // Stroke the major arcs + if( $this->show_major_grid ) { + // First determine how many minor step on + // every major step. We have recorded the minor radius + // in pmin and use these values. This is done in order + // to avoid rounding errors if we were to recalculate the + // different major radius. + $pmaj = $this->scale->ticks->maj_ticks_pos; + $p = $this->scale->ticks->ticks_pos; + if( $this->scale->name == 'lin' ) { + $step=round(($pmaj[1] - $pmaj[0])/($p[1] - $p[0])); + } + else { + $step=9; + } + $n = round(count($pmin)/$step); + $i = 0; + $this->img->SetColor($this->gridmajor_color); + $limit = max($this->img->plotwidth,$this->img->plotheight)*1.4 ; + $off = $r; + $i=0; + $r = $pmin[$i*$step]; + while( $r < $limit && $i < $n ) { + $r = $pmin[$i*$step]; + $this->img->Circle($x,$pos,$r); + $i++; + } + } + + // Draw angles + if( $this->show_angle_grid ) { + $this->img->SetColor($this->angle_color); + $d = max($this->img->plotheight,$this->img->plotwidth)*1.4 ; + $a = 0; + $p = $this->scale->ticks->ticks_pos; + $start_radius = $p[1]-$x; + while( $a < 360 ) { + if( $a == 90 || $a == 270 ) { + // Make sure there are no rounding problem with + // exactly vertical lines + $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, + $pos-$start_radius*sin($a/180*M_PI), + $x+$start_radius*cos($a/180*M_PI)+1, + $pos-$d*sin($a/180*M_PI)); + + } + else { + $this->img->Line($x+$start_radius*cos($a/180*M_PI)+1, + $pos-$start_radius*sin($a/180*M_PI), + $x+$d*cos($a/180*M_PI), + $pos-$d*sin($a/180*M_PI)); + } + $a += $this->angle_step; + } + } + } + + function StrokeAngleLabels($pos,$type) { + + if( !$this->show_angle_label ) + return; + + $x0 = round($this->img->left_margin+$this->img->plotwidth/2)+1; + + $d = max($this->img->plotwidth,$this->img->plotheight)*1.42; + $a = $this->angle_step; + $t = new Text(); + $t->SetColor($this->angle_fontcolor); + $t->SetFont($this->angle_fontfam,$this->angle_fontstyle,$this->angle_fontsize); + $xright = $this->img->width - $this->img->right_margin; + $ytop = $this->img->top_margin; + $xleft = $this->img->left_margin; + $ybottom = $this->img->height - $this->img->bottom_margin; + $ha = 'left'; + $va = 'center'; + $w = $this->img->plotwidth/2; + $h = $this->img->plotheight/2; + $xt = $x0; $yt = $pos; + $margin=5; + + $tl = $this->angle_tick_len ; // Outer len + $tl2 = $this->angle_tick_len2 ; // Interior len + + $this->img->SetColor($this->angle_tick_color); + $rot90 = $this->img->a == 90 ; + + if( $type == POLAR_360 ) { + $ca1 = atan($h/$w)/M_PI*180; + $ca2 = 180-$ca1; + $ca3 = $ca1+180; + $ca4 = 360-$ca1; + $end = 360; + while( $a < $end ) { + $ca = cos($a/180*M_PI); + $sa = sin($a/180*M_PI); + $x = $d*$ca; + $y = $d*$sa; + $xt=1000;$yt=1000; + if( $a <= $ca1 || $a >= $ca4 ) { + $yt = $pos - $w * $y/$x; + $xt = $xright + $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'top'; + } + else { + $ha = 'left'; + $va = 'center'; + } + $x1=$xright-$tl2; $x2=$xright+$tl; + $y1=$y2=$yt; + } + elseif( $a > $ca1 && $a < $ca2 ) { + $xt = $x0 + $h * $x/$y; + $yt = $ytop - $margin; + if( $rot90 ) { + $ha = 'left'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'bottom'; + } + $y1=$ytop+$tl2;$y2=$ytop-$tl; + $x1=$x2=$xt; + } + elseif( $a >= $ca2 && $a <= $ca3 ) { + $yt = $pos + $w * $y/$x; + $xt = $xleft - $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'bottom'; + } + else { + $ha = 'right'; + $va = 'center'; + } + $x1=$xleft+$tl2;$x2=$xleft-$tl; + $y1=$y2=$yt; + } + else { + $xt = $x0 - $h * $x/$y; + $yt = $ybottom + $margin; + if( $rot90 ) { + $ha = 'right'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'top'; + } + $y1=$ybottom-$tl2;$y2=$ybottom+$tl; + $x1=$x2=$xt; + } + if( $a != 0 && $a != 180 ) { + $t->Align($ha,$va); + if( $this->show_angle_mark ) + $a .= '°'; + $t->Set($a); + $t->Stroke($this->img,$xt,$yt); + if( $this->show_angle_tick ) + $this->img->Line($x1,$y1,$x2,$y2); + } + $a += $this->angle_step; + } + } + else { + // POLAR_HALF + $ca1 = atan($h/$w*2)/M_PI*180; + $ca2 = 180-$ca1; + $end = 180; + while( $a < $end ) { + $ca = cos($a/180*M_PI); + $sa = sin($a/180*M_PI); + $x = $d*$ca; + $y = $d*$sa; + if( $a <= $ca1 ) { + $yt = $pos - $w * $y/$x; + $xt = $xright + $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'top'; + } + else { + $ha = 'left'; + $va = 'center'; + } + $x1=$xright-$tl2; $x2=$xright+$tl; + $y1=$y2=$yt; + } + elseif( $a > $ca1 && $a < $ca2 ) { + $xt = $x0 + 2*$h * $x/$y; + $yt = $ytop - $margin; + if( $rot90 ) { + $ha = 'left'; + $va = 'center'; + } + else { + $ha = 'center'; + $va = 'bottom'; + } + $y1=$ytop+$tl2;$y2=$ytop-$tl; + $x1=$x2=$xt; + } + elseif( $a >= $ca2 ) { + $yt = $pos + $w * $y/$x; + $xt = $xleft - $margin; + if( $rot90 ) { + $ha = 'center'; + $va = 'bottom'; + } + else { + $ha = 'right'; + $va = 'center'; + } + $x1=$xleft+$tl2;$x2=$xleft-$tl; + $y1=$y2=$yt; + } + $t->Align($ha,$va); + if( $this->show_angle_mark ) + $a .= '°'; + $t->Set($a); + $t->Stroke($this->img,$xt,$yt); + if( $this->show_angle_tick ) + $this->img->Line($x1,$y1,$x2,$y2); + $a += $this->angle_step; + } + } + } + + function Stroke($pos) { + + $this->img->SetLineWeight($this->weight); + $this->img->SetColor($this->color); + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + if( !$this->hide_line ) + $this->img->FilledRectangle($this->img->left_margin,$pos, + $this->img->width-$this->img->right_margin,$pos+$this->weight-1); + $y=$pos+$this->img->GetFontHeight()+$this->title_margin+$this->title->margin; + if( $this->title_adjust=="high" ) + $this->title->Pos($this->img->width-$this->img->right_margin,$y,"right","top"); + elseif( $this->title_adjust=="middle" || $this->title_adjust=="center" ) + $this->title->Pos(($this->img->width-$this->img->left_margin- + $this->img->right_margin)/2+$this->img->left_margin, + $y,"center","top"); + elseif($this->title_adjust=="low") + $this->title->Pos($this->img->left_margin,$y,"left","top"); + else { + JpGraphError::RaiseL(17002,$this->title_adjust); +//('Unknown alignment specified for X-axis title. ('.$this->title_adjust.')'); + } + + + if (!$this->hide_labels) { + $this->StrokeLabels($pos,false); + } + $this->img->SetColor($this->radius_tick_color); + $this->scale->ticks->Stroke($this->img,$this->scale,$pos); + + // + // Mirror the positions for the left side of the scale + // + $mid = 2*($this->img->left_margin+$this->img->plotwidth/2); + $n = count($this->scale->ticks->ticks_pos); + $i=0; + while( $i < $n ) { + $this->scale->ticks->ticks_pos[$i] = + $mid-$this->scale->ticks->ticks_pos[$i] ; + ++$i; + } + + $n = count($this->scale->ticks->maj_ticks_pos); + $i=0; + while( $i < $n ) { + $this->scale->ticks->maj_ticks_pos[$i] = + $mid-$this->scale->ticks->maj_ticks_pos[$i] ; + ++$i; + } + + $n = count($this->scale->ticks->maj_ticklabels_pos); + $i=1; + while( $i < $n ) { + $this->scale->ticks->maj_ticklabels_pos[$i] = + $mid-$this->scale->ticks->maj_ticklabels_pos[$i] ; + ++$i; + } + + // Draw the left side of the scale + $n = count($this->scale->ticks->ticks_pos); + $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMinTickAbsSize(); + + + // Minor ticks + if( ! $this->scale->ticks->supress_minor_tickmarks ) { + $i=1; + while( $i < $n/2 ) { + $x = round($this->scale->ticks->ticks_pos[$i]) ; + $this->img->Line($x,$pos,$x,$yu); + ++$i; + } + } + + $n = count($this->scale->ticks->maj_ticks_pos); + $yu = $pos - $this->scale->ticks->direction*$this->scale->ticks->GetMajTickAbsSize(); + + + // Major ticks + if( ! $this->scale->ticks->supress_tickmarks ) { + $i=1; + while( $i < $n/2 ) { + $x = round($this->scale->ticks->maj_ticks_pos[$i]) ; + $this->img->Line($x,$pos,$x,$yu); + ++$i; + } + } + if (!$this->hide_labels) { + $this->StrokeLabels($pos,false); + } + $this->title->Stroke($this->img); + } +} + +class PolarScale extends LinearScale { + var $graph; + function PolarScale($aMax=0,&$graph) { + parent::LinearScale(0,$aMax,'x'); + $this->graph = &$graph; + } + + function _Translate($v) { + return parent::Translate($v); + } + + function PTranslate($aAngle,$aRad) { + + $m = $this->scale[1]; + $w = $this->graph->img->plotwidth/2; + $aRad = $aRad/$m*$w; + + $x = cos( $aAngle/180 * M_PI ) * $aRad; + $y = sin( $aAngle/180 * M_PI ) * $aRad; + + $x += $this->_Translate(0); + + if( $this->graph->iType == POLAR_360 ) { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; + } + else { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; + } + return array($x,$y); + } +} + +class PolarLogScale extends LogScale { + var $graph; + function PolarLogScale($aMax=1,&$graph) { + parent::LogScale(0,$aMax,'x'); + $this->graph = &$graph; + $this->ticks->SetLabelLogType(LOGLABELS_MAGNITUDE); + + } + + function PTranslate($aAngle,$aRad) { + + if( $aRad == 0 ) + $aRad = 1; + $aRad = log10($aRad); + $m = $this->scale[1]; + $w = $this->graph->img->plotwidth/2; + $aRad = $aRad/$m*$w; + + $x = cos( $aAngle/180 * M_PI ) * $aRad; + $y = sin( $aAngle/180 * M_PI ) * $aRad; + + $x += $w+$this->graph->img->left_margin;//$this->_Translate(0); + if( $this->graph->iType == POLAR_360 ) { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight/2) - $y; + } + else { + $y = ($this->graph->img->top_margin + $this->graph->img->plotheight) - $y; + } + return array($x,$y); + } +} + +class PolarGraph extends Graph { + var $scale; + var $iType=POLAR_360; + var $axis; + + function PolarGraph($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOut=0,$aInline=true) { + parent::Graph($aWidth,$aHeight,$aCachedName,$aTimeOut,$aInline) ; + $this->SetDensity(TICKD_DENSE); + $this->SetBox(); + $this->SetMarginColor('white'); + } + + function SetDensity($aDense) { + $this->SetTickDensity(TICKD_NORMAL,$aDense); + } + + function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) { + $adj = ($this->img->height - $this->img->width)/2; + $this->SetAngle(90); + $this->img->SetMargin($lm-$adj,$rm-$adj,$tm+$adj,$bm+$adj); + $this->img->SetCenter(floor($this->img->width/2),floor($this->img->height/2)); + $this->axis->SetLabelAlign('right','center'); + //JpGraphError::Raise('Set90AndMargin() is not supported for polar graphs.'); + } + + function SetScale($aScale,$rmax=0) { + if( $aScale == 'lin' ) + $this->scale = new PolarScale($rmax,$this); + elseif( $aScale == 'log' ) { + $this->scale = new PolarLogScale($rmax,$this); + } + else { + JpGraphError::RaiseL(17004);//('Unknown scale type for polar graph. Must be "lin" or "log"'); + } + + $this->axis = new PolarAxis($this->img,$this->scale); + $this->SetMargin(40,40,50,40); + } + + function SetType($aType) { + $this->iType = $aType; + } + + function SetPlotSize($w,$h) { + $this->SetMargin(($this->img->width-$w)/2,($this->img->width-$w)/2, + ($this->img->height-$h)/2,($this->img->height-$h)/2); + } + + // Private methods + function GetPlotsMax() { + $n = count($this->plots); + $m = $this->plots[0]->Max(); + $i=1; + while($i < $n) { + $m = max($this->plots[$i]->Max(),$m); + ++$i; + } + return $m; + } + + function Stroke($aStrokeFileName="") { + + // Start by adjusting the margin so that potential titles will fit. + $this->AdjustMarginsForTitles(); + + // If the filename is the predefined value = '_csim_special_' + // we assume that the call to stroke only needs to do enough + // to correctly generate the CSIM maps. + // We use this variable to skip things we don't strictly need + // to do to generate the image map to improve performance + // a best we can. Therefor you will see a lot of tests !$_csim in the + // code below. + $_csim = ($aStrokeFileName===_CSIM_SPECIALFILE); + + // We need to know if we have stroked the plot in the + // GetCSIMareas. Otherwise the CSIM hasn't been generated + // and in the case of GetCSIM called before stroke to generate + // CSIM without storing an image to disk GetCSIM must call Stroke. + $this->iHasStroked = true; + + //Check if we should autoscale axis + if( !$this->scale->IsSpecified() && count($this->plots)>0 ) { + $max = $this->GetPlotsMax(); + $t1 = $this->img->plotwidth; + $this->img->plotwidth /= 2; + $t2 = $this->img->left_margin; + $this->img->left_margin += $this->img->plotwidth+1; + $this->scale->AutoScale($this->img,0,$max, + $this->img->plotwidth/$this->xtick_factor/2); + $this->img->plotwidth = $t1; + $this->img->left_margin = $t2; + } + else { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + //$min = 0; + $max = $this->scale->scale[1]; + $t1 = $this->img->plotwidth; + $this->img->plotwidth /= 2; + $t2 = $this->img->left_margin; + $this->img->left_margin += $this->img->plotwidth+1; + $this->scale->AutoScale($this->img,0,$max, + $this->img->plotwidth/$this->xtick_factor/2); + $this->img->plotwidth = $t1; + $this->img->left_margin = $t2; + } + + if( $this->iType == POLAR_180 ) + $pos = $this->img->height - $this->img->bottom_margin; + else + $pos = $this->img->plotheight/2 + $this->img->top_margin; + + + if( !$_csim ) { + $this->StrokePlotArea(); + } + + $this->iDoClipping = true; + + if( $this->iDoClipping ) { + $oldimage = $this->img->CloneCanvasH(); + } + + if( !$_csim ) { + $this->axis->StrokeGrid($pos); + } + + // Stroke all plots for Y1 axis + for($i=0; $i < count($this->plots); ++$i) { + $this->plots[$i]->Stroke($this->img,$this->scale); + } + + + if( $this->iDoClipping ) { + // Clipping only supports graphs at 0 and 90 degrees + if( $this->img->a == 0 ) { + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->left_margin,$this->img->top_margin, + $this->img->left_margin,$this->img->top_margin, + $this->img->plotwidth+1,$this->img->plotheight+1); + } + elseif( $this->img->a == 90 ) { + $adj = round(($this->img->height - $this->img->width)/2); + $this->img->CopyCanvasH($oldimage,$this->img->img, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->bottom_margin-$adj,$this->img->left_margin+$adj, + $this->img->plotheight,$this->img->plotwidth); + } + $this->img->Destroy(); + $this->img->SetCanvasH($oldimage); + } + + if( !$_csim ) { + $this->axis->Stroke($pos); + $this->axis->StrokeAngleLabels($pos,$this->iType); + } + + if( !$_csim ) { + $this->StrokePlotBox(); + $this->footer->Stroke($this->img); + + // The titles and legends never gets rotated so make sure + // that the angle is 0 before stroking them + $aa = $this->img->SetAngle(0); + $this->StrokeTitles(); + } + + for($i=0; $i < count($this->plots) ; ++$i ) { + $this->plots[$i]->Legend($this); + } + + $this->legend->Stroke($this->img); + + if( !$_csim ) { + + $this->StrokeTexts(); + $this->img->SetAngle($aa); + + // Draw an outline around the image map + if(_JPG_DEBUG) + $this->DisplayClientSideaImageMapAreas(); + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } + } +} + + + +?> diff --git a/html/includes/jpgraph/src/jpgraph_radar.php b/html/includes/jpgraph/src/jpgraph_radar.php new file mode 100644 index 0000000000..9be10f47aa --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_radar.php @@ -0,0 +1,667 @@ +GetMinVal(); + $limit = $aScale->GetMaxVal(); + $nextMajor = 10*$start; + $step = $nextMajor / 10.0; + $count=1; + + $ticklen_maj=5; + $dx_maj=round(sin($aAxisAngle)*$ticklen_maj); + $dy_maj=round(cos($aAxisAngle)*$ticklen_maj); + $ticklen_min=3; + $dx_min=round(sin($aAxisAngle)*$ticklen_min); + $dy_min=round(cos($aAxisAngle)*$ticklen_min); + + $aMajPos=array(); + $aMajLabel=array(); + + if( $this->supress_first ) + $aMajLabel[]=""; + else + $aMajLabel[]=$start; + $yr=$aScale->RelTranslate($start); + $xt=round($yr*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($yr*sin($aAxisAngle)); + $aMajPos[]=$xt+2*$dx_maj; + $aMajPos[]=$yt-$aImg->GetFontheight()/2; + $grid[]=$xt; + $grid[]=$yt; + + $aImg->SetLineWeight($this->weight); + + for($y=$start; $y<=$limit; $y+=$step,++$count ) { + $yr=$aScale->RelTranslate($y); + $xt=round($yr*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($yr*sin($aAxisAngle)); + if( $count % 10 == 0 ) { + $grid[]=$xt; + $grid[]=$yt; + $aMajPos[]=$xt+2*$dx_maj; + $aMajPos[]=$yt-$aImg->GetFontheight()/2; + if( !$this->supress_tickmarks ) { + if( $this->majcolor!="" ) $aImg->PushColor($this->majcolor); + $aImg->Line($xt+$dx_maj,$yt+$dy_maj,$xt-$dx_maj,$yt-$dy_maj); + if( $this->majcolor!="" ) $aImg->PopColor(); + } + if( $this->label_formfunc != "" ) { + $f=$this->label_formfunc; + $l = call_user_func($f,$nextMajor); + } + else + $l = $nextMajor; + $aMajLabel[]=$l; + $nextMajor *= 10; + $step *= 10; + $count=1; + } + else + if( !$this->supress_minor_tickmarks ) { + if( $this->mincolor!="" ) $aImg->PushColor($this->mincolor); + $aImg->Line($xt+$dx_min,$yt+$dy_min,$xt-$dx_min,$yt-$dy_min); + if( $this->mincolor!="" ) $aImg->PopColor(); + } + } + } +} + +class RadarLinearTicks extends LinearTicks { +//--------------- +// CONSTRUCTOR + function RadarLinearTicks() { + // Empty + } + +//--------------- +// PUBLIC METHODS + + // TODO: Add argument grid + function Stroke(&$aImg,&$grid,$aPos,$aAxisAngle,&$aScale,&$aMajPos,&$aMajLabel) { + // Prepare to draw linear ticks + $maj_step_abs = abs($aScale->scale_factor*$this->major_step); + $min_step_abs = abs($aScale->scale_factor*$this->minor_step); + $nbrmaj = floor(($aScale->world_abs_size)/$maj_step_abs); + $nbrmin = floor(($aScale->world_abs_size)/$min_step_abs); + $skip = round($nbrmin/$nbrmaj); // Don't draw minor ontop of major + + // Draw major ticks + $ticklen2=$this->major_abs_size; + $dx=round(sin($aAxisAngle)*$ticklen2); + $dy=round(cos($aAxisAngle)*$ticklen2); + $label=$aScale->scale[0]+$this->major_step; + + $aImg->SetLineWeight($this->weight); + + for($i=1; $i<=$nbrmaj; ++$i) { + $xt=round($i*$maj_step_abs*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($i*$maj_step_abs*sin($aAxisAngle)); + + if( $this->label_formfunc != "" ) { + $f=$this->label_formfunc; + $l = call_user_func($f,$label); + } + else + $l = $label; + + $aMajLabel[]=$l; + $label += $this->major_step; + $grid[]=$xt; + $grid[]=$yt; + $aMajPos[($i-1)*2]=$xt+2*$dx; + $aMajPos[($i-1)*2+1]=$yt-$aImg->GetFontheight()/2; + if( !$this->supress_tickmarks ) { + if( $this->majcolor!="" ) $aImg->PushColor($this->majcolor); + $aImg->Line($xt+$dx,$yt+$dy,$xt-$dx,$yt-$dy); + if( $this->majcolor!="" ) $aImg->PopColor(); + } + } + + // Draw minor ticks + $ticklen2=$this->minor_abs_size; + $dx=round(sin($aAxisAngle)*$ticklen2); + $dy=round(cos($aAxisAngle)*$ticklen2); + if( !$this->supress_tickmarks && !$this->supress_minor_tickmarks) { + if( $this->mincolor!="" ) $aImg->PushColor($this->mincolor); + for($i=1; $i<=$nbrmin; ++$i) { + if( ($i % $skip) == 0 ) continue; + $xt=round($i*$min_step_abs*cos($aAxisAngle))+$aScale->scale_abs[0]; + $yt=$aPos-round($i*$min_step_abs*sin($aAxisAngle)); + $aImg->Line($xt+$dx,$yt+$dy,$xt-$dx,$yt-$dy); + } + if( $this->mincolor!="" ) $aImg->PopColor(); + } + } +} + + + +//=================================================== +// CLASS RadarAxis +// Description: Implements axis for the radar graph +//=================================================== +class RadarAxis extends Axis { + var $title_color="navy"; + var $title=null; +//--------------- +// CONSTRUCTOR + function RadarAxis(&$img,&$aScale,$color=array(0,0,0)) { + parent::Axis($img,$aScale,$color); + $this->len=$img->plotheight; + $this->title = new Text(); + $this->title->SetFont(FF_FONT1,FS_BOLD); + $this->color = array(0,0,0); + } +//--------------- +// PUBLIC METHODS + function SetTickLabels($l) { + $this->ticks_label = $l; + } + + + // Stroke the axis + // $pos = Vertical position of axis + // $aAxisAngle = Axis angle + // $grid = Returns an array with positions used to draw the grid + // $lf = Label flag, TRUE if the axis should have labels + function Stroke($pos,$aAxisAngle,&$grid,$title,$lf) { + $this->img->SetColor($this->color); + + // Determine end points for the axis + $x=round($this->scale->world_abs_size*cos($aAxisAngle)+$this->scale->scale_abs[0]); + $y=round($pos-$this->scale->world_abs_size*sin($aAxisAngle)); + + // Draw axis + $this->img->SetColor($this->color); + $this->img->SetLineWeight($this->weight); + if( !$this->hide ) + $this->img->Line($this->scale->scale_abs[0],$pos,$x,$y); + + $this->scale->ticks->Stroke($this->img,$grid,$pos,$aAxisAngle,$this->scale,$majpos,$majlabel); + + // Draw labels + if( $lf && !$this->hide ) { + $this->img->SetFont($this->font_family,$this->font_style,$this->font_size); + $this->img->SetTextAlign("left","top"); + $this->img->SetColor($this->label_color); + + // majpos contains (x,y) coordinates for labels + if( ! $this->hide_labels ) { + $n = floor(count($majpos)/2); + for($i=0; $i < $n; ++$i) { + if( $this->ticks_label != null && isset($this->ticks_label[$i]) ) + $this->img->StrokeText($majpos[$i*2],$majpos[$i*2+1],$this->ticks_label[$i]); + else + $this->img->StrokeText($majpos[$i*2],$majpos[$i*2+1],$majlabel[$i]); + } + } + } + $this->_StrokeAxisTitle($pos,$aAxisAngle,$title); + } +//--------------- +// PRIVATE METHODS + + function _StrokeAxisTitle($pos,$aAxisAngle,$title) { + $this->title->Set($title); + $marg=6+$this->title->margin; + $xt=round(($this->scale->world_abs_size+$marg)*cos($aAxisAngle)+$this->scale->scale_abs[0]); + $yt=round($pos-($this->scale->world_abs_size+$marg)*sin($aAxisAngle)); + + // Position the axis title. + // dx, dy is the offset from the top left corner of the bounding box that sorrounds the text + // that intersects with the extension of the corresponding axis. The code looks a little + // bit messy but this is really the only way of having a reasonable position of the + // axis titles. + if( $this->title->iWordwrap > 0 ) { + $title = wordwrap($title,$this->title->iWordwrap,"\n"); + } + + $h=$this->img->GetTextHeight($title)*1.2; + $w=$this->img->GetTextWidth($title)*1.2; + while( $aAxisAngle > 2*M_PI ) $aAxisAngle -= 2*M_PI; + + + // Around 3 a'clock + if( $aAxisAngle>=7*M_PI/4 || $aAxisAngle <= M_PI/4 ) $dx=-0.15; // Small trimming to make the dist to the axis more even + // Around 12 a'clock + if( $aAxisAngle>=M_PI/4 && $aAxisAngle <= 3*M_PI/4 ) $dx=($aAxisAngle-M_PI/4)*2/M_PI; + // Around 9 a'clock + if( $aAxisAngle>=3*M_PI/4 && $aAxisAngle <= 5*M_PI/4 ) $dx=1; + // Around 6 a'clock + if( $aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4 ) $dx=(1-($aAxisAngle-M_PI*5/4)*2/M_PI); + + + if( $aAxisAngle>=7*M_PI/4 ) $dy=(($aAxisAngle-M_PI)-3*M_PI/4)*2/M_PI; + if( $aAxisAngle<=M_PI/12 ) $dy=(0.5-$aAxisAngle*2/M_PI); + if( $aAxisAngle<=M_PI/4 && $aAxisAngle > M_PI/12) $dy=(1-$aAxisAngle*2/M_PI); + if( $aAxisAngle>=M_PI/4 && $aAxisAngle <= 3*M_PI/4 ) $dy=1; + if( $aAxisAngle>=3*M_PI/4 && $aAxisAngle <= 5*M_PI/4 ) $dy=(1-($aAxisAngle-3*M_PI/4)*2/M_PI); + if( $aAxisAngle>=5*M_PI/4 && $aAxisAngle <= 7*M_PI/4 ) $dy=0; + + if( !$this->hide ) { + $this->title->Stroke($this->img,$xt-$dx*$w,$yt-$dy*$h,$title); + } + } + + +} // Class + + +//=================================================== +// CLASS RadarGrid +// Description: Draws grid for the radar graph +//=================================================== +class RadarGrid extends Grid { +//------------ +// CONSTRUCTOR + function RadarGrid() { + } + +//---------------- +// PRIVATE METHODS + function Stroke(&$img,&$grid) { + if( !$this->show ) return; + $nbrticks = count($grid[0])/2; + $nbrpnts = count($grid); + $img->SetColor($this->grid_color); + $img->SetLineWeight($this->weight); + for($i=0; $i<$nbrticks; ++$i) { + for($j=0; $j<$nbrpnts; ++$j) { + $pnts[$j*2]=$grid[$j][$i*2]; + $pnts[$j*2+1]=$grid[$j][$i*2+1]; + } + for($k=0; $k<$nbrpnts; ++$k ){ + $l=($k+1)%$nbrpnts; + if( $this->type == "solid" ) + $img->Line($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1]); + elseif( $this->type == "dotted" ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],1,6); + elseif( $this->type == "dashed" ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],2,4); + elseif( $this->type == "longdashed" ) + $img->DashedLine($pnts[$k*2],$pnts[$k*2+1],$pnts[$l*2],$pnts[$l*2+1],8,6); + } + $pnts=array(); + } + } +} // Class + + +//=================================================== +// CLASS RadarPlot +// Description: Plot a radarplot +//=================================================== +class RadarPlot { + var $data=array(); + var $fill=false, $fill_color=array(200,170,180); + var $color=array(0,0,0); + var $legend=""; + var $weight=1; + var $linestyle='solid'; + var $mark=null; +//--------------- +// CONSTRUCTOR + function RadarPlot($data) { + $this->data = $data; + $this->mark = new PlotMark(); + } + +//--------------- +// PUBLIC METHODS + function Min() { + return Min($this->data); + } + + function Max() { + return Max($this->data); + } + + function SetLegend($legend) { + $this->legend=$legend; + } + + function SetLineStyle($aStyle) { + $this->linestyle=$aStyle; + } + + function SetLineWeight($w) { + $this->weight=$w; + } + + function SetFillColor($aColor) { + $this->fill_color = $aColor; + $this->fill = true; + } + + function SetFill($f=true) { + $this->fill = $f; + } + + function SetColor($aColor,$aFillColor=false) { + $this->color = $aColor; + if( $aFillColor ) { + $this->SetFillColor($aFillColor); + $this->fill = true; + } + } + + function GetCSIMareas() { + JpGraphError::RaiseL(18001); +//("Client side image maps not supported for RadarPlots."); + } + + function Stroke(&$img, $pos, &$scale, $startangle) { + $nbrpnts = count($this->data); + $astep=2*M_PI/$nbrpnts; + $a=$startangle; + + // Rotate each point to the correct axis-angle + // TODO: Update for LogScale + for($i=0; $i<$nbrpnts; ++$i) { + //$c=$this->data[$i]; + $cs=$scale->RelTranslate($this->data[$i]); + $x=round($cs*cos($a)+$scale->scale_abs[0]); + $y=round($pos-$cs*sin($a)); + /* + $c=log10($c); + $x=round(($c-$scale->scale[0])*$scale->scale_factor*cos($a)+$scale->scale_abs[0]); + $y=round($pos-($c-$scale->scale[0])*$scale->scale_factor*sin($a)); + */ + $pnts[$i*2]=$x; + $pnts[$i*2+1]=$y; + $a += $astep; + } + if( $this->fill ) { + $img->SetColor($this->fill_color); + $img->FilledPolygon($pnts); + } + $img->SetLineWeight($this->weight); + $img->SetColor($this->color); + $img->SetLineStyle($this->linestyle); + $pnts[]=$pnts[0]; + $pnts[]=$pnts[1]; + $img->Polygon($pnts); + $img->SetLineStyle('solid'); // Reset line style to default + // Add plotmarks on top + if( $this->mark->show ) { + for($i=0; $i < $nbrpnts; ++$i) { + $this->mark->Stroke($img,$pnts[$i*2],$pnts[$i*2+1]); + } + } + + } + +//--------------- +// PRIVATE METHODS + function GetCount() { + return count($this->data); + } + + function Legend(&$graph) { + if( $this->legend=="" ) return; + if( $this->fill ) + $graph->legend->Add($this->legend,$this->fill_color,$this->mark); + else + $graph->legend->Add($this->legend,$this->color,$this->mark); + } + +} // Class + +//=================================================== +// CLASS RadarGraph +// Description: Main container for a radar graph +//=================================================== +class RadarGraph extends Graph { + var $posx; + var $posy; + var $len; + var $plots=null, $axis_title=null; + var $grid,$axis=null; +//--------------- +// CONSTRUCTOR + function RadarGraph($width=300,$height=200,$cachedName="",$timeout=0,$inline=1) { + $this->Graph($width,$height,$cachedName,$timeout,$inline); + $this->posx=$width/2; + $this->posy=$height/2; + $this->len=min($width,$height)*0.35; + $this->SetColor(array(255,255,255)); + $this->SetTickDensity(TICKD_NORMAL); + $this->SetScale("lin"); + $this->SetGridDepth(DEPTH_FRONT); + + } + +//--------------- +// PUBLIC METHODS + function SupressTickMarks($f=true) { + if( ERR_DEPRECATED ) + JpGraphError::RaiseL(18002); +//('RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.'); + $this->axis->scale->ticks->SupressTickMarks($f); + } + + function HideTickMarks($aFlag=true) { + $this->axis->scale->ticks->SupressTickMarks($aFlag); + } + + function ShowMinorTickmarks($aFlag=true) { + $this->yscale->ticks->SupressMinorTickMarks(!$aFlag); + } + + function SetScale($axtype,$ymin=1,$ymax=1) { + if( $axtype != "lin" && $axtype != "log" ) { + JpGraphError::RaiseL(18003,$axtype); +//("Illegal scale for radarplot ($axtype). Must be \"lin\" or \"log\""); + } + if( $axtype=="lin" ) { + $this->yscale = & new LinearScale($ymin,$ymax); + $this->yscale->ticks = & new RadarLinearTicks(); + $this->yscale->ticks->SupressMinorTickMarks(); + } + elseif( $axtype=="log" ) { + $this->yscale = & new LogScale($ymin,$ymax); + $this->yscale->ticks = & new RadarLogTicks(); + } + + $this->axis = & new RadarAxis($this->img,$this->yscale); + $this->grid = & new RadarGrid(); + } + + function SetSize($aSize) { + if( $aSize < 0.1 || $aSize>1 ) + JpGraphError::RaiseL(18004,$aSize); +//("Radar Plot size must be between 0.1 and 1. (Your value=$s)"); + $this->len=min($this->img->width,$this->img->height)*$aSize/2; + } + + function SetPlotSize($aSize) { + $this->SetSize($aSize); + } + + function SetTickDensity($densy=TICKD_NORMAL) { + $this->ytick_factor=25; + switch( $densy ) { + case TICKD_DENSE: + $this->ytick_factor=12; + break; + case TICKD_NORMAL: + $this->ytick_factor=25; + break; + case TICKD_SPARSE: + $this->ytick_factor=40; + break; + case TICKD_VERYSPARSE: + $this->ytick_factor=70; + break; + default: + JpGraphError::RaiseL(18005,$densy); +//("RadarPlot Unsupported Tick density: $densy"); + } + } + + function SetPos($px,$py=0.5) { + $this->SetCenter($px,$py); + } + + function SetCenter($px,$py=0.5) { + assert($px > 0 && $py > 0 ); + $this->posx=$this->img->width*$px; + $this->posy=$this->img->height*$py; + } + + function SetColor($c) { + $this->SetMarginColor($c); + } + + function SetTitles($title) { + $this->axis_title = $title; + } + + function Add(&$splot) { + $this->plots[]=$splot; + } + + function GetPlotsYMinMax() { + $min=$this->plots[0]->Min(); + $max=$this->plots[0]->Max(); + foreach( $this->plots as $p ) { + $max=max($max,$p->Max()); + $min=min($min,$p->Min()); + } + if( $min < 0 ) + JpGraphError::RaiseL(18006,$min); +//("Minimum data $min (Radar plots should only be used when all data points > 0)"); + return array($min,$max); + } + + // Stroke the Radar graph + function Stroke($aStrokeFileName="") { + $n = count($this->plots); + // Set Y-scale + if( !$this->yscale->IsSpecified() && count($this->plots)>0 ) { + list($min,$max) = $this->GetPlotsYMinMax(); + $this->yscale->AutoScale($this->img,0,$max,$this->len/$this->ytick_factor); + } + elseif( $this->yscale->IsSpecified() && + ( $this->yscale->auto_ticks || !$this->yscale->ticks->IsSpecified()) ) { + // The tick calculation will use the user suplied min/max values to determine + // the ticks. If auto_ticks is false the exact user specifed min and max + // values will be used for the scale. + // If auto_ticks is true then the scale might be slightly adjusted + // so that the min and max values falls on an even major step. + $min = $this->yscale->scale[0]; + $max = $this->yscale->scale[1]; + $this->yscale->AutoScale($this->img,$min,$max, + $this->len/$this->ytick_factor, + $this->yscale->auto_ticks); + } + + // Set start position end length of scale (in absolute pixels) + $this->yscale->SetConstants($this->posx,$this->len); + + // We need as many axis as there are data points + $nbrpnts=$this->plots[0]->GetCount(); + + // If we have no titles just number the axis 1,2,3,... + if( $this->axis_title==null ) { + for($i=0; $i < $nbrpnts; ++$i ) + $this->axis_title[$i] = $i+1; + } + elseif(count($this->axis_title)<$nbrpnts) + JpGraphError::RaiseL(18007); +//("Number of titles does not match number of points in plot."); + for($i=0; $i < $n; ++$i ) + if( $nbrpnts != $this->plots[$i]->GetCount() ) + JpGraphError::RaiseL(18008); +//("Each radar plot must have the same number of data points."); + + if( $this->background_image != "" ) { + $this->StrokeFrameBackground(); + } + else { + $this->StrokeFrame(); + } + $astep=2*M_PI/$nbrpnts; + + // Prepare legends + for($i=0; $i < $n; ++$i) + $this->plots[$i]->Legend($this); + $this->legend->Stroke($this->img); + $this->footer->Stroke($this->img); + + if( $this->grid_depth == DEPTH_BACK ) { + // Draw axis and grid + for( $i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep ) { + $this->axis->Stroke($this->posy,$a,$grid[$i],$this->axis_title[$i],$i==0); + } + } + + // Plot points + $a=M_PI/2; + for($i=0; $i < $n; ++$i ) + $this->plots[$i]->Stroke($this->img, $this->posy, $this->yscale, $a); + + if( $this->grid_depth != DEPTH_BACK ) { + // Draw axis and grid + for( $i=0,$a=M_PI/2; $i < $nbrpnts; ++$i, $a += $astep ) { + $this->axis->Stroke($this->posy,$a,$grid[$i],$this->axis_title[$i],$i==0); + } + } + $this->grid->Stroke($this->img,$grid); + $this->StrokeTitles(); + + // Stroke texts + if( $this->texts != null ) { + foreach( $this->texts as $t) + $t->Stroke($this->img); + } + + // Should we do any final image transformation + if( $this->iImgTrans ) { + if( !class_exists('ImgTrans') ) { + require_once('jpgraph_imgtrans.php'); + } + + $tform = new ImgTrans($this->img->img); + $this->img->img = $tform->Skew3D($this->iImgTransHorizon,$this->iImgTransSkewDist, + $this->iImgTransDirection,$this->iImgTransHighQ, + $this->iImgTransMinSize,$this->iImgTransFillColor, + $this->iImgTransBorder); + } + + // If the filename is given as the special "__handle" + // then the image handler is returned and the image is NOT + // streamed back + if( $aStrokeFileName == _IMG_HANDLER ) { + return $this->img->img; + } + else { + // Finally stream the generated picture + $this->cache->PutAndStream($this->img,$this->cache_name,$this->inline, + $aStrokeFileName); + } + } +} // Class + +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_regstat.php b/html/includes/jpgraph/src/jpgraph_regstat.php new file mode 100644 index 0000000000..8a46e19ced --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_regstat.php @@ -0,0 +1,202 @@ +y2 = array(); + $this->xdata = $xdata; + $this->ydata = $ydata; + + $n = count($ydata); + $this->n = $n; + if( $this->n !== count($xdata) ) { + JpGraphError::RaiseL(19001); +//('Spline: Number of X and Y coordinates must be the same'); + } + + // Natural spline 2:derivate == 0 at endpoints + $this->y2[0] = 0.0; + $this->y2[$n-1] = 0.0; + $delta[0] = 0.0; + + // Calculate 2:nd derivate + for($i=1; $i < $n-1; ++$i) { + $d = ($xdata[$i+1]-$xdata[$i-1]); + if( $d == 0 ) { + JpGraphError::RaiseL(19002); +//('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.'); + } + $s = ($xdata[$i]-$xdata[$i-1])/$d; + $p = $s*$this->y2[$i-1]+2.0; + $this->y2[$i] = ($s-1.0)/$p; + $delta[$i] = ($ydata[$i+1]-$ydata[$i])/($xdata[$i+1]-$xdata[$i]) - + ($ydata[$i]-$ydata[$i-1])/($xdata[$i]-$xdata[$i-1]); + $delta[$i] = (6.0*$delta[$i]/($xdata[$i+1]-$xdata[$i-1])-$s*$delta[$i-1])/$p; + } + + // Backward substitution + for( $j=$n-2; $j >= 0; --$j ) { + $this->y2[$j] = $this->y2[$j]*$this->y2[$j+1] + $delta[$j]; + } + } + + // Return the two new data vectors + function Get($num=50) { + $n = $this->n ; + $step = ($this->xdata[$n-1]-$this->xdata[0]) / ($num-1); + $xnew=array(); + $ynew=array(); + $xnew[0] = $this->xdata[0]; + $ynew[0] = $this->ydata[0]; + for( $j=1; $j < $num; ++$j ) { + $xnew[$j] = $xnew[0]+$j*$step; + $ynew[$j] = $this->Interpolate($xnew[$j]); + } + return array($xnew,$ynew); + } + + // Return a single interpolated Y-value from an x value + function Interpolate($xpoint) { + + $max = $this->n-1; + $min = 0; + + // Binary search to find interval + while( $max-$min > 1 ) { + $k = ($max+$min) / 2; + if( $this->xdata[$k] > $xpoint ) + $max=$k; + else + $min=$k; + } + + // Each interval is interpolated by a 3:degree polynom function + $h = $this->xdata[$max]-$this->xdata[$min]; + + if( $h == 0 ) { + JpGraphError::RaiseL(19002); +//('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.'); + } + + + $a = ($this->xdata[$max]-$xpoint)/$h; + $b = ($xpoint-$this->xdata[$min])/$h; + return $a*$this->ydata[$min]+$b*$this->ydata[$max]+ + (($a*$a*$a-$a)*$this->y2[$min]+($b*$b*$b-$b)*$this->y2[$max])*($h*$h)/6.0; + } +} + +//------------------------------------------------------------------------ +// CLASS Bezier +// Create a new data array from a number of control points +//------------------------------------------------------------------------ +class Bezier { +/** + * @author Thomas Despoix, openXtrem company + * @license released under QPL + * @abstract Bezier interoplated point generation, + * computed from control points data sets, based on Paul Bourke algorithm : + * http://astronomy.swin.edu.au/~pbourke/curves/bezier/ + */ + var $datax = array(); + var $datay = array(); + var $n=0; + + function Bezier($datax, $datay, $attraction_factor = 1) { + // Adding control point multiple time will raise their attraction power over the curve + $this->n = count($datax); + if( $this->n !== count($datay) ) { + JpGraphError::RaiseL(19003); +//('Bezier: Number of X and Y coordinates must be the same'); + } + $idx=0; + foreach($datax as $datumx) { + for ($i = 0; $i < $attraction_factor; $i++) { + $this->datax[$idx++] = $datumx; + } + } + $idx=0; + foreach($datay as $datumy) { + for ($i = 0; $i < $attraction_factor; $i++) { + $this->datay[$idx++] = $datumy; + } + } + $this->n *= $attraction_factor; + } + + function Get($steps) { + $datax = array(); + $datay = array(); + for ($i = 0; $i < $steps; $i++) { + list($datumx, $datumy) = $this->GetPoint((double) $i / (double) $steps); + $datax[] = $datumx; + $datay[] = $datumy; + } + + $datax[] = end($this->datax); + $datay[] = end($this->datay); + + return array($datax, $datay); + } + + function GetPoint($mu) { + $n = $this->n - 1; + $k = 0; + $kn = 0; + $nn = 0; + $nkn = 0; + $blend = 0.0; + $newx = 0.0; + $newy = 0.0; + + $muk = 1.0; + $munk = (double) pow(1-$mu,(double) $n); + + for ($k = 0; $k <= $n; $k++) { + $nn = $n; + $kn = $k; + $nkn = $n - $k; + $blend = $muk * $munk; + $muk *= $mu; + $munk /= (1-$mu); + while ($nn >= 1) { + $blend *= $nn; + $nn--; + if ($kn > 1) { + $blend /= (double) $kn; + $kn--; + } + if ($nkn > 1) { + $blend /= (double) $nkn; + $nkn--; + } + } + $newx += $this->datax[$k] * $blend; + $newy += $this->datay[$k] * $blend; + } + + return array($newx, $newy); + } +} + +// EOF +?> diff --git a/html/includes/jpgraph/src/jpgraph_scatter.php b/html/includes/jpgraph/src/jpgraph_scatter.php new file mode 100644 index 0000000000..9ad37472a9 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_scatter.php @@ -0,0 +1,228 @@ +iSize = $aSize; + $this->iArrowSize = $aArrowSize; + } + + function SetColor($aColor) { + $this->iColor = $aColor; + } + + function Stroke(&$aImg,$x,$y,$a) { + // First rotate the center coordinates + list($x,$y) = $aImg->Rotate($x,$y); + + $old_origin = $aImg->SetCenter($x,$y); + $old_a = $aImg->a; + $aImg->SetAngle(-$a+$old_a); + + $dx = round($this->iSize/2); + $c = array($x-$dx,$y,$x+$dx,$y); + $x += $dx; + + list($dx,$dy) = $this->isizespec[$this->iArrowSize]; + $ca = array($x,$y,$x-$dx,$y-$dy,$x-$dx,$y+$dy,$x,$y); + + $aImg->SetColor($this->iColor); + $aImg->Polygon($c); + $aImg->FilledPolygon($ca); + + $aImg->SetCenter($old_origin[0],$old_origin[1]); + $aImg->SetAngle($old_a); + } +} + +//=================================================== +// CLASS FieldPlot +// Description: Render a field plot +//=================================================== +class FieldPlot extends Plot { + var $iAngles; + var $iCallback=''; + function FieldPlot($datay,$datax,$angles) { + if( (count($datax) != count($datay)) ) + JpGraphError::RaiseL(20001);//("Fieldplots must have equal number of X and Y points."); + if( (count($datax) != count($angles)) ) + JpGraphError::RaiseL(20002);//("Fieldplots must have an angle specified for each X and Y points."); + + $this->iAngles = $angles; + + $this->Plot($datay,$datax); + $this->value->SetAlign('center','center'); + $this->value->SetMargin(15); + + $this->arrow = new FieldArrow(); + } + + function SetCallback($aFunc) { + $this->iCallback = $aFunc; + } + + function Stroke(&$img,&$xscale,&$yscale) { + + // Remeber base color and size + $bc = $this->arrow->iColor; + $bs = $this->arrow->iSize; + $bas = $this->arrow->iArrowSize; + + for( $i=0; $i<$this->numpoints; ++$i ) { + // Skip null values + if( $this->coords[0][$i]==="" ) + continue; + + $f = $this->iCallback; + if( $f != "" ) { + list($cc,$cs,$cas) = call_user_func($f,$this->coords[1][$i],$this->coords[0][$i],$this->iAngles[$i]); + // Fall back on global data if the callback isn't set + if( $cc == "" ) $cc = $bc; + if( $cs == "" ) $cs = $bs; + if( $cas == "" ) $cas = $bas; + $this->arrow->SetColor($cc); + $this->arrow->SetSize($cs,$cas); + } + + $xt = $xscale->Translate($this->coords[1][$i]); + $yt = $yscale->Translate($this->coords[0][$i]); + + $this->arrow->Stroke($img,$xt,$yt,$this->iAngles[$i]); + $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); + } + } + + // Framework function + function Legend(&$aGraph) { + if( $this->legend != "" ) { + $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } +} + +//=================================================== +// CLASS ScatterPlot +// Description: Render X and Y plots +//=================================================== +class ScatterPlot extends Plot { + var $impuls = false; + var $linkpoints = false, $linkpointweight=1, $linkpointcolor="black"; +//--------------- +// CONSTRUCTOR + function ScatterPlot($datay,$datax=false) { + if( (count($datax) != count($datay)) && is_array($datax)) + JpGraphError::RaiseL(20003);//("Scatterplot must have equal number of X and Y points."); + $this->Plot($datay,$datax); + $this->mark = new PlotMark(); + $this->mark->SetType(MARK_SQUARE); + $this->mark->SetColor($this->color); + $this->value->SetAlign('center','center'); + $this->value->SetMargin(0); + } + +//--------------- +// PUBLIC METHODS + function SetImpuls($f=true) { + $this->impuls = $f; + } + + // Combine the scatter plot points with a line + function SetLinkPoints($aFlag=true,$aColor="black",$aWeight=1) { + $this->linkpoints=$aFlag; + $this->linkpointcolor=$aColor; + $this->linkpointweight=$aWeight; + } + + function Stroke(&$img,&$xscale,&$yscale) { + + $ymin=$yscale->scale_abs[0]; + if( $yscale->scale[0] < 0 ) + $yzero=$yscale->Translate(0); + else + $yzero=$yscale->scale_abs[0]; + + $this->csimareas = ''; + for( $i=0; $i < $this->numpoints; ++$i ) { + + // Skip null values + if( $this->coords[0][$i]==="" || $this->coords[0][$i]==='-' || $this->coords[0][$i]==='x') + continue; + + if( isset($this->coords[1]) ) + $xt = $xscale->Translate($this->coords[1][$i]); + else + $xt = $xscale->Translate($i); + $yt = $yscale->Translate($this->coords[0][$i]); + + + if( $this->linkpoints && isset($yt_old) ) { + $img->SetColor($this->linkpointcolor); + $img->SetLineWeight($this->linkpointweight); + $img->Line($xt_old,$yt_old,$xt,$yt); + } + + if( $this->impuls ) { + $img->SetColor($this->color); + $img->SetLineWeight($this->weight); + $img->Line($xt,$yzero,$xt,$yt); + } + + if( !empty($this->csimtargets[$i]) ) { + if( !empty($this->csimwintargets[$i]) ) { + $this->mark->SetCSIMTarget($this->csimtargets[$i],$this->csimwintargets[$i]); + } + else { + $this->mark->SetCSIMTarget($this->csimtargets[$i]); + } + $this->mark->SetCSIMAlt($this->csimalts[$i]); + } + + if( isset($this->coords[1]) ) { + $this->mark->SetCSIMAltVal($this->coords[0][$i],$this->coords[1][$i]); + } + else { + $this->mark->SetCSIMAltVal($this->coords[0][$i],$i); + } + + $this->mark->Stroke($img,$xt,$yt); + + $this->csimareas .= $this->mark->GetCSIMAreas(); + $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); + + $xt_old = $xt; + $yt_old = $yt; + } + } + + // Framework function + function Legend(&$aGraph) { + if( $this->legend != "" ) { + $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, + $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); + } + } +} // Class +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_stock.php b/html/includes/jpgraph/src/jpgraph_stock.php new file mode 100644 index 0000000000..77e1c4648b --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_stock.php @@ -0,0 +1,182 @@ +iTupleSize ) { + JpGraphError::RaiseL(21001,$this->iTupleSize);//('Data values for Stock charts must contain an even multiple of '.$this->iTupleSize.' data points.'); + } + $this->Plot($datay,$datax); + $this->numpoints /= $this->iTupleSize; + } +//--------------- +// PUBLIC METHODS + + function SetColor($aColor,$aColor1='white',$aColor2='darkred',$aColor3='darkred') { + $this->color = $aColor; + $this->iStockColor1 = $aColor1; + $this->iStockColor2 = $aColor2; + $this->iStockColor3 = $aColor3; + } + + function SetWidth($aWidth) { + // Make sure it's odd + $this->iWidth = 2*floor($aWidth/2)+1; + } + + function HideEndLines($aHide=true) { + $this->iEndLines = !$aHide; + } + + // Gets called before any axis are stroked + function PreStrokeAdjust(&$graph) { + if( $this->center ) { + $a=0.5; $b=0.5; + $this->numpoints++; + } else { + $a=0; $b=0; + } + $graph->xaxis->scale->ticks->SetXLabelOffset($a); + $graph->SetTextScaleOff($b); + } + + // Stroke stock plot + function Stroke(&$img,$xscale,$yscale) { + $n=$this->numpoints; + if( $this->center ) $n--; + if( isset($this->coords[1]) ) { + if( count($this->coords[1])!=$n ) + JpGraphError::RaiseL(2003,count($this->coords[1]),$n); +//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); + else + $exist_x = true; + } + else + $exist_x = false; + + if( $exist_x ) + $xs=$this->coords[1][0]; + else + $xs=0; + + $ts = $this->iTupleSize; + $this->csimareas = ''; + for( $i=0; $i<$n; ++$i) { + + //If value is NULL, then don't draw a bar at all + if ($this->coords[0][$i] === null) continue; + + if( $exist_x ) $x=$this->coords[1][$i]; + else $x=$i; + $xt = $xscale->Translate($x); + + $neg = $this->coords[0][$i*$ts] > $this->coords[0][$i*$ts+1] ; + $yopen = $yscale->Translate($this->coords[0][$i*$ts]); + $yclose = $yscale->Translate($this->coords[0][$i*$ts+1]); + $ymin = $yscale->Translate($this->coords[0][$i*$ts+2]); + $ymax = $yscale->Translate($this->coords[0][$i*$ts+3]); + + $dx = floor($this->iWidth/2); + $xl = $xt - $dx; + $xr = $xt + $dx; + + if( $neg ) + $img->SetColor($this->iStockColor3); + else + $img->SetColor($this->iStockColor1); + $img->FilledRectangle($xl,$yopen,$xr,$yclose); + $img->SetLineWeight($this->weight); + if( $neg ) + $img->SetColor($this->iStockColor2); + else + $img->SetColor($this->color); + + $img->Rectangle($xl,$yopen,$xr,$yclose); + + if( $yopen < $yclose ) { + $ytop = $yopen ; + $ybottom = $yclose ; + } + else { + $ytop = $yclose ; + $ybottom = $yopen ; + } + $img->SetColor($this->color); + $img->Line($xt,$ytop,$xt,$ymax); + $img->Line($xt,$ybottom,$xt,$ymin); + + if( $this->iEndLines ) { + $img->Line($xl,$ymax,$xr,$ymax); + $img->Line($xl,$ymin,$xr,$ymin); + } + + // A chance for subclasses to add things to the bar + // for data point i + $this->ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg); + + // Setup image maps + if( !empty($this->csimtargets[$i]) ) { + $this->csimareas.= 'csimareas .= ' href="'.$this->csimtargets[$i].'"'; + if( !empty($this->csimalts[$i]) ) { + $sval=$this->csimalts[$i]; + $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; + } + $this->csimareas.= " />\n"; + } + } + return true; + } + + // A hook for subclasses to modify the plot + function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) {} + +} // Class + +//=================================================== +// CLASS BoxPlot +//=================================================== +class BoxPlot extends StockPlot { + var $iPColor='black',$iNColor='white'; + function BoxPlot($datay,$datax=false) { + $this->iTupleSize=5; + parent::StockPlot($datay,$datax); + } + + function SetMedianColor($aPos,$aNeg) { + $this->iPColor = $aPos; + $this->iNColor = $aNeg; + } + + function ModBox(&$img,$xscale,$yscale,$i,$xl,$xr,$neg) { + if( $neg ) + $img->SetColor($this->iNColor); + else + $img->SetColor($this->iPColor); + + $y = $yscale->Translate($this->coords[0][$i*5+4]); + $img->Line($xl,$y,$xr,$y); + } +} + +/* EOF */ +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/jpgraph_ttf.inc.php b/html/includes/jpgraph/src/jpgraph_ttf.inc.php new file mode 100644 index 0000000000..02e2a27ee2 --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_ttf.inc.php @@ -0,0 +1,379 @@ +g2312 == null ) { + include_once 'jpgraph_gb2312.php' ; + $this->g2312 = new GB2312toUTF8(); + } + return $this->g2312->gb2utf8($aTxt); + } + elseif( $aFF === FF_CHINESE ) { + if( !function_exists('iconv') ) { + JpGraphError::RaiseL(25006); +//('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).'); + } + return iconv('BIG5','UTF-8',$aTxt); + } + elseif( ASSUME_EUCJP_ENCODING && + ($aFF == FF_MINCHO || $aFF == FF_GOTHIC || $aFF == FF_PMINCHO || $aFF == FF_PGOTHIC) ) { + if( !function_exists('mb_convert_encoding') ) { + JpGraphError::RaiseL(25127); + } + return mb_convert_encoding($aTxt, 'UTF-8','EUC-JP'); + } + elseif( $aFF == FF_DAVID || $aFF == FF_MIRIAM || $aFF == FF_AHRON ) { + return $this->heb_iso2uni($aTxt); + } + else + return $aTxt; + } + + // Translate iso encoding to unicode + function iso2uni ($isoline){ + $uniline=''; + for ($i=0; $i < strlen($isoline); $i++){ + $thischar = substr($isoline,$i,1); + $charcode = ord($thischar); + $uniline .= ($charcode>175) ? "&#" . (1040+($charcode-176)). ";" : $thischar; + } + return $uniline; + } + + // Translate greek iso encoding to unicode + function gr_iso2uni ($isoline) { + $uniline=''; + for ($i=0; $i < strlen($isoline); $i++) { + $thischar=substr($isoline,$i,1); + $charcode=ord($thischar); + $uniline.=($charcode>179 && $charcode!=183 && $charcode!=187 && $charcode!=189) ? "&#" . (900+($charcode-180)). ";" : $thischar; + } + return $uniline; + } + + // Translate greek win encoding to unicode + function gr_win2uni ($winline) { + $uniline=''; + $n = strlen($winline); + for ($i=0; $i < $n; $i++) { + $thischar=substr($winline,$i,1); + $charcode=ord($thischar); + if ($charcode==161 || $charcode==162) { + $uniline.="&#" . (740+$charcode). ";"; + } + else { + $uniline.=(($charcode>183 && $charcode!=187 && $charcode!=189) || $charcode==180) ? "&#" . (900+($charcode-180)). ";" : $thischar; + } + } + return $uniline; + } + + function heb_iso2uni($isoline) { + $isoline = hebrev($isoline); + $o = ''; + + $n = strlen($isoline); + for($i=0; $i < $n; $i++) { + $c=ord( substr($isoline,$i,1) ); + $o .= ($c > 223) && ($c < 251) ? '&#'.(1264+$c).';' : chr($c); + } + return utf8_encode($o); + } +} + +//================================================================= +// CLASS TTF +// Description: Handle TTF font names and loading of font files +//================================================================= +class TTF { + var $font_files,$style_names; + +//--------------- +// CONSTRUCTOR + function TTF() { + + // String names for font styles to be used in error messages + $this->style_names=array(FS_NORMAL =>'normal', + FS_BOLD =>'bold', + FS_ITALIC =>'italic', + FS_BOLDITALIC =>'bolditalic'); + + // File names for available fonts + $this->font_files=array( + FF_COURIER => array(FS_NORMAL =>'cour.ttf', + FS_BOLD =>'courbd.ttf', + FS_ITALIC =>'couri.ttf', + FS_BOLDITALIC =>'courbi.ttf' ), + FF_GEORGIA => array(FS_NORMAL =>'georgia.ttf', + FS_BOLD =>'georgiab.ttf', + FS_ITALIC =>'georgiai.ttf', + FS_BOLDITALIC =>'' ), + FF_TREBUCHE =>array(FS_NORMAL =>'trebuc.ttf', + FS_BOLD =>'trebucbd.ttf', + FS_ITALIC =>'trebucit.ttf', + FS_BOLDITALIC =>'trebucbi.ttf' ), + FF_VERDANA => array(FS_NORMAL =>'verdana.ttf', + FS_BOLD =>'verdanab.ttf', + FS_ITALIC =>'verdanai.ttf', + FS_BOLDITALIC =>'' ), + FF_TIMES => array(FS_NORMAL =>'times.ttf', + FS_BOLD =>'timesbd.ttf', + FS_ITALIC =>'timesi.ttf', + FS_BOLDITALIC =>'timesbi.ttf' ), + FF_COMIC => array(FS_NORMAL =>'comic.ttf', + FS_BOLD =>'comicbd.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_ARIAL => array(FS_NORMAL =>'arial.ttf', + FS_BOLD =>'arialbd.ttf', + FS_ITALIC =>'ariali.ttf', + FS_BOLDITALIC =>'arialbi.ttf' ) , + FF_VERA => array(FS_NORMAL =>'Vera.ttf', + FS_BOLD =>'VeraBd.ttf', + FS_ITALIC =>'VeraIt.ttf', + FS_BOLDITALIC =>'VeraBI.ttf' ), + FF_VERAMONO => array(FS_NORMAL =>'VeraMono.ttf', + FS_BOLD =>'VeraMoBd.ttf', + FS_ITALIC =>'VeraMoIt.ttf', + FS_BOLDITALIC =>'VeraMoBI.ttf' ), + FF_VERASERIF=> array(FS_NORMAL =>'VeraSe.ttf', + FS_BOLD =>'VeraSeBd.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ) , + + /* Chinese fonts */ + FF_SIMSUN => array(FS_NORMAL =>'simsun.ttc', + FS_BOLD =>'simhei.ttf', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_CHINESE => array(FS_NORMAL =>CHINESE_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Japanese fonts */ + FF_MINCHO => array(FS_NORMAL =>MINCHO_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_PMINCHO => array(FS_NORMAL =>PMINCHO_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_GOTHIC => array(FS_NORMAL =>GOTHIC_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_PGOTHIC => array(FS_NORMAL =>PGOTHIC_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_MINCHO => array(FS_NORMAL =>PMINCHO_TTF_FONT, + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Hebrew fonts */ + FF_DAVID => array(FS_NORMAL =>'DAVIDNEW.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_MIRIAM => array(FS_NORMAL =>'MRIAMY.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + FF_AHRON => array(FS_NORMAL =>'ahronbd.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + + /* Dejavu fonts */ + FF_DV_SANSSERIF => array(FS_NORMAL =>'DejaVuSans.ttf', + FS_BOLD =>'DejaVuSans-Bold.ttf', + FS_ITALIC =>'DejaVuSans-Oblique.ttf', + FS_BOLDITALIC =>'DejaVuSans-BoldOblique.ttf' ), + + FF_DV_SANSSERIFMONO => array(FS_NORMAL =>'DejaVuSansMono.ttf', + FS_BOLD =>'DejaVuSansMono-Bold.ttf', + FS_ITALIC =>'DejaVuSansMono-Oblique.ttf', + FS_BOLDITALIC =>'DejaVuSansMono-BoldOblique.ttf' ), + + FF_DV_SANSSERIFCOND => array(FS_NORMAL =>'DejaVuSansCondensed.ttf', + FS_BOLD =>'DejaVuSansCondensed-Bold.ttf', + FS_ITALIC =>'DejaVuSansCondensed-Oblique.ttf', + FS_BOLDITALIC =>'DejaVuSansCondensed-BoldOblique.ttf' ), + + FF_DV_SERIF => array(FS_NORMAL =>'DejaVuSerif.ttf', + FS_BOLD =>'DejaVuSerif-Bold.ttf', + FS_ITALIC =>'DejaVuSerif-Italic.ttf', + FS_BOLDITALIC =>'DejaVuSerif-BoldItalic.ttf' ), + + FF_DV_SERIFCOND => array(FS_NORMAL =>'DejaVuSerifCondensed.ttf', + FS_BOLD =>'DejaVuSerifCondensed-Bold.ttf', + FS_ITALIC =>'DejaVuSerifCondensed-Italic.ttf', + FS_BOLDITALIC =>'DejaVuSerifCondensed-BoldItalic.ttf' ), + + /* Misc fonts */ + FF_DIGITAL => array(FS_NORMAL =>'DIGIRU__.TTF', + FS_BOLD =>'Digirtu_.ttf', + FS_ITALIC =>'Digir___.ttf', + FS_BOLDITALIC =>'DIGIRT__.TTF' ), + FF_SPEEDO => array(FS_NORMAL =>'Speedo.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_COMPUTER => array(FS_NORMAL =>'COMPUTER.TTF', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + FF_CALCULATOR =>array(FS_NORMAL =>'Triad_xs.ttf', + FS_BOLD =>'', + FS_ITALIC =>'', + FS_BOLDITALIC =>'' ), + ); + } + +//--------------- +// PUBLIC METHODS + // Create the TTF file from the font specification + function File($family,$style=FS_NORMAL) { + + if( $family == FF_HANDWRT || $family==FF_BOOK ) { + JpGraphError::RaiseL(25045);//('Font families FF_HANDWRT and FF_BOOK are no longer available due to copyright problem with these fonts. Fonts can no longer be distributed with JpGraph. Please download fonts from http://corefonts.sourceforge.net/'); + } + + $fam = @$this->font_files[$family]; + if( !$fam ) { + JpGraphError::RaiseL(25046,$family);//("Specified TTF font family (id=$family) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/"); + } + $f = @$fam[$style]; + + if( $f==='' ) + JpGraphError::RaiseL(25047,$this->style_names[$style],$this->font_files[$family][FS_NORMAL]);//('Style "'.$this->style_names[$style].'" is not available for font family '.$this->font_files[$family][FS_NORMAL].'.'); + if( !$f ) { + JpGraphError::RaiseL(25048,$fam);//("Unknown font style specification [$fam]."); + } + + if ($family >= FF_MINCHO && $family <= FF_PGOTHIC) { + $f = MBTTF_DIR.$f; + } else { + $f = TTF_DIR.$f; + } + + if( file_exists($f) === false || is_readable($f) === false ) { + JpGraphError::RaiseL(25049,$f);//("Font file \"$f\" is not readable or does not exist."); + } + return $f; + } +} // Class + +?> diff --git a/html/includes/jpgraph/src/jpgraph_utils.inc.php b/html/includes/jpgraph/src/jpgraph_utils.inc.php new file mode 100644 index 0000000000..8f301990dd --- /dev/null +++ b/html/includes/jpgraph/src/jpgraph_utils.inc.php @@ -0,0 +1,523 @@ +iFunc = $aFunc; + $this->iXFunc = $aXFunc; + } + + function E($aXMin,$aXMax,$aSteps=50) { + $this->iMin = $aXMin; + $this->iMax = $aXMax; + $this->iStepSize = ($aXMax-$aXMin)/$aSteps; + + if( $this->iXFunc != '' ) + $t = 'for($i='.$aXMin.'; $i<='.$aXMax.'; $i += '.$this->iStepSize.') {$ya[]='.$this->iFunc.';$xa[]='.$this->iXFunc.';}'; + elseif( $this->iFunc != '' ) + $t = 'for($x='.$aXMin.'; $x<='.$aXMax.'; $x += '.$this->iStepSize.') {$ya[]='.$this->iFunc.';$xa[]=$x;} $x='.$aXMax.';$ya[]='.$this->iFunc.';$xa[]=$x;'; + else + JpGraphError::RaiseL(24001);//('FuncGenerator : No function specified. '); + + @eval($t); + + // If there is an error in the function specifcation this is the only + // way we can discover that. + if( empty($xa) || empty($ya) ) + JpGraphError::RaiseL(24002);//('FuncGenerator : Syntax error in function specification '); + + return array($xa,$ya); + } +} + +//============================================================================= +// CLASS SymChar +// Description: Code values for some commonly used characters that +// normally isn't available directly on the keyboard, for example +// mathematical and greek symbols. +//============================================================================= +class SymChar { + function Get($aSymb,$aCapital=FALSE) { + static $iSymbols = array( + /* Greek */ + array('alpha','03B1','0391'), + array('beta','03B2','0392'), + array('gamma','03B3','0393'), + array('delta','03B4','0394'), + array('epsilon','03B5','0395'), + array('zeta','03B6','0396'), + array('ny','03B7','0397'), + array('eta','03B8','0398'), + array('theta','03B8','0398'), + array('iota','03B9','0399'), + array('kappa','03BA','039A'), + array('lambda','03BB','039B'), + array('mu','03BC','039C'), + array('nu','03BD','039D'), + array('xi','03BE','039E'), + array('omicron','03BF','039F'), + array('pi','03C0','03A0'), + array('rho','03C1','03A1'), + array('sigma','03C3','03A3'), + array('tau','03C4','03A4'), + array('upsilon','03C5','03A5'), + array('phi','03C6','03A6'), + array('chi','03C7','03A7'), + array('psi','03C8','03A8'), + array('omega','03C9','03A9'), + /* Money */ + array('euro','20AC'), + array('yen','00A5'), + array('pound','20A4'), + /* Math */ + array('approx','2248'), + array('neq','2260'), + array('not','2310'), + array('def','2261'), + array('inf','221E'), + array('sqrt','221A'), + array('int','222B'), + /* Misc */ + array('copy','00A9'), + array('para','00A7'), + array('tm','2122'), /* Trademark symbol */ + array('rtm','00AE') /* Registered trademark */ +); + + $n = count($iSymbols); + $i=0; + $found = false; + $aSymb = strtolower($aSymb); + while( $i < $n && !$found ) { + $found = $aSymb === $iSymbols[$i++][0]; + } + if( $found ) { + $ca = $iSymbols[--$i]; + if( $aCapital && count($ca)==3 ) + $s = $ca[2]; + else + $s = $ca[1]; + return sprintf('&#%04d;',hexdec($s)); + } + else + return ''; + } +} + + +//============================================================================= +// CLASS DateScaleUtils +// Description: Help to create a manual date scale +//============================================================================= +DEFINE('DSUTILS_MONTH',1); // Major and minor ticks on a monthly basis +DEFINE('DSUTILS_MONTH1',1); // Major and minor ticks on a monthly basis +DEFINE('DSUTILS_MONTH2',2); // Major ticks on a bi-monthly basis +DEFINE('DSUTILS_MONTH3',3); // Major icks on a tri-monthly basis +DEFINE('DSUTILS_MONTH6',4); // Major on a six-monthly basis +DEFINE('DSUTILS_WEEK1',5); // Major ticks on a weekly basis +DEFINE('DSUTILS_WEEK2',6); // Major ticks on a bi-weekly basis +DEFINE('DSUTILS_WEEK4',7); // Major ticks on a quod-weekly basis +DEFINE('DSUTILS_DAY1',8); // Major ticks on a daily basis +DEFINE('DSUTILS_DAY2',9); // Major ticks on a bi-daily basis +DEFINE('DSUTILS_DAY4',10); // Major ticks on a qoud-daily basis +DEFINE('DSUTILS_YEAR1',11); // Major ticks on a yearly basis +DEFINE('DSUTILS_YEAR2',12); // Major ticks on a bi-yearly basis +DEFINE('DSUTILS_YEAR5',13); // Major ticks on a five-yearly basis + + +class DateScaleUtils { + var $iMin=0, $iMax=0; + var $starthour,$startmonth, $startday, $startyear; + var $endmonth, $endyear, $endday; + var $tickPositions=array(),$minTickPositions=array(); + var $iUseWeeks = true; + + function UseWeekFormat($aFlg) { + $this->iUseWeeks = $aFlg; + } + + function doYearly($aType,$aMinor=false) { + $i=0; $j=0; + $m = $this->startmonth; + $y = $this->startyear; + + if( $this->startday == 1 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + ++$m; + + switch( $aType ) { + case DSUTILS_YEAR1: + for($y=$this->startyear; $y <= $this->endyear; ++$y ) { + if( $aMinor ) { + while( $m <= 12 ) { + if( !($y == $this->endyear && $m > $this->endmonth) ) { + $this->minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + ++$m; + } + $m=1; + } + $this->tickPositions[$i++] = mktime(0,0,0,1,1,$y); + } + break; + case DSUTILS_YEAR2: + $y=$this->startyear; + while( $y <= $this->endyear ) { + $this->tickPositions[$i++] = mktime(0,0,0,1,1,$y); + for($k=0; $k < 1; ++$k ) { + ++$y; + if( $aMinor ) { + $this->minTickPositions[$j++] = mktime(0,0,0,1,1,$y); + } + } + ++$y; + } + break; + case DSUTILS_YEAR5: + $y=$this->startyear; + while( $y <= $this->endyear ) { + $this->tickPositions[$i++] = mktime(0,0,0,1,1,$y); + for($k=0; $k < 4; ++$k ) { + ++$y; + if( $aMinor ) { + $this->minTickPositions[$j++] = mktime(0,0,0,1,1,$y); + } + } + ++$y; + } + break; + } + } + + function doDaily($aType,$aMinor=false) { + $m = $this->startmonth; + $y = $this->startyear; + $d = $this->startday; + $h = $this->starthour; + $i=0;$j=0; + + if( $h == 0 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,$d,$y); + } + $t = mktime(0,0,0,$m,$d,$y); + switch($aType) { + case DSUTILS_DAY1: + while( $t <= self::$iMax ) { + $t = strtotime('+1 day',$t); + $this->tickPositions[$i++] = $t; + if( $aMinor ) { + $this->minTickPositions[$j++] = strtotime('+12 hours',$t); + } + } + break; + case DSUTILS_DAY2: + while( $t <= $this->iMax ) { + $t = strtotime('+1 day',$t); + if( $aMinor ) { + $this->minTickPositions[$j++] = $t; + } + $t = strtotime('+1 day',$t); + $this->tickPositions[$i++] = $t; + } + break; + case DSUTILS_DAY4: + while( $t <= $this->iMax ) { + for($k=0; $k < 3; ++$k ) { + $t = strtotime('+1 day',$t); + if( $aMinor ) { + $this->minTickPositions[$j++] = $t; + } + } + $t = strtotime('+1 day',$t); + $this->tickPositions[$i++] = $t; + } + break; + } + } + + function doWeekly($aType,$aMinor=false) { + $hpd = 3600*24; + $hpw = 3600*24*7; + // Find out week number of min date + $thursday = $this->iMin + $hpd * (3 - (date('w', $this->iMin) + 6) % 7); + $week = 1 + (date('z', $thursday) - (11 - date('w', mktime(0, 0, 0, 1, 1, date('Y', $thursday)))) % 7) / 7; + $daynumber = date('w',$this->iMin); + if( $daynumber == 0 ) $daynumber = 7; + $m = $this->startmonth; + $y = $this->startyear; + $d = $this->startday; + $i=0;$j=0; + // The assumption is that the weeks start on Monday. If the first day + // is later in the week then the first week tick has to be on the following + // week. + if( $daynumber == 1 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,$d,$y); + $t = mktime(0,0,0,$m,$d,$y) + $hpw; + } + else { + $t = mktime(0,0,0,$m,$d,$y) + $hpd*(8-$daynumber); + } + + switch($aType) { + case DSUTILS_WEEK1: + $cnt=0; + break; + case DSUTILS_WEEK2: + $cnt=1; + break; + case DSUTILS_WEEK4: + $cnt=3; + break; + } + while( $t <= $this->iMax ) { + $this->tickPositions[$i++] = $t; + for($k=0; $k < $cnt; ++$k ) { + $t += $hpw; + if( $aMinor ) { + $this->minTickPositions[$j++] = $t; + } + } + $t += $hpw; + } + } + + function doMonthly($aType,$aMinor=false) { + $monthcount=0; + $m = $this->startmonth; + $y = $this->startyear; + $i=0; $j=0; + + // Skip the first month label if it is before the startdate + if( $this->startday == 1 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + $monthcount=1; + } + if( $aType == 1 ) { + if( $this->startday < 15 ) { + $this->minTickPositions[$j++] = mktime(0,0,0,$m,15,$y); + } + } + ++$m; + + // Loop through all the years included in the scale + for($y=$this->startyear; $y <= $this->endyear; ++$y ) { + // Loop through all the months. There are three cases to consider: + // 1. We are in the first year and must start with the startmonth + // 2. We are in the end year and we must stop at last month of the scale + // 3. A year in between where we run through all the 12 months + $stopmonth = $y == $this->endyear ? $this->endmonth : 12; + while( $m <= $stopmonth ) { + switch( $aType ) { + case DSUTILS_MONTH1: + // Set minor tick at the middle of the month + if( $aMinor ) { + if( $m <= $stopmonth ) { + if( !($y==$this->endyear && $m==$stopmonth && $this->endday < 15) ) + $this->minTickPositions[$j++] = mktime(0,0,0,$m,15,$y); + } + } + // Major at month + // Get timestamp of first hour of first day in each month + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + + break; + case DSUTILS_MONTH2: + if( $aMinor ) { + // Set minor tick at start of each month + $this->minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + + // Major at every second month + // Get timestamp of first hour of first day in each month + if( $monthcount % 2 == 0 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + case DSUTILS_MONTH3: + if( $aMinor ) { + // Set minor tick at start of each month + $this->minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + // Major at every third month + // Get timestamp of first hour of first day in each month + if( $monthcount % 3 == 0 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + case DSUTILS_MONTH6: + if( $aMinor ) { + // Set minor tick at start of each month + $this->minTickPositions[$j++] = mktime(0,0,0,$m,1,$y); + } + // Major at every third month + // Get timestamp of first hour of first day in each month + if( $monthcount % 6 == 0 ) { + $this->tickPositions[$i++] = mktime(0,0,0,$m,1,$y); + } + break; + } + ++$m; + ++$monthcount; + } + $m=1; + } + + // For the case where all dates are within the same month + // we want to make sure we have at least two ticks on the scale + // since the scale want work properly otherwise + if($this->startmonth == $this->endmonth && $this->startyear == $this->endyear && $aType==1 ) { + $this->tickPositions[$i++] = mktime(0 ,0 ,0, $this->startmonth + 1, 1, $this->startyear); + } + + return array($this->tickPositions,$this->minTickPositions); + } + + function GetTicks($aData,$aType=1,$aMinor=false,$aEndPoints=false) { + $n = count($aData); + return $this->GetTicksFromMinMax($aData[0],$aData[$n-1],$aType,$aMinor,$aEndPoints); + } + + function GetAutoTicks($aMin,$aMax,$aMaxTicks=10,$aMinor=false) { + $diff = $aMax - $aMin; + $spd = 3600*24; + $spw = $spd*7; + $spm = $spd*30; + $spy = $spd*352; + + if( $this->iUseWeeks ) + $w = 'W'; + else + $w = 'd M'; + + // Decision table for suitable scales + // First value: Main decision point + // Second value: Array of formatting depending on divisor for wanted max number of ticks. ,.. + $tt = array( + array($spw, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',-1,DSUTILS_DAY4,'d M')), + array($spm, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',4,DSUTILS_DAY4,'d M', + 7,DSUTILS_WEEK1,$w,-1,DSUTILS_WEEK2,$w)), + array($spy, array(1,DSUTILS_DAY1,'d M',2,DSUTILS_DAY2,'d M',4,DSUTILS_DAY4,'d M', + 7,DSUTILS_WEEK1,$w,14,DSUTILS_WEEK2,$w, + 30,DSUTILS_MONTH1,'M',60,DSUTILS_MONTH2,'M',-1,DSUTILS_MONTH3,'M')), + array(-1, array(30,DSUTILS_MONTH1,'M-Y',60,DSUTILS_MONTH2,'M-Y',90,DSUTILS_MONTH3,'M-Y', + 180,DSUTILS_MONTH6,'M-Y',352,DSUTILS_YEAR1,'Y',704,DSUTILS_YEAR2,'Y',-1,DSUTILS_YEAR5,'Y'))); + + $ntt = count($tt); + $nd = floor($diff/$spd); + for($i=0; $i < $ntt; ++$i ) { + if( $diff <= $tt[$i][0] || $i==$ntt-1) { + $t = $tt[$i][1]; + $n = count($t)/3; + for( $j=0; $j < $n; ++$j ) { + if( $nd/$t[3*$j] <= $aMaxTicks || $j==$n-1) { + $type = $t[3*$j+1]; + $fs = $t[3*$j+2]; + list($tickPositions,$minTickPositions) = $this->GetTicksFromMinMax($aMin,$aMax,$type,$aMinor); + return array($fs,$tickPositions,$minTickPositions,$type); + } + } + } + } + } + + function GetTicksFromMinMax($aMin,$aMax,$aType,$aMinor=false,$aEndPoints=false) { + $this->starthour = date('G',$aMin); + $this->startmonth = date('n',$aMin); + $this->startday = date('j',$aMin); + $this->startyear = date('Y',$aMin); + $this->endmonth = date('n',$aMax); + $this->endyear = date('Y',$aMax); + $this->endday = date('j',$aMax); + $this->iMin = $aMin; + $this->iMax = $aMax; + + if( $aType <= DSUTILS_MONTH6 ) { + $this->doMonthly($aType,$aMinor); + } + elseif( $aType <= DSUTILS_WEEK4 ) { + $this->doWeekly($aType,$aMinor); + } + elseif( $aType <= DSUTILS_DAY4 ) { + $this->doDaily($aType,$aMinor); + } + elseif( $aType <= DSUTILS_YEAR5 ) { + $this->doYearly($aType,$aMinor); + } + else { + JpGraphError::RaiseL(24003); + } + // put a label at the very left data pos + if( $aEndPoints ) { + $tickPositions[$i++] = $aData[0]; + } + + // put a label at the very right data pos + if( $aEndPoints ) { + $tickPositions[$i] = $aData[$n-1]; + } + + return array($this->tickPositions,$this->minTickPositions); + } + +} + +//============================================================================= +// Class ReadFileData +//============================================================================= +Class ReadFileData { + + //---------------------------------------------------------------------------- + // Desciption: + // Read numeric data from a file. + // Each value should be separated by either a new line or by a specified + // separator character (default is ','). + // Before returning the data each value is converted to a proper float + // value. The routine is robust in the sense that non numeric data in the + // file will be discarded. + // + // Returns: + // The number of data values read on success, FALSE on failure + //---------------------------------------------------------------------------- + function FromCSV($aFile,&$aData,$aSepChar=',',$aMaxLineLength=1024) { + $rh = fopen($aFile,'r'); + if( $rh === false ) + return false; + $tmp = array(); + $lineofdata = fgetcsv($rh, 1000, ','); + while ( $lineofdata !== FALSE) { + $tmp = array_merge($tmp,$lineofdata); + $lineofdata = fgetcsv($rh, $aMaxLineLength, $aSepChar); + } + fclose($rh); + + // Now make sure that all data is numeric. By default + // all data is read as strings + $n = count($tmp); + $aData = array(); + $cnt=0; + for($i=0; $i < $n; ++$i) { + if( $tmp[$i] !== "" ) { + $aData[$cnt++] = floatval($tmp[$i]); + } + } + return $cnt; + } +} + +?> \ No newline at end of file diff --git a/html/includes/jpgraph/src/lang/de.inc.php b/html/includes/jpgraph/src/lang/de.inc.php new file mode 100644 index 0000000000..339b0ec58c --- /dev/null +++ b/html/includes/jpgraph/src/lang/de.inc.php @@ -0,0 +1,498 @@ +,) +$_jpg_messages = array( + +/* +** Headers wurden bereits gesendet - Fehler. Dies wird als HTML formatiert, weil es direkt als text zurueckgesendet wird +*/ +10 => array('
    JpGraph Fehler: +HTTP header wurden bereits gesendet.
    Fehler in der Datei %s in der Zeile %d.
    Erklärung:
    HTTP header wurden bereits zum Browser gesendet, wobei die Daten als Text gekennzeichnet wurden, bevor die Bibliothek die Chance hatte, seinen Bild-HTTP-Header zum Browser zu schicken. Dies verhindert, dass die Bibliothek Bilddaten zum Browser schicken kann (weil sie vom Browser als Text interpretiert würden und daher nur Mist dargestellt würde).

    Wahrscheinlich steht Text im Skript bevor Graph::Stroke() aufgerufen wird. Wenn dieser Text zum Browser gesendet wird, nimmt dieser an, dass die gesamten Daten aus Text bestehen. Such nach irgendwelchem Text, auch nach Leerzeichen und Zeilenumbrüchen, die eventuell bereits zum Browser gesendet wurden.

    Zum Beispiel ist ein oft auftretender Fehler, eine Leerzeile am Anfang der Datei oder vor Graph::Stroke() zu lassen."<?php".

    ',2), + +/* +** Setup Fehler +*/ +11 => array('Es wurde kein Pfad für CACHE_DIR angegeben. Bitte gib einen Pfad CACHE_DIR in der Datei jpg-config.inc an.',0), +12 => array('Es wurde kein Pfad für TTF_DIR angegeben und der Pfad kann nicht automatisch ermittelt werden. Bitte gib den Pfad in der Datei jpg-config.inc an.',0), +13 => array('The installed PHP version (%s) is not compatible with this release of the library. The library requires at least PHP version %s',2), + +/* +** jpgraph_bar +*/ + +2001 => array('Die Anzahl der Farben ist nicht gleich der Anzahl der Vorlagen in BarPlot::SetPattern().',0), +2002 => array('Unbekannte Vorlage im Aufruf von BarPlot::SetPattern().',0), +2003 => array('Anzahl der X- und Y-Koordinaten sind nicht identisch. Anzahl der X-Koordinaten: %d; Anzahl der Y-Koordinaten: %d.',2), +2004 => array('Alle Werte für ein Balkendiagramm (barplot) müssen numerisch sein. Du hast den Wert nr [%d] == %s angegeben.',2), +2005 => array('Du hast einen leeren Vektor für die Schattierungsfarben im Balkendiagramm (barplot) angegeben.',0), +2006 => array('Unbekannte Position für die Werte der Balken: %s.',1), +2007 => array('Kann GroupBarPlot nicht aus einem leeren Vektor erzeugen.',0), +2008 => array('GroupBarPlot Element nbr %d wurde nicht definiert oder ist leer.',0), +2009 => array('Eins der Objekte, das an GroupBar weitergegeben wurde ist kein Balkendiagramm (BarPlot). Versichere Dich, dass Du den GroupBarPlot aus einem Vektor von Balkendiagrammen (barplot) oder AccBarPlot-Objekten erzeugst. (Class = %s)',1), +2010 => array('Kann AccBarPlot nicht aus einem leeren Vektor erzeugen.',0), +2011 => array('AccBarPlot-Element nbr %d wurde nicht definiert oder ist leer.',1), +2012 => array('Eins der Objekte, das an AccBar weitergegeben wurde ist kein Balkendiagramm (barplot). Versichere Dich, dass Du den AccBar-Plot aus einem Vektor von Balkendiagrammen (barplot) erzeugst. (Class=%s)',1), +2013 => array('Du hast einen leeren Vektor für die Schattierungsfarben im Balkendiagramm (barplot) angegeben.',0), +2014 => array('Die Anzahl der Datenpunkte jeder Datenreihe in AccBarPlot muss gleich sein.',0), + + +/* +** jpgraph_date +*/ + +3001 => array('Es ist nur möglich, entweder SetDateAlign() oder SetTimeAlign() zu benutzen, nicht beides!',0), + +/* +** jpgraph_error +*/ + +4002 => array('Fehler bei den Eingabedaten von LineErrorPlot. Die Anzahl der Datenpunkte mus ein Mehrfaches von drei sein!',0), + +/* +** jpgraph_flags +*/ + +5001 => array('Unbekannte Flaggen-Größe (%d).',1), +5002 => array('Der Flaggen-Index %s existiert nicht.',1), +5003 => array('Es wurde eine ungültige Ordnungszahl (%d) für den Flaggen-Index angegeben.',1), +5004 => array('Der Landesname %s hat kein korrespondierendes Flaggenbild. Die Flagge mag existieren, abr eventuell unter einem anderen Namen, z.B. versuche "united states" statt "usa".',1), + + +/* +** jpgraph_gantt +*/ + +6001 => array('Interner Fehler. Die Höhe für ActivityTitles ist < 0.',0), +6002 => array('Es dürfen keine negativen Werte für die Gantt-Diagramm-Dimensionen angegeben werden. Verwende 0, wenn die Dimensionen automatisch ermittelt werden sollen.',0), +6003 => array('Ungültiges Format für den Bedingungs-Parameter bei Index=%d in CreateSimple(). Der Parameter muss bei index 0 starten und Vektoren in der Form (Row,Constrain-To,Constrain-Type) enthalten.',1), +6004 => array('Ungültiges Format für den Fortschritts-Parameter bei Index=%d in CreateSimple(). Der Parameter muss bei Index 0 starten und Vektoren in der Form (Row,Progress) enthalten.',1), +6005 => array('SetScale() ist nicht sinnvoll bei Gantt-Diagrammen.',0), +6006 => array('Das Gantt-Diagramm kann nicht automatisch skaliert werden. Es existieren keine Aktivitäten mit Termin. [GetBarMinMax() start >= n]',0), +6007 => array('Plausibiltätsprüfung für die automatische Gantt-Diagramm-Größe schlug fehl. Entweder die Breite (=%d) oder die Höhe (=%d) ist größer als MAX_GANTTIMG_SIZE. Dies kann möglicherweise durch einen falschen Wert bei einer Aktivität hervorgerufen worden sein.',2), +6008 => array('Du hast eine Bedingung angegeben von Reihe=%d bis Reihe=%d, die keine Aktivität hat.',2), +6009 => array('Unbekannter Bedingungstyp von Reihe=%d bis Reihe=%d',2), +6010 => array('Ungültiger Icon-Index für das eingebaute Gantt-Icon [%d]',1), +6011 => array('Argument für IconImage muss entweder ein String oder ein Integer sein.',0), +6012 => array('Unbekannter Typ bei der Gantt-Objekt-Title-Definition.',0), +6015 => array('Ungültige vertikale Position %d',1), +6016 => array('Der eingegebene Datums-String (%s) für eine Gantt-Aktivität kann nicht interpretiert werden. Versichere Dich, dass es ein gültiger Datumsstring ist, z.B. 2005-04-23 13:30',1), +6017 => array('Unbekannter Datumstyp in GanttScale (%s).',1), +6018 => array('Intervall für Minuten muss ein gerader Teiler einer Stunde sein, z.B. 1,5,10,12,15,20,30, etc. Du hast ein Intervall von %d Minuten angegeben.',1), +6019 => array('Die vorhandene Breite (%d) für die Minuten ist zu klein, um angezeigt zu werden. Bitte benutze die automatische Größenermittlung oder vergrößere die Breite des Diagramms.',1), +6020 => array('Das Intervall für die Stunden muss ein gerader Teiler eines Tages sein, z.B. 0:30, 1:00, 1:30, 4:00, etc. Du hast ein Intervall von %d eingegeben.',1), +6021 => array('Unbekanntes Format für die Woche.',0), +6022 => array('Die Gantt-Skala wurde nicht eingegeben.',0), +6023 => array('Wenn Du sowohl Stunden als auch Minuten anzeigen lassen willst, muss das Stunden-Interval gleich 1 sein (anderenfalls ist es nicht sinnvoll, Minuten anzeigen zu lassen).',0), +6024 => array('Das CSIM-Ziel muss als String angegeben werden. Der Start des Ziels ist: %d',1), +6025 => array('Der CSIM-Alt-Text muss als String angegeben werden. Der Beginn des Alt-Textes ist: %d',1), +6027 => array('Der Fortschrittswert muss im Bereich [0, 1] liegen.',0), +6028 => array('Die eingegebene Höhe (%d) für GanttBar ist nicht im zulässigen Bereich.',1), +6029 => array('Der Offset für die vertikale Linie muss im Bereich [0,1] sein.',0), +6030 => array('Unbekannte Pfeilrichtung für eine Verbindung.',0), +6031 => array('Unbekannter Pfeiltyp für eine Verbindung.',0), +6032 => array('Interner Fehler: Unbekannter Pfadtyp (=%d) für eine Verbindung.',1), + +/* +** jpgraph_gradient +*/ + +7001 => array('Unbekannter Gradiententyp (=%d).',1), + +/* +** jpgraph_iconplot +*/ + +8001 => array('Der Mix-Wert für das Icon muss zwischen 0 und 100 sein.',0), +8002 => array('Die Ankerposition für Icons muss entweder "top", "bottom", "left", "right" oder "center" sein.',0), +8003 => array('Es ist nicht möglich, gleichzeitig ein Bild und eine Landesflagge für dasselbe Icon zu definieren',0), +8004 => array('Wenn Du Landesflaggen benutzen willst, musst Du die Datei "jpgraph_flags.php" hinzufügen (per include).',0), + +/* +** jpgraph_imgtrans +*/ + +9001 => array('Der Wert für die Bildtransformation ist außerhalb des zulässigen Bereichs. Der verschwindende Punkt am Horizont muss als Wert zwischen 0 und 1 angegeben werden.',0), + +/* +** jpgraph_lineplot +*/ + +10001 => array('Die Methode LinePlot::SetFilled() sollte nicht mehr benutzt werden. Benutze lieber SetFillColor()',0), +10002 => array('Der Plot ist zu kompliziert für FastLineStroke. Benutze lieber den StandardStroke()',0), +10003 => array('Each plot in an accumulated lineplot must have the same number of data points.',0), +/* +** jpgraph_log +*/ + +11001 => array('Deine Daten enthalten nicht-numerische Werte.',0), +11002 => array('Negative Werte können nicht für logarithmische Achsen verwendet werden.',0), +11003 => array('Deine Daten enthalten nicht-numerische Werte.',0), +11004 => array('Skalierungsfehler für die logarithmische Achse. Es gibt ein Problem mit den Daten der Achse. Der größte Wert muss größer sein als Null. Es ist mathematisch nicht möglich, einen Wert gleich Null in der Skala zu haben.',0), +11005 => array('Das Tick-Intervall für die logarithmische Achse ist nicht definiert. Lösche jeden Aufruf von SetTextLabelStart() oder SetTextTickInterval() bei der logarithmischen Achse.',0), + +/* +** jpgraph_mgraph +*/ + +12001 => array("Du benutzt GD 2.x und versuchst ein Nicht-Truecolor-Bild als Hintergrundbild zu benutzen. Um Hintergrundbilder mit GD 2.x zu benutzen, ist es notwendig Truecolor zu aktivieren, indem die USE_TRUECOLOR-Konstante auf TRUE gesetzt wird. Wegen eines Bugs in GD 2.0.1 ist die Qualität der Truetype-Schriften sehr schlecht, wenn man Truetype-Schriften mit Truecolor-Bildern verwendet.",0), +12002 => array('Ungültiger Dateiname für MGraph::SetBackgroundImage() : %s. Die Datei muss eine gültige Dateierweiterung haben (jpg,gif,png), wenn die automatische Typerkennung verwendet wird.',1), +12003 => array('Unbekannte Dateierweiterung (%s) in MGraph::SetBackgroundImage() für Dateiname: %s',2), +12004 => array('Das Bildformat des Hintergrundbildes (%s) wird von Deiner System-Konfiguration nicht unterstützt. ',1), +12005 => array('Das Hintergrundbild kann nicht gelesen werden: %s',1), +12006 => array('Es wurden ungültige Größen für Breite oder Höhe beim Erstellen des Bildes angegeben, (Breite=%d, Höhe=%d)',2), +12007 => array('Das Argument für MGraph::Add() ist nicht gültig für GD.',0), +12008 => array('Deine PHP- (und GD-lib-) Installation scheint keine bekannten Bildformate zu unterstützen.',0), +12009 => array('Deine PHP-Installation unterstützt das gewählte Bildformat nicht: %s',1), +12010 => array('Es konnte kein Bild als Datei %s erzeugt werden. Überprüfe, ob Du die entsprechenden Schreibrechte im aktuellen Verzeichnis hast.',1), +12011 => array('Es konnte kein Truecolor-Bild erzeugt werden. Überprüfe, ob Du wirklich die GD2-Bibliothek installiert hast.',0), +12012 => array('Es konnte kein Bild erzeugt werden. Überprüfe, ob Du wirklich die GD2-Bibliothek installiert hast.',0), + +/* +** jpgraph_pie3d +*/ + +14001 => array('Pie3D::ShowBorder(). Missbilligte Funktion. Benutze Pie3D::SetEdge(), um die Ecken der Tortenstücke zu kontrollieren.',0), +14002 => array('PiePlot3D::SetAngle() 3D-Torten-Projektionswinkel muss zwischen 5 und 85 Grad sein.',0), +14003 => array('Interne Festlegung schlug fehl. Pie3D::Pie3DSlice',0), +14004 => array('Tortenstück-Startwinkel muss zwischen 0 und 360 Grad sein.',0), +14005 => array('Pie3D Interner Fehler: Versuch, zweimal zu umhüllen bei der Suche nach dem Startindex.',0,), +14006 => array('Pie3D Interner Fehler: Z-Sortier-Algorithmus für 3D-Tortendiagramme funktioniert nicht einwandfrei (2). Versuch, zweimal zu umhüllen beim Erstellen des Bildes.',0), +14007 => array('Die Breite für das 3D-Tortendiagramm ist 0. Gib eine Breite > 0 an.',0), + +/* +** jpgraph_pie +*/ + +15001 => array('PiePLot::SetTheme() Unbekannter Stil: %s',1), +15002 => array('Argument für PiePlot::ExplodeSlice() muss ein Integer-Wert sein',0), +15003 => array('Argument für PiePlot::Explode() muss ein Vektor mit Integer-Werten sein.',0), +15004 => array('Tortenstück-Startwinkel muss zwischen 0 und 360 Grad sein.',0), +15005 => array('PiePlot::SetFont() sollte nicht mehr verwendet werden. Benutze stattdessen PiePlot->value->SetFont().',0), +15006 => array('PiePlot::SetSize() Radius für Tortendiagramm muss entweder als Bruch [0, 0.5] der Bildgröße oder als Absoluwert in Pixel im Bereich [10, 1000] angegeben werden.',0), +15007 => array('PiePlot::SetFontColor() sollte nicht mehr verwendet werden. Benutze stattdessen PiePlot->value->SetColor()..',0), +15008 => array('PiePlot::SetLabelType() der Typ für Tortendiagramme muss entweder 0 or 1 sein (nicht %d).',1), +15009 => array('Ungültiges Tortendiagramm. Die Summe aller Daten ist Null.',0), +15010 => array('Die Summe aller Daten ist Null.',0), +15011 => array('Um Bildtransformationen benutzen zu können, muss die Datei jpgraph_imgtrans.php eingefügt werden (per include).',0), + +/* +** jpgraph_plotband +*/ + +16001 => array('Die Dichte für das Pattern muss zwischen 1 und 100 sein. (Du hast %f eingegeben)',1), +16002 => array('Es wurde keine Position für das Pattern angegeben.',0), +16003 => array('Unbekannte Pattern-Definition (%d)',0), +16004 => array('Der Mindeswert für das PlotBand ist größer als der Maximalwert. Bitte korrigiere dies!',0), + + +/* +** jpgraph_polar +*/ + +17001 => array('PolarPlots müssen eine gerade Anzahl von Datenpunkten haben. Jeder Datenpunkt ist ein Tupel (Winkel, Radius).',0), +17002 => array('Unbekannte Ausrichtung für X-Achsen-Titel. (%s)',1), +//17003 => array('Set90AndMargin() wird für PolarGraph nicht unterstützt.',0), +17004 => array('Unbekannter Achsentyp für PolarGraph. Er muss entweder \'lin\' oder \'log\' sein.',0), + +/* +** jpgraph_radar +*/ + +18001 => array('ClientSideImageMaps werden für RadarPlots nicht unterstützt.',0), +18002 => array('RadarGraph::SupressTickMarks() sollte nicht mehr verwendet werden. Benutze stattdessen HideTickMarks().',0), +18003 => array('Ungültiger Achsentyp für RadarPlot (%s). Er muss entweder \'lin\' oder \'log\' sein.',1), +18004 => array('Die RadarPlot-Größe muss zwischen 0.1 und 1 sein. (Dein Wert=%f)',1), +18005 => array('RadarPlot: nicht unterstützte Tick-Dichte: %d',1), +18006 => array('Minimum Daten %f (RadarPlots sollten nur verwendet werden, wenn alle Datenpunkte einen Wert > 0 haben).',1), +18007 => array('Die Anzahl der Titel entspricht nicht der Anzahl der Datenpunkte.',0), +18008 => array('Jeder RadarPlot muss die gleiche Anzahl von Datenpunkten haben.',0), + +/* +** jpgraph_regstat +*/ + +19001 => array('Spline: Anzahl der X- und Y-Koordinaten muss gleich sein.',0), +19002 => array('Ungültige Dateneingabe für Spline. Zwei oder mehr aufeinanderfolgende X-Werte sind identisch. Jeder eigegebene X-Wert muss unterschiedlich sein, weil vom mathematischen Standpunkt ein Eins-zu-Eins-Mapping vorliegen muss, d.h. jeder X-Wert korrespondiert mit exakt einem Y-Wert.',0), +19003 => array('Bezier: Anzahl der X- und Y-Koordinaten muss gleich sein.',0), + +/* +** jpgraph_scatter +*/ + +20001 => array('Fieldplots müssen die gleiche Anzahl von X und Y Datenpunkten haben.',0), +20002 => array('Bei Fieldplots muss ein Winkel für jeden X und Y Datenpunkt angegeben werden.',0), +20003 => array('Scatterplots müssen die gleiche Anzahl von X- und Y-Datenpunkten haben.',0), + +/* +** jpgraph_stock +*/ + +21001 => array('Die Anzahl der Datenwerte für Stock-Charts müssen ein Mehrfaches von %d Datenpunkten sein.',1), + +/* +** jpgraph_plotmark +*/ + +23001 => array('Der Marker "%s" existiert nicht in der Farbe: %d',2), +23002 => array('Der Farb-Index ist zu hoch für den Marker "%s"',1), +23003 => array('Ein Dateiname muss angegeben werden, wenn Du den Marker-Typ auf MARK_IMG setzt.',0), + +/* +** jpgraph_utils +*/ + +24001 => array('FuncGenerator : Keine Funktion definiert. ',0), +24002 => array('FuncGenerator : Syntax-Fehler in der Funktionsdefinition ',0), +24003 => array('DateScaleUtils: Unknown tick type specified in call to GetTicks()',0), + +/* +** jpgraph +*/ + +25001 => array('Diese PHP-Installation ist nicht mit der GD-Bibliothek kompiliert. Bitte kompiliere PHP mit GD-Unterstützung neu, damit JpGraph funktioniert. (Weder die Funktion imagetypes() noch imagecreatefromstring() existiert!)',0), +25002 => array('Diese PHP-Installation scheint nicht die benötigte GD-Bibliothek zu unterstützen. Bitte schau in der PHP-Dokumentation nach, wie man die GD-Bibliothek installiert und aktiviert.',0), +25003 => array('Genereller PHP Fehler : Bei %s:%d : %s',3), +25004 => array('Genereller PHP Fehler : %s ',1), +25005 => array('PHP_SELF, die PHP-Global-Variable kann nicht ermittelt werden. PHP kann nicht von der Kommandozeile gestartet werden, wenn der Cache oder die Bilddateien automatisch benannt werden sollen.',0), +25006 => array('Die Benutzung der FF_CHINESE (FF_BIG5) Schriftfamilie benötigt die iconv() Funktion in Deiner PHP-Konfiguration. Dies wird nicht defaultmäßig in PHP kompiliert (benötigt "--width-iconv" bei der Konfiguration).',0), +25007 => array('Du versuchst das lokale (%s) zu verwenden, was von Deiner PHP-Installation nicht unterstützt wird. Hinweis: Benutze \'\', um das defaultmäßige Lokale für diese geographische Region festzulegen.',1), +25008 => array('Die Bild-Breite und Höhe in Graph::Graph() müssen numerisch sein',0), +25009 => array('Die Skalierung der Achsen muss angegeben werden mit Graph::SetScale()',0), + +25010 => array('Graph::Add() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25011 => array('Graph::AddY2() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25012 => array('Graph::AddYN() Du hast versucht, einen leeren Plot zum Graph hinzuzufügen.',0), +25013 => array('Es können nur Standard-Plots zu multiplen Y-Achsen hinzugefügt werden',0), +25014 => array('Graph::AddText() Du hast versucht, einen leeren Text zum Graph hinzuzufügen.',0), +25015 => array('Graph::AddLine() Du hast versucht, eine leere Linie zum Graph hinzuzufügen.',0), +25016 => array('Graph::AddBand() Du hast versucht, ein leeres Band zum Graph hinzuzufügen.',0), +25017 => array('Du benutzt GD 2.x und versuchst, ein Hintergrundbild in einem Truecolor-Bild zu verwenden. Um Hintergrundbilder mit GD 2.x zu verwenden, ist es notwendig, Truecolor zu aktivieren, indem die USE_TRUECOLOR-Konstante auf TRUE gesetzt wird. Wegen eines Bugs in GD 2.0.1 ist die Qualität der Schrift sehr schlecht, wenn Truetype-Schrift in Truecolor-Bildern verwendet werden.',0), +25018 => array('Falscher Dateiname für Graph::SetBackgroundImage() : "%s" muss eine gültige Dateinamenerweiterung (jpg,gif,png) haben, wenn die automatische Dateityperkennung verwenndet werden soll.',1), +25019 => array('Unbekannte Dateinamenerweiterung (%s) in Graph::SetBackgroundImage() für Dateiname: "%s"',2), + +25020 => array('Graph::SetScale(): Dar Maximalwert muss größer sein als der Mindestwert.',0), +25021 => array('Unbekannte Achsendefinition für die Y-Achse. (%s)',1), +25022 => array('Unbekannte Achsendefinition für die X-Achse. (%s)',1), +25023 => array('Nicht unterstützter Y2-Achsentyp: "%s" muss einer von (lin,log,int) sein.',1), +25024 => array('Nicht unterstützter X-Achsentyp: "%s" muss einer von (lin,log,int) sein.',1), +25025 => array('Nicht unterstützte Tick-Dichte: %d',1), +25026 => array('Nicht unterstützter Typ der nicht angegebenen Y-Achse. Du hast entweder: 1. einen Y-Achsentyp für automatisches Skalieren definiert, aber keine Plots angegeben. 2. eine Achse direkt definiert, aber vergessen, die Tick-Dichte zu festzulegen.',0), +25027 => array('Kann cached CSIM "%s" zum Lesen nicht öffnen.',1), +25028 => array('Apache/PHP hat keine Schreibrechte, in das CSIM-Cache-Verzeichnis (%s) zu schreiben. Überprüfe die Rechte.',1), +25029 => array('Kann nicht in das CSIM "%s" schreiben. Überprüfe die Schreibrechte und den freien Speicherplatz.',1), + +25030 => array('Fehlender Skriptname für StrokeCSIM(). Der Name des aktuellen Skriptes muss als erster Parameter von StrokeCSIM() angegeben werden.',0), +25031 => array('Der Achsentyp muss mittels Graph::SetScale() angegeben werden.',0), +25032 => array('Es existieren keine Plots für die Y-Achse nbr:%d',1), +25033 => array('',0), +25034 => array('Undefinierte X-Achse kann nicht gezeichnet werden. Es wurden keine Plots definiert.',0), +25035 => array('Du hast Clipping aktiviert. Clipping wird nur für Diagramme mit 0 oder 90 Grad Rotation unterstützt. Bitte verändere Deinen Rotationswinkel (=%d Grad) dementsprechend oder deaktiviere Clipping.',1), +25036 => array('Unbekannter Achsentyp AxisStyle() : %s',1), +25037 => array('Das Bildformat Deines Hintergrundbildes (%s) wird von Deiner System-Konfiguration nicht unterstützt. ',1), +25038 => array('Das Hintergrundbild scheint von einem anderen Typ (unterschiedliche Dateierweiterung) zu sein als der angegebene Typ. Angegebenen: %s; Datei: %s',2), +25039 => array('Hintergrundbild kann nicht gelesen werden: "%s"',1), + +25040 => array('Es ist nicht möglich, sowohl ein Hintergrundbild als auch eine Hintergrund-Landesflagge anzugeben.',0), +25041 => array('Um Landesflaggen als Hintergrund benutzen zu können, muss die Datei "jpgraph_flags.php" eingefügt werden (per include).',0), +25042 => array('Unbekanntes Hintergrundbild-Layout',0), +25043 => array('Unbekannter Titelhintergrund-Stil.',0), +25044 => array('Automatisches Skalieren kann nicht verwendet werden, weil es unmöglich ist, einen gültigen min/max Wert für die Y-Achse zu ermitteln (nur Null-Werte).',0), +25045 => array('Die Schriftfamilien FF_HANDWRT und FF_BOOK sind wegen Copyright-Problemen nicht mehr verfügbar. Diese Schriften können nicht mehr mit JpGraph verteilt werden. Bitte lade Dir Schriften von http://corefonts.sourceforge.net/ herunter.',0), +25046 => array('Angegebene TTF-Schriftfamilie (id=%d) ist unbekannt oder existiert nicht. Bitte merke Dir, dass TTF-Schriften wegen Copyright-Problemen nicht mit JpGraph mitgeliefert werden. Du findest MS-TTF-Internetschriften (arial, courier, etc.) zum Herunterladen unter http://corefonts.sourceforge.net/',1), +25047 => array('Stil %s ist nicht verfügbar für Schriftfamilie %s',2), +25048 => array('Unbekannte Schriftstildefinition [%s].',1), +25049 => array('Schriftdatei "%s" ist nicht lesbar oder existiert nicht.',1), + +25050 => array('Erstes Argument für Text::Text() muss ein String sein.',0), +25051 => array('Ungültige Richtung angegeben für Text.',0), +25052 => array('PANIK: Interner Fehler in SuperScript::Stroke(). Unbekannte vertikale Ausrichtung für Text.',0), +25053 => array('PANIK: Interner Fehler in SuperScript::Stroke(). Unbekannte horizontale Ausrichtung für Text.',0), +25054 => array('Interner Fehler: Unbekannte Grid-Achse %s',1), +25055 => array('Axis::SetTickDirection() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetTickSide().',0), +25056 => array('SetTickLabelMargin() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetLabelMargin().',0), +25057 => array('SetTextTicks() sollte nicht mehr verwendet werden. Benutze stattdessen SetTextTickInterval().',0), +25058 => array('TextLabelIntevall >= 1 muss angegeben werden.',0), +25059 => array('SetLabelPos() sollte nicht mehr verwendet werden. Benutze stattdessen Axis::SetLabelSide().',0), + +25060 => array('Unbekannte Ausrichtung angegeben für X-Achsentitel (%s).',1), +25061 => array('Unbekannte Ausrichtung angegeben für Y-Achsentitel (%s).',1), +25062 => array('Label unter einem Winkel werden für die Y-Achse nicht unterstützt.',0), +25063 => array('Ticks::SetPrecision() sollte nicht mehr verwendet werden. Benutze stattdessen Ticks::SetLabelFormat() (oder Ticks::SetFormatCallback()).',0), +25064 => array('Kleinere oder größere Schrittgröße ist 0. Überprüfe, ob Du fälschlicherweise SetTextTicks(0) in Deinem Skript hast. Wenn dies nicht der Fall ist, bist Du eventuell über einen Bug in JpGraph gestolpert. Bitte sende einen Report und füge den Code an, der den Fehler verursacht hat.',0), +25065 => array('Tick-Positionen müssen als array() angegeben werden',0), +25066 => array('Wenn die Tick-Positionen und -Label von Hand eingegeben werden, muss die Anzahl der Ticks und der Label gleich sein.',0), +25067 => array('Deine von Hand eingegebene Achse und Ticks sind nicht korrekt. Die Skala scheint zu klein zu sein für den Tickabstand.',0), +25068 => array('Ein Plot hat eine ungültige Achse. Dies kann beispielsweise der Fall sein, wenn Du automatisches Text-Skalieren verwendest, um ein Liniendiagramm zu zeichnen mit nur einem Datenpunkt, oder wenn die Bildfläche zu klein ist. Es kann auch der Fall sein, dass kein Datenpunkt einen numerischen Wert hat (vielleicht nur \'-\' oder \'x\').',0), +25069 => array('Grace muss größer sein als 0',0), + +25070 => array('Deine Daten enthalten nicht-numerische Werte.',0), +25071 => array('Du hast mit SetAutoMin() einen Mindestwert angegeben, der größer ist als der Maximalwert für die Achse. Dies ist nicht möglich.',0), +25072 => array('Du hast mit SetAutoMax() einen Maximalwert angegeben, der kleiner ist als der Minimalwert der Achse. Dies ist nicht möglich.',0), +25073 => array('Interner Fehler. Der Integer-Skalierungs-Algorithmus-Vergleich ist außerhalb der Grenzen (r=%f).',1), +25074 => array('Interner Fehler. Der Skalierungsbereich ist negativ (%f) [für %s Achse]. Dieses Problem könnte verursacht werden durch den Versuch, \'ungültige\' Werte in die Daten-Vektoren einzugeben (z.B. nur String- oder NULL-Werte), was beim automatischen Skalieren einen Fehler erzeugt.',2), +25075 => array('Die automatischen Ticks können nicht gesetzt werden, weil min==max.',0), +25077 => array('Einstellfaktor für die Farbe muss größer sein als 0',0), +25078 => array('Unbekannte Farbe: %s',1), +25079 => array('Unbekannte Farbdefinition: %s, Größe=%d',2), + +25080 => array('Der Alpha-Parameter für Farben muss zwischen 0.0 und 1.0 liegen.',0), +25081 => array('Das ausgewählte Grafikformat wird entweder nicht unterstützt oder ist unbekannt [%s]',1), +25082 => array('Es wurden ungültige Größen für Breite und Höhe beim Erstellen des Bildes definiert (Breite=%d, Höhe=%d).',2), +25083 => array('Es wurde eine ungültige Größe beim Kopieren des Bildes angegeben. Die Größe für das kopierte Bild wurde auf 1 Pixel oder weniger gesetzt.',0), +25084 => array('Fehler beim Erstellen eines temporären GD-Canvas. Möglicherweise liegt ein Arbeitsspeicherproblem vor.',0), +25085 => array('Ein Bild kann nicht aus dem angegebenen String erzeugt werden. Er ist entweder in einem nicht unterstützen Format oder er represäntiert ein kaputtes Bild.',0), +25086 => array('Du scheinst nur GD 1.x installiert zu haben. Um Alphablending zu aktivieren, ist GD 2.x oder höher notwendig. Bitte installiere GD 2.x oder versichere Dich, dass die Konstante USE_GD2 richtig gesetzt ist. Standardmäßig wird die installierte GD-Version automatisch erkannt. Ganz selten wird GD2 erkannt, obwohl nur GD1 installiert ist. Die Konstante USE_GD2 muss dann zu "false" gesetzt werden.',0), +25087 => array('Diese PHP-Version wurde ohne TTF-Unterstützung konfiguriert. PHP muss mit TTF-Unterstützung neu kompiliert und installiert werden.',0), +25088 => array('Die GD-Schriftunterstützung wurde falsch konfiguriert. Der Aufruf von imagefontwidth() ist fehlerhaft.',0), +25089 => array('Die GD-Schriftunterstützung wurde falsch konfiguriert. Der Aufruf von imagefontheight() ist fehlerhaft.',0), + +25090 => array('Unbekannte Richtung angegeben im Aufruf von StrokeBoxedText() [%s].',1), +25091 => array('Die interne Schrift untestützt das Schreiben von Text in einem beliebigen Winkel nicht. Benutze stattdessen TTF-Schriften.',0), +25092 => array('Es liegt entweder ein Konfigurationsproblem mit TrueType oder ein Problem beim Lesen der Schriftdatei "%s" vor. Versichere Dich, dass die Datei existiert und Leserechte und -pfad vergeben sind. (wenn \'basedir\' restriction in PHP aktiviert ist, muss die Schriftdatei im Dokumentwurzelverzeichnis abgelegt werden). Möglicherweise ist die FreeType-Bibliothek falsch installiert. Versuche, mindestens zur FreeType-Version 2.1.13 zu aktualisieren und kompiliere GD mit einem korrekten Setup neu, damit die FreeType-Bibliothek gefunden werden kann.',1), +25093 => array('Die Schriftdatei "%s" kann nicht gelesen werden beim Aufruf von Image::GetBBoxTTF. Bitte versichere Dich, dass die Schrift gesetzt wurde, bevor diese Methode aufgerufen wird, und dass die Schrift im TTF-Verzeichnis installiert ist.',1), +25094 => array('Die Textrichtung muss in einem Winkel zwischen 0 und 90 engegeben werden.',0), +25095 => array('Unbekannte Schriftfamilien-Definition. ',0), +25096 => array('Der Farbpalette können keine weiteren Farben zugewiesen werden. Dem Bild wurde bereits die größtmögliche Anzahl von Farben (%d) zugewiesen und die Palette ist voll. Verwende stattdessen ein TrueColor-Bild',0), +25097 => array('Eine Farbe wurde als leerer String im Aufruf von PushColor() angegegeben.',0), +25098 => array('Negativer Farbindex. Unpassender Aufruf von PopColor().',0), +25099 => array('Die Parameter für Helligkeit und Kontrast sind außerhalb des zulässigen Bereichs [-1,1]',0), + +25100 => array('Es liegt ein Problem mit der Farbpalette und dem GD-Setup vor. Bitte deaktiviere anti-aliasing oder verwende GD2 mit TrueColor. Wenn die GD2-Bibliothek installiert ist, versichere Dich, dass die Konstante USE_GD2 auf "true" gesetzt und TrueColor aktiviert ist.',0), +25101 => array('Ungültiges numerisches Argument für SetLineStyle(): (%d)',1), +25102 => array('Ungültiges String-Argument für SetLineStyle(): %s',1), +25103 => array('Ungültiges Argument für SetLineStyle %s',1), +25104 => array('Unbekannter Linientyp: %s',1), +25105 => array('Es wurden NULL-Daten für ein gefülltes Polygon angegeben. Sorge dafür, dass keine NULL-Daten angegeben werden.',0), +25106 => array('Image::FillToBorder : es können keine weiteren Farben zugewiesen werden.',0), +25107 => array('In Datei "%s" kann nicht geschrieben werden. Überprüfe die aktuellen Schreibrechte.',1), +25108 => array('Das Bild kann nicht gestreamt werden. Möglicherweise liegt ein Fehler im PHP/GD-Setup vor. Kompiliere PHP neu und verwende die eingebaute GD-Bibliothek, die mit PHP angeboten wird.',0), +25109 => array('Deine PHP- (und GD-lib-) Installation scheint keine bekannten Grafikformate zu unterstützen. Sorge zunächst dafür, dass GD als PHP-Modul kompiliert ist. Wenn Du außerdem JPEG-Bilder verwenden willst, musst Du die JPEG-Bibliothek installieren. Weitere Details sind in der PHP-Dokumentation zu finden.',0), + +25110 => array('Dein PHP-Installation unterstützt das gewählte Grafikformat nicht: %s',1), +25111 => array('Das gecachete Bild %s kann nicht gelöscht werden. Problem mit den Rechten?',1), +25112 => array('Das Datum der gecacheten Datei (%s) liegt in der Zukunft.',1), +25113 => array('Das gecachete Bild %s kann nicht gelöscht werden. Problem mit den Rechten?',1), +25114 => array('PHP hat nicht die erforderlichen Rechte, um in die Cache-Datei %s zu schreiben. Bitte versichere Dich, dass der Benutzer, der PHP anwendet, die entsprechenden Schreibrechte für die Datei hat, wenn Du das Cache-System in JPGraph verwenden willst.',1), +25115 => array('Berechtigung für gecachetes Bild %s kann nicht gesetzt werden. Problem mit den Rechten?',1), +25116 => array('Datei kann nicht aus dem Cache %s geöffnet werden',1), +25117 => array('Gecachetes Bild %s kann nicht zum Lesen geöffnet werden.',1), +25118 => array('Verzeichnis %s kann nicht angelegt werden. Versichere Dich, dass PHP die Schreibrechte in diesem Verzeichnis hat.',1), +25119 => array('Rechte für Datei %s können nicht gesetzt werden. Problem mit den Rechten?',1), + +25120 => array('Die Position für die Legende muss als Prozentwert im Bereich 0-1 angegeben werden.',0), +25121 => array('Eine leerer Datenvektor wurde für den Plot eingegeben. Es muss wenigstens ein Datenpunkt vorliegen.',0), +25122 => array('Stroke() muss als Subklasse der Klasse Plot definiert sein.',0), +25123 => array('Du kannst keine Text-X-Achse mit X-Koordinaten verwenden. Benutze stattdessen eine "int" oder "lin" Achse.',0), +25124 => array('Der Eingabedatenvektor mus aufeinanderfolgende Werte von 0 aufwärts beinhalten. Der angegebene Y-Vektor beginnt mit leeren Werten (NULL).',0), +25125 => array('Ungültige Richtung für statische Linie.',0), +25126 => array('Es kann kein TrueColor-Bild erzeugt werden. Überprüfe, ob die GD2-Bibliothek und PHP korrekt aufgesetzt wurden.',0), +25127 => array('The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).',0), + +/* +**--------------------------------------------------------------------------------------------- +** Pro-version strings +**--------------------------------------------------------------------------------------------- +*/ + +/* +** jpgraph_table +*/ + +27001 => array('GTextTable: Ungültiges Argument für Set(). Das Array-Argument muss 2-- dimensional sein.',0), +27002 => array('GTextTable: Ungültiges Argument für Set()',0), +27003 => array('GTextTable: Falsche Anzahl von Argumenten für GTextTable::SetColor()',0), +27004 => array('GTextTable: Angegebener Zellenbereich, der verschmolzen werden soll, ist ungültig.',0), +27005 => array('GTextTable: Bereits verschmolzene Zellen im Bereich (%d,%d) bis (%d,%d) können nicht ein weiteres Mal verschmolzen werden.',4), +27006 => array('GTextTable: Spalten-Argument = %d liegt außerhalb der festgelegten Tabellengröße.',1), +27007 => array('GTextTable: Zeilen-Argument = %d liegt außerhalb der festgelegten Tabellengröße.',1), +27008 => array('GTextTable: Spalten- und Zeilengröße müssen zu den Dimensionen der Tabelle passen.',0), +27009 => array('GTextTable: Die Anzahl der Tabellenspalten oder -zeilen ist 0. Versichere Dich, dass die Methoden Init() oder Set() aufgerufen werden.',0), +27010 => array('GTextTable: Es wurde keine Ausrichtung beim Aufruf von SetAlign() angegeben.',0), +27011 => array('GTextTable: Es wurde eine unbekannte Ausrichtung beim Aufruf von SetAlign() abgegeben. Horizontal=%s, Vertikal=%s',2), +27012 => array('GTextTable: Interner Fehler. Es wurde ein ungültiges Argument festgeleget %s',1), +27013 => array('GTextTable: Das Argument für FormatNumber() muss ein String sein.',0), +27014 => array('GTextTable: Die Tabelle wurde weder mit einem Aufruf von Set() noch von Init() initialisiert.',0), +27015 => array('GTextTable: Der Zellenbildbedingungstyp muss entweder TIMG_WIDTH oder TIMG_HEIGHT sein.',0), + +/* +** jpgraph_windrose +*/ + +22001 => array('Die Gesamtsumme der prozentualen Anteile aller Windrosenarme darf 100%% nicht überschreiten!\n(Aktuell max: %d)',1), +22002 => array('Das Bild ist zu klein für eine Skala. Bitte vergrößere das Bild.',0), +22004 => array('Die Etikettendefinition für Windrosenrichtungen müssen 16 Werte haben (eine für jede Kompassrichtung).',0), +22005 => array('Der Linientyp für radiale Linien muss einer von ("solid","dotted","dashed","longdashed") sein.',0), +22006 => array('Es wurde ein ungültiger Windrosentyp angegeben.',0), +22007 => array('Es wurden zu wenig Werte für die Bereichslegende angegeben.',0), +22008 => array('Interner Fehler: Versuch, eine freie Windrose zu plotten, obwohl der Typ keine freie Windrose ist.',0), +22009 => array('Du hast die gleiche Richtung zweimal angegeben, einmal mit einem Winkel und einmal mit einer Kompassrichtung (%f Grad).',0), +22010 => array('Die Richtung muss entweder ein numerischer Wert sein oder eine der 16 Kompassrichtungen',0), +22011 => array('Der Windrosenindex muss ein numerischer oder Richtungswert sein. Du hast angegeben Index=%d',1), +22012 => array('Die radiale Achsendefinition für die Windrose enthält eine nicht aktivierte Richtung.',0), +22013 => array('Du hast dasselbe Look&Feel für die gleiche Kompassrichtung zweimal engegeben, einmal mit Text und einmal mit einem Index (Index=%d)',1), +22014 => array('Der Index für eine Kompassrichtung muss zwischen 0 und 15 sein.',0), +22015 => array('Du hast einen unbekannten Windrosenplottyp angegeben.',0), +22016 => array('Der Windrosenarmindex muss ein numerischer oder ein Richtungswert sein.',0), +22017 => array('Die Windrosendaten enthalten eine Richtung, die nicht aktiviert ist. Bitte berichtige, welche Label angezeigt werden sollen.',0), +22018 => array('Du hast für dieselbe Kompassrichtung zweimal Daten angegeben, einmal mit Text und einmal mit einem Index (Index=%d)',1), +22019 => array('Der Index für eine Richtung muss zwischen 0 und 15 sein. Winkel dürfen nicht für einen regelmäßigen Windplot angegeben werden, sondern entweder ein Index oder eine Kompassrichtung.',0), +22020 => array('Der Windrosenplot ist zu groß für die angegebene Bildgröße. Benutze entweder WindrosePlot::SetSize(), um den Plot kleiner zu machen oder vergrößere das Bild im ursprünglichen Aufruf von WindroseGraph().',0), +22021 => array('It is only possible to add Text, IconPlot or WindrosePlot to a Windrose Graph',0), +/* +** jpgraph_odometer +*/ + +13001 => array('Unbekannter Nadeltypstil (%d).',1), +13002 => array('Ein Wert für das Odometer (%f) ist außerhalb des angegebenen Bereichs [%f,%f]',3), + +/* +** jpgraph_barcode +*/ + +1001 => array('Unbekannte Kodier-Specifikation: %s',1), +1002 => array('datenvalidierung schlug fehl. [%s] kann nicht mittels der Kodierung "%s" kodiert werden',2), +1003 => array('Interner Kodierfehler. Kodieren von %s ist nicht möglich in Code 128',1), +1004 => array('Interner barcode Fehler. Unbekannter UPC-E Kodiertyp: %s',1), +1005 => array('Interner Fehler. Das Textzeichen-Tupel (%s, %s) kann nicht im Code-128 Zeichensatz C kodiert werden.',2), +1006 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, CTRL in CHARSET != A zu kodieren.',0), +1007 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, DEL in CHARSET != B zu kodieren.',0), +1008 => array('Interner Kodierfehler für CODE 128. Es wurde versucht, kleine Buchstaben in CHARSET != B zu kodieren.',0), +1009 => array('Kodieren mittels CODE 93 wird noch nicht unterstützt.',0), +1010 => array('Kodieren mittels POSTNET wird noch nicht unterstützt.',0), +1011 => array('Nicht untrstütztes Barcode-Backend für den Typ %s',1), + +/* +** PDF417 +*/ + +26001 => array('PDF417: Die Anzahl der Spalten muss zwischen 1 und 30 sein.',0), +26002 => array('PDF417: Der Fehler-Level muss zwischen 0 und 8 sein.',0), +26003 => array('PDF417: Ungültiges Format für Eingabedaten, um sie mit PDF417 zu kodieren.',0), +26004 => array('PDF417: die eigebenen Daten können nicht mit Fehler-Level %d und %d spalten kodiert werden, weil daraus zu viele Symbole oder mehr als 90 Zeilen resultieren.',2), +26005 => array('PDF417: Die Datei "%s" kann nicht zum Schreiben geöffnet werden.',1), +26006 => array('PDF417: Interner Fehler. Die Eingabedatendatei für PDF417-Cluster %d ist fehlerhaft.',1), +26007 => array('PDF417: Interner Fehler. GetPattern: Ungültiger Code-Wert %d (Zeile %d)',2), +26008 => array('PDF417: Interner Fehler. Modus wurde nicht in der Modusliste!! Modus %d',1), +26009 => array('PDF417: Kodierfehler: Ungültiges Zeichen. Zeichen kann nicht mit ASCII-Code %d kodiert werden.',1), +26010 => array('PDF417: Interner Fehler: Keine Eingabedaten beim Dekodieren.',0), +26011 => array('PDF417: Kodierfehler. Numerisches Kodieren bei nicht-numerischen Daten nicht möglich.',0), +26012 => array('PDF417: Interner Fehler. Es wurden für den Binary-Kompressor keine Daten zum Dekodieren eingegeben.',0), +26013 => array('PDF417: Interner Fehler. Checksum Fehler. Koeffiziententabellen sind fehlerhaft.',0), +26014 => array('PDF417: Interner Fehler. Es wurden keine Daten zum Berechnen von Kodewörtern eingegeben.',0), +26015 => array('PDF417: Interner Fehler. Ein Eintrag 0 in die Statusübertragungstabellen ist nicht NULL. Eintrag 1 = (%s)',1), +26016 => array('PDF417: Interner Fehler: Nichtregistrierter Statusübertragungsmodus beim Dekodieren.',0), + + +); + +?> diff --git a/html/includes/jpgraph/src/lang/en.inc.php b/html/includes/jpgraph/src/lang/en.inc.php new file mode 100644 index 0000000000..4844dc8681 --- /dev/null +++ b/html/includes/jpgraph/src/lang/en.inc.php @@ -0,0 +1,501 @@ +,) +// The argument placeholders in the error strings are in printf() - format + +$_jpg_messages = array( + +/* +** Headers already sent error. This is formatted as HTML different since this will be sent back directly as text +*/ +10 => array('
    JpGraph Error: +HTTP headers have already been sent.
    Caused by output from file %s at line %d.
    Explanation:
    HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it\'s image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).

    Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

    For example it is a common mistake to leave a blank line before the opening "<?php".

    ',2), + +/* +** Setup errors +*/ +11 => array('No path specified for CACHE_DIR. Please specify CACHE_DIR manually in jpg-config.inc',0), +12 => array('No path specified for TTF_DIR and path can not be determined automatically. Please specify TTF_DIR manually (in jpg-config.inc).',0), +13 => array('The installed PHP version (%s) is not compatible with this release of the library. The library requires at least PHP version %s',2), +/* +** jpgraph_bar +*/ + +2001 => array('Number of colors is not the same as the number of patterns in BarPlot::SetPattern()',0), +2002 => array('Unknown pattern specified in call to BarPlot::SetPattern()',0), +2003 => array('Number of X and Y points are not equal. Number of X-points: %d Number of Y-points: %d',2), +2004 => array('All values for a barplot must be numeric. You have specified value nr [%d] == %s',2), +2005 => array('You have specified an empty array for shadow colors in the bar plot.',0), +2006 => array('Unknown position for values on bars : %s',1), +2007 => array('Cannot create GroupBarPlot from empty plot array.',0), +2008 => array('Group bar plot element nbr %d is undefined or empty.',0), +2009 => array('One of the objects submitted to GroupBar is not a BarPlot. Make sure that you create the GroupBar plot from an array of BarPlot or AccBarPlot objects. (Class = %s)',1), +2010 => array('Cannot create AccBarPlot from empty plot array.',0), +2011 => array('Acc bar plot element nbr %d is undefined or empty.',1), +2012 => array('One of the objects submitted to AccBar is not a BarPlot. Make sure that you create the AccBar plot from an array of BarPlot objects. (Class=%s)',1), +2013 => array('You have specified an empty array for shadow colors in the bar plot.',0), +2014 => array('Number of datapoints for each data set in accbarplot must be the same',0), + + +/* +** jpgraph_date +*/ + +3001 => array('It is only possible to use either SetDateAlign() or SetTimeAlign() but not both',0), + +/* +** jpgraph_error +*/ + +4002 => array('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3',0), + +/* +** jpgraph_flags +*/ + +5001 => array('Unknown flag size (%d).',1), +5002 => array('Flag index %s does not exist.',1), +5003 => array('Invalid ordinal number (%d) specified for flag index.',1), +5004 => array('The (partial) country name %s does not have a corresponding flag image. The flag may still exist but under another name, e.g. instead of "usa" try "united states".',1), + + +/* +** jpgraph_gantt +*/ + +6001 => array('Internal error. Height for ActivityTitles is < 0',0), +6002 => array('You can\'t specify negative sizes for Gantt graph dimensions. Use 0 to indicate that you want the library to automatically determine a dimension.',0), +6003 => array('Invalid format for Constrain parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Constrain-To,Constrain-Type)',1), +6004 => array('Invalid format for Progress parameter at index=%d in CreateSimple(). Parameter must start with index 0 and contain arrays of (Row,Progress)',1), +6005 => array('SetScale() is not meaningful with Gantt charts.',0), +6006 => array('Cannot autoscale Gantt chart. No dated activities exist. [GetBarMinMax() start >= n]',0), +6007 => array('Sanity check for automatic Gantt chart size failed. Either the width (=%d) or height (=%d) is larger than MAX_GANTTIMG_SIZE. This could potentially be caused by a wrong date in one of the activities.',2), +6008 => array('You have specified a constrain from row=%d to row=%d which does not have any activity',2), +6009 => array('Unknown constrain type specified from row=%d to row=%d',2), +6010 => array('Illegal icon index for Gantt builtin icon [%d]',1), +6011 => array('Argument to IconImage must be string or integer',0), +6012 => array('Unknown type in Gantt object title specification',0), +6015 => array('Illegal vertical position %d',1), +6016 => array('Date string (%s) specified for Gantt activity can not be interpretated. Please make sure it is a valid time string, e.g. 2005-04-23 13:30',1), +6017 => array('Unknown date format in GanttScale (%s).',1), +6018 => array('Interval for minutes must divide the hour evenly, e.g. 1,5,10,12,15,20,30 etc You have specified an interval of %d minutes.',1), +6019 => array('The available width (%d) for minutes are to small for this scale to be displayed. Please use auto-sizing or increase the width of the graph.',1), +6020 => array('Interval for hours must divide the day evenly, e.g. 0:30, 1:00, 1:30, 4:00 etc. You have specified an interval of %d',1), +6021 => array('Unknown formatting style for week.',0), +6022 => array('Gantt scale has not been specified.',0), +6023 => array('If you display both hour and minutes the hour interval must be 1 (Otherwise it doesn\'t make sense to display minutes).',0), +6024 => array('CSIM Target must be specified as a string. Start of target is: %d',1), +6025 => array('CSIM Alt text must be specified as a string. Start of alt text is: %d',1), +6027 => array('Progress value must in range [0, 1]',0), +6028 => array('Specified height (%d) for gantt bar is out of range.',1), +6029 => array('Offset for vertical line must be in range [0,1]',0), +6030 => array('Unknown arrow direction for link.',0), +6031 => array('Unknown arrow type for link.',0), +6032 => array('Internal error: Unknown path type (=%d) specified for link.',1), + +/* +** jpgraph_gradient +*/ + +7001 => array('Unknown gradient style (=%d).',1), + +/* +** jpgraph_iconplot +*/ + +8001 => array('Mix value for icon must be between 0 and 100.',0), +8002 => array('Anchor position for icons must be one of "top", "bottom", "left", "right" or "center"',0), +8003 => array('It is not possible to specify both an image file and a country flag for the same icon.',0), +8004 => array('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.',0), + +/* +** jpgraph_imgtrans +*/ + +9001 => array('Value for image transformation out of bounds. Vanishing point on horizon must be specified as a value between 0 and 1.',0), + +/* +** jpgraph_lineplot +*/ + +10001 => array('LinePlot::SetFilled() is deprecated. Use SetFillColor()',0), +10002 => array('Plot too complicated for fast line Stroke. Use standard Stroke()',0), +10003 => array('Each plot in an accumulated lineplot must have the same number of data points.',0), +/* +** jpgraph_log +*/ + +11001 => array('Your data contains non-numeric values.',0), +11002 => array('Negative data values can not be used in a log scale.',0), +11003 => array('Your data contains non-numeric values.',0), +11004 => array('Scale error for logarithmic scale. You have a problem with your data values. The max value must be greater than 0. It is mathematically impossible to have 0 in a logarithmic scale.',0), +11005 => array('Specifying tick interval for a logarithmic scale is undefined. Remove any calls to SetTextLabelStart() or SetTextTickInterval() on the logarithmic scale.',0), + +/* +** jpgraph_mgraph +*/ + +/* 12001 => array("You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.",0),*/ + +12002 => array('Incorrect file name for MGraph::SetBackgroundImage() : %s Must have a valid image extension (jpg,gif,png) when using auto detection of image type',1), +12003 => array('Unknown file extension (%s) in MGraph::SetBackgroundImage() for filename: %s',2), +12004 => array('The image format of your background image (%s) is not supported in your system configuration. ',1), +12005 => array('Can\'t read background image: %s',1), +12006 => array('Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)',2), +12007 => array('Argument to MGraph::Add() is not a valid GD image handle.',0), +12008 => array('Your PHP (and GD-lib) installation does not appear to support any known graphic formats.',0), +12009 => array('Your PHP installation does not support the chosen graphic format: %s',1), +12010 => array('Can\'t create or stream image to file %s Check that PHP has enough permission to write a file to the current directory.',1), +12011 => array('Can\'t create truecolor image. Check that you really have GD2 library installed.',0), + +/* +** jpgraph_pie3d +*/ + +14001 => array('Pie3D::ShowBorder() . Deprecated function. Use Pie3D::SetEdge() to control the edges around slices.',0), +14002 => array('PiePlot3D::SetAngle() 3D Pie projection angle must be between 5 and 85 degrees.',0), +14003 => array('Internal assertion failed. Pie3D::Pie3DSlice',0), +14004 => array('Slice start angle must be between 0 and 360 degrees.',0), +14005 => array('Pie3D Internal error: Trying to wrap twice when looking for start index',0,), +14006 => array('Pie3D Internal Error: Z-Sorting algorithm for 3D Pies is not working properly (2). Trying to wrap twice while stroking.',0), +14007 => array('Width for 3D Pie is 0. Specify a size > 0',0), + +/* +** jpgraph_pie +*/ + +15001 => array('PiePLot::SetTheme() Unknown theme: %s',1), +15002 => array('Argument to PiePlot::ExplodeSlice() must be an integer',0), +15003 => array('Argument to PiePlot::Explode() must be an array with integer distances.',0), +15004 => array('Slice start angle must be between 0 and 360 degrees.',0), +15005 => array('PiePlot::SetFont() is deprecated. Use PiePlot->value->SetFont() instead.',0), +15006 => array('PiePlot::SetSize() Radius for pie must either be specified as a fraction [0, 0.5] of the size of the image or as an absolute size in pixels in the range [10, 1000]',0), +15007 => array('PiePlot::SetFontColor() is deprecated. Use PiePlot->value->SetColor() instead.',0), +15008 => array('PiePlot::SetLabelType() Type for pie plots must be 0 or 1 (not %d).',1), +15009 => array('Illegal pie plot. Sum of all data is zero for Pie Plot',0), +15010 => array('Sum of all data is 0 for Pie.',0), +15011 => array('In order to use image transformation you must include the file jpgraph_imgtrans.php in your script.',0), + +/* +** jpgraph_plotband +*/ + +16001 => array('Density for pattern must be between 1 and 100. (You tried %f)',1), +16002 => array('No positions specified for pattern.',0), +16003 => array('Unknown pattern specification (%d)',0), +16004 => array('Min value for plotband is larger than specified max value. Please correct.',0), + + +/* +** jpgraph_polar +*/ + +17001 => array('Polar plots must have an even number of data point. Each data point is a tuple (angle,radius).',0), +17002 => array('Unknown alignment specified for X-axis title. (%s)',1), +//17003 => array('Set90AndMargin() is not supported for polar graphs.',0), +17004 => array('Unknown scale type for polar graph. Must be "lin" or "log"',0), + +/* +** jpgraph_radar +*/ + +18001 => array('Client side image maps not supported for RadarPlots.',0), +18002 => array('RadarGraph::SupressTickMarks() is deprecated. Use HideTickMarks() instead.',0), +18003 => array('Illegal scale for radarplot (%s). Must be \'lin\' or \'log\'',1), +18004 => array('Radar Plot size must be between 0.1 and 1. (Your value=%f)',1), +18005 => array('RadarPlot Unsupported Tick density: %d',1), +18006 => array('Minimum data %f (Radar plots should only be used when all data points > 0)',1), +18007 => array('Number of titles does not match number of points in plot.',0), +18008 => array('Each radar plot must have the same number of data points.',0), + +/* +** jpgraph_regstat +*/ + +19001 => array('Spline: Number of X and Y coordinates must be the same',0), +19002 => array('Invalid input data for spline. Two or more consecutive input X-values are equal. Each input X-value must differ since from a mathematical point of view it must be a one-to-one mapping, i.e. each X-value must correspond to exactly one Y-value.',0), +19003 => array('Bezier: Number of X and Y coordinates must be the same',0), + +/* +** jpgraph_scatter +*/ + +20001 => array('Fieldplots must have equal number of X and Y points.',0), +20002 => array('Fieldplots must have an angle specified for each X and Y points.',0), +20003 => array('Scatterplot must have equal number of X and Y points.',0), + +/* +** jpgraph_stock +*/ + +21001 => array('Data values for Stock charts must contain an even multiple of %d data points.',1), + +/* +** jpgraph_plotmark +*/ + +23001 => array('This marker "%s" does not exist in color with index: %d',2), +23002 => array('Mark color index too large for marker "%s"',1), +23003 => array('A filename must be specified if you set the mark type to MARK_IMG.',0), + +/* +** jpgraph_utils +*/ + +24001 => array('FuncGenerator : No function specified. ',0), +24002 => array('FuncGenerator : Syntax error in function specification ',0), +24003 => array('DateScaleUtils: Unknown tick type specified in call to GetTicks()',0), +/* +** jpgraph +*/ + +25002 => array('Your PHP installation does not seem to have the required GD 2.x library enabled. Please see the PHP documentation, "Image" section. Make sure that "php_gd2.dll" statement is uncomment in the [modules] section in the php.ini file.',0), +25003 => array('General PHP error : At %s:%d : %s',3), +25004 => array('General PHP error : %s ',1), +25005 => array('Can\'t access PHP_SELF, PHP global variable. You can\'t run PHP from command line if you want to use the \'auto\' naming of cache or image files.',0), +25006 => array('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By default this is not compiled into PHP (needs the "--width-iconv" when configured).',0), +25007 => array('You are trying to use the locale (%s) which your PHP installation does not support. Hint: Use \'\' to indicate the default locale for this geographic region.',1), +25008 => array('Image width/height argument in Graph::Graph() must be numeric',0), +25009 => array('You must specify what scale to use with a call to Graph::SetScale()',0), + +25010 => array('Graph::Add() You tried to add a null plot to the graph.',0), +25011 => array('Graph::AddY2() You tried to add a null plot to the graph.',0), +25012 => array('Graph::AddYN() You tried to add a null plot to the graph.',0), +25013 => array('You can only add standard plots to multiple Y-axis',0), +25014 => array('Graph::AddText() You tried to add a null text to the graph.',0), +25015 => array('Graph::AddLine() You tried to add a null line to the graph.',0), +25016 => array('Graph::AddBand() You tried to add a null band to the graph.',0), +25017 => array('You are using GD 2.x and are trying to use a background images on a non truecolor image. To use background images with GD 2.x it is necessary to enable truecolor by setting the USE_TRUECOLOR constant to TRUE. Due to a bug in GD 2.0.1 using any truetype fonts with truecolor images will result in very poor quality fonts.',0), +25018 => array('Incorrect file name for Graph::SetBackgroundImage() : "%s" Must have a valid image extension (jpg,gif,png) when using auto detection of image type',1), +25019 => array('Unknown file extension (%s) in Graph::SetBackgroundImage() for filename: "%s"',2), + +25020 => array('Graph::SetScale(): Specified Max value must be larger than the specified Min value.',0), +25021 => array('Unknown scale specification for Y-scale. (%s)',1), +25022 => array('Unknown scale specification for X-scale. (%s)',1), +25023 => array('Unsupported Y2 axis type: "%s" Must be one of (lin,log,int)',1), +25024 => array('Unsupported Y axis type: "%s" Must be one of (lin,log,int)',1), +25025 => array('Unsupported Tick density: %d',1), +25026 => array('Can\'t draw unspecified Y-scale. You have either: 1. Specified an Y axis for auto scaling but have not supplied any plots. 2. Specified a scale manually but have forgot to specify the tick steps',0), +25027 => array('Can\'t open cached CSIM "%s" for reading.',1), +25028 => array('Apache/PHP does not have permission to write to the CSIM cache directory (%s). Check permissions.',1), +25029 => array('Can\'t write CSIM "%s" for writing. Check free space and permissions.',1), + +25030 => array('Missing script name in call to StrokeCSIM(). You must specify the name of the actual image script as the first parameter to StrokeCSIM().',0), +25031 => array('You must specify what scale to use with a call to Graph::SetScale().',0), +25032 => array('No plots for Y-axis nbr:%d',1), +25033 => array('',0), +25034 => array('Can\'t draw unspecified X-scale. No plots specified.',0), +25035 => array('You have enabled clipping. Clipping is only supported for graphs at 0 or 90 degrees rotation. Please adjust you current angle (=%d degrees) or disable clipping.',1), +25036 => array('Unknown AxisStyle() : %s',1), +25037 => array('The image format of your background image (%s) is not supported in your system configuration. ',1), +25038 => array('Background image seems to be of different type (has different file extension) than specified imagetype. Specified: %s File: %s',2), +25039 => array('Can\'t read background image: "%s"',1), + +25040 => array('It is not possible to specify both a background image and a background country flag.',0), +25041 => array('In order to use Country flags as backgrounds you must include the "jpgraph_flags.php" file.',0), +25042 => array('Unknown background image layout',0), +25043 => array('Unknown title background style.',0), +25044 => array('Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values).',0), +25045 => array('Font families FF_HANDWRT and FF_BOOK are no longer available due to copyright problem with these fonts. Fonts can no longer be distributed with JpGraph. Please download fonts from http://corefonts.sourceforge.net/',0), +25046 => array('Specified TTF font family (id=%d) is unknown or does not exist. Please note that TTF fonts are not distributed with JpGraph for copyright reasons. You can find the MS TTF WEB-fonts (arial, courier etc) for download at http://corefonts.sourceforge.net/',1), +25047 => array('Style %s is not available for font family %s',2), +25048 => array('Unknown font style specification [%s].',1), +25049 => array('Font file "%s" is not readable or does not exist.',1), + +25050 => array('First argument to Text::Text() must be a string.',0), +25051 => array('Invalid direction specified for text.',0), +25052 => array('PANIC: Internal error in SuperScript::Stroke(). Unknown vertical alignment for text',0), +25053 => array('PANIC: Internal error in SuperScript::Stroke(). Unknown horizontal alignment for text',0), +25054 => array('Internal error: Unknown grid axis %s',1), +25055 => array('Axis::SetTickDirection() is deprecated. Use Axis::SetTickSide() instead',0), +25056 => array('SetTickLabelMargin() is deprecated. Use Axis::SetLabelMargin() instead.',0), +25057 => array('SetTextTicks() is deprecated. Use SetTextTickInterval() instead.',0), +25058 => array('Text label interval must be specified >= 1.',0), +25059 => array('SetLabelPos() is deprecated. Use Axis::SetLabelSide() instead.',0), + +25060 => array('Unknown alignment specified for X-axis title. (%s)',1), +25061 => array('Unknown alignment specified for Y-axis title. (%s)',1), +25062 => array('Labels at an angle are not supported on Y-axis',0), +25063 => array('Ticks::SetPrecision() is deprecated. Use Ticks::SetLabelFormat() (or Ticks::SetFormatCallback()) instead',0), +25064 => array('Minor or major step size is 0. Check that you haven\'t got an accidental SetTextTicks(0) in your code. If this is not the case you might have stumbled upon a bug in JpGraph. Please report this and if possible include the data that caused the problem',0), +25065 => array('Tick positions must be specified as an array()',0), +25066 => array('When manually specifying tick positions and labels the number of labels must be the same as the number of specified ticks.',0), +25067 => array('Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tick marks.',0), +25068 => array('A plot has an illegal scale. This could for example be that you are trying to use text auto scaling to draw a line plot with only one point or that the plot area is too small. It could also be that no input data value is numeric (perhaps only \'-\' or \'x\')',0), +25069 => array('Grace must be larger then 0',0), +25070 => array('Either X or Y data arrays contains non-numeric values. Check that the data is really specified as numeric data and not as strings. It is an error to specify data for example as \'-2345.2\' (using quotes).',0), +25071 => array('You have specified a min value with SetAutoMin() which is larger than the maximum value used for the scale. This is not possible.',0), +25072 => array('You have specified a max value with SetAutoMax() which is smaller than the minimum value used for the scale. This is not possible.',0), +25073 => array('Internal error. Integer scale algorithm comparison out of bound (r=%f)',1), +25074 => array('Internal error. The scale range is negative (%f) [for %s scale] This problem could potentially be caused by trying to use \"illegal\" values in the input data arrays (like trying to send in strings or only NULL values) which causes the auto scaling to fail.',2), +25075 => array('Can\'t automatically determine ticks since min==max.',0), +25077 => array('Adjustment factor for color must be > 0',0), +25078 => array('Unknown color: %s',1), +25079 => array('Unknown color specification: %s, size=%d',2), + +25080 => array('Alpha parameter for color must be between 0.0 and 1.0',0), +25081 => array('Selected graphic format is either not supported or unknown [%s]',1), +25082 => array('Illegal sizes specified for width or height when creating an image, (width=%d, height=%d)',2), +25083 => array('Illegal image size when copying image. Size for copied to image is 1 pixel or less.',0), +25084 => array('Failed to create temporary GD canvas. Possible Out of memory problem.',0), +25085 => array('An image can not be created from the supplied string. It is either in a format not supported or the string is representing an corrupt image.',0), +25086 => array('You only seem to have GD 1.x installed. To enable Alphablending requires GD 2.x or higher. Please install GD or make sure the constant USE_GD2 is specified correctly to reflect your installation. By default it tries to auto detect what version of GD you have installed. On some very rare occasions it may falsely detect GD2 where only GD1 is installed. You must then set USE_GD2 to false.',0), +25087 => array('This PHP build has not been configured with TTF support. You need to recompile your PHP installation with FreeType support.',0), +25088 => array('You have a misconfigured GD font support. The call to imagefontwidth() fails.',0), +25089 => array('You have a misconfigured GD font support. The call to imagefontheight() fails.',0), + +25090 => array('Unknown direction specified in call to StrokeBoxedText() [%s]',1), +25091 => array('Internal font does not support drawing text at arbitrary angle. Use TTF fonts instead.',0), +25092 => array('There is either a configuration problem with TrueType or a problem reading font file "%s" Make sure file exists and is in a readable place for the HTTP process. (If \'basedir\' restriction is enabled in PHP then the font file must be located in the document root.). It might also be a wrongly installed FreeType library. Try upgrading to at least FreeType 2.1.13 and recompile GD with the correct setup so it can find the new FT library.',1), +25093 => array('Can not read font file "%s" in call to Image::GetBBoxTTF. Please make sure that you have set a font before calling this method and that the font is installed in the TTF directory.',1), +25094 => array('Direction for text most be given as an angle between 0 and 90.',0), +25095 => array('Unknown font font family specification. ',0), +25096 => array('Can\'t allocate any more colors.',0), +25097 => array('Color specified as empty string in PushColor().',0), +25098 => array('Negative Color stack index. Unmatched call to PopColor()',0), +25099 => array('Parameters for brightness and Contrast out of range [-1,1]',0), + +25100 => array('Problem with color palette and your GD setup. Please disable anti-aliasing or use GD2 with true-color. If you have GD2 library installed please make sure that you have set the USE_GD2 constant to true and truecolor is enabled.',0), +25101 => array('Illegal numeric argument to SetLineStyle(): (%d)',1), +25102 => array('Illegal string argument to SetLineStyle(): %s',1), +25103 => array('Illegal argument to SetLineStyle %s',1), +25104 => array('Unknown line style: %s',1), +25105 => array('NULL data specified for a filled polygon. Check that your data is not NULL.',0), +25106 => array('Image::FillToBorder : Can not allocate more colors',0), +25107 => array('Can\'t write to file "%s". Check that the process running PHP has enough permission.',1), +25108 => array('Can\'t stream image. This is most likely due to a faulty PHP/GD setup. Try to recompile PHP and use the built-in GD library that comes with PHP.',0), +25109 => array('Your PHP (and GD-lib) installation does not appear to support any known graphic formats. You need to first make sure GD is compiled as a module to PHP. If you also want to use JPEG images you must get the JPEG library. Please see the PHP docs for details.',0), + +25110 => array('Your PHP installation does not support the chosen graphic format: %s',1), +25111 => array('Can\'t delete cached image %s. Permission problem?',1), +25112 => array('Cached imagefile (%s) has file date in the future.',1), +25113 => array('Can\'t delete cached image "%s". Permission problem?',1), +25114 => array('PHP has not enough permissions to write to the cache file "%s". Please make sure that the user running PHP has write permission for this file if you wan to use the cache system with JpGraph.',1), +25115 => array('Can\'t set permission for cached image "%s". Permission problem?',1), +25116 => array('Cant open file from cache "%s"',1), +25117 => array('Can\'t open cached image "%s" for reading.',1), +25118 => array('Can\'t create directory "%s". Make sure PHP has write permission to this directory.',1), +25119 => array('Can\'t set permissions for "%s". Permission problems?',1), + +25120 => array('Position for legend must be given as percentage in range 0-1',0), +25121 => array('Empty input data array specified for plot. Must have at least one data point.',0), +25122 => array('Stroke() must be implemented by concrete subclass to class Plot',0), +25123 => array('You can\'t use a text X-scale with specified X-coords. Use a "int" or "lin" scale instead.',0), +25124 => array('The input data array must have consecutive values from position 0 and forward. The given y-array starts with empty values (NULL)',0), +25125 => array('Illegal direction for static line',0), +25126 => array('Can\'t create truecolor image. Check that the GD2 library is properly setup with PHP.',0), +25127 => array('The library has been configured for automatic encoding conversion of Japanese fonts. This requires that PHP has the mb_convert_encoding() function. Your PHP installation lacks this function (PHP needs the "--enable-mbstring" when compiled).',0), + +/* +**--------------------------------------------------------------------------------------------- +** Pro-version strings +**--------------------------------------------------------------------------------------------- +*/ + +/* +** jpgraph_table +*/ + +27001 => array('GTextTable: Invalid argument to Set(). Array argument must be 2 dimensional',0), +27002 => array('GTextTable: Invalid argument to Set()',0), +27003 => array('GTextTable: Wrong number of arguments to GTextTable::SetColor()',0), +27004 => array('GTextTable: Specified cell range to be merged is not valid.',0), +27005 => array('GTextTable: Cannot merge already merged cells in the range: (%d,%d) to (%d,%d)',4), +27006 => array('GTextTable: Column argument = %d is outside specified table size.',1), +27007 => array('GTextTable: Row argument = %d is outside specified table size.',1), +27008 => array('GTextTable: Column and row size arrays must match the dimensions of the table',0), +27009 => array('GTextTable: Number of table columns or rows are 0. Make sure Init() or Set() is called.',0), +27010 => array('GTextTable: No alignment specified in call to SetAlign()',0), +27011 => array('GTextTable: Unknown alignment specified in SetAlign(). Horizontal=%s, Vertical=%s',2), +27012 => array('GTextTable: Internal error. Invalid alignment specified =%s',1), +27013 => array('GTextTable: Argument to FormatNumber() must be a string.',0), +27014 => array('GTextTable: Table is not initilaized with either a call to Set() or Init()',0), +27015 => array('GTextTable: Cell image constrain type must be TIMG_WIDTH or TIMG_HEIGHT',0), + +/* +** jpgraph_windrose +*/ + +22001 => array('Total percentage for all windrose legs in a windrose plot can not exceed 100%% !\n(Current max is: %d)',1), +22002 => array('Graph is too small to have a scale. Please make the graph larger.',0), +22004 => array('Label specification for windrose directions must have 16 values (one for each compass direction).',0), +22005 => array('Line style for radial lines must be on of ("solid","dotted","dashed","longdashed") ',0), +22006 => array('Illegal windrose type specified.',0), +22007 => array('To few values for the range legend.',0), +22008 => array('Internal error: Trying to plot free Windrose even though type is not a free windrose',0), +22009 => array('You have specified the same direction twice, once with an angle and once with a compass direction (%f degrees)',0), +22010 => array('Direction must either be a numeric value or one of the 16 compass directions',0), +22011 => array('Windrose index must be numeric or direction label. You have specified index=%d',1), +22012 => array('Windrose radial axis specification contains a direction which is not enabled.',0), +22013 => array('You have specified the look&feel for the same compass direction twice, once with text and once with index (Index=%d)',1), +22014 => array('Index for compass direction must be between 0 and 15.',0), +22015 => array('You have specified an undefined Windrose plot type.',0), +22016 => array('Windrose leg index must be numeric or direction label.',0), +22017 => array('Windrose data contains a direction which is not enabled. Please adjust what labels are displayed.',0), +22018 => array('You have specified data for the same compass direction twice, once with text and once with index (Index=%d)',1), +22019 => array('Index for direction must be between 0 and 15. You can\'t specify angles for a Regular Windplot, only index and compass directions.',0), +22020 => array('Windrose plot is too large to fit the specified Graph size. Please use WindrosePlot::SetSize() to make the plot smaller or increase the size of the Graph in the initial WindroseGraph() call.',0), +22021 => array('It is only possible to add Text, IconPlot or WindrosePlot to a Windrose Graph',0), + +/* +** jpgraph_odometer +*/ + +13001 => array('Unknown needle style (%d).',1), +13002 => array('Value for odometer (%f) is outside specified scale [%f,%f]',3), + +/* +** jpgraph_barcode +*/ + +1001 => array('Unknown encoder specification: %s',1), +1002 => array('Data validation failed. Can\'t encode [%s] using encoding "%s"',2), +1003 => array('Internal encoding error. Trying to encode %s is not possible in Code 128',1), +1004 => array('Internal barcode error. Unknown UPC-E encoding type: %s',1), +1005 => array('Internal error. Can\'t encode character tuple (%s, %s) in Code-128 charset C',2), +1006 => array('Internal encoding error for CODE 128. Trying to encode control character in CHARSET != A',0), +1007 => array('Internal encoding error for CODE 128. Trying to encode DEL in CHARSET != B',0), +1008 => array('Internal encoding error for CODE 128. Trying to encode small letters in CHARSET != B',0), +1009 => array('Encoding using CODE 93 is not yet supported.',0), +1010 => array('Encoding using POSTNET is not yet supported.',0), +1011 => array('Non supported barcode backend for type %s',1), + +/* +** PDF417 +*/ + +26001 => array('PDF417: Number of Columns must be >= 1 and <= 30',0), +26002 => array('PDF417: Error level must be between 0 and 8',0), +26003 => array('PDF417: Invalid format for input data to encode with PDF417',0), +26004 => array('PDF417: Can\'t encode given data with error level %d and %d columns since it results in too many symbols or more than 90 rows.',2), +26005 => array('PDF417: Can\'t open file "%s" for writing',1), +26006 => array('PDF417: Internal error. Data files for PDF417 cluster %d is corrupted.',1), +26007 => array('PDF417: Internal error. GetPattern: Illegal Code Value = %d (row=%d)',2), +26008 => array('PDF417: Internal error. Mode not found in mode list!! mode=%d',1), +26009 => array('PDF417: Encode error: Illegal character. Can\'t encode character with ASCII code=%d',1), +26010 => array('PDF417: Internal error: No input data in decode.',0), +26011 => array('PDF417: Encoding error. Can\'t use numeric encoding on non-numeric data.',0), +26012 => array('PDF417: Internal error. No input data to decode for Binary compressor.',0), +26013 => array('PDF417: Internal error. Checksum error. Coefficient tables corrupted.',0), +26014 => array('PDF417: Internal error. No data to calculate codewords on.',0), +26015 => array('PDF417: Internal error. State transition table entry 0 is NULL. Entry 1 = (%s)',1), +26016 => array('PDF417: Internal error: Unrecognized state transition mode in decode.',0), + + +); + +/* + ** EOF + */ + +?> diff --git a/html/includes/jpgraph/src/lang/prod.inc.php b/html/includes/jpgraph/src/lang/prod.inc.php new file mode 100644 index 0000000000..4f2715d1eb --- /dev/null +++ b/html/includes/jpgraph/src/lang/prod.inc.php @@ -0,0 +1,354 @@ +,) +$_jpg_messages = array( + +/* +** Headers already sent error. This is formatted as HTML different since this will be sent back directly as text +*/ +10 => array('
    JpGraph Error: +HTTP headers have already been sent.
    Caused by output from file %s at line %d.
    Explanation:
    HTTP headers have already been sent back to the browser indicating the data as text before the library got a chance to send it\'s image HTTP header to this browser. This makes it impossible for the library to send back image data to the browser (since that would be interpretated as text by the browser and show up as junk text).

    Most likely you have some text in your script before the call to Graph::Stroke(). If this texts gets sent back to the browser the browser will assume that all data is plain text. Look for any text, even spaces and newlines, that might have been sent back to the browser.

    For example it is a common mistake to leave a blank line before the opening "<?php".

    ',2), + + +11 => array(DEFAULT_ERROR_MESSAGE.'11',0), +12 => array(DEFAULT_ERROR_MESSAGE.'12',0), +13 => array(DEFAULT_ERROR_MESSAGE.'13',0), +2001 => array(DEFAULT_ERROR_MESSAGE.'2001',0), +2002 => array(DEFAULT_ERROR_MESSAGE.'2002',0), +2003 => array(DEFAULT_ERROR_MESSAGE.'2003',0), +2004 => array(DEFAULT_ERROR_MESSAGE.'2004',0), +2005 => array(DEFAULT_ERROR_MESSAGE.'2005',0), +2006 => array(DEFAULT_ERROR_MESSAGE.'2006',0), +2007 => array(DEFAULT_ERROR_MESSAGE.'2007',0), +2008 => array(DEFAULT_ERROR_MESSAGE.'2008',0), +2009 => array(DEFAULT_ERROR_MESSAGE.'2009',0), +2010 => array(DEFAULT_ERROR_MESSAGE.'2010',0), +2011 => array(DEFAULT_ERROR_MESSAGE.'2011',0), +2012 => array(DEFAULT_ERROR_MESSAGE.'2012',0), +2013 => array(DEFAULT_ERROR_MESSAGE.'2013',0), +2014 => array(DEFAULT_ERROR_MESSAGE.'2014',0), +3001 => array(DEFAULT_ERROR_MESSAGE.'3001',0), +4002 => array(DEFAULT_ERROR_MESSAGE.'4002',0), +5001 => array(DEFAULT_ERROR_MESSAGE.'5001',0), +5002 => array(DEFAULT_ERROR_MESSAGE.'5002',0), +5003 => array(DEFAULT_ERROR_MESSAGE.'5003',0), +5004 => array(DEFAULT_ERROR_MESSAGE.'5004',0), +6001 => array(DEFAULT_ERROR_MESSAGE.'6001',0), +6002 => array(DEFAULT_ERROR_MESSAGE.'6002',0), +6003 => array(DEFAULT_ERROR_MESSAGE.'6003',0), +6004 => array(DEFAULT_ERROR_MESSAGE.'6004',0), +6005 => array(DEFAULT_ERROR_MESSAGE.'6005',0), +6006 => array(DEFAULT_ERROR_MESSAGE.'6006',0), +6007 => array(DEFAULT_ERROR_MESSAGE.'6007',0), +6008 => array(DEFAULT_ERROR_MESSAGE.'6008',0), +6009 => array(DEFAULT_ERROR_MESSAGE.'6009',0), +6010 => array(DEFAULT_ERROR_MESSAGE.'6010',0), +6011 => array(DEFAULT_ERROR_MESSAGE.'6011',0), +6012 => array(DEFAULT_ERROR_MESSAGE.'6012',0), +6015 => array(DEFAULT_ERROR_MESSAGE.'6015',0), +6016 => array(DEFAULT_ERROR_MESSAGE.'6016',0), +6017 => array(DEFAULT_ERROR_MESSAGE.'6017',0), +6018 => array(DEFAULT_ERROR_MESSAGE.'6018',0), +6019 => array(DEFAULT_ERROR_MESSAGE.'6019',0), +6020 => array(DEFAULT_ERROR_MESSAGE.'6020',0), +6021 => array(DEFAULT_ERROR_MESSAGE.'6021',0), +6022 => array(DEFAULT_ERROR_MESSAGE.'6022',0), +6023 => array(DEFAULT_ERROR_MESSAGE.'6023',0), +6024 => array(DEFAULT_ERROR_MESSAGE.'6024',0), +6025 => array(DEFAULT_ERROR_MESSAGE.'6025',0), +6027 => array(DEFAULT_ERROR_MESSAGE.'6027',0), +6028 => array(DEFAULT_ERROR_MESSAGE.'6028',0), +6029 => array(DEFAULT_ERROR_MESSAGE.'6029',0), +6030 => array(DEFAULT_ERROR_MESSAGE.'6030',0), +6031 => array(DEFAULT_ERROR_MESSAGE.'6031',0), +6032 => array(DEFAULT_ERROR_MESSAGE.'6032',0), +7001 => array(DEFAULT_ERROR_MESSAGE.'7001',0), +8001 => array(DEFAULT_ERROR_MESSAGE.'8001',0), +8002 => array(DEFAULT_ERROR_MESSAGE.'8002',0), +8003 => array(DEFAULT_ERROR_MESSAGE.'8003',0), +8004 => array(DEFAULT_ERROR_MESSAGE.'8004',0), +9001 => array(DEFAULT_ERROR_MESSAGE.'9001',0), +10001 => array(DEFAULT_ERROR_MESSAGE.'10001',0), +10002 => array(DEFAULT_ERROR_MESSAGE.'10002',0), +11001 => array(DEFAULT_ERROR_MESSAGE.'11001',0), +11002 => array(DEFAULT_ERROR_MESSAGE.'11002',0), +11003 => array(DEFAULT_ERROR_MESSAGE.'11003',0), +11004 => array(DEFAULT_ERROR_MESSAGE.'11004',0), +11005 => array(DEFAULT_ERROR_MESSAGE.'11005',0), +12001 => array(DEFAULT_ERROR_MESSAGE.'12001',0), +12002 => array(DEFAULT_ERROR_MESSAGE.'12002',0), +12003 => array(DEFAULT_ERROR_MESSAGE.'12003',0), +12004 => array(DEFAULT_ERROR_MESSAGE.'12004',0), +12005 => array(DEFAULT_ERROR_MESSAGE.'12005',0), +12006 => array(DEFAULT_ERROR_MESSAGE.'12006',0), +12007 => array(DEFAULT_ERROR_MESSAGE.'12007',0), +12008 => array(DEFAULT_ERROR_MESSAGE.'12008',0), +12009 => array(DEFAULT_ERROR_MESSAGE.'12009',0), +12010 => array(DEFAULT_ERROR_MESSAGE.'12010',0), +12011 => array(DEFAULT_ERROR_MESSAGE.'12011',0), +12012 => array(DEFAULT_ERROR_MESSAGE.'12012',0), +14001 => array(DEFAULT_ERROR_MESSAGE.'14001',0), +14002 => array(DEFAULT_ERROR_MESSAGE.'14002',0), +14003 => array(DEFAULT_ERROR_MESSAGE.'14003',0), +14004 => array(DEFAULT_ERROR_MESSAGE.'14004',0), +14005 => array(DEFAULT_ERROR_MESSAGE.'14005',0), +14006 => array(DEFAULT_ERROR_MESSAGE.'14006',0), +14007 => array(DEFAULT_ERROR_MESSAGE.'14007',0), +15001 => array(DEFAULT_ERROR_MESSAGE.'15001',0), +15002 => array(DEFAULT_ERROR_MESSAGE.'15002',0), +15003 => array(DEFAULT_ERROR_MESSAGE.'15003',0), +15004 => array(DEFAULT_ERROR_MESSAGE.'15004',0), +15005 => array(DEFAULT_ERROR_MESSAGE.'15005',0), +15006 => array(DEFAULT_ERROR_MESSAGE.'15006',0), +15007 => array(DEFAULT_ERROR_MESSAGE.'15007',0), +15008 => array(DEFAULT_ERROR_MESSAGE.'15008',0), +15009 => array(DEFAULT_ERROR_MESSAGE.'15009',0), +15010 => array(DEFAULT_ERROR_MESSAGE.'15010',0), +15011 => array(DEFAULT_ERROR_MESSAGE.'15011',0), +16001 => array(DEFAULT_ERROR_MESSAGE.'16001',0), +16002 => array(DEFAULT_ERROR_MESSAGE.'16002',0), +16003 => array(DEFAULT_ERROR_MESSAGE.'16003',0), +16004 => array(DEFAULT_ERROR_MESSAGE.'16004',0), +17001 => array(DEFAULT_ERROR_MESSAGE.'17001',0), +17002 => array(DEFAULT_ERROR_MESSAGE.'17002',0), +17004 => array(DEFAULT_ERROR_MESSAGE.'17004',0), +18001 => array(DEFAULT_ERROR_MESSAGE.'18001',0), +18002 => array(DEFAULT_ERROR_MESSAGE.'18002',0), +18003 => array(DEFAULT_ERROR_MESSAGE.'18003',0), +18004 => array(DEFAULT_ERROR_MESSAGE.'18004',0), +18005 => array(DEFAULT_ERROR_MESSAGE.'18005',0), +18006 => array(DEFAULT_ERROR_MESSAGE.'18006',0), +18007 => array(DEFAULT_ERROR_MESSAGE.'18007',0), +18008 => array(DEFAULT_ERROR_MESSAGE.'18008',0), +19001 => array(DEFAULT_ERROR_MESSAGE.'19001',0), +19002 => array(DEFAULT_ERROR_MESSAGE.'19002',0), +19003 => array(DEFAULT_ERROR_MESSAGE.'19003',0), +20001 => array(DEFAULT_ERROR_MESSAGE.'20001',0), +20002 => array(DEFAULT_ERROR_MESSAGE.'20002',0), +20003 => array(DEFAULT_ERROR_MESSAGE.'20003',0), +21001 => array(DEFAULT_ERROR_MESSAGE.'21001',0), +23001 => array(DEFAULT_ERROR_MESSAGE.'23001',0), +23002 => array(DEFAULT_ERROR_MESSAGE.'23002',0), +23003 => array(DEFAULT_ERROR_MESSAGE.'23003',0), +24001 => array(DEFAULT_ERROR_MESSAGE.'24001',0), +24002 => array(DEFAULT_ERROR_MESSAGE.'24002',0), +24003 => array(DEFAULT_ERROR_MESSAGE.'24003',0), +25001 => array(DEFAULT_ERROR_MESSAGE.'25001',0), +25002 => array(DEFAULT_ERROR_MESSAGE.'25002',0), +25003 => array(DEFAULT_ERROR_MESSAGE.'25003',0), +25004 => array(DEFAULT_ERROR_MESSAGE.'25004',0), +25005 => array(DEFAULT_ERROR_MESSAGE.'25005',0), +25006 => array(DEFAULT_ERROR_MESSAGE.'25006',0), +25007 => array(DEFAULT_ERROR_MESSAGE.'25007',0), +25008 => array(DEFAULT_ERROR_MESSAGE.'25008',0), +25009 => array(DEFAULT_ERROR_MESSAGE.'25009',0), +25010 => array(DEFAULT_ERROR_MESSAGE.'25010',0), +25011 => array(DEFAULT_ERROR_MESSAGE.'25011',0), +25012 => array(DEFAULT_ERROR_MESSAGE.'25012',0), +25013 => array(DEFAULT_ERROR_MESSAGE.'25013',0), +25014 => array(DEFAULT_ERROR_MESSAGE.'25014',0), +25015 => array(DEFAULT_ERROR_MESSAGE.'25015',0), +25016 => array(DEFAULT_ERROR_MESSAGE.'25016',0), +25017 => array(DEFAULT_ERROR_MESSAGE.'25017',0), +25018 => array(DEFAULT_ERROR_MESSAGE.'25018',0), +25019 => array(DEFAULT_ERROR_MESSAGE.'25019',0), +25020 => array(DEFAULT_ERROR_MESSAGE.'25020',0), +25021 => array(DEFAULT_ERROR_MESSAGE.'25021',0), +25022 => array(DEFAULT_ERROR_MESSAGE.'25022',0), +25023 => array(DEFAULT_ERROR_MESSAGE.'25023',0), +25024 => array(DEFAULT_ERROR_MESSAGE.'25024',0), +25025 => array(DEFAULT_ERROR_MESSAGE.'25025',0), +25026 => array(DEFAULT_ERROR_MESSAGE.'25026',0), +25027 => array(DEFAULT_ERROR_MESSAGE.'25027',0), +25028 => array(DEFAULT_ERROR_MESSAGE.'25028',0), +25029 => array(DEFAULT_ERROR_MESSAGE.'25029',0), +25030 => array(DEFAULT_ERROR_MESSAGE.'25030',0), +25031 => array(DEFAULT_ERROR_MESSAGE.'25031',0), +25032 => array(DEFAULT_ERROR_MESSAGE.'25032',0), +25033 => array(DEFAULT_ERROR_MESSAGE.'25033',0), +25034 => array(DEFAULT_ERROR_MESSAGE.'25034',0), +25035 => array(DEFAULT_ERROR_MESSAGE.'25035',0), +25036 => array(DEFAULT_ERROR_MESSAGE.'25036',0), +25037 => array(DEFAULT_ERROR_MESSAGE.'25037',0), +25038 => array(DEFAULT_ERROR_MESSAGE.'25038',0), +25039 => array(DEFAULT_ERROR_MESSAGE.'25039',0), +25040 => array(DEFAULT_ERROR_MESSAGE.'25040',0), +25041 => array(DEFAULT_ERROR_MESSAGE.'25041',0), +25042 => array(DEFAULT_ERROR_MESSAGE.'25042',0), +25043 => array(DEFAULT_ERROR_MESSAGE.'25043',0), +25044 => array(DEFAULT_ERROR_MESSAGE.'25044',0), +25045 => array(DEFAULT_ERROR_MESSAGE.'25045',0), +25046 => array(DEFAULT_ERROR_MESSAGE.'25046',0), +25047 => array(DEFAULT_ERROR_MESSAGE.'25047',0), +25048 => array(DEFAULT_ERROR_MESSAGE.'25048',0), +25049 => array(DEFAULT_ERROR_MESSAGE.'25049',0), +25050 => array(DEFAULT_ERROR_MESSAGE.'25050',0), +25051 => array(DEFAULT_ERROR_MESSAGE.'25051',0), +25052 => array(DEFAULT_ERROR_MESSAGE.'25052',0), +25053 => array(DEFAULT_ERROR_MESSAGE.'25053',0), +25054 => array(DEFAULT_ERROR_MESSAGE.'25054',0), +25055 => array(DEFAULT_ERROR_MESSAGE.'25055',0), +25056 => array(DEFAULT_ERROR_MESSAGE.'25056',0), +25057 => array(DEFAULT_ERROR_MESSAGE.'25057',0), +25058 => array(DEFAULT_ERROR_MESSAGE.'25058',0), +25059 => array(DEFAULT_ERROR_MESSAGE.'25059',0), +25060 => array(DEFAULT_ERROR_MESSAGE.'25060',0), +25061 => array(DEFAULT_ERROR_MESSAGE.'25061',0), +25062 => array(DEFAULT_ERROR_MESSAGE.'25062',0), +25063 => array(DEFAULT_ERROR_MESSAGE.'25063',0), +25064 => array(DEFAULT_ERROR_MESSAGE.'25064',0), +25065 => array(DEFAULT_ERROR_MESSAGE.'25065',0), +25066 => array(DEFAULT_ERROR_MESSAGE.'25066',0), +25067 => array(DEFAULT_ERROR_MESSAGE.'25067',0), +25068 => array(DEFAULT_ERROR_MESSAGE.'25068',0), +25069 => array(DEFAULT_ERROR_MESSAGE.'25069',0), +25070 => array(DEFAULT_ERROR_MESSAGE.'25070',0), +25071 => array(DEFAULT_ERROR_MESSAGE.'25071',0), +25072 => array(DEFAULT_ERROR_MESSAGE.'25072',0), +25073 => array(DEFAULT_ERROR_MESSAGE.'25073',0), +25074 => array(DEFAULT_ERROR_MESSAGE.'25074',0), +25075 => array(DEFAULT_ERROR_MESSAGE.'25075',0), +25077 => array(DEFAULT_ERROR_MESSAGE.'25077',0), +25078 => array(DEFAULT_ERROR_MESSAGE.'25078',0), +25079 => array(DEFAULT_ERROR_MESSAGE.'25079',0), +25080 => array(DEFAULT_ERROR_MESSAGE.'25080',0), +25081 => array(DEFAULT_ERROR_MESSAGE.'25081',0), +25082 => array(DEFAULT_ERROR_MESSAGE.'25082',0), +25083 => array(DEFAULT_ERROR_MESSAGE.'25083',0), +25084 => array(DEFAULT_ERROR_MESSAGE.'25084',0), +25085 => array(DEFAULT_ERROR_MESSAGE.'25085',0), +25086 => array(DEFAULT_ERROR_MESSAGE.'25086',0), +25087 => array(DEFAULT_ERROR_MESSAGE.'25087',0), +25088 => array(DEFAULT_ERROR_MESSAGE.'25088',0), +25089 => array(DEFAULT_ERROR_MESSAGE.'25089',0), +25090 => array(DEFAULT_ERROR_MESSAGE.'25090',0), +25091 => array(DEFAULT_ERROR_MESSAGE.'25091',0), +25092 => array(DEFAULT_ERROR_MESSAGE.'25092',0), +25093 => array(DEFAULT_ERROR_MESSAGE.'25093',0), +25094 => array(DEFAULT_ERROR_MESSAGE.'25094',0), +25095 => array(DEFAULT_ERROR_MESSAGE.'25095',0), +25096 => array(DEFAULT_ERROR_MESSAGE.'25096',0), +25097 => array(DEFAULT_ERROR_MESSAGE.'25097',0), +25098 => array(DEFAULT_ERROR_MESSAGE.'25098',0), +25099 => array(DEFAULT_ERROR_MESSAGE.'25099',0), +25100 => array(DEFAULT_ERROR_MESSAGE.'25100',0), +25101 => array(DEFAULT_ERROR_MESSAGE.'25101',0), +25102 => array(DEFAULT_ERROR_MESSAGE.'25102',0), +25103 => array(DEFAULT_ERROR_MESSAGE.'25103',0), +25104 => array(DEFAULT_ERROR_MESSAGE.'25104',0), +25105 => array(DEFAULT_ERROR_MESSAGE.'25105',0), +25106 => array(DEFAULT_ERROR_MESSAGE.'25106',0), +25107 => array(DEFAULT_ERROR_MESSAGE.'25107',0), +25108 => array(DEFAULT_ERROR_MESSAGE.'25108',0), +25109 => array(DEFAULT_ERROR_MESSAGE.'25109',0), +25110 => array(DEFAULT_ERROR_MESSAGE.'25110',0), +25111 => array(DEFAULT_ERROR_MESSAGE.'25111',0), +25112 => array(DEFAULT_ERROR_MESSAGE.'25112',0), +25113 => array(DEFAULT_ERROR_MESSAGE.'25113',0), +25114 => array(DEFAULT_ERROR_MESSAGE.'25114',0), +25115 => array(DEFAULT_ERROR_MESSAGE.'25115',0), +25116 => array(DEFAULT_ERROR_MESSAGE.'25116',0), +25117 => array(DEFAULT_ERROR_MESSAGE.'25117',0), +25118 => array(DEFAULT_ERROR_MESSAGE.'25118',0), +25119 => array(DEFAULT_ERROR_MESSAGE.'25119',0), +25120 => array(DEFAULT_ERROR_MESSAGE.'25120',0), +25121 => array(DEFAULT_ERROR_MESSAGE.'25121',0), +25122 => array(DEFAULT_ERROR_MESSAGE.'25122',0), +25123 => array(DEFAULT_ERROR_MESSAGE.'25123',0), +25124 => array(DEFAULT_ERROR_MESSAGE.'25124',0), +25125 => array(DEFAULT_ERROR_MESSAGE.'25125',0), +25126 => array(DEFAULT_ERROR_MESSAGE.'25126',0), +25127 => array(DEFAULT_ERROR_MESSAGE.'25126',0), +24003 => array(DEFAULT_ERROR_MESSAGE.'24003',0), +24004 => array(DEFAULT_ERROR_MESSAGE.'24004',0), +24005 => array(DEFAULT_ERROR_MESSAGE.'24005',0), +24006 => array(DEFAULT_ERROR_MESSAGE.'24006',0), +24007 => array(DEFAULT_ERROR_MESSAGE.'24007',0), +24008 => array(DEFAULT_ERROR_MESSAGE.'24008',0), +24009 => array(DEFAULT_ERROR_MESSAGE.'24009',0), +24010 => array(DEFAULT_ERROR_MESSAGE.'24010',0), +24011 => array(DEFAULT_ERROR_MESSAGE.'24011',0), +24012 => array(DEFAULT_ERROR_MESSAGE.'24012',0), +24013 => array(DEFAULT_ERROR_MESSAGE.'24013',0), +24014 => array(DEFAULT_ERROR_MESSAGE.'24014',0), +24015 => array(DEFAULT_ERROR_MESSAGE.'24015',0), +22001 => array(DEFAULT_ERROR_MESSAGE.'22001',0), +22002 => array(DEFAULT_ERROR_MESSAGE.'22002',0), +22004 => array(DEFAULT_ERROR_MESSAGE.'22004',0), +22005 => array(DEFAULT_ERROR_MESSAGE.'22005',0), +22006 => array(DEFAULT_ERROR_MESSAGE.'22006',0), +22007 => array(DEFAULT_ERROR_MESSAGE.'22007',0), +22008 => array(DEFAULT_ERROR_MESSAGE.'22008',0), +22009 => array(DEFAULT_ERROR_MESSAGE.'22009',0), +22010 => array(DEFAULT_ERROR_MESSAGE.'22010',0), +22011 => array(DEFAULT_ERROR_MESSAGE.'22011',0), +22012 => array(DEFAULT_ERROR_MESSAGE.'22012',0), +22013 => array(DEFAULT_ERROR_MESSAGE.'22013',0), +22014 => array(DEFAULT_ERROR_MESSAGE.'22014',0), +22015 => array(DEFAULT_ERROR_MESSAGE.'22015',0), +22016 => array(DEFAULT_ERROR_MESSAGE.'22016',0), +22017 => array(DEFAULT_ERROR_MESSAGE.'22017',0), +22018 => array(DEFAULT_ERROR_MESSAGE.'22018',0), +22019 => array(DEFAULT_ERROR_MESSAGE.'22019',0), +22020 => array(DEFAULT_ERROR_MESSAGE.'22020',0), +13001 => array(DEFAULT_ERROR_MESSAGE.'13001',0), +13002 => array(DEFAULT_ERROR_MESSAGE.'13002',0), +1001 => array(DEFAULT_ERROR_MESSAGE.'1001',0), +1002 => array(DEFAULT_ERROR_MESSAGE.'1002',0), +1003 => array(DEFAULT_ERROR_MESSAGE.'1003',0), +1004 => array(DEFAULT_ERROR_MESSAGE.'1004',0), +1005 => array(DEFAULT_ERROR_MESSAGE.'1005',0), +1006 => array(DEFAULT_ERROR_MESSAGE.'1006',0), +1007 => array(DEFAULT_ERROR_MESSAGE.'1007',0), +1008 => array(DEFAULT_ERROR_MESSAGE.'1008',0), +1009 => array(DEFAULT_ERROR_MESSAGE.'1009',0), +1010 => array(DEFAULT_ERROR_MESSAGE.'1010',0), +1011 => array(DEFAULT_ERROR_MESSAGE.'1011',0), +26001 => array(DEFAULT_ERROR_MESSAGE.'26001',0), +26002 => array(DEFAULT_ERROR_MESSAGE.'26002',0), +26003 => array(DEFAULT_ERROR_MESSAGE.'26003',0), +26004 => array(DEFAULT_ERROR_MESSAGE.'26004',0), +26005 => array(DEFAULT_ERROR_MESSAGE.'26005',0), +26006 => array(DEFAULT_ERROR_MESSAGE.'26006',0), +26007 => array(DEFAULT_ERROR_MESSAGE.'26007',0), +26008 => array(DEFAULT_ERROR_MESSAGE.'26008',0), +26009 => array(DEFAULT_ERROR_MESSAGE.'26009',0), +26010 => array(DEFAULT_ERROR_MESSAGE.'26010',0), +26011 => array(DEFAULT_ERROR_MESSAGE.'26011',0), +26012 => array(DEFAULT_ERROR_MESSAGE.'26012',0), +26013 => array(DEFAULT_ERROR_MESSAGE.'26013',0), +26014 => array(DEFAULT_ERROR_MESSAGE.'26014',0), +26015 => array(DEFAULT_ERROR_MESSAGE.'26015',0), +26016 => array(DEFAULT_ERROR_MESSAGE.'26016',0), + +27001 => array(DEFAULT_ERROR_MESSAGE.'27001',0), +27002 => array(DEFAULT_ERROR_MESSAGE.'27002',0), +27003 => array(DEFAULT_ERROR_MESSAGE.'27003',0), +27004 => array(DEFAULT_ERROR_MESSAGE.'27004',0), +27005 => array(DEFAULT_ERROR_MESSAGE.'27005',0), +27006 => array(DEFAULT_ERROR_MESSAGE.'27006',0), +27007 => array(DEFAULT_ERROR_MESSAGE.'27007',0), +27008 => array(DEFAULT_ERROR_MESSAGE.'27008',0), +27009 => array(DEFAULT_ERROR_MESSAGE.'27009',0), +27010 => array(DEFAULT_ERROR_MESSAGE.'27010',0), +27011 => array(DEFAULT_ERROR_MESSAGE.'27011',0), +27012 => array(DEFAULT_ERROR_MESSAGE.'27012',0), +27013 => array(DEFAULT_ERROR_MESSAGE.'27013',0), +27014 => array(DEFAULT_ERROR_MESSAGE.'27014',0), +27015 => array(DEFAULT_ERROR_MESSAGE.'27015',0), +); + +?> diff --git a/includes/billing.php b/includes/billing.php index 0a2013c741..695730fb31 100644 --- a/includes/billing.php +++ b/includes/billing.php @@ -149,7 +149,7 @@ function getRates($bill_id,$datefrom,$dateto) { $q_95_text = $q_95_text . " AND timestamp > $datefrom AND timestamp <= $dateto ORDER BY delta ASC"; $q_95th = mysql_query($q_95_text); $m_95th = mysql_result($q_95th,$measurement_95th); - $mt_q = mysql_query("SELECT sum(delta) FROM bill_data WHERE bill_id = $bill_id AND timestamp > $datefrom AND timestamp <= $dateto"); + $mt_q = mysql_query("SELECT SUM(delta) FROM bill_data WHERE bill_id = '$bill_id' AND timestamp > '$datefrom' AND timestamp <= '$dateto'"); $mtot = mysql_result($mt_q,0); $data['rate_95th_in'] = get95thIn($bill_id,$datefrom,$dateto); $data['rate_95th_out'] = get95thOut($bill_id,$datefrom,$dateto);

  2. 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 Fe*q9&RIdO4 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/src/flags_thumb35x35.dat b/html/includes/jpgraph/src/flags_thumb35x35.dat new file mode 100644 index 0000000000000000000000000000000000000000..7335011ec99e98dba5d52d6a02a5e0453d69cce4 GIT binary patch literal 214310 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

    +Table of Contents

lDJ_`AV>8BpZxIlWzap+r! zH~)JQk2{{c7M^l}t^fx3NPy^hp{NOmz5oeC>FZ|;THk}3m<>`w75ktf+XY8pbNP!$ zmP^@@iLl}WLPdlL`{&~in1Q5*G$3`*sp@l2za z#4|)<#l~m~h0CWnw&P8L_lLOJl1uwPefdw*eico;L1%FG;uoe9URHg;I4E@`dpgMI ze{9O?_C~<`w$+TIS$m@E5UqMg*h-qB8>Z&8(q^?Thdu(IWl54A94`*5kC z@h@6SPxH1C#~S&^{PXwoTi?AGY?RmGOg;kRPq4btW^_aCc}@nC_n}rWxo^@d4<&j( z_p7{7p1RY1?DEk|yu+_XES*wIo1L*~>hm{c%{t|{=!2jA@(V7c>QQqX~3FVWXT*PPdAMm$`V&!v{^Suy2(%?JQn%=-R7G;va&$yOY3YbJI9*NwIesjjw zCwf%ouuiyR6`}<#s7E{@*WFTb5Tw*nvHdK2l1`T4D#gg>z?pZj{X!7xA6zk}{BgGk zP5@7cEn^&PmsK=N)7zvMRr{AHtAn{_#GJWQ4enecu_0XLEs3EO8UgH_Nq#_ZBTbIe zhf22%A6FBmpI8{;&-e63)y&;gk3_jtM|tVQ9OA3s>zRdh2~}n|#@;p*lynaEdfpr8 zPW4i!Z@-mp(1DXfZN_D)($B@TP|7*<*;nuCc41rDGDhg}o88|pMmK6 zgceZwmW1rDF&jO=EH38avUFKp9leOP&|5bO+>0I}oK!Pvb_McWpwG|#qP?{Dp| zm4trbb9$6Ep7c265J0~1do54j2X;#ECay0>r~bKnaX1wf z!+W8({-9G%c=v5_A`%wsgB3{oP;=fUN$XZ(jZs~$Bv2-c^gCZF-fwdi^*}9d z?>vll{h)~?nK$Ip!BRbGyA3pA_f?ztxtS6X@gSp7R4BlgLGZOxOixT$OT7)LvRE&q3afcae zq1j8j6q!C&BtsOJa7_Aczr9*IxtVF@LQZX(SjhSJ7M-zvULDlZq*!e zx3%D#8Hpw3%^ViFK4MxFD)998tnm+Y#c)ykO>Dzn;?0ZitJ|BMB`a~~dEKY^0!{68 z{LWjtYdi_<8hJ1ji!&AbMBPX*^)i=D+T+dn=^l#yrYsL0E@kE=Vi-b{UyVdB!lEU!L@Qd|Es+UK$ zz%g|VPZ6DJvX8ID`3x5FV=AwwDlb=~8{|+rTH&|ox&`93+yN|NLSFi;r%N}u*N2qx z+@$ph2thQiRWF9E6lt7Hy#A@lV_X4mj{THdCBFKsw611#A;R^>R?s zj&30JqQ+Y?7&mo(n_)DKHdF~gQA$S%_gI_-rfs)3e>NlBie%yxJ*A7Klaek_m zA@q}~$(NI~o6OV)z?D;^G=(h@E5x;+KEKA-^RJ8LP^e& z%1~#=p^9;G)O0J+8dSyf%A9zHz{z3Uy!mQNsu+HXPg6k9(hb#g$DYK3p6H*;vFx(n zVgs%)%^Cyp|I0@^nr+$iTiJK%tUL+~zf@SRAu)hMLvfadO+7+3nOjY_{&0#84m7=;EpTnkeG;1sZO4d*Y zg8MN5;(zCSuLI0xyN^vnac6_wbxsXIO~D<*Rc&Lj=BFq+S6$P-S2<=C{@7lAL@hjv zbxbhF$^)2Hh6vVP3aC0)-}Ml#dM*CRZeVz!Y4{)$2lkrk5!Hk7u_bS?T& z9KjbOJ?4$DpU1u#m-RKwTn|Ys+ghvDfzLq1I7ZpxKH~}YC2Bcg?{2#gF_rZt0cr;( z$dq&~b1^-N1uhrn;NU{XZy!XeSKZ>q83D4yhRsI1u3`Smw**Kg`tpm4pH^(nQGUb&e zdImD9mqonU#H6e@nq5D`p3~uXxTeo>AosmTW&^Y%V$Z(-85xbje2*q#qFB9?h8t5F z-!t9dTjUdid*J&+Tm^}bE=3u84Ygfzn-7Q8De;5s`TkR>2n;|DNZ&>VqW<@s|ALwR zy{sef6@_8iud8P3x)_balas-sxb+Y;`s;hrB1#C+P3rpdyH@4=Xv*#{#jD`|2Yv+- zQcnG+s5&#qVLY-Jk4HGZjII(il3#`UzbT%PEuvX}4y+w5E-uz2-)}BI$qDeOX+jE< zr{)`D_$+hP!jB3e6JcK-PJjcLCiZ1;G{yMeKhIB3PVPB-w73{;{7{%|sysjb6IOPy z+U4(F`918oE7p|(MiM!N{4pI-WP95Og(bfTDtls`U0<6QD3Z>iZ>-U)vZ1#kvT6jC zjI|``qYg=oiW`&F%xH4imH3+@?Kd#(ViAYecs74RSO_NX=In+5qy7WG=m2f@kWC&=2Fptd{<}+8s2$R% y0hU%it%WBS$GZ!*R%G^ui>d#^z<-M$M79s?AzKO^PA>mg0J@rn8Vv~hnEwM;byN=k literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example6.2.png b/html/includes/jpgraph/docs/html/img/example6.2.png new file mode 100644 index 0000000000000000000000000000000000000000..d512867dfa42c66c4a4b81bfbd2ad805f727ee5e GIT binary patch literal 2242 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 Drv+<` literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example7.png b/html/includes/jpgraph/docs/html/img/example7.png new file mode 100644 index 0000000000000000000000000000000000000000..e65732083572889c0f5ec74eb7ae178810019c89 GIT binary patch literal 4281 zcmV;q5JvBbP)000nxNkl zOP1p*5{6Nq8r8US1NI_PE6UueauLoAWRGjA9#Ez*AjBge0`Y&R&b>}qMp!0(B7%n& z1poj_?fY*3`AaFaZ5vZ%001Ib*VQ@lAC`Im0E7c+000DlGynhs{NkP&b1GSlk@1_C1#L$W@JpSC?wuO@9?J9Zva3g^0sXM)jz*DxebC#<~yKWo^? zbkmE4%P=mGhRbpqG8793Onn9rP+S2LKi~KriI#sF(ZFRG8h8yul9CH_qKs3Va{Szc zmY!hb0c|x_7Xy>&M53eFOmo03ZOQ0sKo+01U?(Xry6X-|g4-Ka%nRsK+;Z z=g7LQ&fM_C`6HKvAPwo;|F(VA7YhI(L0!;7V1{+{3vNN{%-s)RTS=4$BK?lJc3<`&N%Q^CRd{4s zDkkiuPOb7F`%oB4c!fh9I>93iqd#ag)FpD%qdS$)2Ox3y5jFIIHw`(YJvrtvVMERR z%8h>LLEFzL@JPc2o-#V2BIK{C)c>UkC2SB@bbvY6Fx*cY9kK6NkM3lJ66Ty1y5JNz zToW1vq#-jnGLLyY2*wmcq*$m!3wXATUDtP|lv2A=YFP#|t+8rLLWSw=N;S0Gec!b% zKpn_o_ZpU_O^1-Q1%>VF!AGVhwhAR2O!=7dLMAEPs4lk-Nrx7&2NXPHwV^EYxMbtZ(gkZ&qDf_fAe117eelw} z;4!K6>z=l~>ov}rP@=!BLLF$Kk%s4pL+r>A{eRIimti&vLJ3A);Jxl8A&`ckE^OOZ zx;kh&I}Rz$s4UXHlA09QTIh)qG?f88sg(w;0>LAR>aZ+b#oia7Q%Op%-DNs0s!@r{ z+>i;Wo$}=9LK(}V^xT+bSssr^eSxPu9*^(u@5keDzu%Qo-{0TC*8N`*SFiP#kDl1XLGI+ zx#+$t-MF*3-*4k~n5O%Ws6eixH}nmelW;)c?5EIrdj;DS?T~RudAwqAEk-ne<%NHT z_5bz|>4lGYLx76p8jPoq>oS-WgP(@*vD;1SjKk5Mf}u0byG?5(0()4&nshwaZj0D9 zmYmvLgGn^%7j^=&I1RBZOS=}Cv&VVWg@#x*<_tGBwXCK$1QR03ImtDgh7w2iU#1IY zAssoV#Tq@Lc<%EU!*xfxKyJXJ+z?uN)Q213xvOQ+q?CLOwEALTNan?bb<{jLa#gN#m6kQ$*4( zqUs6Q5&g_dDuGDIGW>f&!wT=%FA}-8bgOcJ1(n?-wGDxl9rlHOfUe35gQft&$@u!ZrBwB>f}jBNRQSMS4d{no_P|_gwwi6T}gq1~;HE z4uYuQs$kx9vCGhi&R%qiE->an28}7EB57VjBgbJ`{{Hii8*&w)#$~7}r{EIp$nqCD zR}YFX3gLMTeNvC12qG5$=S+4kcNy9(3_qyJqT2ZUh$9LZG3nljq(#}hq&IOYm!T1n z3~O)$w$iKQjoNb2zXE=Y?5ErHW~lZN4M_#wES!U`;&>MNMclb~dwV0Fb`e;4>G)KlIL$an8<_B~ z?o=>gd3+5rAc)mMK>#rJZ=teZ~u+F`}6a^tZUguu3u{xBX0RErelfo8jgs! z_(oZVb}>cHV|d*y-UHjhXX*lbqCrDajpAMK6QNB^8jnE!+{zcP!S|^&EKWrF(096F zq_@RB;}pe{HGEg1sI;upDG{=|#3Wfx>hzPd z#Sspv2n%!;Vk+*x5Hm!*MfTI9a( zW+2#q*O}vMCm`c(yMw=MvW(iH2o7GDgGWw>ld~l8O*mIxp0?ltTC9IC@wD`J%MiEnQghUB9SLaXGL&5H^{jat;Fu!nLTC1b_6zS+S(UW5nBAb2VlmDyhk>%#pv)Zld(G zBu#m0#Hm|I<$G5)7^;}Unz<;q0~gEdY%#uiRAA3#wAWCnvxx~QYc9xFd2>obhb`VE zAjH>|QHw+3F~wz)3(l%a^*a5r7=OKHWr2!U8q%qmPD|LB3U;rxsu6w+1h!^8^`TO9 zL5Tj6;Pn4yCbc^D2wKdBlr9a$zBg@CDUKV!Am(~mJV6{UW-nW{D~OCTRbDy$_U)07mk9L=6gdL{EalzS=V>_&u#lE zD8!~XESJ!#*h7iom`xN&_G?fFBcnAOPLx)!E3C3)qFxSaXdPFl#1vV{u+}lf5Qzp& zu`UcTLNV5U4NcOJ#&Mw4h%6IoVQjhM6sHQ(bDTnWCv4w}f~qo(P+XP6McJw%6KND- zUEd?>;QWY>$M?~hkB7S7Z%V1}@56I6`m~fYYls(qzu$A}a8pVxOYG}clXU9@a8pV> z9wXFr0_c}lrF#lq=Wsjy$nAE1&a>pCGt0Q&?+G43>hq(tL?(WPJ9Hc>b71|KRDg7PJ_AAmO-3jf2QL{-t7clX$vDue!#vsg)&mnd(Eju1Pt&W2 zVwh)M8iH+r#Rh`Sv0`avU2Ql@mIJnOA!j6MIQ`u_E=F*#MA&Q1)71mXTw&#<99ydF zwR%3#2^8@A_iyeh^n=rD(5q+)TJXVck@YpoCijUL$;FZt1s5BX!6^;<{`X(jM;!Pz zUv;ZO66l&T(B}hQM#?orkT5Vo1<7}TvVclPl?F4^CxjNc@%nFvXaW>7o;3K)oy!2) z4VA&9b6K8nSL8YjJVGI-8MM;~%#Tb2i?YcX&uehtwVZa-Y-;k6unthq@X~N$svo*V zR1YvELrQ~b^pmuHcmbe4Lr!^`hXU=x{RAY8`pnBo`~^d9K61AE1IQUNpqL66IbZ?O zFbpY?0-^~(1*BmBatAWuXn=Yk4PyXn2c3a53F3%G0zQ?H>t?0JI?2Fe-93$OM-J(l8#df6xI) z!@wBF0nr2?2huPk!TFK!CIBIjhEahKfTlnih6m9EXaS^QVBk1_c0d{~0%QWvf(_ut z28sY0f!UD5gWCvNfPex35CGBu00=O!G}N!LBUz;Y4CAfIQrBjS=aUB zpat#200FVX%KmbSs03ZO{yoSomut^aW7gAq>T~t{iREe&d?;@cN z^(92+JAyKJq@i+Zy8Ww{wSf8(?4pW4t5}7}uR!s4;r&G->m#5J#V`aE^*>ns?@iTW z>c7kSgsTEAit0(q`Up?}gV#XV{zy9f8V8tAr0Sy*M#Hv^uyZv=l(Qk=TwYZPmG{Be zTasLtBr>WO*~)65hnL2v(jdh9^;i3YVr+5YtqD+r4qlQ(`1RG;o~Y9PUx*Ee(lrui z5bGoAVelH9Ep+OQs?vQOIz+$B7b*UDusLCPq8_ZF003YO1ppuoNCN;M0Hgr`5Mb27 zOK=$yv(XZ=ty2N70hE*VG?(=G;K4JY2%Uj6fGX;r=3?fC08t>I0OdHdn^X2#bixNe zOvsw{QaQZ^M1VAaD*UHE1!IBWL!y)?F2Mqiuus!52-JZP1QehO_QylkENKT3;5C3+ zOuuda+4<^#9C!_&oU9QF`!vQgK_XZ~0m^a0`_pLO@hl=El!<2|4M~N+h62(60KoDp z06-d$1^_?+NCN;Mz%M0c8!`ZZ9F~3G?Y}=iKe?&`0FVO$3IIR=NCN;M0Hgr`5CGBu b00{7ZNO?91R(^eP00000NkvXXu0mjfq$9ZE literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example8.png b/html/includes/jpgraph/docs/html/img/example8.png new file mode 100644 index 0000000000000000000000000000000000000000..09cb26ab8bfeb16854f90de7a46275f2514f976d GIT binary patch literal 3388 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 Q_!R+nZ)>3nRZaZ=1(m^b1poj5 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example9.1.png b/html/includes/jpgraph/docs/html/img/example9.1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5808cd1490936c03f5dc96b0773c029e3ae3315 GIT binary patch literal 3569 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example9.2.png b/html/includes/jpgraph/docs/html/img/example9.2.png new file mode 100644 index 0000000000000000000000000000000000000000..659e6ddf42e49601af22ffb7e9e257bb92acc690 GIT binary patch literal 3753 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/example9.png b/html/includes/jpgraph/docs/html/img/example9.png new file mode 100644 index 0000000000000000000000000000000000000000..9e659154a0282a60650c6cfa1988a045f8645d0a GIT binary patch literal 3701 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 b5{|&x`KkrqV>4Ti%Spi4z+Aru?;P`gG_arl literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/fieldscatterex1.png b/html/includes/jpgraph/docs/html/img/fieldscatterex1.png new file mode 100644 index 0000000000000000000000000000000000000000..41c495a6ee6a46694a5c9ea9ea12d83738a7a4b9 GIT binary patch literal 5428 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/filledlineex01.1.png b/html/includes/jpgraph/docs/html/img/filledlineex01.1.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb5c67075705ecbaaea4b86e0013b3030bb267c GIT binary patch literal 2551 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/funcex1.png b/html/includes/jpgraph/docs/html/img/funcex1.png new file mode 100644 index 0000000000000000000000000000000000000000..86b99caab580bf27fd5441250cece4bb8ce5d66d GIT binary patch literal 5840 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 literal 0 HcmV?d00001 diff --git a/html/includes/jpgraph/docs/html/img/ganttconstrainex0.png b/html/includes/jpgraph/docs/html/img/ganttconstrainex0.png new file mode 100644 index 0000000000000000000000000000000000000000..edbeccb8e376d8acc42d2c236fd29cc4e0c32a47 GIT binary patch literal 3899 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