ReleaseNotes:Planimate 8.0 to 8.35 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

8.35.0 (no model version change)

  • CHANGE When Calendar Times are formatted for display/text export their numerical value is now rounded to the nearest millisecond, eg:
    2015-10-21 16:28:59.9995 will be displayed (with cropping as selected) as 2015-10-21 16:29:00.0000
    The change does not impact routine time comparison (follows its own rules) or load/save of models and dataset2 (which are binary perfect).
    As expected, this has affected a couple of the models in the Planimate Automated Testing Syatem (PlATS) due to the odd one second difference in logged calendar times.
    The differences have been reviewd and the verification CRCs for the affected models will be updated.
  • FIX An overzealous test in the string parser for expressions prevented two ':' from appearing in a string, preventing values like "12:30:40" being typed into routines.
    Surprised no-one encountered this, it was likely Introduced either in 8.6.0 or 8.22.1.


  • FIX Divide by zero in dial code in cases where the data range is dynamic and not yet established on load/initial display.
Was in vertical/horizontal bar case, checked entire module  #4318

  • NEW DLL call API v14 adds PLCB_UPDATETDROWSUSED callback which needs to be called in cases where DLL processing adds new rows to a Planimate table then wants to use a callback to access the new rows (eg: setting text) rather than accessing the value memory directly.
    The callback gives Planimate an opportunity to update management structures so the subsequent callbacks know of the new rows, Otherwise this update only occurs when the DLL function returns, in which case the callbacks would return an error code because Planimate sees the row indicies the DLL is using as out of range.


  • FIX 8.33.0 / 8.32.1 changes for default zero instead of 1 was putting zeroes into new routine ops expecting default of one. #4303

8.34.0 (new model version)

  • NEW Routine operation AssignRouteFrom() enables an item's track route to be assigned from a column of data in a table starting with a given cell for a given cell count of steps. #4300
  • NEW Value formats "ScaledKilo #,###", "ScaledKilo #,###.#" and "ScaledKilo #,###.##" display data divided by 1000. Any values entered into such fields are scaled by 1000. Obviously these fields can lose precision if used to edit data. #4301
  • FIX Some model errors did not flash the source object properly when requested due to changes in graphics in version 8.27.0 (the flashing was occuring in the offscreen buffer). #4302


  • NEW Planimate DLL call API (PLDLL) now at version 13, supports get/set of many table column properties. This enhances the capability of a called DLL completely building a Planimate table (eg: based on an external database or XLS file).
  • FIX Extended 8.32.1 default parameter rule as follows When changing mode and new operation uses more parameters, default is 0 When loading older model and same operation has new params, default is 1
    This keeps older models more compatible for recent enhancements to AppendRow etc where a row count has been added which defaults to 1
  • FIX The parser used when editing an entire routine line did not properly handle DLLName:RoutineName, causing the RoutineName to be set to DLLName.


  • NEW Popup panels support a fully transparent background. This is achieved using colour keying of the background colour of the panel and is activated when the popup transparency of the panel is set to 0.
  • FIX Gantt graph labels causing linkedlist error when assigned to a text format label column and rows deleted from the view due to out of range row refs.


  • FIX Reworked handling of rotated text for paint button. Auto sizing a button to rotated text now computes a sufficient bounding box. #4286
  • NOTE Rotated table titles are now horizontally centered.
  • CHANGE Changing a routine operation to one that has more parameters now default the additional parameters to 0 instead of 1.


  • NEW Experimental train display showing individual rail cars instead of a noodle. as per #4284
  • FIX Modeller palette context menu and action delete fix

