Version 0.6
Post date: Nov 9, 2011 7:44:56 PM
Version 0.6.4, 12 Jan 2005:
After much laboring, finally determined that the complex masking operations used to prevent drawing inside hollow symbols was the biggest drag on rendering performance of Batik's SVG canvas. Instead of masking, we simply avoid drawing inside the symbols altogether. For example, the polyline that connects data points in a pointSet is drawn to connect symbol outlines instead of their centers.... This version can plot 4 sinusoidal functions with 2000 hollow symbols each in <1 sec (but see below!). Such a graph would take nearly 10 sec using the masking approach, and it sometimes crashed the program.
Some miscellaneous changes and bug fixes. Introduced the clip attribute on a graph element. If this boolean-valued attribute is set, then the rendering of any data sets is clipped to the graph's data window. This attribute should be set only when necessary, since clipping is an expensive graphics operation -- at least in Batik!
Version 0.6.3, 03 Jan 2004: Fixed a bug in the encapsulated Postscript output.... Work on enhancing update speed continues. The major sticking point is the rendering of data sets with lots of symbols, particularly hollow symbols.
Version 0.6.2, 22 Nov 2004:
Revised implementation of tick sets for an axis element. Eliminated the tick mark-related attributes defined on the axis element itself and reintroduced a distinct ticks element, which defines a set of tick marks and associated numeric labels on its parent axis. Any axis may possess up to 4 tick set child elements, each of which is "equipotential" (ie, there's no major vs. minor distinction). A ticks element has the usual style attributes, attributes which determine the placement of tick marks along the parent axis (start, end, intv, perLogIntv), and attributes which govern the appearance of the tick marks and numeric labels (dir, len, fmt, gap). As a convenience to user, a given tick set may be edited from within the axis editor when its parent axis has the editing focus, or from a new tick set editor that appears when a ticks element has the editing focus.
Simplified implementation of the auto-generated axis label. The text of the label is still given by the value of the axis element's title attribute. However, the size of the white space between the label and the axis line is no longer calculated but is given by a new attribute, labelOffset. The default value for this attribute can be set via the Edit|Preferences... command.
Continued work on enhancing the update speed of Phyplot in response to changes in a single attribute of the element having the edit focus. The "dynamic update" framework is set up, and the update mechanism has been optimized for the axis, line, label, and ticks elements. Have generally observed a significant improvement in the update speed for these elements whenever a single attribute changes value. Still much work to do here....
Version 0.6.1, 12 Nov 2004:
Improved printing support. The File menu includes three printing-related commands, Page Setup..., Print..., and Cancel print job. All printers available on the host system are made available to the user. The custom Page Setup dialog displays a thumbnail previewing the current page layout and showing the effects of any changes the user makes on the dialog. The user can now select a different printer and choose from the various paper sizes supported by the chosen printer. The custom Print dialog allows the user to select a printer destination, a range of figures to print, and number of copies. It offers a "Print to file" option if the printer supports Postscript. Print jobs are handled by a worker thread, and a new print job cannot begin until that thread terminates. Users can attempt to cancel the job via the Cancel print job command; success will depend upon how far along the job is. Phyplot print support is best for Postscript printers. The printed output should reflect what you will get if you export a figure as an encapsulated PS file. Non-Postscript printers that can handle Java2D print graphics are also supported. In this case, the printed output is most like what you see on the screen. However, printing is MUCH slower and the print streams are HUGE. Still testing -- for example, found that the #Copies feature does not work, at least when printing to a PS printer.
Added a custom icon for each distinct element class in Phyplot. These icons appear in the tree view of the open Phyplot document.
Began working on a mechanism to improve rendering performance when the user changes a single attribute of the current focus element. Originally, any change by the user triggered a complete rebuild of the entire figure. The underlying framework of the canvas on which the figure is displayed then rebuilds an internal representation of the page and redraws it. Now, Phyplot takes advantage of the dynamic-update mechanism built into the Apache Batik package upon which the application depends for rendering SVG. However, this mechanism is not very helpful when we "update" an SVG tree by replacing a whole subtree. It works best if we can edit the subtree IN PLACE. This has been completed for the label element. Much work remains...
Version 0.6.0, 20 Oct 2004:
Added the command Edit|Delete, which is similar to Edit|Cut, except that the deleted element is not saved to the clipboard.
Eliminated the page element and changed the tag name for the fig element to figure. A Phyplot document is now simply a collection of one or more figure elements. The figure element has mandatory loc, width, and height attributes that must be specified in absolute units (in, cm, mm, or pt) and which determine the location and size of the figure on the printed page. The layout of the printed page is now a property of the rendering canvas and may be changed via the File|Page Setup... command. Currently, only letter size (8.5x11in) is supported.
Now when the user changes the measurement units for a measured attribute like width or for either coordinate of a measured point attribute like loc, the corresponding numeric value of the attribute is adjusted so that the real physical measurement is unchanged -- in other words, a unit conversion is performed.
Introduced predefined (system installed) and user-defined figure templates. These should help facilitate figure creation, encourage standardization, etcetera. The currently displayed figure may be saved as a template via the Edit|Save figure as template command, in which case the figure is saved in its entirety, except that all data set elements are removed. User templates can be selectively removed or renamed via a popup dialog accessed by the Edit|Manage templates... command; predefined templates cannot be altered or removed. Finally, users can create an empty figure via Edit|Blank figure, or create a figure from an existing template via Edit|New figure... User-defined templates are stored in the user's preference tree -- so every user can have his own set of templates.
Preferences dialog and document-level attribute defaults. The preferred default values of certain attributes -- such as those governing the appearance of tick marks and tick labels -- may vary from author to author according to taste. For such attributes, a "document-level" default value is defined on the document's root element. User preferences determine what those defaults will be each time a new document is created. Once the document is created, however, the defaults are persisted with the document; otherwise, the appearance of a figure would change if it was opened by another user with substantially different defaults. The Edit|Preferences... command brings up a dialog by which the user can modify preferences such as the screen resolution or the preferred "document-level" attribute defaults.
Proportionally resizing an entire figure. When the current focus element on the Phyplot canvas is an entire figure, the Positioning editor now includes a means by which the user can proportionally resize the figure by a specified percentage (below 100% reduces the size, above 100% increases it), or proportionally resize only the fonts defined within the figure element and its descendants.
Miscellaneous changes: The legend element now renders ONLY titled data set elements (pointSet, series, function) within the parent graph. If a particular data set element has an empty title attribute (the default), it will not have a corresponding entry in the legend... Modified Postscript support to handle the hollow closed symbols (circle, box, and diamond) in the same way as the SVG representation onscreen. In previous versions, the hollow closed symbols were filled with white in the Postscript document.