Release Notes

Changes from first release

Added 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 '&amp;#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