8.31.0 (new model version)

  • NEW Graph mode "Point Quadrilateral" and plot table row co-ordinates _x3,_y3,_x4,_y4 enables a single table row in a log driven graph to draw an arbitrary 4 sided shape. This is useful for
  • ` drawing the elements of a 3D scene
  • NEW Routine operation ScaleColor enables a colour to have its brightness and contrast adjusted and is useful for 3D work / depth adjustment of colours
  • NEW Routine operation SetTransparency enables the transparency (alpha) of a colour to be easily set


  • FIX Mismanaged case for redrawing was causing tables not to update properly in paused mode when rows were cut/appended
  • FIX Grid view was not setting Animation Layer on load if option selected
  • SPEED Internal cleanup - InstanceObject / core simulation routines


  • NEW Model Option/Modeller/ "Show Filters In Table Editor" This turns on row filters in subsequently opened table editor windows.
  • CHANGE Label list option "Auto-add Label On Import" is now also considered in determining whether pasting an unexpected label into a table adds the label or treats it as unknown. This option functions also in modeller mode.
    If this option is No for a list (default), a data import would ask to confirm the addition but since pasting no longer asks about labels, it is reasonable behaviour for Planimate to not accept unknown labels in this case for both modellers and end users.
    Therefore modellers need to turn this option "on" for any list where it is acceptable for the user to paste arbitrary label text.
  • SPEED FEC sped up - using template tree/functor comparator


  • CHANGE Extensive rewrite of label list internals particularly object list and its lookup and index allocator


  • FIX SavePanelImage was not handling animation layer properly


  • NEW Command line option /RUNPROFILE enables test runs to generate detailed run profiling (note affects run speed) which is useful to compare different platform build configurations.
  • CHANGE Log and report pastes where cells were not matched with labels and were thus ignored/cleared instead. Note the popup / report is only shown if the current user has the ability to edit the model. Otherwise the modeller can catch errors using an "on paste" broadcast as previous.
  • SPEED Compiler options (instruction set) speed up
  • FIX Mishandling in object copy paste code led to disappointment when saving models introduced 8.29
  • SPEED Streamlined icon graphics during animation

8.29.0 (new model format)

  • NEW Routine operation BlendColors(C1,C2) returns the resulting colour you get (always opaque) if you paint a black surface with colour C1 then paint that with colour C2. In typical use C1 would be opaque but if its not, the black surface comes into play. You can blend more than two colours by calling this repeatedly with the result of the first two colours in C1 of the next call. The blend is multiplicative.
  • NEW File Menu option "Save Panel Image" saves the main window as PNG/BMP/JPG file. This does what the routine operation does.
    Note viewports and notes are not included as they are overlaid by the operating system.
  • NEW Autosaves are now placed in the Backups folder in the model's folder, if there is one.
  • NEW Planimate DLL call version 12 adds GetTDCellFormat() so a DLL can query the format that a given cell will display in.
  • CHANGE Shift paste supports 9999 objects and its FASTER.
  • CHANGE The "Don't Auto Update Icon" portal option now applies to changing the portal's position using s.CurrentPortalX/Y. This saves all the redraws until when the modeller triggers UpdateObjectLayer().
  • FIX Display update on data change of views more coherently handled
  • FIX A code-moved portal no longer triggers a repaint of linked views so long as the views are all in the animation layer
  • FIX About box was not scrolling credits properly
  • FIX If a disk error occured whilst Planimate was doing an autosave all subsequent saves would be tagged AUTOSAVE and model name not updated
  • FIX When PL extracted a media from a DB it leaked a string buffer which would report an error on close as I am intolerant of leaky code.
  • RENAME Don't spell don't dont (exception for labels)
  • SPEED Core animation routines optimised
  • SPEED Closing a model with many portals is lots faster if no copying is involved. I mean like down from a minute for 10000 portals to 1 second.
  • NOTE Internal renames and progressing cleanup of SystemManager


  • CHANGE Paint objects now support visibility control when in animation layer
  • FIX Higher probability of the permutations of paint button hover states, mouse down states, animation layer membership, transparency/opaqueness and background/foreground object proximity (ie:within Planimate's display macro blocks) working.
  • CHANGE DeleteView quietly continues if there is no matching view. A valid table, view type and panel reference are still required.
  • NEW Portal option "Don't Auto Update Icon On State Set" is useful when aportal is displaying near/over animation layer objects and its state is being changed to change its icon. An animation layer update (either update interval passing or RepaintObjectLayer) will update it.


  • NEW Routine operation DeleteView enables a view of any type to be deleted from a panel during run. This is useful for pruning
unneeded views from a generic copied portal.  #4206

  • NEW Routine operation SetCellColor enables the text and background colour of a cell, row, column or entire table to be set. The None colour index resets the property to "use-default". #4199
    A reminder that cell specific colour properties are resource intensive.


  • FIX Broken routine editor close in 8.27.2


  • FIX Routine Editor LURKER - was in version 7 too.
    The [X] close button on a window acts even if clicked while the window is not active, this enabled the routine editor to be closed whilst the routine step editor popup (note: not modal) was still open.
    This may manifest itself in other contexts, please look out for it.
  • FIX Hidden paint object no longer respond to key events #4205
  • FIX Handle a popup panel that just received a hover broadcast being closed by the previous panel/object to have received a hover broadcast
  • FIX Dial chart mode functional after 8.27 rework
  • FIX Mislabelled center vertically in paint button context menu


  • FIX Distribution preview plot updating
  • FIX Annoying double redraw of a panel in edit mode when it has a viewport

8.27.0 (same model version)

  • CHANGE Large internal rework of graphics, with additional fixes related to changes in 8.26, 8.25 and 8.24. This has been tested but please look out for any cases where things don't draw or update as they used to.
  • CHANGE Switched to using VS2013 compiler with the latest toolset. This should not cause any impact unless you are using Windows XP in which case Planimate will no longer run.
    If you have special circumstances (eg: you are running Planimate on a POS system) please contact InterDynamics to make arrangements for extended support on Windows XP.

8.26.0 (new model format)

  • NEW Graphs have separate Auto Y Scale option for RHS scale. Note only log driven graphs support the RHS auto scaling to different data. #4201
  • NEW Panel property AutoFitWindow enables that panel option to be set, #4202
  • CHANGE Stepped plot graph now works like line mode in use of cache #4200


  • CHANGE Views in the animation layer now support visibility control changes with only animation layer update needed to update them, eliminating force repaint.
  • NOTE Significant internal cleanup of view visibility management. Please report any new inconsistency in when views are displayed vs. the various options of hiding them.

8.25.0 (same model version but note change in behaviour)

  • CHANGE For table views configured to send a context click broadcast, a right click in an empty table now sends a broadcast with row and column values all 0. #4138
    Existing models that use cell context click broadcasts may need updating to handle this case if the user is ever presented with an empty table, if a model already tests that row and column are >= 1 then its already covered.


  • FIX Real Delay callback item introduced into model during move #4194
  • FIX Dial tip works when data change triggers repaint
  • FIX Can no longer delete all routine lines in run mode #4186
  • SPEED Object icons, run engine state

8.24.0 (new model version)

  • NEW Experimental "Show In Animate Layer" for attribute,cell, table and graph views.
  • NEW Debugging options "Sound On Repaint" and "Sound On Animation Update" are useful in identifying forcerepaints and repaint paint objects which should be minimised when layered animation is used.
    The animation update sound is higher in pitch.
  • CHANGE RepaintObjects now only applies to portals since these are the nodes on networks displays where this is likely to be used. This may change again.
  • NEW RepaintObjects has two parameters, Panel and SpeedRegulate. RepaintObjectLayer Initiates a repaint of dynamic object icons and the animation layer only; faster than a full force repaint and intended for animation. 'Panel' can be used to specify a viewport etc, if zero the current panel is used. If
    'SpeedRegulate' is non zero, checks are performed to prevent successive repaints occurring faster than about 60 frames a second. If called from a timer tick, set SpeedRegulate to zero.


  • FIX SetTableView was missing a critical update of the view which caused a fault on redraw if the number of columns in a view was reduced. Closes #4185


  • FIX HoldSectionRoad now also searches for items in multiservers that have completed their delay (if the Item ID field is used).

8.23.0 (new model version)

  • CHANGE HoldSectionRoad() has new parameters Item ID and Item Object. If Item ID is >= 0, its used to search for the item to hold the road for, otherwise the current item (or its parent if its a message) is used.
    The Item Object parameter is a hint to assist Planimate in locating the item if the Item ID is used and should be the object ID of the location the train is within. A value of zero
does a complete search of the model which is suboptimal.  #4183


  • NEW Pipe change broadcasts now send _pipetablerow which is the pipe configuration table row
  • FIX Main expression parser was not handling dllname:function() notation most likely introduced around 8.6.
  • FIX Pipe context click display precision increased to 14 digits to get beyond the comparison precision

8.22.0 (format unchanged)

  • NOTE Planimate will now shut down after giving a fault message if a divide by zero occurs in its source code. This does NOT affect such errors in modeller routine code, which will continue to be reported as model errors that the modeller can fix.
    This has been introduced to catch platform programming errors and eliminate an otherwise hidden source of hidden problems.
    Please immediately report any "Unexpected divide by zero" errors and the circumstances that create them.
    USE AUTOSAVE - Unsaved model/data changes will be lost.
  • FIX Fixed a divide by zero issue in the horizontal time scrollbar if its range was set in code whilst there was no data in its view or the view had not become visible.
  • FIX Planimate plug-in DLL API updated to clear additional rows allocated in TABLEDIRECT parameters. This prevents invalid numbers in columns the DLL does not use. #4170
  • CHANGE DLL tables are now checked for invalid values only if the new debugging option "Check DLL tables for invalid values" is on OR Planimate is running a batch test.

8.21.0 (format unchanged)

  • FIX When F2 pressed in the routine list (will edit line) then pressed again (will insert reference) - at that time it was possible to select another line in the routine list, destabilising PL.
  • CHANGE Right click on a condition text field in the routine step editor no longer opens the button based condition editor. Press F2 instead.
  • RENAME Routine operation SetLastDataFile renamed to SetLastDatasetFile as the property it changes is s.DatasetFileAndPath.
  • CHANGE Default AutoSaveInterval now 5 minutes and SaveBackupCount now 50.
  • FIX Reworked changes in 8.20.2 to fix 8.19.0 as they were incomplete
  • NEW No longer support calling pre version 9 DLLs
  • NEW Version 11 DLL API supports accessing tables via data object labels. (tabledirect, read/set/reallocation supported).
  • FIX DLL call TABLEDIRECT tables have dependencies unblocked after DLL call returns, but not tables accessed via data objects.
  • CHANGE Table direct tables are now checked for invalid numbers before and after DLL calls, as are regular input tables to the DLL.
  • FIX "Generate Model Structure/Data Report" available while paused
  • CHANGE Tweak the table row allocation when a large number of rows inserted


  • NOTE This was reverted and implemented differently
  • FIX Changes in 8.19.0 had removed the ability for Planimate called DLLS to return tables of a bigger size for TABLE parameters. This did not affect the more efficient TABLEDIRECT mode that is generally used in these times to avoid redundant data copy.


  • NEW The Table Editor Advanced Menu has option "Report Dependencies" which is useful during run to show Table Dependencies (objects that get unblocked whenever any cell in the table changes) and Column Dependencies (objects that get unblocked when any cell in that column changes). Note tables do not track cell specific dependencies at this time.
  • NEW The Pipe "during-run" context menu includes more diagnostic values to assist debugging. These values require looking up the data references that the pipe has been configured with.
    If a pipe is using complex references that fail to resolve at the time this menu is displayed, you will get a bad reference stop message. You can select "Stay Paused" and the popup will appear after that dialog is closed. You would get this same dialog if you attempted to start the pipe in this configuration.
  • NOTE Its recommended you only change the pipe run control column values when absolutely necessary. EG: don't reset to zero then set again. Doing so creates overhead and rapid periodic toggling of pipe control can cause the pipe to never actually get to processing its update events since these are discarded and rescheduled upon a toggle of run control. #4108

8.20.0 (format unchanged)

  • FIX BlockMove() was using code updated in the copy paste updates with these changes since 8.6.0:
** it checked for protect from edit columns when it shouldn't
** it would append rows if target range went past last row
** it could lose precision if source/target column formats differed
** it was a lot slower
 These are fixed. Run will now stop if target range exceeds end of table, modellers should append rows if required first.

  • NOTE IF a target column on BlockMove is text, it will set the tex:
** if source is text, a copy is made
** if source is numbers/labels, they are formatted to text

  • NEW Panel option "Don't pre-check column references". This is intended for modellers using generic code in a portal which may reference columns which aren't actually present in an associated table with code that wont be used for that particular portal instance.
    This option suppresses Planimate stopping the run because of missing column references in objects within that subsystem.
    If columns are added after run start and UpdateColumnRefs() is NOT invoked (automatically or manually if s.DisableColumnRefUpdate is set) then be aware that slower dynamic searching will be used to resolve the column references, until a restart.
  • FIX If Planimate needs to start a run to send the _test_finished BC because the simulation stopped it, it no longer sends _run_start at that time. #4155
  • FIX Reworked condition editor dialog to prevent buttons overlapping and added tips to assist with long references. closes #4158, #4162

8.19.0 (no model format change)

  • CHANGE "Model Properties" which used to be in the File menu has been moved to the Tools menu and is renamed to "Generate Model Structure/Data Report". This option generates a textual and spreadsheet friendly description of a model.
    The content of this report focusses on simulation logic/structure and data. Graphical co-ordinates, colours, paint, views, viewports are intentionally avoided at this stage.
    You can select to include: "Model Structure": Reports simulation related model structure including object details and table structure down to the column level.
    Table Cell Data: Includes formatted table cell data in the report.
    Table Memory: This option is useful by itself to create a summary of table sizes, memory allocation and modeller specified initial allocation. Selecting it along with Table Cell Data or Model Structure is redundant.
    When used on its own the columns are:
Panelpath    Textual path to the panel table is on
Tablename    Name of the table
Tabletitle   Title of the table as used in views
Rows         Number of rows of data
Columns      Number of columns
RowsAlloc    Number of rows space is currently allocated for
DefaultAlloc Modeller specified default row allocation (in editor)
Commment     Comment text
 This is very amenable to sorting in a spreadsheet.
 Icons Referenced: Dumps a lsit of the icons in the cache, from where they have been loaded and how many references are using them. Individual users are not reported as this is not tracked.
 File Reference List: Creates a listing of the filename remapping list. This used to play a bigger role before file operations were routine code that can use dynamic file names.
 Note this list may be discarded in the future unless its role can be justified.
** This report can take many minutes to generate
and may be several times bigger than the model MDL file.
the file generated will be left in your TEMP directory
after it is opened.
** Planimate will appear "dead" during while generating the file.
** A progress report and way to cancel will be added in the future.
 For large models, a 64 bit system with plenty of disk space and free RAM is recommended.

  • CHANGE "Model File Info" which used to be in the Tools menu has been moved to the File menu and rename "Info For Model File".
  • CHANGE Values which are infinite/nan are tested for at the formatting level and displayed as #BADVALUE#.
  • CHANGE Tables returned from DLLs are checked on return for valid numbers as nan/infinite cannot be detected by modeller code making debugging DLLs difficult. #4126.
  • NEW Table editor "Advanced" menu option "Verify Numbers Are Rational" will report if any numbers are infinite or nan. Note that such numbers will get saved/reloaded from an MDL as they are.
  • NOTE Please report any routine operation which generates a #BADVALUE# as the intention is that all Planimate operations are checked and report such a value at the operation that caused it, a necessary speed penalty.
  • FIX Added more error checking when tables cause Planimate to run out of memory.
  • FIX A minor memory leak in the toolkit default colour tracking
  • FIX rbtree clears left/right pointers for detached nodes for _DEBUG build, which actually cares about such things
  • CLEAN Rearranged internal management of model structure to remove a level of indirection in accessing the various data managers that comprise a PL model.

8.18.0 (model format compatible with 8.17.0)

  • NEW RB-TREE FEC! Planimate now supports an arbitrary number of items. x64 build on i7 NUC:
10 simultaneous random delay items        @ 4 million events/second
1 million simultaneous random delay items @ 630k events/second
 Event ordering preserved. Test suite models run identically.

  • CHANGE s.FECHookInterval repurposed to s.FECFrontEvents (now read only). Gives the number of unblock/broadcast etc events waiting.
  • CHANGE s.FECBackRatio repurposed to s.FECFutureEvents (now read only).
  • CLEAN Remove some extraneous testing from LinkedList code

8.17.0 (new model version)

  • NEW AppendRow() and AppendColumn() routine operations now have a row count parameter, defaulted to 1. Existing models will work as before but avoiding multiple calls for adding rows/columns benefits performance. #4110
  • NEW System attribute s.DisableColumnRefUpdates prevents Planimate from searching for and updating column references for routine operations InsertColumn, AppendColumn and DeleteColumn. #4109
    If this is used, the modeller must call UpdateColumnRefs() for every table with column labels that may be potentially affected by adding/removing columns to it.
    Otherwise corruption may result from a badly cached column label.
    This attribute resets to 0 on run start. It can be set in the run start broadcast but it would be preferable to set it / clear it around code that manipulates table columns.
    Using the updated AppendColumn operation to append many columns at once may reduce the need for setting s.DisableColumnRefUpdates.
    Refer to 8.14.0 for more details on the column reference update behaviour.
  • NEW Panels now have separate options to hide spatial links during edit and run. The existing option was renamed to clarify it applies during run.
  • FIX Allow more rows/columns in table resize and initial table size dialog
  • NOTE In a 2 column match, MatchMultipleKeys is testing 7 to 9.5 times faster than Search. Models that are search for specific data in 2 or 3 columns will benefit greatly from its use.
  • NOTE Searching in 64 bit Planimate is twice as fast as 32 bit
  • CLEAN Merged some table code that did similar things in multiple places

8.16.0 (new model version)

  • CHANGE Table property "MatchedIndex" HAD been changed in 7.5.0 to always search from the top and hence be usable in tables with duplicate matches.
    It has been renamed to MatchedIndexTop and heavily speed optimised but otherwise its operation is unchanged.
    Existing references will automatically be renamed when an older model is loaded.
  • NEW Table property MatchIndexBottom searches for a matching value in a column starting at the bottom of the table. This is useful when you expect data is more likely to be at the end of the table.
  • NEW Table property MatchIndexFast brings back the original operation of MatchedIndex (pre version 7.5.0). It uses caching and in the future may even be multithreaded.
    ================================================================== MatchedIndexFast MUST ONLY BE USED WITH TABLES WITH UNIQUE MATCHES ==================================================================
    If used with columns with duplicate matching rows, MatchedIndexFast reserves the right to return a differnt but matching row arbitrarily each time its used, and to change any apparent behaviour between versios of Planimate.
    Use ONLY if you are strictly managing uniqueness of the match column including any data you may import or allow a user to edit.
  • NEW Routine operation (note not a property like above due to the many parameters) MatchMultipleKeys. This is like MatchedIndexTop in that it always searches from the top, but enables two or three column vs. value matches to be tested simultaneously.
    It is very useful when looking up From/To destination records with a third match criteria optionally available.
    It includes a "start row" so you can resume a search if a given match fails other criteria you subsequently test it against.
    In speed critical situations, this operation is MUCH faster than using Search() as the matching criteria are explicit parameters, not buried in an arbitrary match condition as they are for Search().
    Note that if your data is suitably sorted, BinarySearch() is still a better option, but keeping dynamic data sorted is often impactical.
  • NOTE MatchedCell() and MatchedRow() remain unchanged, searching from the top for the first match and giving an error if none. They benefit from the speed up though.
  • NOTE For best performance, all the match operations should be executed as little as possible, using routine attributes (the fastest data type in Planimate) to cache results within a routine.
  • NOTE Using matched index in frequently repeating operations such as pipe targets is very inefficient especially for tables with over 20 rows. Sometimes it is the most straightforward solution but keep this in mind.
  • FIX If a Planimate executable was converted into a DLL then loaded using the newer PL_InitThread / PL_TermThread API then it could lead to disappointment when the owning application shut down due to an inadvertent commenting out of the call to terminate the instance's C runtime libraries. Also removed a debugging delay.


  • REMOVE 8.15.0 introduced capability for using a spatial link with target determined during move (avoiding capacity if target is assigned during move, not lookahead).
    This did not consider the ability to close (block) a spatial link which requires blocking of the item. Unless closed links are no longer supported, the knowledge of the link target during lookahead is required, and hence the capacity must remain when the target is only assigned during move in the preceeding flow.

8.15.0 (new model version)

  • NEW Routine operation RemapValue() allows row range limits for the mapping as well as using the entire column.
  • NOTE Changed the attribute reference remap to allow value before the first remap data point, treating it as such.
  • NEW Items no longer need a point of capacity between assigning their target and the portal exit, in cases where the assignment was "during move".
    A portal with a spatial link leaving it will accept any item with a link target in lookahead, so long as the item doesnt also have a route assigned and there is also a track leaving the portal.
    The link is tested for acceptance at the time the item actually moves, if the link fails to accept it then (eg: cannot find target) then the run is stopped at that point, as occured previously but in lookahead.
    Hence queues before portal exits can be removed and the model will move items more efficiently.
  • FIX Paste Append now appears in an empty table view context click if there is something to paste. #4103
  • CHANGE Default FEC back interval set to 0.9
  • FIX Windows update KB3059317 (9th June 2015 patches) changed behaviour of tool tip relay events causing some mouse clicks (renaming objects, date time control, colour palette) to become dysfunctional. #4102, #4104, #4101


  • NEW #4099 The results in the attribute reference display dialog can be filtered by text, the text field supports * and ?, if present additional filtering is performed according to the wildcards(s)
  • SPEED Added a btree cache to make looking up object labels faster when there are a large number of objects in the object list
  • FIX Have reworked scrollbar handling to enable hidden scrollbars to still propagate state. #4100
    Note that the routine operations for setting time scrollbar offset and position, whilst still supported, should be avoided and the synchronised scrollbar capability used instead if that is what they are being used for.


  • NEW The Show Pending Events diagnostic report now includes a histogram of future event intervals for the events that are waiting on the Future Events List at the time the model is paused.
    This is immensely useful in determining whether the simulation is generating delays as expected.

8.14.0 (new model version)

  • NEW Engine option "Enable Tool Tips During Simulation" keeps hover tips active whilst the model is running.
  • FIX Add interlocks to prevent an open table user making changes to columns whilst a model initialisation error (eg: missing column) is being displayed, or a table being deleted whilst a run is active.
  • FIX TAB selection of box corner now always starts at top left when TAB first pressed, the mouse was unexpectedly affecting it
  • FIX Can use click to "end" a move/resize performed with the keyboard.
  • NEW Pressing shift key whilst moving or resizing with keyboard or mouse selects smooth grid, releasing it restores the default grid even mid mvoe.
  • FIX Keypad-+ can be used when selecting a corner to resize to toggle to fine movement mode before any movement is made, though the shift modifier makes toggling mostly redundant.
  • NEW Property for graph views "HideTimeScrollBar" enables the dynamic show/hide of a graphs time scrollbar/zoom in control.
  • FIX Time scrollbar extra background colour pixel noticeable when when the scrollt thumb background colour is set different to the background #4096
  • FIX A datetime configured to autoshow calendar will end the edit on a close calendar notification (eg: clicking outside it or the close-up button).
  • CHANGE In previous versions, Tables which have columns added/removed during run required the modeller to call UpdateColumnRefs() for the table after the column changes, otherwise existing column references to the table in the model could point to the wrong column or even to arbitrary memory. #4095
    This has been changed. After columns are inserted, deleted or moved during a run - either in routine code OR the table editor, Planimate will now automatically update column references in routine code. Calls to UpdateColumnRefs() are redundant and should be removed for better performance.
    IF a referenced column is no longer present in a table, no error is given until that reference is actually used. This gives the modeller an opportunity to re-add/rebuild the table. However if the run is stopped without the column having been re-added, it will fail to start due to the missing column, so care is needed when code deletes columns which are referenced using column labels.
    Performing this update of column references takes time, for best performance, columns should be added/removed en-masse instead of individually.
    If performance is an issue (ie: columns are being added or removed often (itself an overhead) then it is best for NONE of the columns in the table to have labels at all and the modeller to keep track of the columns themselves eg: using portal attributes. At run start a check is made on each table and if no columns have labels, then Planimate avoids any column reference updates when columns are added or removed from that table.
  • FIX Divide by zero in Beep(0,x)
  • FIX Conditions and comparisons with names with spaces in them would fail to parse if edited as text or copy/pasted as text. #4094
  • FIX Dial display when range is dynamically reduced below its current value #4097
  • FIX Context items for Dialog are more descriptive
  • CLEAN As planimate has the capability to wrap long routine lines in the routine editor, long standing complex and fragile code that shortened routine lines by trimming the names of attributes etc. is no longer necessary and this code has been removed, greatly simplifying the textual display of routine lines.
CLEAN        Big internal cleanup of attribute reference description services for
better use of temporary string cache


  • NEW Attribute and Cell View option "Change Broadcast Only From Dial" causes the Change Tracking broadcast to only be sent when a dial associated with the view is changed by the user, instead of for any change in the associated attribute/cell.
  • FIX Resizing a viewport waits for it to be hidden before displaying the resize corners to prevent them being incorrectly drawn due to the window generating a repaint as it becomes hidden
  • NEW The Find dialog can now search every routine line in a model for a fragment of text, including names of operations, attributes, comments and subroutines. This is enabled by an additional check box on the main dialog, on by default.
    At this stage it is very rudimentary - it only reports the object, it does display the line number or matching text. It supports simple use of * and ? wildcards as for the other text find types. It has the potential to be extended.
  • NEW Operaion Beep(frequency,duration) for generating short tones sometimes useful in debugging things that behave differently if they are breakpointed. Duration can be as short as 1ms.
    This is not supported for end user application use.


  • NEW The table view contaxt menu will have an option to temporarily show column titles if the table is configured for no title rows. Selecting the option again will hide the titles, or they will automatically disappear on a panel change, model reload etc. #4021
  • FIX Have renamed the label related column options so they sort better in the options editor
  • NEW The option "Open Label Combo/Date Calendar" selects
- for a label list to drop down the combo
- for a date time dialog to open the calendar

8.13.0 (new model version)

  • NEW Routine operation "SetPortalTip" enables the tooltip for a portal to be dynamically changed by the model. If the portal is visible, it is redrawn and its tool tip updated. #4079
    This operation works on a portal hover broadcast due to the hover broadcast being processed begore the window manager's tool tip display delay.
  • NEW Graphs have Y Scale option to show a line at co-ordinate 0 with the line style, colour and width separately configurable #4078
  • NEW Forming/dragging boxes and lines now shows guide lines to assist in aligning with other objects on the panel. If you don't like them, the guide lines can be turned off using the DragGuideLines in the [Edit] section of platform options.
  • FIX Setting items in the settings editor are now sorted.
  • FIX A property wasn't being set on a panel window which caused dashed/dotted lines to display as solid until that panel first displayed text.
  • FIX Added a test for an unexpected condition with object names during copy. Report any system error messages.

8.12.0 (new model version)

  • NEW Column Overlay, Log Driven, Gantt and Train graphs have a new option "Synchronised Scroll" under their Properties submenu. This is a toggle option. #4075
    When any graph in a group which has this option selected has its horizontal time scrollbar changed by mouse or keyboard, the other graphs will have their scrollbar updated to match.
    Some of the graphs can have their scrollbar hidden, combined with the Synchronised Graph Area option this simplifies co-ordinating a number of different graphs on a panel.
  • NEW Column Overlay, Log Driven, Gantt and Train graphs have a new option "Synchronised Graph Area" under their Properties submenu. This is a toggle option.
    Planimate will line up the graph plot area for all graphs with this option on, making sure each graph gets at least its specified area for Y labels and the optional vertical scroll bar for gantts is taken into account. Obviously the graphs need to be under each other for this to work.
    This is part of supporting the synchronisation of multiple graphs (eg: a gantt and a log driven) on the display together.
  • NEW The colours for graph time scrollbars can now be edited by right clicking on them in edit mode. The "Text" colour sets the colour of the thumb and "Text Shadow" the colour of the thumb border. #4076
  • FIX Test run models now have access to their DB so models that use DLLs can be batch tested
  • CHANGE Modelling objects once again have "Position" in their context menu. This is useful for positioning with the keyboard, you should press enter to select the option otherwise you have to be very steady with the mouse if you don't want the object to jump to the cursor position. #4035
  • NEW Dragging and resizing now supports the keyboard. #4035 If you initiate a drag with the mouse, you can switch to keyboard using any of the arrow keys. If you select position/resize from a menu, you can use the keyboard, at which point the mouse is locked out. Keypad [+] toggles fine movement or the user set grid. Keypad [-] enables numerical entry [Enter] sets the changes, [Esc] undoes them.
    For resizing. [Tab] enables you to select a corner first, it cycles between single corners and all four, if all are selected then its a move. After selecting the desired corner, use the arrow keys.
  • NEW Planimate will now load a model that is dropped on its window. This is only active in edit mode, not user and not during run or pause. It will confirm saving any changes to a current model. #4081
  • SPEED Minor optimisations to FEC. New System attribute FECBackRatio controls searching in the FEC. The default is 0.7. For models with around 100 items, 0.9 gives a small performance increase.
  • SPEED Reworked the startup/about box, removed inefficient code and made the about box stay up for a short time without need to click it away.


  • NEW This version has a new experimental FEC optimisation. A new system attribute "FECHookInterval" controls the operation of the optimisation. This can be changed during run and reverts to the default (20) on a restart.
    The default value 20 is optimal for runs with up to a few hundred simultaneous items.
    Increasing the value to 40 may be beneficial for runs with thousands of simultaneous items.


  • FIX In-memory copying between tables was broken, possibly as far back as 8.7.0 in pre release cleanups. Only pasting from clipboard worked.
  • CHANGE Changed the table paste context menu as follows:
** right clicking outside the table data area no longer
shows Paste Insert/Over unless there is a range of cells selected
in which case the top left cell of the selection is the target
** right clicking outside the table data area will show
Paste Append. If there is a range of cells selected the append
will start at the column of the top left cell, otherwise it
starts at column one, not the column of the selected cell as

  • CHANGE Increased limit of multiserver items to 1,000,001 which allows one million concurrent events with an extra slot for zero capacity loop back.
  • NEW Command line option /BATCHTIMEOUT=x enables a force stop of a run in batch mode after a specified number of real seconds. This is being used for testing performance tuning parameters. It is only intended for use along with /BATCH

8.10.0 (new file format)

  • NEW Routine operation RenameObject() enables an object's display name to be changed. The name is adjusted to make it unique. If a name greater than the name length of an object (32 characters) is passed, a model error results. #4084
  • NEW Routine operation ListBlockedTrains. This sets a table to the list of blocked trains with columns ID,time blocke and location. If the columns don't exist Planimate will append them
but does not set the formats.  #4086


  • FIX Table editor row context menu when empty was causing a fault #4083

8.9.0 [new file format]

  • NEW Dial parameters for range, warning levels and ticks are now references. A dial updates these upon redraw, for non constant values they obviously cannot update unless the run engine is started. #4072
  • NEW Dials now have the option to display a tip box with the value as they are dragged. For sliders and round dials, enabling "Show Tip" in the option adds new context menu options to customise the box graphics options, font, positional offset, numerical format and tip box size. The value format for the tip can be set in the context menu and is independent of the format of the attribute the dial is associated with. Partial transparency is supported for the tip box. #4073
  • FIX Paint Map now supports using SetPaintImage() which in that context can be used to change the folder or database name that the paint map draws images from.
    This operation will flush the memory cache and reset the DB file loader to ensure any changes take effect. #4082
  • REMOVE As announced in 5.31c release notes, the following dial modes are obsolete and have been removed: Lamp, CheckBox, Value, Label, Image.
    Any existing dials using these will report their panel and be converted to sliders upon load of older models.
  • NEW Additional border styles No Top, no Bottom, Sides Only,
bottom Left.  #4074


  • NOTE Planimate is starting to get new icons, the EXE will look for these (different name) and fall back to the older "Version 7" icons if not found. Have centralised object/item icon names.


  • NEW Updated Planimate DLL call to version 10, now supports a DLL requesting Planimate to append columns to a table direct
parameter.  Issue #4064


  • NEW Routine operations CompareTables returns the first row where two tables differ
  • NEW Routine operation FindDuplicates creates a report of all row pairs which are the same in a given table. This is created in the first two columns of a second table.
  • NEW Routine operation SetWindowTitle enables the title of the Planimate window (in application mode or for a PBA) to be set.
  • NEW Center Horizontal/Vertical context menu options for views, paint and viewports
  • CHANGE Comparing entire tables using EQ or NEQ is no longer supported as it would be unusable in expressions where binary operators only support scalar types.
    Instead use the routine operation CompareTables
  • FIX Remove extra divider line in empty table row menu
  • FIX 8.6 had unintentionally changed the meaning of a quoted time like "1m" from 60 seconds to 1000000. This version tightens up the value parser as follows:
    For a units format cell: 1M = million, 1m = error For a time format cell, 1m = minute, see below for M/Y For a money format cell, 1m = million, as is 1M or $1M etc For a quoted string: "1M" = million, "1m" = 60.
    In previous versions, "M" and "Y" in time cells translated to a fixed number of days. These are no longer allowed in time fields. For cases where an interval is being input (such as advance for interval or AdvanceToTimeDialog()) "M" and "Y" are allowed as they will be correctly calculated against the current date.


  • FIX Clicking OK after editing a reference performs the same validation as pressing enter, ensuring the a typed attribute name exists and offering to add a new one.
  • FIX Importing into database was including the path in the suggested filename which was cropping off the actual name in cases where the user browsed to a different directory.

8.6.0 (new model version)

  • NOTE The table paste development is a separate capability to the to the Table Editor / File Menu / Import From File and Import From Clipboard options, the latter which are intended to assist in creating new tables.
  • CHANGE Have set "no numbers" for inbuilt label lists to prevent accidental bad pastes filling them with values.
  • NOTE The text parser that handles guessing formats and converting strings into values/dates/times has been rewritten, report if your favourite formats are not supported. All date formats and the default PL time formats are supported.
  • CLEAN Rewrite of core formatting management code auto-format parser operating logic simplified. Formatting code error handling cleaned up Money value parser rewritten - now more intolerant of mistakes Rewrite parse interfaces for Table.TableView,TableEditor,GridTable Merge table data importing into view code, reduce code replication Split off GridTable window interface so its only used for table editor, not table views that aren't a window.


  • FIX Portals with customised states were mismanaging the icon cache causing a fault after the Choose Icons option was used on such portals. This was likely introduced in 7.14.2
    Its confirmed this is in Version 7 and a fix will be released.
  • FIX The GDI+ image load code was not using a correct function to deallocate memory (CloseHandle instead of GlobalFree) which worked but triggered the debugger to notify about it.

8.5.0 (new model version)

  • CHANGE Changed routine line saving again, now using quoting so don't need binary blob. This keepls mdL file smaller and more readable should the need arise.
  • FIX Over zealous handling of panel resize memory allocation was causing black panels when a panel was resized smaller than its minimum width and height AND the panel was configured for dynamic resize AND there was no "panel resized" broadcast handler. This is because the platform was correctly expecting not to need to repaint a panel when its clamped to minimum area but the resize code was reallocating the off screen panel image buffers.
  • CLEAN Internal cleanups and rearrangement of model table code in preparation for better paste suppor Handling of app deactivation cleaned up Cleaned up table grid editor code

8.4.2 (new model version)

  • NEW System attribute s.RunEndTime enables the run end time in the Start menu to be set/read by code. This value is referenced to the run start date. This is useful for test runs.
  • FIX It was possible to access the menubar while the F2 full routine line edit was active, leading to attref scan errors if the run was started while the editor was active.
  • FIX Routine line comments are now saved as a binary so lines edited with F2 (that can have comments with " in them) no longer create a model that cannot be loaded.


  • NEW New command line arguments and system attributes to support platform testing:
    /TESTRUN or /TESTRUN=n PL test run, s.TestNumber=1 or n
/TESTTARGET="text"     s.TestTarget="text" (text attribute)
s.TestResult           Sets expected test result
l._test_results        label list of valid test results
 For a test run: Broadcast "_Test_Start" is sent instead of "_Model_Loaded" upon the first run. Broadcast "_Test_Finish" is sent after "_System_Close", the model can use this to set s.TestResult.

  • NEW Command line option /DEBUGAPPEND appends to debug log file instead of overwriting. This is useful in multi-run batch operations.
  • CHANGE Command line options /SCENARIO renamed to /DATASET. This sets s.LoadFileNamePath for a Planimate EXE and MDL. For a compiled PBA, the /DATASET= is optional.
  • CLEAN Internal showfile handling
  • CLEAN Big cleanup of planimate debug file handling. Note that debug file is now always present for Planimate EXE and can be accessed via the Tools menu. This means you do not need to remember to use the /DEBUGFILE command line option.
    As in previous versions PBAs will not generate a debug file unless /DEBUGFILE is explicitly used. This may be useful when diagnosing issues with a PBA.
  • FIX Path report was using incorrect pointer for the item class name
  • CLEAN Internal rework of condition/decision to avoid warnings Using reinterpret_cast for datawriter Dial binary display now will show as hex until requested rework Resolved sprintf warnings on gcc


  • NEW Routine operation FileSHA() generates a SHA256 of a passed file name. The result needs to be text formatted to receive the hex checksum.
    An option specifies whether to treat the file as text or binary. Binary would be used for files like DS2 files, text is for CSV. The reason to use text is that the same content will then given the same SHA regardless of whether it uses CR/LF or just LF line endings.
  • CLEAN Many internal build cleanups Build project/makefile cleanup/merging, update MinGW Fix IFBigStringList and language translator issues identified by gcc Time code merging/cleanups Planimate.dbg field labelling, version extractor (osslibs) updated


  • FIX 8.3.1 was released with some internal memory debugging enabled which would cause it to operate slower


  • CHANGE Increased the number of cache rows for graph overlays by a factor of 16 to enable larger datasets to be displayed without seams between overlays
  • FIX Planimate DLL call was incorrectly handling Table Direct table parameters passed as outputs to the DLL.


  • NEW Log Driven Graph data tables can have a columne "_ignorenearestpoint" which if non zero, causes that row to be ignored in all nearest point/nearest line calculations.
  • NEW Log Driven Graph hover broadcast, useful when combined with the NearestPoint operation in 8.2.1
  • FIX The dynamically set routine line breakpoints now honour the global breakpoint enable flag. Not doing so was causing them to ignore the advance time option to disable broadcasts. Internal renames to make the precedence of the broadcasting control clearer.
    Setting a routine line breakpoint now enables the global breakpoint option.
    Issues closed: #4049, 4046, 4044


  • CHANGE Pipe accumulators (A,B) and decumulators (C) now apply any Output Scaling value that has been configured for the pipe to the value transferred to them.
    Previously the scaling was only performed on the value transferred to the pipe Target.
    Closes #4051


  • FIX NearestPoint enhanced - if the overlay filter is set to
-2, it now looks for the closes point to lines joining adjacent
points in the plot.
 NOTE all points must be visible at this time, zoomed in views are not supported
 NOTE the current design assumes the graph is already visible and up to date (eg: hover or click broadcast handling)

8.2.0 (new file version)

  • NEW Table option "Fill So Transparent Cells Work" fixes table view repaint when cells are partially transparent, avoiding a full panel repaint.
  • NEW Routine operation NearestPoint() returns the row of row with the closest x/y point to a given co-ordinate (specified in panel co-ordinates) for a Log Driven view. The maximum distance to match and a overlay filter are supported.


  • FIX RepaintView for log driven graphs is now far less flickery


  • FIX All previous version 8 had an issue saving models which would cause paths to be saved for the wrong item class. Typically this would cause model run errors for missing item attributes. It is suggested you re-upgrade pre version 8 models or you can use the new features added in this version to verify item class usage.
  • NEW The Item Class context menu option "Usage Report" gives a summary of panels that the item class either has paths on, or that item class remapping is configured to use.
    This is useful in determining how an item class is used in a model from a flows perspective.
  • NEW The menubar/Panel menu option "Replace Item Class" enables references of an item class to be changed, including:
** path steps
** interaction details (such as multiserver times)
** class mappings
 This works hierarchically starting at the current panel. If will only proceed if the selected "new" item class is not used at all in any panels within the hierarchy, otherwise too many conflicts could arise. This includes class mappings, so if you are converting a portal to use an internal class, add the class mapping after changing the item class on the flows.

  • FIX Item class mapping internal cleanup
  • FIX Deleting an item class purges unused path managers before reporting how many panels use the path. This will make this value accurate.


  • REMOVE All old load code and supporting data structures have been removed from this version of Planimate. It will only load models created with version 8.0.2. This means all old models need to be cleaned up and loaded/saved via 8.0.2 before they will be loadable in this version.


  • FIX This is a lurker since pre version 6.8. Opening the reference insert dialog (the very old way of creating Planimate data references) while editing a reference textually (F2 whilst typing a reference) was overwriting a global used to propagate reference updates to the editor, which created a nsaty leak which resulted in segfaults, attref scan count errors or, at best, a memory leak.
  • FIX The full text editing of routine lines (F2 on a routine line) had an issue that if the line was empty, clicking outside the field would cause the editor to re-activate as the routine editor was closing, leading to a fault.
  • FIX Missed error reporting case for full line edit
  • FIX Memory leak when a table driven entry is deleted


  • FIX Change object icon updated to indicate its a routine after conversion of Change/File to routine operations.
  • FIX Empty tables with "Text" columns were not initialising the text management properly leading to a fault when a row was added.
  • FIX F2 was able to edit routine lines during run mode. This is currently unsupported and could lead to a segfault
  • FIX Routine operations InsertColumn / DeleteColumn had inconsistent internal names so text parser could not interpret them


  • FIX Flow editing had been broken by a cleanup of the path management in 8.0.1.

8.0.1 new model format

  • NEW Platform INI [Edit] options
IgnoreRunOnLoad  : if set the run on load model option is ignored
for editors (as can be done by holding CTRL)
IgnoreSaveOnExit : If set, the save on exit model option is ignored
 These were implemented to assist in platform development and testing.

  • FIX The way labels starting with numeric digits are interpreted by the routine line parser is now consistent, previous versions failed altogether. It will now try look them up as labels instead of failing to parse them.
  • CHANGE Implemented a translator that converts obsolete change/file operations into routine operations. The converter does a reasonable job, including handling translation of the import/export options to _fileoptions labels, supporting system execute commands and file browse before file read/write.
    Changes made are logged (with full location) to the "planimate.dbg" file so it is important you run with /DEBUGFILE and carefully review the changes (the loader just gives a summary of how many change/file objects were converted).
    "Dynamic" execute commands (using notation like "pName & pName2" which preceed string handling in PL are the least supported, they will be logged as a routine comment for manual attention.
    It may also be useful to havE the model loaded in version 7 for comparison purposes.
  • CLEAN Further MDL format cleanups (limits on model palette data, font references, unneeded paint detail headers)


  • This is a release for initial testing.
  • NOTE This version is to become a "rosetta stone" that will read pre 8.0.0 version models and save them in a new MDL format.
    Versions 8.0.x will be the LAST VERSIONS to support loading pre 8.0.0 models. Once 8.0.x is stable, 8.1.0 will remove old compatibility code/support structures.
  • REMOVE Change/File operations, use routine operations for files instead. This must be done using the most recent version 7 release.
  • REMOVE Object In Switch (unblocking order) setting. If ever needed, this can be replicated using tables etc. Removed because of global simulator overhead for a never-used feature.
    Version 7's "Find" -> "Advanced" -> "Objects with non default unblock" can be used to locate objects configured for special in switch modes.
  • REMOVE Choose Icons for Change, Portal Entry and Portal Exit
  • REMOVE Routine Condition() operation is no longer supported, It will still be loaded but you cannot select the operation. Use a previous version to find the routine operation, it can be replaced with a CASE statement.
  • FIX Routine Dialog() operation is now text copy/pasteable. The parameters for the dialog's contents are written textually. These can result in some very long lines for complex dialogs.
    (this only impacts text copy/paste of routine lines, not internal editing/saving which has not changed)
  • NOTE Model compatibility moved to v654 (5.35) but models should be loaded/saved with most recent version 7 release before loading in this version. TAKE NOTE OF OTHER REMOVE NOTES above.
  • NOTE All supported routine operations are now text copy/pasteable.
  • FIX In previous versions, the order that panels wrote their flow paths was indeterminate (though the flows for a given panel retained their order, of course). This is due to the structure of the database storing the flows.
    The major cleanup of the MDL format has fixed this.
  • CLEAN Significant refactor of MDL file structure Renaming of many tokens Table data written using high speed hex packing routines Model file line/layout cleanup Change how item paths are saved


  • FIX Errors generated by expressions (eg: divide vy zero) were reporting the wrong panel though the correct change object, leading to an inability to inspect tables etc. at the actual panel where the error occured.