Release Notes
Changes from first releaseAdded SharpPlot.GetTextSize Nic November 2021 - v3.71 Fixed XBarChartStyles.StackedBars with logarithmic scale Nic September 2021 - v3.69 Fixed ValueTags with logarithmic scale Nic August 2021 - v3.68 Fixed ValueTagStyles.SectorValue with SharpPlot.DrawXBarChart Fixed missing values in SharpPlot.DrawXBarChart Nic August 2020 - v3.67 Fixed Windows Registry font listing in APL Nic July 2020 - v3.66 Fixed DataStyles.Relative with SharpPlot.DrawBarChart Fixed InitCauseway for Windows in APL version Nic June 2020 - v3.65 Fixed hatchings FillStyle with transparent foreground colour Fixed gradients with transparency in PDF Fixed pie wedge gradients in PDF Nic June 2020 - v3.64 Added support for background colors in hatchings FillStyle Fixed drawing the arcs twice in SharpPlot.DrawNetworkMap Fixed SharpPlot.DrawNetworkMap, SharpPlot.SplitBy and SharpPlot.GroupBy on empty arguments in APL Fixed SharpPlot.DrawKey(KeyDefinition[]) in APL Fixed custom gradient fillstyles in PDF and PS Nic June 2020 v3.63 Fixed resetting cell pointer of SharpPlot.SetTrellis when calling SharpPlot.NewPage Fixed using DocumentLayout with no frames in APL Fixed runaway coordinates in SVG Fixed space around markers for NetworkMapStyles.Dissected to be link pen width Fixed arrow tips to be exact in SharpPlot.DrawVectors Fixed default z-axis ticks for non-3D charts Fixed AltitudeShading when ZRange is 0 Fixed custom fonts on Linux Fixed custom fonts in Markers Fixed clipping of point that fall exactly on the clipping edge (used to be wrongly clipped off) Added Ascii85, Flate, and PNG compression in APL Nic January 2019 - v3.62 Fixed FillStyle.Dome in SVG Fixed crashes when frame size is less than zero Fixed arrow positioning in SharpPlot.DrawMinMaxChart Nic September 2018 - v3.61 Fixed XLabels with LogScale and InvertAxis Fixed empty pie wedges in SharpPlot.DrawPieChart Fixed Key to use SharpPlot.SetMarkerColors when a single color is used Nic August 2018 - v3.59 Fixed SharpPlot.SetXTickMarks/SetYTickMarks/SetZTickMarks to be backwards-compatible with long vector Fixed seggregation between stroke/fill transparency in PDF Fixed exception when drawing small rectangles Nic August 2018 - v3.58 Fixed SharpPlot.SetTrellis with SharpPlot.DrawMultiple Fixed negative SharpPlot.ClassInterval with SharpPlot.SetXRange Fixed SharpPlot.Backlog to log itself Nic June 2018 - v3.57 Allowed inversed range in SharpPlot.SetXRange, SharpPlot.SetYRange, SharpPlot.SetZRange Fixed SharpPlot.Backlog not to be affected by resets (see SharpPlot.ResetOption) Fixed custom dashed LineStyle in EPS to be multiplied by SharpPlot.SetPenWidths Fixed dash lines to have same aspect on all drivers Fixed hatch FillStyle in raster formats Added SharpPlot.DrawNoteOld for backwards compatibility with old, incorrect behaviour predating v3.55 Nic May 2018 - v3.56 Added SharpPlot.MissingColor SharpPlot.DrawAltitudeMatrix and SharpPlot.DrawTreeMap Added EmfType to SharpPlotViewer "save image as" dialog Added CausewayLimitException for SharpPlot.LineLimit, SharpPlot.MarkerLimit, SharpPlot.TileLimit, SharpPlot.TextLimit, SharpPlot.PixelLimit Fixed SharpPlot.MissingValue in SharpPlot.DrawAltitudeMatrix and SharpPlot.DrawResponsePlot Fixed pixel matrix in SVG and EMF Fixed hatch FillStyles in SVG Fixed hatch FillStyles to use a step of 8pts and a width of 1pt on all drivers Fixed transparency in PDF Fixed AltitudeMatrixStyles: GridLines and ExplodeAxes Fixed SharpPlotViewer's DPI label when DPI is outside the range of the trackbar Fixed SharpPlotViewer labels to scale correctly to OS DPI setting. Fixed OutOfMemoryException in SharpPlot.DrawAltitudeMatrix, SharpPlot.DrawContourPlot, SharpPlot.DrawResponsePlot Fixed OutOfMemoryException in SharpPlotViewer Fixed SharpPlot.DrawNote note alignment and boxing for non-zero rotation angles Nic March 2018 - v3.55 Fixed hatchings in EPS and PDF output Fixed wrongly omitted label at axis interception when label doesn't collide with orthogonal axis Fixed automatic tickmarks for very large spans when using LogScale Fixed SharpPlot.DrawPieChart with YAxisStyles.LogScale Fixed invisible Markers in EPS when using SharpPlot.SetPenWidths(0) Nic February 2018 - v3.54 Added ParagraphStyle.HorizontalGap for horizontal spacing around inclusions, bullets and boxes Breaking change: SharpLeaf.SetBox second argument was removed, ParagraphStyle.HoriontalGap is used instead Nic January 2018 - v3.53 Added "Save as" menu in SharpPlotViewer Fixed ScaleBar to be drawn on top of chart Fixed SharpPlot.SetChartBackground with SharpPlot.DrawPieChart Fixed Marker key with all-missing series Fixed SharpPlot.SetEdgeStyle to be observed on all block keys Fixed drawing error message when chart is undrawable Nic December 2017 - v3.52 Added AltitudeMatrixStyles.AntiAlias Fixed SharpPlot.DrawContourPlot AltitudeShading to be anti-aliased (and more light-weight) on all drivers Fixed SharpPlot.Gutter with SharpPlot.SetTrellis and SharpPlot.NewPage Fixed DPI argument to SharpPlot.SaveImage with ImageFormat.Emf Fixed coordinate rounding and comparison tolerance Fixed output image size rounding in raster formats Fixed occasional spurious Contours lines when using Curves Fixed XAxisStyles.Longitude/YAxisStyles.Latitude coordinate formatting Workaround coordinate bug in Word when exporting Metafile to PDF Nic November 2017 - v3.51 Added SharpPlot.LineLimit, SharpPlot.MarkerLimit, SharpPlot.TileLimit, SharpPlot.TextLimit, SharpPlot.PixelLimit Replaced SharpPlot.BarLimit and SharpPlot.TowerLimit with SharpPlot.TileLimit (non-breaking change) Added SharpPlot.SaveAnimatedGif, SharpLeaf.SaveAnimatedGif and Document.SaveAnimatedGif Added SharpPlot.RenderAnimatedSvg/SaveAnimatedSvg, SharpLeaf.RenderAnimatedSvg/SaveAnimatedSvg and Document.RenderAnimatedSvg/SaveAnimatedSvg Fixed enabling anti-aliasing of included images on all drivers Fixed disabling anti-aliasing of SharpPlot.DrawAltitudeMatrix on all drivers Fixed AltitudeMatrixStyles.EdgeCoordinates Fixed Color.Transparent in PDF and PostScript Fixed multiple series SharpPlot.DrawMinMaxChart using SharpPlot.SplitBy Fixed SurfaceShading clipping for 1-item series Nic October 2017 - v3.49 Fixed white background on default SharpLeaf PageLayout Fixed SharpPlotViewer with SharpLeaf and Document instances Fixed SharpPlotViewer to handle multiple pages Fixed SharpPlot.DrawNetworkMap node layout when using SharpPlot.SetAxesScales Work around anti-aliasing of pixel bitmaps produced by SharpPlot.DrawAltitudeMatrix Nic October 2017 - v3.48 Fixed Contour/Bubble plot with missing values Added (bool stretch) flag to SharpPlot.DrawImage Breaking change: SharpPlot.DrawImage: stretch used to default to true, and now defaults to false. Fixed Metafiles with Windows DPI scaling Nic September 2017 - v3.47 Added SharpPlot.DrawAltitudeMatrix for a flat, altitude-shaded X/Y response plot. Added NetworkMapStyles.RoundLines for round-ended links Added ParagraphStyle.ClearLeft and ParagraphStyle.ClearRight Fixed SharpPlot.MissingValue on Z-values for SharpPlot.DrawContourPlot and SharpPlot.DrawBubbleChart Fixed NetworkMapStyles.SplitByLink with SharpPlot.DrawNetworkMap Fixed SharpPlot.GroupBy with SharpPlot.DrawLineGraph, and reset between other Draw methods Fixed SharpPlot.BarLimit with GroupBy/SplitBy Fixed SharpPlot.DrawHistogram with YAxisStyles.LogScale and XAxisStyles.Time Fixed using SharpPlot.SetXLabels with one label per data point Fixed mouse zoom in SharpPlotViewer to focus on mouse pointer rather than window center Nic August 2017 - v3.46 Fixed anomalous spider tag offsets on the left side of some pie charts Added CloudChartStyles.ContourTags and ResponsePlotStyles.ContourTags Fixed Contours and ZDatumLines in ResponsePlot and CloudChart Added DPI argument to SharpPlot.RenderMetafile Nic August 2017 - v3.45 Fixed Include wrap-arounds in SharpLeaf Nic July 2017 - v3.44 Added SharpPlot.SetEquationNumericFormat Added SharpPlot.Correlation Nic July 2017 - v3.43 Fixed SharpPlotImage GUI events (MouseDown, etc.) Fixed SharpPlot.SetAxesScales with BalancedAxis and SharpPlot.SetXRange / SharpPlot.SetYRange Added FillStyles : Horizontal Vertical Cross DashedVertical DashedHorizontal DashedDownwardDiagonal DashedUpwardDiagonal Fixed Hatched FillStyles in PDF and PS Nic June 2017 - v3.42 Fixed numeric XLabel collisions so that remaining labels are centered on zero Nic May 2017 - v3.41 Fixed SetTickMarks in APL to force enclosed vector for custom tick placement (simple vector is MajorInterval,MinorCount) Fixed quote protection in numeric and date/time formatters Fixed image markers in SVG/XAML Fixed SharpPlot.Version in APL Fixed unwrappable text to output a hyphen where possible Nic May 2017 - v3.39 Fixed more effects in SVG Fixed DocumentLayout and PageLayout internal structure Fixed TickMarks to always be interpreted as days whether using Time or Date Fixed Timescales millisecond formatting in .Net Fixed Timescales escaped formatting with '\' in APL Fixed Latitude/Longitude label formatting Fixed Duration to take seconds only, and use SharpPlot.XTimeFormat/SharpPlot.YTimeFormat Nic April 2017 - v3.38 Fixed whitespaces in SVG Fixed SharpPlot.SetEffects in CloudCharts, ResponsePlots and Vectors Nic April 2017 - v3.37 Added HotspotType.Segment for Links/Tips/Hints/Handlers on Risers and Vectors Fixed handler support in SharpPlot.DrawNetworkMap Fixed SharpPlot.SetXRange and SharpPlot.SetYRange with Time but not Date axis style to be taken as the same OLE format as the plotted data (rather than number of hours) Nic March 2017 - v3.36 Added SharpPlot.Backlog property Fixed SharpPlot.SetXRange(max) SharpPlot.SetYRange(max) SharpPlot.SetZRange(max) - single argument doesn't force zero anymore - use ForceZero or Set*Range(0,max). Fixed non-breaking space in EPS and PDF Nic March 2017 - v3.35 Added SharpPlot.DrawNetworkMap chart type Nic March 2017 - v3.34 Fixed Key vertical alignment for large Markers Fixed NoteStyles.Percentage before drawing any chart Fixed series handlers when using SharpPlot.SetMarkerColors Fixed non-Latin-1 character widths and font embedding in PDF Nic March 2017 - v3.33 Fixed ArrowLines arrow sizes and tip positioning Fixed transparency in tiles in SVG and XAML Fixed SharpPlot.RedrawAxes to observe LogScale Fixed SharpPlot.SetEquationPosition to observe LogScale Nic March 2017 - v3.32 Fixed image Marker size to be in points and not in 96-DPI pixels Fixed arcs in PDF driver Fixed arrows in SVG driver Fixed SharpPlot.ReadCommentOld for pre-v3.27 versions Fixed Logarithmic style setting X/YAxisStyles.LogScale for subsequent charts Nic March 2017 - v3.31 Fixed invisible axis optimisation Nic February 2017 - v3.29 Fixed Parity when re-using axes Added SharpPlot.ReadCommentOld to read comment from SharpPlot files from releases predating v3.27 Fixed font subsets for italic and bold variants Added SharpPlot.GetCharsets and SharpLeaf.GetCharsets to get list of used fonts and the charsets they use Fixed Single-point lines to pick up their key although nothing is displayed Nic February 2017 - v3.28 Added BubbleChartStyles.Contours Allowed SharpPlot.SetWeightings to affect data height when using ScatterPlotStyles.Contours or BubbleChartStyles.Contours Fixed treating Double.NaN as SharpPlot.MissingValue Added SharpPlot.SetAxesScales Added VectorStyles.Clipped Fixed Parity when using invisible axes Fixed DataStyles.Rows on all charts Nic February 2017 - v3.27 Allow negative size in SharpPlot.SetArrowSize for arrow size proportional to line width. Fixed SharpPlot.MissingValue in SharpPlot.DrawBubbleChart Fixed SharpPlot.DrawBubbleChart resetting SharpPlot.SetMarkerScales Fixed HTML tags parsing Nic February 2017 - v3.26 Fixed ModelFit with unsolvable regression (all-zero coeffs) when YRange does not contain zero. Nic February 2017 - v3.25 Fixed SharpPlot.SetMarkerColors for series with SharpPlot.MissingValue Fixed HaloMarkers in SVG Fixed unsolvable regressions (ModelFit, Contours) to return all-zero coefficients Fixed character mapping in PostScript and PDF Nic February 2017 - v3.24 Removed SharpPlot.ClassInterval limit for SharpPlot.DrawHistogram Allowed SharpPlot.ClassInterval to be 0 for automatic and negative to specify the number of bins Fixed time formatting in Linux Nic February 2017 - v3.23 Fixed KeyStyles.InlineWithData on multiple charts Fixed TrendLine and ModelFit to observe KeyStyles.InlineWithData Fixed EXIF orientation on images. Fixed SharpPlot.DrawImage on Logarithmic axes. Fixed SharpPlot.SplitBy on multiple series Extended wedges to allow inner radius HotspotInfo.Locator is now (x y innerradius outerradius startangle endangle) for Shape=3 (wedge) Fixed SharpPlot.DefineFont : allow long "shortcodes", allow using a different fontstyle in Set*Font() Fixed SharpPlot.Set*Font() : fixed fallback on all drivers Added Postscript Font embedding in SharpPlot.DefineFont Added Postscript definitions to FontType Nic January 2017 - v3.22 Fixed HTML parsing Nic November 2016 - v3.21 Fixed text measurement with unicode and HTML tags Fixed SharpPlot text wrapping (hyphen taken into account when breaking words) Fixed numeric axis labels formatting Fixed SharpPlot.YCaption wrap size Fixed SharpPlot.DrawNote width Fixed SharpPlot.SetXLabels collision Added more Symbol characters to metrics Nic November 2016 - v3.19 Fixed Correlation Coefficient computation for SharpPlot.SetOrderOfFit greater than 1 Nic November 2016 - v3.18 Cached J j setting in PDF driver Fixed newline splitting in strings Fixed SharpPlot.SetYZones and Horizontal Bar chart with YAxisStyles.InvertAxis Fixed alignment of unicode/HTML-tagged characters Fixed HTML parsing Fixed multi-text splitting (ptxt) Nic November 2016 - v3.17 Added PieChartStyles : Absolute Percentage ChartX ChartY Fixed ContourPlot edges Fixed XLabels collision handling for irregular ticks Fixed default Date formatting in APL Fixed default PieRadius when PieChartStyles.MergeInsideTags Fixed XL ValueTagFormat string substitution for empty labels Fixed clipping Pie XLabels horizontally Nic October 2016 - v3.16 Fixed Vertical Key splitting in two columns Nic October 2016 - v3.15 Fixed X-Clipping of Risers Fixed rounded formatting of numbers with LogScale Nic October 2016 - v3.14 Fixed and documented string formatting (Xx~*;) - fixed insertions and added escaping with backslash Fixed picture formatting in APL - allow escaping with backslash Fixed 'XL' in ValueTagFormat for Pie/Venn XLabel/ValueTag merging - allow escaping with backslash Fixed ValueTagStyles.ShowAllTags for Pie Chart Added PieChartStyles.MergeInsideTags Added PieChartStyles.ShowAllLabels Nic October 2016 - v3.13 Added SharpPlot.GetKeyBoxes for the bounding boxes of latest round of drawn keys Fixed DrawNote width with NoteStyles.Percentage Fixed DrawPolygon to use bottom-left origin Nic October 2016 - v3.12 Added ResetOptions.SettingsPersist Added SharpPlotImage.MouseControl and SharpPlotImage.KeyboardControl for zooming and panning Fixed SharpPlot.DrawNote when no chart nor frame drawn, and ignoring AxisStyle.LogScale when do chart drawn Fixed SharpPlotViewer : Zooming implicitly disables FitToPage - changed zooming semantics to DPI Fixed SharpPlotImage : DrawEdge=false by default, SystemColors.Control BackColor by default Nic October 2016 - v3.11 Fixed ZLabels and ZAxisStyles.ExactFit for ScaleBar (Bubble, Contour, Cloud, Response, TreeMap) Fixed ScaleBar label alignment towards the inside of the frame Fixed Arial to truly use Arial font in PS and PDF output, rather than Adobe's Helvetica Fixed Pure-APL SharpPlot to support APL/.Net calling convention (enclosed single argument) Fixed custom fonts on Linux (still not metricating them though) Fixed date/time formatting on Linux and non-.Net Windows Fixed PDF generation on Linux Nic June 2016 - v3.10 Fixed zero-range values in SharpPlot.DrawMinMaxChart Nic May 2016 - v3.03 Fixed horizontal alignment of angled value tags on bar charts Nic April 2016 - v3.01 Introduced SharpLeaf classes to create reports (typesetting and tabulation engine) Introduced Document class for page-level manipulation of read-only documents produced by SharpPlot and SharpLeaf Added PaperSize structure for easy selection of standard paper sizes Added SvgMode : FitWidth and FitHeight Simplified PageBuilder architecture - SharpPlot is twice faster. Rationalised API for SharpPlot Render/Save overloads - a few overloads have disappeared for consistency with APL, which may require replacing calls to more explicit overloads (full list at bottom of this entry). Fixed resolution (dpi) setting on SVG, XAML and JSON drivers. In particular, RenderXaml/SaveXaml now use resolution in dots per inch (like other export methods) rather than scale to points so new argument is old argument multiplied by 72 (and default is 96 instead of 1.333) Rationalised warnings and errors Fixed empty pages on all drivers Fixed SharpPlot.DrawTable positioning, scaling, paper resize, and headings/frame usage (esp. in trellis) Fixed Hints, Tips, Hyperlinks and JavaScript on SVG and XAML drivers, including on invisible items Fixed Series and Hotspots identifiers for active charts Fixed JSON array formatting (missing ] for each line of output) Fixed Hyperlinks on PDF driver Fixed HTML tags in text on SVG driver Fixed Color.Transparent on all drivers Fixed full unicode support on SharpPlot.(AddComment/ReadComment) Fixed HTML entities and unicode support on all drivers (PDF and PS remain restricted to Latin+Symbol character sets) Fixed SharpPlot.SetXRange/SetYRange/SetZRange(double max) not to implicitly set min to zero Overloads removed for APL compatibilty : - SharpPlot.AddComment(string text, bool compress) - un-keyed compressed comments are unsupported - SharpPlot.RenderPdf(bool deflate) - need to use SharpPlot.RenderPdf(PdfMode.UserDefault, deflate) - SharpPlot.RenderPdf(string filename, PdfMode mode, string noembed, bool deflate) - need to use SharpPlot.RenderPdf(mode, deflate, noembed) - SharpPlot.SavePdf(string filename, bool deflate) - need to use SharpPlot.SavePdf(filename, PdfMode.UserDefault, deflate) - SharpPlot.SavePdf(string filename, PdfMode mode, string noembed, bool deflate) - need to use SharpPlot.SavePdf(filename, mode, deflate, noembed) - SharpPlot.RenderSvg(SvgMode svgmode, string header) - need to use SharpPlot.RenderSvg(svgmode, 96, header) - SharpPlot.SaveSvg(string filename, SvgMode svgmode, string header) - need to use SharpPlot.SaveSvg(filename, svgmode, 96, header) - SharpPlot.SaveImage(string filename,ImageFormat format, TextRenderingHint textmode) - need to use SharpPlot.SaveImage(filename, format, 96, textmode) - SharpPlot.SaveImage(string filename,ImageFormat format, Emftype emftype) - need to use SharpPlot.SaveImage(filename, format, 96, TextRendingHint.AntiAlias, emftype) - SharpPlot.SaveImage(string filename,ImageFormat format, Emftype emftype, TextRenderingHint textmode) - need to use SharpPlot.SaveImage(filename, format, 96, textmode, emftype) - SharpPlot.DrawImage(Image bmp, double left, double top) - need to use SharpPlot.DrawImage(bmp,'',left,top) - SharpPlot.DrawImage(string filename, double left, double top) - need to use SharpPlot.DrawImage(filename,'',left,top) Breaking changes : - SharpPlot.RenderXaml and SharpPlot.SaveXaml now use DPI (which defaults to 96, as for other drivers) instead of scale (which defaulted to 1.333, producing the same 96DPI = 72*1.333) - SharpPlot.SaveXaml and SharpPlot.SaveVml : HTML wrapping has become a optional explicit argument rather than an implicit assumption on the extension of the file - Default Soft Hyphen is now Unicode standard 'Â' (0xAD) Nic December 2015 - v3.00 Fixed image inclusion in EPS and PDF drivers (all files format in C#, JPEG only in APL) Nic June 2015 - v2.64 Fixed font decors (and HTML tags) on EPS and PDF driver Added support for matrices of objects in SharpArrays Fixed overloads with ref arguments in C# builder Fixed object and (number vs character) comparison (Match, EQ) in C# builder Fixed null handling in C# and APL Nic April 2015 - v2.61 SharpPlot/APL delivered as true :Classes - yet retaining backwards compatibility with old code SharpPlot/APL performance enhancement : halved both CPU time and workspace usage Nic April 2015 - v2.60 Fixed YAxisStyle.InvertAxis with custom TickMarks and LogScale Fixed Marker PenWidths and HaloMarkers on EPS driver Fixed ScaleBar to use ZCaptionFont Nic January 2015 - v2.52 New object model for underlying page representation (PSB) Significant performance improvement on chart rendering, especially for complex charts such as 3D surfaces Fixed custom markers on EPS driver Fixed Document Structuring Convention (DSC) for EPS Fixed properties reset (using ResetOption) for ResetProperties, NewCell and NewFrame Fixed background fill on EPS driver Fixed saturate fills on PDF driver Fixed metafile scaling with non-96 Windows DPI Nic November 2014 - v2.51 Fixed AxisStyles.ExactFit on all chart types Fixed ZoneStyles.SpanFrame Fixed Zone overflow if stop value was higher than frame limit Fixed Trace Chart : Y axis scaled to IAllowance ; fixed limits in SetIZones Added ContourPlotStyles.NoMarkers Added new overloads to DrawPolygon Nic November 2014 - v2.43 Mapped BarEdgeNib to EdgeStyle nib Fixed Edges and Keys to take EdgeStyle into account Fixed StepChartStyles.Risers Fixed JSON data for multiple series Fixed square/round line edges on all drivers Fixed Node and Ball marker for EPS Fixed (Lines+SurfaceShading) on XY plots Fixed Cross Markers and HaloMarkers on raster images Fixed Marker size and linewidth scaling on all drivers, and in key Fixed User cycle consumptions (Color, FillStyle, LineStyles, Markers, etc.) to match what has been drawn Fixed Key for Dial Fixed Cloud risers with surface fit Fixed issues with Classic interpreter Nic October 2014 - v2.42 Fixed Key positioning to use chart coordinates by default Fixed date/time formatting on Linux Fixed Unicode character width computation Nic October 2014 - v2.41 Fixed DrawBoxPlot(double[][] data) and DrawBoxPlot(int[][] data) Fixed BoxPlotStyles.(CroppedAxes OverlayGrid TabularData) Fixed Logarithmic BoxPlot Added XCaption for PieCharts Nic September 2014 - v2.40 Added DrawPolygon method Fixed opaque fills on SVG and XAML driver Fixed stretched images on SVG and XAML driver Nic July 2014 - v2.39 Fixed ZoneStyles.Intersect Nic July 2014 - v2.38 Fixed axis label collision when YLabelNudge is set Fixed XBarCharts with multiple series Fixed JSON data for BarCharts Fixed clipping of surface fills Fixed key scaling for BubbleCharts, and removed key boxing when BarEdgeNib is null Fixed remaining spurious crisp edges Fixed PolarCharts to scale to frame width Fixed TreeMap ValueTags Fixed Bubble chart auto-scaling Fixed automatic tickmark computation, especially for Duration and Time axes Fixed edge style for Dial, Pie, Polar and Venn Added SetJitter method Added TableStyles.FitHeight Nic April 2014 - v2.36 Crisp edges - now flagged OFF on tickmarks in general - modern SVG viewers are much better at ant-alias! Also the little fudge in the svg namespace to add weight to blurred lines is reduced to 0.2 - same reason. Boxplot style Plain - omits median line from box. ACDS 28th Jan 2013 Edges on legends - barcharts and surface plots now respect the edge-weight in the legend placeholder. Gridlines - best drawn anti-aliased as the 'crispedges' setting in SVG can make them fall through the cracks between the pixels and only draw some of them at all! Definitely in Chrome, other viewers may be OK. ACDS 21st Nov 2012 TreeMap - new chart style migrated from RainPro. ACDS Nov 2012 (consolidating work in Adelaide) Vertical text - fix to vscan.vshow to set symbol font around maths entities. Was failing in EPS. ACDS 4th Nov 2011 Modelfit - updated to handle all combos of logY and logX with linear fit. Also improves the equation placemant when the x-scale is logged (Middle gets biased right otherwise). ACDS 15th Sept 2011 Modelfit - more sensible annotations when one or more axes is logged. Adds EquationStyle=Linear to force a simple LSq fit on the unlogged data in the case of a log Y-axis and linear x-axis. This shows the fitted straight line as a curve and reports the intercept and slope of the unlogged data. ACDS 31st Aug 2011 EPS output - using characters from the Symbol font was not adding the cmyk argument to settext when it switched font, and subsequently switched back to the base font. Fixed. ACDS 28th April 2011 ACDS 17th March 2011 as version 2.13 after acceptance test by BIS SVG animations - could not be applied to gridlines (e.g. fade-in) or the chart clipping rectangle (to allow linegraphs to draw across the page). Added ScriptTarget.ClipRect ScriptTarget.GridLines to the list of targets for special effects. SVG/VML - tips (and javascript expressions) on arbitrary targets (like Zones and Headings) were not being output by the SVG and VML drivers. Bug introduced in 2008 - fixed. ACDS 7th March 2011 XAML - rotated text with HTML tagging was misplaced, and drawn too small. Fixed. ACDS 16th Feb 2011 SetMarkerColors - adds an overload to take a list of colours as a string (names or HTML format) just to save a bit of typing while setting up tests! ACDS 10th Feb 2011 Barcharts - now take care to crop to the chart edge (VML breaks apart badly if we don't) and kicks any affected value tags inside the bar as a clue something bad happened. For similar reasons, XBar just eliminates any bars which are outside the cropping area. ACDS 9th Feb 2011 CMYK colour model - supported for solid and hatched colours - see Barsuite for some typical swatches. This works by using a base-100 encoding of the 4 ink proportions, so is restricted in accuracy to 2 dec pl for example: orangeâsp.UseCmyk 0 38 84 24 is an orange with 24% black added. All the drivers except PostScript/PDF map these back to RGB for display using the same algorithm as GhostScript (subtractive). PS and PDF output checks for CMYK colours in the driver (see function ColourMe in eps.âchrgb) and calls setcmykcolor with the original 4 values. This permits the user to have exact control over the inks used by the printer. Tables - allows explicit alignment of titles (using LabelStyle) and caption+stubs (using CaptionStyle) to tidy up appearance. Not sure how spanned headings should behave when the titles are aligned left or right (rather than the default of centred). For now they just follow the leaf nodes, but we may want to split them out and always centre them. ACDS 6th Jan 2011 Trend lines - new placeholder added to EquationFormat CC=CorrelationCoefficient and R2=the square of this. EquationIndex is the position along the line, so we add EquationPosition as exact (x,y) in chart co-ordinates, unless the style is Absolute/Percentage which behave as per notes. ACDS 25th Nov 2010 Barcharts with log axes - data was not being rescaled correctly for XBarchart. Also adds Logarithmic to style for normal barchart, as this should scale all the data. ScatterPlot and BubbleChart also now support this style just to save time when both axes are to be logged. RedrawAxes - will output and extant datumlines as well as over-drawing axes. This gives the user a way to get the datumlines imposed over the data values if required. ACDS 14th Oct 2010 VML output - scalable VML (set with dpi=0) was not passed via the internal HTML parser so bold and italic failed to appear in the output. Some tags like <sub> can never work reliably here as we cannot adjust the typesize as the user scales the window, so gaps will appear if the default size is stretched and text will collide if it is shrunk. ACDS 9th Sept 2010 Html tagging - unclosed <sup> and <sub> tags left the baseline adjustment behind so that the next text output was incorrectly placed. Now all html flags are explicitly reset and baseline restored at the end of each text block. ACDS 1st June 2010 - version 2.07 Spanned labels on 3D charts - implemented for X-axis only for now. Probably used for column charts! ACDS 27th April 2010 Histogram - style now gives detailed control over which X-datumlines are drawn to mark mean, and up to three multiples of the std deviation. These may be tagged as required with DatumLineTags. ACDS 31st March 2010 Polynomial fit - was using an unnecessarily general algorithm. Updated to call a nice LU decomposition library that turned up on a maths blog and runs a lot faster for heavy datasets. ScatterPlot and BubbleChart - styles updated to include OnTopModel. This should always have been there! ACDS 2nd March 2010 SetNewline - added for scripting environments (like APL) which don't support and so on as splitters. This augments the hard-wired newline characters and \r with a single character of your choice. ACDS 1st March 2010 Synchronised Y-axes - new axis style 'Synch' will force the tickmarks of a secondary axis to mate up nicely with the primary, so it can share a common set of gridlines. Related feature is axis style 'Balanced' which forces matching numbers of ticks above and below the axis which is always set at the zero point. Arrows - balanced axes get arrows on both ends. Also captions can be passed as 2-element arrays to go left/right on X-axis and bottom/top on y-axis. Most non-standard charts ignore all but the first caption if you do pass more than one. A few related bugs flushed out - you can now have Xstyle 'top' in harmony with a balanced y-axis and 'Atend' caption. New XStyle 'OmitLast' kills the final label which may be about to collide with a secondary axis or an 'AtEnd' caption on a right-hand y-axis. ACDS 25th Feb 2010 Secondary axes - a multi-axis chart in the first cell of a trellis carried the 'right-axis' style forward into the next cell unless explicitly reset. Fixed. Trellis grid - gridline was not drawn in the 1 by 2 case. Fixed. ACDS 18th Feb 2010 XAxis labels - when we have a midlined X-axis we correctly killed the first label, but when the Y-axis is at the right (or is a duplicate) then we may want to kill the last xlabel instead/as well. Also we need a way to tell the labelling that a secondary axis in upcoming. New XStyle OmitLast does this. ACDS Shrove Tuesday 2010 ZDatumLines - added for use in 3D charts and contour plots. Also we now have DatumTags to simplify the process of annotating lines which mark ranges in typical QA charts. These are used up in x,y,z order. Use DatumTagStyle to adjust the default alignment or place the tags 'AtEnd'. ACDS 9th Feb 2010 AddComment - was not handling hi-Unicode characters entered directly from the keyboard rather than encoded in HTML-style strings. Now makes the mapping to &#xhhhh; automatically and reverses it in ReadComment (assumes users won't use this very geeky style of encoding!). ACDS 2nd Feb 2010 Text wrapping - captions with heavy use of small tags (typically superscripted footnote refs) could get split in mid-tag which makes a complete mess of the resulting html. Wrapped legends were allowing too much space for the key placeholder so broke the text too early. Fixed. PDF output - was measuring characters like open/closing double-quotes incorrectly - these are mapped to octal in the 'old' Windows positions and we were looking up the metrics assuming Unicode. Fixed. ACDS 1st Feb 2010 Set functions - any Setter that takes an array argument (e.g. sp.SetXTickmarks) adds an overload to allow it to be called with no argument to reset the internal state to default. This is useful in the case of a Trellis where several charts are almost the same, but some settings need to be cancelled. For properties which take double values, passing either NaN or the current missing value will also reset. ACDS 16th Jan 2010 Wrapped text with super/subscripts - if the wrap-point fell in non-baselined text it was not correctly positioned on the following line(s). Also a tag with no following text was not closed properly in SVG leading to ill-formed XML which stops the viewer at this point. Both fixed. ACDS 6th Jan 2010 Notes - new style 'Cropped' which eliminates entire note if any part of it would be clipped at the axis limit. Also makes sure to clip in-line keys which previously escaped the clipping rectangle. DrawMultiple - failed if there were no PageLabels (or SplitBy) set. Fixed. ACDS 16th Nov 2009 KeyDefinition - overload added to Constructor to allow exact specification of Line+Marker legend. Required to add custom legends to contour plots. ACDS 1st Nov 2009 DrawKey - change to explicitly positioned key to de-couple Baseline and Left key styles. The issue was that Baseline also had the effect of placing the legend placeholder at the x-coord given instead of placing the edge of the box here, which was a bit illogical. Now you have to say Left to get this effect. ACDS 29th Oct 2009 FindExtremes - returns the (xyxy) bounding box of the data (arguments as for Scatter) and any generated control points if you have set the 'Curves' style. It is possible for Beziers to stray outside the limits of the data, but never outside their control points, so you can use this to set axis ranges if you need to. ACDS 24th Sept 2009 Bubblechart - adds 'Altitude' as a style which uses the current set of Altitude colors to color each marker depending on the incidence value (3rd argument). A ScaleBar may be used to interpret the colors. LineGraph,Scatter - as a side effect of the above, you can now set MarkerColors to an arbitrary vector of colors. These will be reshaped as needed and used to color each point, overriding the normal series color. The placeholder in the legend ignores this vector and always uses the series color. Also applies to Polar and Cloud as you would expect. Various examples updated to check this out - FishFinder has coloured buoys now! ACDS 10th Sept 2009 DrawKey - given key position should be logged for you if you are placing a key against log axes. Fixed. DrawNote - oddly, the 'Percentage' style was not supported for notes. Now works as for keys. Log axes - user-supplied range was getting rounded out to the next tick mark with log axes. Fixed. ACDS 9th Sept 2009 PostScript names - DefineFont updated so the caller can change the PostScript names associated with the base set of 14 fonts. For example Arial might not be required to map to Helvetica these days! ACDS 13th May 2009 Enumerations - were starting at 2 which wastes one possibility. Fixed. ACDS 5th May 2009 RenderPdf - overloads added to support compression and font embedding (as for SavePdf). Readcomment - takes a string (from one of the RenderXxx calls) as an alternative to a filename. ACDS 8th April 2009 RenderChartLog - added to allow chart log to be captured as a string result rather than written to file. ACDS 1st April 2009 ACDS 27th March 2009 as 2.0 Keys - right-aligned legend block (positioned with DrawKey) was incorrectly wrapped when it was placed close (but not adjacent) to the right-hand axis. Fixed. ModelSpan - new property allows user to restrict a modelfit to a selected X-range. Could be used to fit several discrete models to a series with an obvious change of slope. The default is still to project the fit across the entire x-axis, so used EquationStyle 'SpanData' to get the model shown only within the window set by the span. ScatterSuite 8 checks it. XBar - now takes the 'Horizontal' style to fall into line with Bar, Step and VLine plots. Checked out in XBarSuite 5 with Gantt-style labelling. Legend positioning - adds KeyStyle 'Baselined' to give the same positioning as notes. The first line of text takes the position given, rather than allowing for a possible box. TextSuite 1 checks it. Gridlines - adds XGridLines and YGridlines as vector settings to allow complete control over grid placement. Any lines drawn outside the first and last ticks are killed off just in case. Setting the grid does not force the axis range to span the extremes - grid lines behave differently from tickmarks and datum lines in this respect. LineGraphsuite 10 has an eample. ACDS 14th March 2009 (version updated to 2.0) Stepcharts - get a key placeholder with a little step in it to help discriminate these from ordinary lines. Set as internal type 3 and generally treated just like lines. ACDS 13th Feb 2009 Cyrillic text - somewhere in the move to .Net 2 we changed something which caused non-Latin text to wrap and right-align incorrectly in images. Fixed by adding an extra flag in vscan to stop it making the &#nnnn; conversions for simple text (whatever the Unicode value). This means that the raster engine saves the time converting it all back again, and eliminates the root cause of the wrapping and alignment issues. Metrics for basic Cyrillic and basic Greek added to the factory-fitted font cache, as this adds very little overhead and will save a lot of measuring activity in charts with non-Latin labelling. SaveChartLog - additional flag so we can force this to make the log after the prescan process which is used to clean up output intended for raster and eps. This shows the output of the HTML scanner which resolves tagged text to simple fragments for engines which don't directly support HTML-style tags. Table chart - grouped data on the y-axis should use en-dash to split out the groups. Fixed. ACDS 9th Feb 2009 Xlabels - when rotated by 90 or 270 these now horizontally centre multi-line labels. ACDS 23rd Dec 2008 Stepchart - if the final point hit the axis (e.g. 2% interest rate) the last line segment was not drawn. Now checks in advance whether we have more x than y values and passes an extra flag. ACDS 16th Dec 2008 YDatum lines - could be drawn outside the frame unless the y-axis was clipped. Now checks on the available frame and omits any which would be either above or below the frame. Same if we have a baseline which may be vertical if the chart is style=Horizontal and is also now screened out. ACDS 17th Nov 2008 Metafile output - extra overloads added to RenderMetafile which take a Stream and simply write to that, rather than creating a stream internally and using it to capture the EMF content. Key box - this was setting the lower bound a little too far away from the X-axis so vertical keys ran out of space when there was clearly room for one more row. Fixed. Also the amount of corner-rounding was over-generous on small charts - now reduces with the font size. Notes also. TextSuite 2 tests it. Wrapped text - softhyphens were breaking correctly, but did not show as hyphens when used. Fixed. Key box (again) - if we only had a single key entry, the check for overunning was not performed, so you could write the key anywhere. Now ensures that it is at least falling on the paper. Also if it only just missed (an unboxed key would have fitted) it attempted to draw a zero-sized box with rounded corners - which blew GDI+ out of the water with an argument exception. Fixed. Autofit keys - were not reducing the inter-item gap in proportion to the reduced font size. Fixed. Legend text - honours Keystyle NoWrap which turns off wrapping of long lines in vertical keys. ACDS 28th Oct 2008 Vertical text - was now handling HTML tagging so superscript etc was not working in PDF and other formats which don't support tagged content directly. Fixed. Legend width - the placeholder for a custom line with a very short total dash-repeat was drawn with room for exactly one repeat cycle, rather than snapping up to the normal default width. Fixed. ACDS 20th Oct 2008 Chart titlebar - was getting reset by calls to NewFrame so the last chart set the default title and the user's setting could be wiped if it was set too early. Now the user's setting always wins and the first heading encountered fixes the title otherwise. ACDS 3rd Sept 2008 Curves+SurfaceShading - the recent improvement to the way surfaces are edged bypassed the curves and failed to fill the area at all. Fixed. ACDS 28th Aug 2008 MinMax - failed with three arrays, all empty. Now just runs through and draws nothing. PageMap - new call to get a map of the chart that an application can use to track the cursor, pick up hints and tips, and so on. See documentation for details. Several tests check it out. Key wrapping - legend text did not auto-wrap if the legend was placed explicitly with DrawKey. Now it wraps into the page width (incl the right margin) less any space needed to box the key. Linespacing - the number that you give here is interpreted as absolute,percent or relative depending on how it relates to the fontsize. If you definitely want absolute, you can set a -ve number to bypass the choice, so setting -3 on a 7pt font would give you 3pts of interline space rather than 21pt. ACDS 14th Aug 2008 Tables in a Trellis - the table did not notice the cell structure and just drew in the lower left of the page. Now small tables centre in the available space and large ones are scaled (keeping aspect) to fit as best they can. They do Headers, Subheads and Footers correctly now too as a bonus, but only when called stand-alone or in a trellis or if you set the UseHeaders style explicitly. Trellis - does gridlines now. Uses the Axis settings to box it and the Gridline settings (shared with tables) to draw the gridlines. Set TrellisStyles.Gridlines to activate it. Trellis - style 'SkipToNext' eliminated as it fights with 'Reset' which is much more useful. No way to fix this with the current design, so seems safer to force an explicit NewCell() call. ACDS 28th July 2008 Rotated text with HTML tagging - tags were ignored here. Now uses the normal HTML parsing utility to output unrotated text having roteted the co-ordinate system. Trivial in EPS and the raster viewers, but requires care in PDF. Not yet supported in XAML which needs a serious think, or a future release of SilverLight which will probaly do it native with tspan tags (like SVG). Pie legends - use of the 'FarthestFirst' style changed the ordering of the legend blocks. Fixed. ACDS 8th July 2008 Label mask - SharpPlot does its best to thin out colliding X-labels for you, but if the labels are angled or it just gets this wrong, you can set a boolean array (which is reshaped to the number of labels) to thin them manually. sp.SetLabelMask(new bool[] {false,true}); // Alternate labels Note that this adapts itself to barcharts where there is a dummy label on the Y-axis. It applies to 2D charts, Polar charts, Piecharts and the Dial chart only. Also dialcharts now handle long label text rather better. ACDS 5th July 2008 Legend gap - added KeyGap property (default 1.32) to set the space between legend entries in a vertical key. ACDS 2nd July 2008 Descending X or Y-ticks - accidentally eliminated the modelfit line. Fixed. Legend entries - these are added by default for trendlines and modelfit but this may be a nuisance to a Gui front-end, so now you can set: sp.ModelFitKey = false; sp.TrendLineKey = false; to turn either of these placeholders off. For consistency: sp.SeriesKey = false; will eliminate the series placeholder in the same way. ACDS 24th June 2008 Upfront ranging - adds four new property-setters to allow you to exploit the auto-ranging even when there are several upcoming plots. Calling these with any array or set of arrays: sp.SetXDataRange(new int[][] {x1,x2}); sp.SetZDataRange(zextremes); will simple add the lowest and highest values to the first series plotted, and then range as usual. This works independently for X,Y,Z and Inner axes as you would expect. ACDS 6th June 2008 Constructor - allows for (double,double) now as paper size in points. ACDS 4th June 2008 Absolute ticks - were not quite accurately giving the user what was asked for. Showed up if you asked to draw the ticks right across the entire axis frame when they came up slightly short. Fixed! Also the tick-length arrays are now double[] as well as int[] to allow easy conversion from other units. ACDS 8th May 2008 TickStyles - implements 'Absolute' style so that the tick-length array (and the associated gridline and datumline thresholds) are interpreted as pts rather than as percentages of standard. The default thresholds are 4pt and 8pt respectively for absolute tick lengths. ACDS 6th May 2008 Text decorations - underline and strikeout were not implemented for all chart elements in all output media. These now work for horizontal and vertical text everywhere except XAML which only does underline. They are not currently implemented for angled text. Note that decorations are not drawn on super/subscripted text as these are assumed to be footnote references and look very wrong if underlined or struck through! Fat lines in MinMax charts - were being drawn as rectangles above 2pt which was a workaround for the old WMF limitation that all lines above 5px got round ends. Removed, as none of the modern formats have this problem. Legend on pies - was using the wrong colours if the start angle was not zero - fixed. ACDS 21st April 2008 Cropped axes - was not invalidating the current fill colour so that succeeding text did not reset it if the text had the default colour (Black). The symptom was labels written in the same colour as the frame background. Fixed. ACDS 16th April 2008 Surface shading with clipping - the code to 'flatline' to the edge is only required when we have surface shading to an off-page point. Now it is only invoked when needed which eliminates a couple of edge effects on clipped linegraphs. Also we now use the segmented line as the edging so the surface becomes unedged where it is clamped to the axis limits. Styles FramedAxes and CroppedAxes - both now bypass our internal clipping logic and rely on the output medium to handle the clipping for us. The only exposure is in VML which does not support clipping, but the improved reliability and simplification of the SharpPlot code seems to make this a good tradeoff. For big timeseries, it should also give a noticeable speedup as the output polyline is no longer drawn in multiple segments. ACDS 8th April 2008 Baseline - defaults to drawing like the Axes, but we gain SetBaselineStyle to allow it to have any of colour, style, nib set differently if required. Probably used just to turn it off with LineStyle=Invisible in most cases. ACDS 4th April 2008 LineGraph - runs of data can be thinned out (e.g. to eliminate marker noise) with two new chart styles. SkipRepeats removes all points with the same y-value as the one before, and SkipRuns does the same, but leaving the final point of each block of repeated values in place. These styles apply to LimeGraph and PolarChart only for the moment, as they only really make sense for timeseries data (e.g. regular readings from a meter would be a good example). Stepchart - adding the Segmented support broke the case where the final x-value is zero. Fixed. Arrowheads on axes - the case with a Top X-axis and Inverted Y-scale should put the arrowhead at the bottom of the Y-axis. Fixed. Edging on surface plots - was using the nib of the series line to edge the filled region. Better to use 'BarEdgeNib' for the enclosing line as then we can zero it if we want rid of it completely. Also this allows a thicker nib for the data without looking really ugly for the edging. ACDS 19th March 2008 VML - adds the feature that a DPI of zero means 'scale to fit' which abandons the use of CSS2 text for the simple horizontal text and uses the TextPath tag for all text output. The chart width and height are then set to 100% which makes it occupy its containing <div> completely. There are two limitations (intrinsic to VML) which we cannot work around: line-weights are expressed as px so cannot scale, and font-sizes similarly. The resulting charts will therefore only scale within a fairly limited range before the proportions look very poor. VML - as a side-effect of the above, all rotated and vertical text is now anti-aliased and looks much better, for example the labels on 3D charts are much more readable. Gradient fills - overloads added to new FillStyle to allow the caller to create a gradient with a given target pattern saturation (FillStyle.Saturate30 is default) to change the emphasis on the highlight, or to pass a chosen colour which completely replaces the computed colour. Tips with 'ontop' model - use of ValueStyle 'Tips' did not work correctly with a modelfit or trendline drawn ontop of the data (the line stole the tip from the first marker). Fixed. XAxis labels - use of styles Spanned+Angled reversed the order of lines within each label. Also the alignment of multiline angled labels was generally poor - Fixed. ACDS 3rd March 2008 VML rendering - adds the option to express all units as "px" rather than "pt" by passing the required dpi value (96 reproduces the existing size on most video adapters). Also splits up very long polylines (over 5000 points) into multiple blocks, as VML just gives up on these. Invisible markers - are now rendered as circles with no edge or fill if there are hints, tips or script elements attached to them. This allows hinting of linegraph values in VML and SVG. Stepcharts - treatment of missing values was poor, particularly in the unfilled case. Now we make sure to eliminate value tags from the filled chart (which respects the baseline better now), and bridge over the gaps in the simple line case (as per the Linegraph). Adds support for the style 'Segmented' which breaks the lines either side of the missing values. ACDS 14th Feb 2008 Piecharts - value labels placed 'inside' the sector were evaporating for exploded sectors. Fixed. Piecharts - sectors with think edges were not drawn thick in the Image formats. Fixed. ACDS 5th Feb 2008 Tick-mark line-width - scales with the axis weight by default, but now you can override this with: sp.TickMarkWidth = 0.6; to set the tick-mark line-width explicitly. The default tick length still scales with the axis weight as before. Applies to 2D and 3D axes, Polar and Dial charts. ACDS 29th Jan 2008 Tips on Linecharts - if the line got segmented (clipped Y-axis for example) it ate the tips which belonged to the upcoming markers. Fixed by calling pL multiple times for each segment (as now) but stroking all the segments at once, which makes for cleaner SVG and PDF and only calls off the tip for the line. ACDS 28th Jan 2008 Polar gridlines - the outer circle was not drawn even if the XStyle was 'NoAxis/Invisible'. Fixed. ACDS 16th Jan 2008 Missing values - using Double.MinValue as the missing data marker could break MinMax and BarChart ranging, as these attempt to add an artificial low point 'just below' the minimum value. This is not possible if the lowest value is the smallest representable number! Now eliminates the non-data items before finding the low-point. ACDS Jan 8th 2008 Piechart labelling - this rather assumed that the first quadrant would heve quite big sectors and didn't bother to do the label-dodging code that is used from 9:00 to midnight. Now it runs the first quadrant backwards from 3:00 to make sure that trivia like 1-100 are not handled spectacularly badly. We should probably implement PieLimit (like Barlimit) just to keep things under control in extreme cases! A compromise is to eliminate any labels which would otherwise be entirely pushed off-page by the adjustments. Works pretty well in practice. ACDS Boxing Day 2007 / New Year's Day 2008 Boxplot - was losing the decile whiskers on PNG output. Turns out that if you don't let GDI+ anti-alias dotted lines they slip between the pixels at line-weights less than 2px. So we force a spightly firmer line and also disable 'crisp edges' if we have deciles to draw. Also the median line was drawn with square (rather than flat) endcaps which allowed it to stick out of the width of the box. Simple fix to the pT macro to use flat caps regardless, unless the linestyle is not solid. ACDS 19th Dec 2007 XBarchart - missed out on the cropping stage which should be applied to the chart and values. Fixed. ACDS 12th Dec 2007 Stepchart - horizontal, surface-shaded with no risers did not draw the line back to the x-baseline correctly before shading. Fixed. ACDS 27th Nov 2007 LineStyle - very long dash-repeats (like 10000000 1) would make nonsense of the key layout or make the legend impossible to draw. Now new LineStyle(rpt) will signal error if the pattern is obviously impossible. ReadComment - extended to handle comments in XAML files intended for the SilverLight viewer. Clipping - was not handling the 'envelope' fill for min-max charts correctly. Fixed. ACDS 15th Nov 2007 Framed axes - failed if either or both of X and Y styles was 'NoAxis'. Now draws the frame correctly even if both axes are undrawn. ACDS 8th Nov 2007 Parity plot style - adds a standard parity-plot capability to Scatter and Contour plots to allow easy comparison of actual behaviour with a theoretical standard. Function Parity tests it. Frame border - is drawn entirely inside the paper if the gutter is zero. This should preserve the line-width correctly when drawn on screen. Custom markers - now take a XAML path as a string, or for very simple polygons a vector of xy pairs giving the co-ordinates of each vertex of the marker relative to the marker origin. The first pair of values as treated as a relative moveto, and subsequent values as lineto pairs. Nested vectors define multiple subpaths. ACDS 5th Nov 2007 Clipping - makes a distinction between Framed axes (when clipping is brutal) and axes open to the top when markers (and value tags) which fall near the boundary are drawn completely. Also Risers are now drawn to markers which have been clipped out vertically, and are terminated at the y-axis limit. ACDS 20th Aug 2007 Clipping - was fooled if both the first and last points fell outside the same boundary. Fixed by the usual trick of adding a couple of guard points in the middle of the target then chopping them after doing the algorithm. Also the segmentation dropped a part line which crossed directly from below the bottom to above the top (or outside left to outside right) - fixed. ReadNote - allows the user to recover (optionally compressed) notes from all formats. ACDS 7th August 2007 Keys - new KeyIndices setting allows user to choose exactly the keys to be run by DrawKey (or by default if the key is left alone until ch.Close is called). If ANY keys have been requested this way, then the legend is treated as done, and nothing will emerge automatically when the chart is closed. ACDS 2nd August 2007 UpDown stacked bars - implements the Excel strategy of keeping separate up and down stacks rather than a simple cumulative which can completely hide sectors. Value tags now follow the bottoms of negative bars and 'hop out' downwards if the tag in the final sector won't fit. Stacked charts may give nonsense results if used with a displaced baseline - this only makes sense when all the bars in the first block exceed the displaced baseline! Same for Horizontal bars, naturally! ACDS 26th July 2007 Framed Axes - now special-cased and drawn with a simple Box which tidies up the corners. Common case of Plain XY axes which join at (0,0) is also now drawn as a single Poly. ACDS 25th July 2007 Duplicate ticks - XTickStyle and YTickStyle now include 'Duplicate' which adds the ticks on the 'far side' but without the extra labels you get with duplicated axes. ACDS 17th July 2007 Linegraphs - lines are drawn from right to left so the dash-repeat looks good at the right-hand end. This also requires the constructor for custom lines to flip the pattern. We should also flip the pattern of Pen objects passed for use in custom lines - todo! ACDS 5th July 2007 LineStyle - dash repeat pattern for custom linestyles takes double[] now to allow very fine control. ACDS 31st May 2007 Getters added - for all fonts, backgrounds and lines. Return the full set of elements as object[] to allow an application to query the current settings easily and offer the user a dialogue with the default values prefilled. ACDS 24th May 2007 Keys, Labels - accepts a comma-delimited simple string as a script-kiddie alternative to the string[] format. If your labels have commas, then you MUST still pass the array as before. ACDS 21st May 2007 Clamped lines - if the line left the chart upwards and never returned, the clamped line should extend to the last X-value and a filled surface should run to here also. Fixed. ACDS 18th April 2007 ExactFit - was fitting the 'far end' but insisting that the bottom tick was rounded back to a whole tick interval. Now it leaves it alone for integer data so you can have ticks at (1,3,5,7) by setting the interval to 2 and the range to 1,n. ACDS 13th April 2007 Legend positioning - placing the legend box with DrawKey(x,y) had some issues when the top of the box got close to the top of the chart area and there was a small top margin. Also the bottom of the box was not quite accurately positioned if bottom alignment was used. Fixed. GetVersion - added as a simple call to find out what we are running (as a string). AddComment - adds arbitrary text as annotations to vector output such as EPS or SVG. ACDS 12th April 2007 Label wrapping - inside labels were using the margin width as a wrapping target. Fixed. ACDS 11th April 2007 Metafile output - extra arguments added to RenderMetafile and SaveImage to allow complete control over the final format. You can now determine the EmfType which is generated in addition to the image type. Also textual HTML tags like <sup>2</sup> were not being handled for this output type. Fixed. XML hints - the type information for things like EmfType was wrong as Causeway was assumed as the prefix if no prefix was given. These are now fully typed so no extra prefixing is required. ACDS 10th April 2007 Vertical key - was looking for double-column layout much too soon, and restricting the width allowed for text with a few long keys to less than half what it should be. Fixed. Label nudge - both X and Y labels can be nudged now with SetXLabelNudge and SetYLabelNudge which take (x,y) displacenents in points. Only applies to 'standard' charts for now, so not Polar or Dial. Note that displacement is always +ve towards the chart area, so will be symmetric for left/right axes. ACDS 5th April 2007 KeyLimit - allows user to restrict the number of key items flushed at each call to DrawKey. The default value is ¯1 which writes as many as it can in the space available. Suggested use is to split up keys between several panels if there are many lines to be keyed. Barsuite 8 tests it. ACDS Mothering Sunday 2007 Key position - was not allowing for extra-long tickmarks or X-labels with very large linespacing. Either could occur on charts with a deep hierarchy of time-related labels. Fixed. ACDS 2nd March 2007 Vertical Keys - did now quite line up the text in the default case. Thick dashed lines should make enough space to show the dash-repeat, but in the simple case lines and bars should match! Fixed. Value tags on HBars - were allowing rather generous padding, so if written in a small font they could softly and suddenly vanish away, a little too early. Fixed - padding is now the width of ! in the current valuetag font rather than a fixed amount in points. ACDS 19th Feb 2007 MapCoords - new utility to take x and y values (in chart-axis co-ordinates) and translate the numbers to points suitable for placing Notes and Keys with Absolute positioning. This may be more convenient when placing text to annotate data values. ACDS 30th Jan 2007 Date+Time style - if you set en explicit array of XTicks as OADate values this mistakenly divided the numbers by 24 (correct for Time style but not for Date|Time). Fixed. ACDS 15th Jan 2007 Barcharts - a single group with several bars would put a tick on every bar rather than a single tick on the whole group. Now only switches to a tick per bar if the number of supplied labels matches the number of bars in the group. ACDS 10th Jan 2007 Stepcharts - vertical value labels only aligned correctly on style 'surface'. Now work the same way if the chart is unfilled, or if risers are drawn. Adds support for style 'Horizontal' which simply flips the axes around. Handy for population pyramids with irregular age bands. ACDS 3rd Jan 2007 Z-Axis scaling - automatic tickmarks now allow for the perspective projection of the Z-axis which generally results in less crowded ticks for charts where the viewpoint leaves this axis very foreshortened by the perspective effect. ACDS 1st Jan 2007 Axis labels on 3D charts - both X and Y labels now support the AngledLabels style which writes the labels midlined on a projection of the corresponding gridline. Because of the perspective projection these lines are not quite parallel, so it probably makes no sense to allow the user to set an explicit angle here. ACDS 23rd Dec 2006 Date/Time style - the 14/Nov fix had the side-effect of Flooring OLE dates which knocked out the Time element rather effectively. Fixed! ACDS 4th Dec 2006 Value tags - ValueStyle 'ShowAllTags' turns off the checking on space so collisions can happen. Apparently Business Objects does this and some users like it! Oh well. Maybe one day we move the tags out of the side of the bars and use spider lines like piecharts. This will do for today. ACDS 22nd Nov 2006 Date labels - dates in the format YYYYMMDD are accepted as X-values (in addition to OLE dates) and correctly formatted as labels for the X-axis. However it was not possible to pass an array of numeric dates as the argument to SetXLabels and have the date formatter applied to them automatically. You can now do thie (e.g. for barcharts of monthly values) but you must set the format string such as "MM YYYY" before setting the labels, as the conversion is handled by the Set function here. ACDS 14th Nov 2006 Towers - test for "it's a column chart" was a bit too simple so sp.DrawTowerChart on a simple vector of numbers could step outside its bounding box and mess up the Xlabels. Fixed. ACDS 19th Sept 2006 SaveImage as Metafile - was using the inbuilt Save method which saves a raster image wrapped as a metafile. Now it gets the vector version as a memory stream and saves that instead, which gives much better scaling, for example when used in a Word document. RenderImagemap - was using 'alt=' for the tips on each link, which works in IE but not in Firefox - changed to use 'title=' which works in both. Setting the status text to implement hints seems not to work in Firefox, which is odd as it works fine in Netscape-3, so more research may be required. DrawImage - allows existing artwork (bitmap or metafile) to be added either to the chart background (probably a company logo) or as additional markers to the completed chart. The caller may give a bitmap object or filename and optional uri and size. The bitmap is required for embedded formats and the uri is used to make the link for web graphics. The artwork will be sized (preserving aspect if only the width is given) using points or chart co-ordinates depending at what stage it is drawn. ACDS 13th July 2006 NewPage - adds an option to reset all properties (defaults to true) and also clears the table of key placeholders - keys cannot carry across pages. Auto-ranging for 'Duration' style - values are minutes, but we try to get ticks to the nearest quarter-hour when the range allows it - which gives much tidier scaling. ResetKey - removes any accumulated placeholders from the key definitions. Font scaling - ResetFrame was not rescaling the footnote font - fixed. ACDS 14th June 2006 DrawVectors - will plot a scatter of arrows (for current-flow charts) or any kind of directed graph involving nodes and connections. Takes the start and end-points of a set of vectors and draws them as independent lines with optional nodes or arrowheads. Value tags are written along the lines, centred above. SplitBy may be used to draw the lines in multiple colours and generate a key for them. ACDS 8th June 2006 DrawTable - now accepts arrays of strings, allowing the caller to format the data before creating the table. Also, this was eliminating empty cells rather than just skipping past them, possibly mis-aligning the rest of the row. Fixed. ACDS 1st June 2006 Angled captions - the PDF output was rounding the transform matrix too soon, and losing precision in the angle as a result. Fixed. Also the placement of angled multi-line captions was not as pretty as it should be - also fixed. ACDS May 20th 2006 XBarChart - was incorrectly forcing an extra final (as well as initial) tick on the X-axis. Fixed. Keys - automatic keys (set without explicit keyframe) now wrap the text much more intelligently. Hopefully with this behaviour and KeyNudge for fine adjustments, we can forget KeyFrame unless the layout is very fussy about key placement. Data in rows - enhanced slightly to allow a simple barchart to cycle through colours one per BAR rather than one per GROUP. The X-ticks are drawn with one tick (and X-label) at each bar, even though they would logically form a single group. Keys work groupwise as normal, and so each bar has a legend entry. Group gap is ignored, and 'gap' sets the inter-bar spacing in this case. Use DataStyle = DataStyles.Rows to set this behavior. ACDS May 3rd 2006 Drop-dead date for the trial version now fixed automatically in the build. Explicit tick placement failed for exactly 2 tick positions, as the values were confused with (major,minor) interval settings. Fixed. ACDS 28th April 2006 Text insertion patterns like X~~X<b>XXXX</b> were failing on multiline labels. The pattern must be applied before the label is split at newlines! This would otherwise cause a length mismatch in AE.Expand and crash the engine. Fixed. Spanned labels were merging duplicates on the innermost rank. Fixed. ACDS 28th Mar 2006 DrawBubbleChart - now allows 'Radial' scaling, which may be more suitable for unfilled markers and notes existing Marker Scale so you can just make them ALL bigger in proportion. Adds style 'ScaleBar' which draws a nominal Z-axis in the right margin with bubbles scaled at each Z-tickmark. These are lebelled using the ZLabel formatter and drawn with the Key font. Scatter plots - value tags note the actual marker size to offset the tag above the marker better. ACDS 6th Feb 2006 Automatic datumlines - were generated more than once if you plotted more than one barchart on the same set of axes. Fixed. Vertical value labels - did not respect 'Middle' style on barcharts. Fixed. Curves style - a small error in the conversion of Polylines to Bezier curves could give odd 'overshoot' effects when successive segments differed greatly in length. Did not show up in timeseries plots, but could draw some very odd contour lines. Fixed. ACDS 27th Jan 2006 Horizontal bars - categorised data was not being labelled correctly when there were zero values in stacked barcharts. Fixed. Aggregations - combining Grouping and Splitting to make a stacked bar from 'database' data was losing track of the missing values in the original dataset. The rule now is that an aggregate composed entirely of missing data is now flagged as 'missing' and its value tags etc will not be drawn. See Barsuite 13/14 which tests it. ACDS 17th Jan 2006 Xlabels on Column chart - were slipped one label to the right. Also the labels should always centre-align in the case of an isometric chart. Fixed. Column chart - scalar data (a simple line of towers) should make a shelf just deep enough for the bars, not a proper Y-axis. Fixed. Indexed data - was rebasing the X-values to 100 as well as the y-values in an xy-plot. Fixed. 12th Dec 2005 ScatterPlot - now accepts a category variable on the X-axis (so you can plot Yield vs Farm) for both integer and floating-point y-values. Moot point whether we need category data on the y-axis also here! CloudChart - accepts category data on the x and y axes (but not the z-axis). 14th Dec 2005 Label formatter - for historical reasons this signals wrapping with 'XXXXXXXX;' but it now tolerates formats like 'xxxxxxxxx ' in addition (a newline embedded in the string simply embeds a newline in the output as before). DrawMultiple - no longer does BoxPlot as a type. The new argument style for BoxPlot would really mess up the overloads required. Skip for now - removed from Desktop sample set! NewCell - was resetting the scale every cell in a cellular plot, giving some very interesting artwork in the Wise Eel's Bridge example. Fixed. KeyDefinition struct - now defaults FillStyle to Solid if omitted from the constructor. 15th Dec 2005 Tracechart - notices XYPlot style now. Allows X-values as first element of array. 16th Dec 2005 Autorange - with XAxis style 'Date,Time' we were dividing the specified Xrange by 24, so a range like 35414.5 35419 was ending up as dates around 1904. Fixed. ACDS 5th Jan 2006 Baseline - was not being applied consistently on both chart orientations. Also the interaction with intercept axes was not well-defined. Now the rule is: - A baseline is an explicit instruction, so use it if given - Failing that, if there is an intercept axis, use that as the baseline - N.B. Top or Right XYaxis counts as a special intercept setting here! - Otherwise use Zero (or the extreme ticks) to run the bars from Duration formatting - X or Y style 'Duration' will trigger base-60 formatting. No assumptions are made about the units, except that base 60 is used for magnitudes and : as the separator. Use ValueTagStyles.Duration to have the same formatting applied to the value labels. Piecharts - with VML extrusion the sorting for 'Farthest first' failed when the last segment wrapped over from 5:00 to the end. Fixed. Also JavaScript handlers set for specific segments were not re-targetted correctly (simple vectors of hints etc were OK). Fixed. Multi-threading - in some cases it was possible for two instances of SharpPlot to interfere when running on the same process in different threads. This has now been fixed. ACDS 6th Dec 2005 HBars - barcharts which could go either left or right from a centre axis got badly confused when the user had given text value labels. Now the missing value boolean is passed down along with ALL the bars (one each for left and right) so everything is compressed in synch. ACDS 1st Nov 2005 YCaptions - were wrapped when 'atend' using the margin width, even when you specified an explicit Y-axis position. This case now looks at the nearer edge and allows twice this distance as the wrapping width. Captions, labels, headings and footers all have a "NoWrap" style added so that the user can turn off automatic wrapping if it becomes a nuisance. Labels on the top axis of a pair of Duplicate Xaxes were not 'thinned' to match the labels on the lower axis. Also the tickmarks could get stuck to the lower axis for horizontal barcharts with duplicate Xaxes. Fixed. ACDS 15th Sept 2005 Tickmarks - both axes tidied up at the ends for the 'exploded' case or any other example when there is not a crossing axis or overhanging axis line available. In all these cases the first or last tickmark moves inward by half the line-weight to make a clean join. ACDS 30th August 2005 BoxPlot - reworked to match the style of Grapl. Rather than setting up the criteria as categories with SplitBy we now pass them in directly as arguments. Much simpler to see what is going on and should be a lot easier to code. Several examples changed to match and a lot more tests added. ACDS 29th Aug 2005 Autoranging - we are careful not to generate half-integer ticks for integer data that spans a small range (say 3 2 2 4 3) - this now extends to powers of 10 in the obvious way. ACDS 19th August 2005 Value tags - tags with style 'inside' on horizontal barcharts were misplaced. This error was introduced when porting from GraplNet to SharpPlot and only applies to tags on bars with negative values. Fixed. HBars - horizontal barcharts with ALL -ve values and a 'free' X-Axis extended the bar to the zero-point rather than the rightmost tickmark. Fixed. ACDS 15th August 2005 Key frame - keys with an explicit frame and style 'boxed' now draw around the text, which is wrapped into the width available if required. Autofit works as before, but may be constrained differently, as the wrapped text may force more vertical space to be used. You can still use the key format picture to set a smaller width. ACDS 26th July 2005 Wrapping text - YLabels and YCaption (Atend style) now wrap automatically into the available margin width if no formatter is given. All calls to xfmt now have a placeholder for the default width, generally set to 0 to preserve old behaviour. The only other auto-wraps are headings, subheads, footnotes and the 'atend' Xcaption where the width is also known. YLabels - moved a little right when set 'between' tick marks which improves the visual style of horizontal barcharts and also allows a touch more wrapping width. Headings - were actually centering between the Y-axis and the right edge of the frame. They should centre over the chart (the X-Axis) which normally looks close enough that the discrepancy was never spotted. Until now. Note that headings wrap across the entire page (less a small gutter) but the subhead wraps within the axes as it may be dropped down within the chart area. Value tags - can now be 'angled' (default rotation at 34deg) and left-aligned at the data point (or running from the centre of the top of the bar). Multi-line tags are stacked 'upwards' to sit nicely above the data here. ACDS 13th July 2005 Formatters - numeric and text pictures both now use the ~ to suppress the matching digit in the input. Dates - date formatter accepts newlines (dodges the limitation in the .Net ToString method) and also we tolerate dates as vectors of 19530321 numbers as well as OLE dates. Many timeseries still use this style for the date column. ACDS 7th July 2005 The new KeyNudge setting was not noticed by keys with style 'InLine' which is one of the more useful places! Fixed. Charts with a mix of lines and markers and the 'Vertical' key style drew a spurious line through the marker-only keys. Fixed. DrawLineGraph failed to handle hyperlinks correctly with line array with all 0's and missingvalue = 0. Fixed. Tips on markers were wrong if line array contains one value (so just 1 marker is displayed and hence no line is drawn) Fixed. AddHyperlinks - It was not possible to keep 'normal' cursor for certain bars/markers, but have a hand cursor show over bars with JavaScript actions. Now SharpPlot accepts a hyperlink of one or more blanks to mean 'show the hand' and an empty link to mean 'do nothing'. This allows the application to pass an array of links, some of which cause hands to appear and some of which don't. If an array of data has only a single sample, then the xlabel is displayed 3 times (replicated incorrectly for the ticks at the origin and the end of the axis). Fixed. It was not possible to center line chart markers between ticks as for bar charts. This is best done by setting the IndexOrigin to 0.5 so that the nominal X-axis places the points at 0.5 1.5 .... n.5 rather than 1 2 3 .... n. This required the IndexOrigin to be double, not int. Fixed. Text measurement was failing to handle long strings of '&#1234;' with no intervening 'normal' characters. This messed up key placement with korean text which contains nothing but coded characters. Fixed. The trendline doesn't look good if there are only a few markers (typically less than 5) as it tends to plateau at all the points. The flexibility is now adjusted to give the same visual effect as the numbers of points is reduced. Using custom tick lengths with barcharts eliminated the tickmark at the origin. Only noticeable for the 'clipped' YStyle as otherwise the axis extends down to the length of the longest tick anyway. Fixed. Ticks on bar chart were failing to cancel prior effect settings, so a shadowed heading was resulting in shadowed ticks. Fixed. ACDS 6th July 2005 Frame, key, notes - a round-cornered box with a gradient fill broke the raster rendering as it must be given an explicit bounding-box for the gradient. Fixed. Segmented lines - in linegraphs with missing values, it is possible to have isolated points. These are harmless in all formats except EMF where they invalidate the previous line-segment. These are now checked for and not drawn. ACDS 6th April 2005
Send comments on this topic © Dyalog Ltd 2021
|