/*!
\page page_whatsnew What's New (Release Notes/Versions)
This page lists release notes for the different version of JKQTPlotter
\tableofcontents
\section page_whatsnew_TRUNK trunk/master
\subsection page_whatsnew_TRUNK_OVERVIEW trunk: Overview
Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
- General:
- CLEANUP (BREAKING) of library structure
- NEW: Using precompiled headers in CMake-build to speed up build times
- NEW/BREAKING: split jkqtcommon into basic tools and jkqtcommon_statistics_and_math for advanced math tools not used by all libs
- JKQTPlotter:
- FIXED issue described in #62: Fix custom labels draw, because giving exactly two label-strings did not display all of them, thanks to user:FalsinSoft
- FIXED issue #70: Typo in jkqtplotter/CMakeLists.txt, thanks to user:tedlinlab
- FIXED issue #80: Bug with multiple inheritance with Q_GDAGET with CLANG, thanks to user:igormironchik, caused by QTBUG-104874
- FIXED: styling was not properly applied to coordinate axes of colorbars outside the plot
- FIXED issue #73: Symbol thickness differs in actual plot and legend, thanks to user:sim186
- REORGANIZED: separated line-graphs from jkqtpscatter.h/.cpp into jkqtplines.h/.cpp
- IMPROVED: QT6-compatibility by removing deprecated warnings
- NEW: JKQTPFilledCurveXGraph and JKQTPFilledCurveYGraph can now plot wiggle plots with different fill styles above and below the baseline (feature request #68 Wiggle Plots from user:xichaoqiang
- NEW/BREAKING CHANGE: data tooltip can now also be shown when "just" moving the mouse (so far this was only possible when dragging the mouse with a button pressed). This also removes JKQtPlotter::getActMouseLeftAsToolTip() and adds JKQtPlotter::getActMouseMoveToolTip() instead! Also the default toolbars and context menus changed!
- NEW: new "seaborn" style for plots, see \ref jkqtpplotter_styling
- NEW/BREAKING CHANGE: changed JKQTPColorDerivationMode into a struct, which extends its capabilities above the previously available few enum-items
- NEW: added debug-feature to show boxes around text in the plot
- BREAKING: Print-Support can now be switched off with a CMAKE-option JKQtPlotter_BUILD_FORCE_NO_PRINTER_SUPPORT=ON. This also switches off PDF and SVG export, partly solves issue #81, many thanks to user:sufuk for contributing part of the code and supplying the idea!
- NEW: improved plotting speed for line-graphs by drawing a series of single lines instead of a polyline in some cases
- NEW: improved plotting speed for line-graphs by a compression algorithm (see JKQTPGraphLinesCompressionMixin) that removes overlaying lines (e.g. in JKQTPXYLineGraph)
- NEW: improved plotting speed for line-graphs by a clipping algorithm (applies to JKQTPXYLineGraph, JKQTPGraphErrorStyleMixin, JKQTPSpecialLineHorizontalGraph, JKQTPSpecialLineVerticalGraph and others)
- NEW: improved plotting speed for scatter-graphs by not calling draw functions for symbols outside the plot window (e.g. in JKQTPXYLineGraph)
- NEW: added JKQTBasePlotter::grabPixelImage() and JKQTPlotter::grabPixelImage(), which grab the plotter into a QImage
- NEW: added option to not display the preview dialog to JKQTBasePlotter::copyPixelImage() and JKQTPlotter::copyPixelImage()
- NEW: added simple scatter plot JKQTPXYScatterGraph
- NEW: made resize-timer status accessible from outside via JKQTPlotter::isResizeTimerRunning()
- NEW: made it's delay a global static variable that can be set and red with JKQTPlotter::setGlobalResizeDelay() and JKQTPlotter::getGlobalResizeDelay()
- NEW: Using JKQTMathText::useGuiFonts() for FONT rendering by default
- NEW: added the option to draw a character from a font as symbol (
JKQTPCharacterSymbol+QChar('C').unicode()
)
- JKQTMathText:
- FIXED: JKQTMathText added a little whitespace before and after the LaTeX-string. This was removed as it disturbed the layout of text in plots
- FIXED: height-calculation of frac-like instructions: before the ascent and descent were equal, even if the numerator and denominator have different heights
- FIXED: strikeoutPos was not correctly calculated in sub-/superscript node
- FIXED: symbol spacing in math mode (and text mode)
- FIXED/IMPROVED: JKQTMathText renders several LaTeX strings better (simple braces in math mode, \c +-*... as symbols with proper sizes in math mode, added some missing instruction aliases, improved size of \\vec and \\hat, corrrected fonts usage for \\mathrm
- FIXED: \c \\sum and \c \\prod used the wrong symbol in XITS-mode
- IMPROVED: high-dpr-support in JKQTMathText
- IMPROVED: typesetting of sub-/supercripts, especially for large math operators and braces
- MODIFIED: brace node now calculates the extension of the child height above or below the strikeoutPos, in order to center braces around the strikeoutPos
- IMPROVED: improved drawing of parantheses, square brackets ... , underbrace/overbrace
- IMPROVED: added x-correction for sub/superscript above/below/besides integrals
- IMPROVED: rendering of sqrt
- IMPROVED: rendering and size calculation of decorations
- IMPROVED: tokenizing and parsing of text in text-mode: now a lot of accents with commands like \c \\\"a, \c \\'e and variants (e.g. \c {\\\"a}, \c \\\"{a}, ...) are supported now
- IMPROVED/BREAKING: refactored symbol node JKQTMathTextSymbolNode and changed font-lookup!
- IMPROVED/NEW/BREAKING: refactored whitespace-processing node JKQTMathTextWhitespaceNode, now all major LaTeX whitespace commands are supported properly
- IMPROVED/NEW/BREAKING: refactored LaTeX parser in JKQTMathText
- REMOVED/BREAKING: \c \\v[a-zA-Z] and shorthand for \c \\vec{a-zA-Z} was removed, implementation of \c \\bbR,\c \\bbC,... changed
- MODIFIED/BREAKING: new options interface for JKQTMathText::parse()
- EMOVED/BREAKING: removed JKQTMathtext::unparsedNode
- IMPROVED/REWORKED rendering of text in text- and math-mode. Now it is more consistent with the output of LaTeX itself
- IMPROVED/REWORKED rendering of blackboard font: now several different rendering modes can be selected using JKQTMathText::setFontBlackboradMode()
- BREAKING/REWORKED: The \\verb!...!-command now works the same as in LaTeX
- BREAKING/REWORKED: Separated the LaTeX parser into JKQTMathTextLatexParser from JKQTMathText
- BREAKING/CLEANUP: cleanup: Removed Parameter prevNodeSize from JKQTMathTextNode::draw() and JKQTMathTextNode::getSize()/JKQTMathTextNode::getSizeInternal(), since it is only really necessary for JKQTMathTextSubscriptNode and JKQTMathTextSuperscriptNode
- BREAKING/CLEANUP: using JKQTMathTextNodeSize for all size-calculation functions and got rid of all functions that take the output parameters with call-by-reference, additional information can be outut by local size-classes that derive from JKQTMathTextNodeSize, see e.g. JKQTMathTextSymbolNode::NodeSize and JKQTMathTextSymbolNode::getSymbolSize()
- NEW: JKQTMathTextVerticalListNode allows to typeset a vertical list of lines
- NEW: JKQTMathText::parse() by default allows linebreaks in the LaTeX string to be parsed. This can be switched off by a parameter
- NEW: added functions to set the font-size in pixels (as alternative to the existing functions that set them in points), implements request #76 from user:igormironchik
- NEW: reworked drawing of decorations: improved appearance and positioning!
- NEW: additional method JKQTMathtext::getSizeDetail() that returns all size-properties as a convenient struct, also added matching varinat JKQTMathTextNode::getSize()
- NEW: additional method JKQTMathtext::drawIntoPixmap(), JKQTMathtext::drawIntoPicture(), JKQTMathtext::drawIntoImage() which returns a QPixmap, QPicture and QImage respectively that contains the render result of the currently parsed markup
- NEW: array/tabular-environments have limited support for formatting string like \c l|r|c and for \c \\hline , \c \\hdashline , \c \\toprule , \c \\midrule , \c \\bottomrule
- NEW: reworked code structure: broke up large, single CPP-files into several smaller files!
- NEW: reworked node class tree: inserted base-class nodes for single-child, dual-child!
- NEW: improved frac-rendering: font-scaling takes nesting-level into account, overall-rendering, sizes, if a brace surrounds a frac, the heights are equal above and below to center the brace , ...
- NEW: shows strikeoutPos when drawing Debug-Boxes
- NEW: LaTeX-Parser understands optional instruction parameters in [...] now
- NEW: LaTeX-Parser simplifies parse-tree to increase speed of execution
- NEW: added new decoration instructions: \c \\cancel, \c \\xcancel, \c \\bcancel, \c \\sout, \c \\ocirc, \c \\widetilde, \c \\widehat, \c \\breve
- NEW: \c \\limits and \c \\nolimits works as in LaTeX now (before it was simply removed and the functionality implemented for a fixed list of symbols)
- NEW: added top-corner (\c \\ulcorner/\c \\urcorner ) and bottom-corner brackets (\c \\llcorner/\c \\lrcorner )
- NEW: added \c \\overbracket and \c \\underbracket
- NEW: added \c \\shaded{color}{...}
- NEW: added \c \\dashbox{...}
- NEW: added \c \\dottedbox{...}
- NEW: added \c \\snugshade{...}
- NEW: added \c \\snugbox{...}
- NEW: added \c \\acute{X}, \c \\grave{X}, \c \\acute{X}
- NEW: added \c \\dashuline{X}, \c \\dotuline{X}
- NEW: added \c \\underleftarrow{X}, \c \\underrightarrow{X}, \c \\underleftrightarrow{X}, \c \\overleftarrow{X}, \c \\overrightarrow{X}, \c \\overleftrightarrow{X}
- NEW: added \c \\userfont{SystemFontName}{Text} instruction
- NEW: added \c \\unicode{HEX} and \c \\utfeight{HEX} instruction to draw unicide characters by code
- NEW: added \c \\substack[lcr]{...\\\\...} , \c \\lsubstack{...\\\\...} , \c \\rsubstack{...\\\\...} instructions
- NEW: added \c \\phantom{xXy} , \c \\vphantom{xXy} and \c \\hphantom{xXy} instructions for whitespaces with the size of \c xXy
- NEW: added support for flushleft/flushright/center-environments with linebreaks
- NEW: added support for framed/shaded/snugshade-environments with linebreaks and framed
- NEW: added support for -- and --- for en- and em-dashes
- NEW: added support for \c \\char\"HEX , \c \\char\'OCTAL and \c \\charDECIMAL for inserting any uicode character code
- NEW: added support for \\bigl,\\bigr,\\Bigr,... commands for fixed-size but enlarged paramtheses
- NEW: added support for \\begin{verbatim}...\\end{verbatim}, \\begin{verbatim*}...\\end{verbatim*}
- NEW: added command line tool \ref JKQTMathTextRenderCmdLineTool that renders LaTeX into images, using it to generate the documentation images for JKQTMathText
- NEW: added environment-modifying commands for font sizes: \c \\tiny ... \c \\normalsize ... \c \\Huge
- NEW: added environment-modifying commands for text color: \c {\\color{COL}...}
- NEW: added environment-modifying commands for text formatting: \c {\\bfseries...}, \c {\\itshape...}, \c {\\bf...}, \c {\\it...}, \c {\\sffamily...}, \c {\\ttfamily...}, ...
- NEW: Added the Fira Math fonts as sans-serif symbol font to the library (as a ressource) and added JKQTMathText::useFiraMath()
- NEW: Added JKQTMathText::useGuiFonts()
\subsection page_whatsnew_TRUNK_DOWNLOAD trunk: Download
This release is available from:
- Source code branch: https://github.com/jkriege2/JKQtPlotter
- Source Code download (ZIP): https://github.com/jkriege2/JKQtPlotter/archive/master.zip
- Git-Link: https://github.com/jkriege2/JKQtPlotter.git
.
\section page_whatsnew_V4_0_0 V4.0.0: Qt6 compatibility & diverse improvements + bugfixes
\subsection page_whatsnew_V4_0_0_OVERVIEW V4.0.0: Overview
Changes, compared to \ref page_whatsnew_V2019_11 "v2019.11" include:
- fixed issue #34: Skip drawing the line for negative values in log plots, thanks to user:certik
- fixed issue #38: Buffer overflow, thanks to user:zertyz
- fixed issue #43: jkqtp_format() had undefined behaviour, thanks to user:Makis42
- fixed issue #41: Build error when JKQtPlotter_BUILD_INCLUDE_XITS_FONTS set to OFF , thanks to user:smistad
- fixed issue #37: CMake installs things into $PREFIX/doc/*.txt , thanks to user:certik
- fixed issue #45: Build error on mac jkqtfastplotter.cpp:342:28: Variable has incomplete type 'QPainterPath', thanks to user:abdedixit
- merged PR #47: Some minor build fixes, thanks to user:patstew
- fixed issue #48: Cannot \#include QPrintPreviewWidget, thanks to user:schlenger
- fixed issue #49: Incorrect tag in style .ini-files, thanks to user:smistad
- fixed issue #50: Double-Click Zoom Issue, thanks to user:Delfinos
- fixed issue #52: 'runtime_error': is not a member of 'std', thanks to user:gomgomi
- fixed issue #56: Logscale zoom multiple zeros? , thanks to user:sufuk
- merged PR #51: Bug: JKMathParser exception return local variable , thanks to user:StephanOostveen
- renamed/BREAKING change: renamed JKQTPPlotObject->JKQTPGeometricPlotElement and added new base class JKQTPPlotAnnotationElement
- renamed/BREAKING change: renamed JKQTPColorPaletteStyleAndToolsMixin::setPalette() -> JKQTPColorPaletteStyleAndToolsMixin::setColorPalette()
- removed/BREAKING change: removed the usage of some deprecated functions and objects (e.g. QMatrix)
- removed/BREAKING change: removed the overlay elements (derived from JKQTPOverlayElement), which were not very well set up and are more confusing than useful.
- improved/BREAKING change: geometric objects now use an adaptive drawing algorithm to represent curves (before e.g. ellipses were always separated into a fixed number of line-segments)
- improved/BREAKING change: geometric elements constructor: removed all styling properties, added setStyle()-functions to replace them. This is necessary to better work with the extended Styling system
- improved: constructors and access functions for several geometric objects (e.g. more constructors, additional functions to retrieve parameters in diferent forms, iterators for polygons, ...)
- improved/BREAKING change: reworked class hierarchy of parsed function plots and declared several setters as slots.
- improved/BREAKING change: reworked class hierarchy of bar & impulse charts.
- improved/BREAKING change: reworked class hierarchy of range charts.
- improved/BREAKING change: reworked class hierarchy of special line (step) graphs.
- improved/BREAKING change: reworked class hierarchy of filled line graphs.
- improved/BREAKING change: reworked class hierarchy of range plot elements (JKQTPVerticalRange and JKQTPHorizontalRange).
- improved/BREAKING change: reworked class hierarchy of boxplots.
- improved/BREAKING change: reworked class hierarchy of violin plots.
- improved/BREAKING change: extended styling system for graphs.
- improved/BREAKING change: reworked graph Base-Classes (promoted several setters to slots, added Q_PROPERTY- and Q_ENUM-declarations...)
- improved/BREAKING change: made more functions and function parameters const
- improved/BREAKING change: image plots now manage CONST-data, not plain pointer arrays... This is OK, since the raw data is never owned nor modified by the plot, only referenced!.
- bugfixed/improved: aspect ratio handling in JKQTPlotter.
- new: switching to semantic versioning ... starting with v4.0.0
- new: Compatibility with Qt 5.15 and Qt6
- new: added support for high-dpi devices (thanks for PR #55: Enable high-dpi support for plots by user:akenmorris.
- new: added geometric plot objects JKQTPGeoArrow to draw arrows (aka lines with added line-end decorators, also extended JKQTPGeoLine, JKQTPGeoInfiniteLine, JKQTPGeoPolyLines to draw line-end decorator (aka arrows)
- new: all geometric objects can either be drawn as graphic element (i.e. lines are straight line, even on non-linear axes), or as mathematical curve (i.e. on non-linear axes, lines become the appropriate curve representing the linear function, connecting the given start/end-points). The only exceptions are ellipses (and the derived arcs,pies,chords), which are always drawn as mathematical curves
- new: a new graph class JKQTPXYFunctionLineGraph draws parametric 2D curves ( \\f$ [x,y] = f(t) \\f$ ), see \ref JKQTPlotterEvalCurves for an example
- new: added several new copy/set-functions to JKQTPDatastore
- new: added JKQTPlotter signal, when widget was resized
- new: added JKQTPFilledHorizontalRangeGraph, complementing JKQTPFilledVerticalRangeGraph
\subsection page_whatsnew_V4_0_0_DOWNLOAD V4.0.0: Download
This release is available from:
- Source code branch: https://github.com/jkriege2/JKQtPlotter/tree/v4.0.0
- Latest Release/Tag: https://github.com/jkriege2/JKQtPlotter/releases/tag/v4.0.0 (2021-April-xx)
.
\section page_whatsnew_V2019_11 v2019.11: Major rework of the library
Starting in summer 2018, JKQTPlotter received some major workover. During this, it lost compatibility to the QuickFit 3.0 code base.
\subsection page_whatsnew_V2019_11_OVERVIEW v2019.11: Overview
Changes, compared to \ref page_whatsnew_V2018_08 "v2018.08" include:
- new: CMake-base build, which deprecated the QMake-build
- new: added QMake-Projects for static and for shared library builds
- new: \ref exampleTutorialProjects "extensive set of Examples and Tutorials"
- new: checked builds with continuous integration from AppVeyor: https://ci.appveyor.com/project/jkriege2/jkqtplotter/branch/master
- new/update: support for building with Microsoft Visual Studio (Win), MinGW (Win), GCC (Linux/MacOS)
- update: massively improved (doxygen-generated) Online-Documentation (http://jkriege2.github.io/JKQtPlotter/index.html) (automatically generated after each commit using ravis CI)
- update: refactoring of the library's directory structure
- update: refactoring/renaming of API, including the function anming scheme and class names
- changed: using static const variables instead of
\#define
for fixed default values (e.g. JKQTPImageTools::LUTSIZE, JKQTPImageTools::PALETTE_ICON_WIDTH, JKQTPlotterDrawinTools::ABS_MIN_LINEWIDTH, JKQTMathText::ABS_MIN_LINEWIDTH ...)
- Updates to JKQTPlotter:
- new: added JKQTPSingleColumnSymbolsGraph for single-column data, e.g. drawn as (random) scatter or bee-swarm or rug plots
- new: stacked barcharts with JKQTPBarVerticalStackableGraph, JKQTPBarHorizontalStackableGraph
- new: use/support of C++11 features (e.g. \\c std::function<> and lambda functions in JKQTPXFunctionLineGraph / JKQTPYFunctionLineGraph )
- new: \ref jkqtpinterfaceopencv "optional OpenCV interface"
- new: \ref jkqtpinterfacecimg "optional CImg interface"
- new: \ref jkqtpplotter_styling "Styling System for JKQTPlotter"
- new: added debugging option, which surrounds different regions with visible rectangles (JKQTBasePlotter::enableDebugShowRegionBoxes() )
- new: frames (plot viewport, key/legend ...) may be rounded off at the corners
- new: diverse new styling options (default font name/size ...)
- new: additionl options for styling coordinate axes
- new: Mix-In classes to unify plot styleing functions (setters/getters) in all graphs
- new: additional options for graph filling (color gradients, textures, ...) as provided by QBrush
- new: added a general feature to JKQTPPlotElement which allows to show a graph in a highlighted state (if supported by the derived graph class!)
- new: JKQTPXYParametrizedScatterGraph: added functors to transform column values into symbol type+size and line-width to give even more control
- new: user-interaction tool that shows coordinates of data points near the current mouse position (when mouse is dragged, while mouse button is pressed), see: jkqtpmdaToolTipForClosestDataPoint
- new: user-interaction tool that measures distances and angles when mouse is dragged, while mouse button is pressed), see: jkqtpmdaRuler
- new: advanced styling options for boxplots + example for the styling: \ref JKQTPlotterBoxplotStyling
- new: notched boxplots, see: \ref JKQTPlotterBoxplotStyling
- new: several new plot symbols, see: JKQTPGraphSymbols
- new: Statistics library with functions to calculate histograms, regression, kernel density estimates, ... see: \ref jkqtptools_math_statistics
- new: iterator interface and improved documentation for JKQTPDatastore
- new: violin plots (see \ref JKQTPlotterViolinplotGraphs )
- changed: removed old selection-code and replaced by general highlighting feature
- changed: JKQTPStepHorizontalGraph has been renamed to JKQTPSpecialLineHorizontalGraph (vertical variants also) and have gained additional features (baseline for filling and drawing of symbols)
- changed: filled curve graphs (e.g. JKQTPSpecialLineHorizontalGraph) are now merely a specializedly initialized JKQTPSpecialLineHorizontalGraph
- removed: Removed datarange-feature
- update: \ref JKQTPLOTTER_USERINTERACTION "reworked user interactions API"
- update: \ref jkqtplotter_basegraphserrors "reworked error indicator base classes"
- update: improvements to contour plots (e.g. highlighting single contour levels, split into a class for simple C-arrays [JKQTPContourPlot] and one for image data in a JKQTPDatastore column [JKQTPColumnContourPlot]) + added example, see JKQTPColumnContourPlot and \ref JKQTPlotterContourPlot
- fixed: colorbars at top were positioned over the plot label
- fixed: RGB-image plots now work properly with inverted axes (image is inverted, befor image was not shown at all)
- Updates to JKQTMathText:
- new: slanted fractions (
\\sfrac{}{}
, \\stfrac{}{}
)
- update/fix: several general improvements and bugfixes
- update/fix: improved error handling
- update: updated contained version of STIX fonts, better handling of different STIX versions
- update: improved documentation
\subsection page_whatsnew_V2019_11_DOWNLOAD v2019.11: Download
This release is available from:
- Source code branch: https://github.com/jkriege2/JKQtPlotter/tree/v2019.11
- Latest Release/Tag: https://github.com/jkriege2/JKQtPlotter/releases/tag/v2019.11.1 (2019-Dec-05)
.
\section page_whatsnew_V2018_08 v2018.08: Minor Modifications (Final QuickFit3-compatible Version)
\subsection page_whatsnew_V2018_08_OVERVIEW v2018.08: Overview
This is the final version of JKQTPlotter, which is still compatible with the QuickFit 3.0 code base. It contains minor changes as compared to \ref page_whatsnew_V2015_10 "v2015.10":
- new: added Qt data model to switch graphs on/off
- update: some improvements to test programs
.
\subsection page_whatsnew_V2018_08_DOWNLOAD v2018.08: Download
This release is available from:
- Source code branch: https://github.com/jkriege2/JKQtPlotter/tree/v2018.08
- Latest Release/Tag: https://github.com/jkriege2/JKQtPlotter/releases/tag/v2018.08 (2018-Aug-19)
.
\section page_whatsnew_V2015_10 v2015.10: Initial Release
\subsection page_whatsnew_V2015_10_OVERVIEW v2015.10: Overview
This is the initial release of the library. It was developed initially as part of QuickFit 3.0 and then separated out into a separate repository.
\subsection page_whatsnew_V2015_10_DOWNLOAD v2015.10: Download
This release is available from:
- Source code branch: https://github.com/jkriege2/JKQtPlotter/tree/v2015.10
- Latest Release/Tag: https://github.com/jkriege2/JKQtPlotter/releases/tag/v2015.10 (2015-Oct-20)
.
*/