ReleaseNotes:Planimate 8.36 to 8.99 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search



  • FIX A missing interlock was causing text formatted data views using the "Edit With Field" option to cause popup panels with the "Auto Close When Focus Lost" option selected to close when a user attempted to edit the text.
  • CHANGE Internal rework of system attribute definitions.
The definitions now  generate the wiki page:
I briefly reviewed and reworded every description. Feel free to suggest any fixes or clarifications to me so I can incorporate them, don't edit the wiki page.


  • FIX Quoted relative times of the form "12:00" in routine code were (unexpectedly) being accepted as valid dates by the Windows (OS Date/Time) unit format.
    The PL autoparser has been changed to test/try a time-only parse first in cases where an arbitrary/unknown format string contains ":" or the m/h/d/w suffixes.
  • FIX Pasting a relative time like "12:00" into a table cell formatted for a calendar time would result in a large negative time offset, for the same reason as above.
    In this case the expected format class (ie:date) IS known so an additional check has been added to treat dates returned by the OS Date/Time parser as errors if they are before 1-Jan-1968 (an internal time epoch).
  • FIX Cleanup broadcast send in panel code during system startup and added batch system broadcast logs for diagnositcs.
  • FIX Handle start model for _test_finish broadcast properly in Linux build.
  • FIX Minor string niggles, as elicited by gcc.


  • SPEED Prevent unnecesary re-draw where a table filter is shown, the "Re-Apply Filter On Changes" option is selected and a cell is changed in a column that does not impact the current filter configuration.
  • SPEED Images used in table cells are now kept cached to speed up table display. They were previously being reloaded every instance.

8.99.0 (model version 777)

  • NEW BringToFront() operation brings an already open popup window to the front in the window z-order.


  • NEW Item class option "Center Info Panel Text"
  • FIX Ctrl-A in multi-line fields
  • FIX Error in error message in slippy remote tile fetch thread

8.98.0 (new model version 776)

  • NEW SignFile() enables files to be signed.
  • NEW Model Option EndUser / "Don't Show The Main Window (PBA)" prevents the main window being shown.
  • NEW NoDelimit _fileoption now enables reading entire text files into a single Text formatted column.
  • FIX Text routine attributes display in routine editor menu


  • NEW The platform and tools now support applications being delivered with time limited keys which can subsequently be easily upgraded by the user.
  • NEW Planimate now searches for license KEY files as follows in the order given:
    For modellers: 1) \Users\username\AppData\Roaming\InterDynamics\Planimate\_PL_KEY.KEY 2) \ProgramData\InterDynamics\Planimate\_PL_KEY.KEY 3) EXE Folder\_PL_KEY.KEY
    For compiled applications: 1) \Users\username\AppData\Roaming\PlanimateAppKeys\appname\PL_APP.KEY 2) \ProgramData\PlanimateAppKeys\appname\PL_APP.KEY 3) EXE Folder\PL_APP.KEY
    where: 'username' is the user profile name of the current user 'appname' is the Application Name used when creating the PBA (must be set to a valid filename and the PBA compiled to require an external key).
    The first key found in the order given is used.
    This is useful because it enables Planimate/compiled applications to ship with a demonstration key which gets installed in the same directory as the EXE, then an end user can subsequently purchase an upgrade license which the platform will install for them without needing administrative rights.
    The platform always uses option 1) when the user selects/pastes a key.
    Option 2) is provided for administrators who want to create an "all user" installation by copying the key manually. Future versions of keys may automate this.
    Previous versions used to search option 3) first for both Planimate and compiled applications.


  • FIX Default file name now appropriate for PL vs PL PBA when browsing for a key file.
  • FIX Gantt Drag Handler was using editing snap grid

8.97.0 (new model version 775)

  • NEW Routine operation "InfoPanelRemote()" enables remotely changing an item's show/hide info panel status
  • NEW Routine operation "BrowseKey()" enables a model to trigger the user selecting a key file. This is useful for PBAs in conjunction with the s.KeyFlags variable. The new key file selected is copied to _PL_APP.KEY and placed in the same folder as the PBA EXE.
    Note if the application is installed in Program Files, write access is not normally available to users.
  • NEW s.KeyFlags gives access to license key flags (for PBA)
  • NEW Activation code dialog has "Paste Clipboard Text" button
  • NEW A PL PBA needing an external key now enables the user to browse/
paste it.  At this stage this is only useful if the PBA is
running from a folder the user can write to.


  • FIX Activation code dialog fixed


  • FIX Pipe hourly rate not set when transfer on stop option used and multiple parameters changed as pipe stopped.

8.96.0 (model version 774)

  • NEW Platform INI setting Edit/BackupFolder sets the folder where backups are placed when saving/autosaving. This can be a relative or absolute path, eg: "Backups" uses a folder in model directory, "D:\TEMP\Backups" uses a fixed folder no matter where the model is.
  • CHANGE Removed the "Inherit" option from CopyPaint() as the previous default of 1 would cause unnecessary errors when updating older models that used CopyPaint.
  • NEW Now support pasting license code as text when PL/PL applications first run or a new key is selected (Help menu). A button enables use of a KEY file if you already have one.
    In the near future key files will be distributed in emails as copy/pasteable "activation codes".

8.95.0 (new model version 773)

  • NEW Routine operation FollowItemRemote() enables item follow broadcasts to be initiated for another item (eg: one on a spatial link)
  • CHANGE After selecting a font in a multi-state button, it gives option to apply that font to all states.
  • FIX Graph scale interval calculation repetition fixed for:
    • integer unit formats
    • formats that hide seconds (minutes shown)

8.94.0 (new model version 772)

  • REMOVE Paint inheritance removed because
    • its not designed/compatible with the group anchoring / layout system
    • modern UI is to have a single instance of the buttons and a viewport
    • that "roams" through inputs/outputs panels.
      Existing models using it will load fine, the paint objects will be made independent and no longer follow changes to their old parent.
      Routine calls to InheritPaintObjects() and DeleteInheritedPaintObjects() will result in an error during run. CopyPaint() will give an error IF the "Inherit The Copy" option is set. You might want to use "Find" to check for these.
      If a model relied on referencing the paint object ID of a parent to an inherited paint object, it will need rework (uncommon).
  • NEW Double clicking the status bar "Activity" area (to the left of the item icon/status block) now toggles bettween end user / edit modes if the user has edit ability.
  • FIX The graph "Y Zero Line", if enabled, is now drawn above the graph instead of under it. This fixes vertical bars clobbering it.
  • FIX Entry name display when the broadcast name ends with a number
  • FIX Spatial links viewed as pipes were broken


  • CHANGE Setting paint property ViewOrder now accepts < 1 as first and > the number of paint objects as last. Previously out of range values were ignored.
  • CHANGE For new multiservers, option "Animate Item To Road Start" is on by default to reduce confusion if "Show As Road" is subsequently selected without an update interval ("why is item appearing to be stuck").


  • NEW Broadcast Entries show the name of the broadcast above them if it does not match the object name (beyond spaces equal to underscores and removing trailing numbers).
    This is useful where name filtering is also used since both the broadcast and the object name (the filter) are now visible.
  • FIX Item info panel tips displayed item ID if first item attribute was selected. Also now manage memory more efficiently.
  • FIX Selecting an icon for a new unsaved model would cause a seg fault
  • FIX Prevent graphical issues if item road is beyond spatial link road
  • FIX The optional Road parameter in SetItemLinkTarget was out by one.
  • CHANGE SetItemTransitTarget and SetItemTransitTime have been renamed to SetItemLinkTarget and SetItemLinkTime respectively (really this time). This ensures they come up when "Link" is typed in the routine operation selector. Note that SetItemLinkTime is unnecessary given SetItemLinkTarget can set the link target, the time and the road.


  • FIX Pipes with bendpoints ratio cache initialisation leading to display (but not simulate results) errors.


  • CHANGE RepaintPaintObject() now regenerates viewport window, useful to reflect code-based changes in viewport paint object position which are not propagated to the viewport window by normal repaints.


  • NEW CreateTiles updates the status bar with progress and polls Windows events to prevent Planimate being reported as non responsive.


  • FIX Decision logic for "Terminate Run" in model error dialog was preventing it appearing for breakpoints.
  • FIX Vertical Bar graph plots would not show border if it was palette index 0 (ie: Black).

8.93.0 (new model version 771)

  • NEW Text view properties for graph settings supported in SetViewProperty() enabling graph XTitle, YTitle and YTitleRHS to be set.

8.92.0 (new model version 770)

  • NEW SetItemTransitTarget and SetItemTransitTime have been renamed to SetItemLinkTarget and SetItemLinkTime respectively.
    SetItemLinkTarget now supports specifying the time and road to use as parameters (0 values ignored) and it supports lookahead meaning no capacity is needed before a portal exit if the routine assigns a spatial link in lookahead. A capacity is still needed if the routine assigning the target is "Only during move"
  • FIX Table cell combo when Dynamic list with No Add broke in 8.91.2


  • CHANGE For model editors, the "Pause" context menu is now shown when the "Buttons Clickable While Running" option is selected and the background of a panel is context clicked.
  • CHANGE Model option "Buttons Clickable While Running" is now on by default for new models.


  • FIX Enable selection of "None" for panel object / object name fill colours


  • FIX Combo field changes, don't drop down empty list, no single line combo option only applies if the combo is "user no add" as well.

8.91.0 (new model version 769)

  • NEW System attributes s.DataErrorRow and s.DataErrorColumn are set when ReadFromFile() with a table fails and would have normally displayed a cell error (eg: bad format).
    The ContinueOnError option is not recommended when using these as any subsequent errors overwrite the first. You can perform a second read of the file with ContinueOnError if required subsequent to an error being detected/reported.
    Note these are not used for paste / import into view operations
  • NEW Panel popup option "Close Timeout If No MouseEnter" Useful when using hovering to pop up panels, providing an auto close if the mouse does not enter the popup after it leaves the hotspot (which should normally be adjacent/under where the popup appears). Should be used with Capture Mouse On Open and Close On Mouse Exit, other usage contexts are untested.
  • FIX Hover events were not being sent after a panel click due to the test for mouse down which blocks hovers depending on something that intentionally doesn't get reset on a mouse up.
  • FIX Stricter about when Paint Buttons process a click when they have no button action, now require 2 or more states and a hover or mouse down state.
  • FIX Paint object hit testing was too generous. Refactored the hit test code and moved complexity out of base class.


  • NEW Can open parent routine of a subroutine from the subroutine window
  • FIX Paint Image objects (not Buttons) were painting in an area one pixel too small. In previous versions this only affected PNG, GIF and JPG but became apparent for BMP as well since version 8.88.

8.90.0 (new model version 768)

  • NEW Date/Time formats without seconds: "Calendar Mmm D Y hh:mm" "Calendar YYYY-MM-DD hh:mm"
  • NEW Model option Formatting / "Strict Date Import (No Hidden Fields)" By default when a datetime was pasted into a cell formatted for one of the calendar date-time modes, all the data was preserved, even if the cell was formatted for a date with no seconds.
    Enabling this option will zero such extra data when pasting in data copied either from within Planimate or an external application.
  • CHANGE Have defaulted the platform font to "Arial" in the INI setting Display/SystemFontName. If you are on version 8.88 or later it does not change your setting.
  • FIX The default palette entry #149 (PanelText) was blue, changed to black. Older models loaded with previous recent releases will have the blue and can be fixed using Settings / Colour Palette.


  • FIX Incorrect object name / background colours when loading older models. Note object text colour uses the Role colour for this purpose. IF an older model has already been saved then you will need to edit panel properties to change the colours.


  • FIX Paint button issues:
- Broadcast option editing
- Show existing text when editing button text
- Empty text allowed for paint button
  • FIX SetBendPoints() now updates internal ratios (spatial links only) instead of expecting a subsequent repaint. This works around an advance-to-time with viewport showing a map issue.

8.89.0 (new model version)

  • NEW Table editor row option "Minimum Row Height Pixels" enables a lower limit on table row height. This is useful when graphics are being used in a table cell.
  • FIX A panel with group anchored objects can now have its minimum size increased, with the layout updated. This is useful if a modeller wants to use a bigger base panel size and retain an existing layout.
  • CHANGE Planimate is using a new source repository and the tag version is shown in the version number in the about box.
  • FIX Click handling for Paint objects (impacted Paint Map)

8.88.0 (new model version)

  • NEW GetSharedAppDataName() is like GetAppDataName() but creates/returns the shared application data folder. This is used by installers when an "All USers" installation is done and typically is a path like "c:\ProgramData\Folder"
    CHANGE GetProgramName(),GetAppDataName() and GetMyDocumentsName() and the new GetSharedAppDataName() now support the target attribute being text formatted, in which case the attribute is set to the path instead of setting s.LastAccessedDataFilePath and returning numericsuccess code.
    In this case if there is a failure, an empty string is returned.
  • CHANGE The default panel width / height [Panels] section in INI options has been changed from 1016x672 to 1600x940. This will not affect existing settings.
  • NEW Expression functions GetColorA(), GetColorR(), GetColorG() and GetColorB() extract the colour components (from 0 to 255) of either an AARRGGBB value or a colour palette index.
  • NEW Paint button states are now a fly-out of the button context menu instead of a separate popupmenu.
  • NEW Dialog to change the text of a paint button state now has a checkbox to apply the change to all paint states.
  • NEW Table column option "Label Exclude Zero Label" excludes the zero index label from a drop down combo, useful for the "not set" case which you still want to display in the cell.
  • NEW Tool tips on colour samples in Graphics Properties and Colour Palettes include the ARGB code for the colour and name/colour index if its a colour index.
  • NEW Planimate now defaults to "Segoe UI" font instead of "Arial". Existing models are unaffected but will get the new font if fonts are reset in the Settings / Fonts dialog.
  • NEW INI option Display/SystemFontName sets the platform font. From this version the default is "Segoe UI", previous versions used "Arial".
  • CHANGE Have extended the Planimate colour palette / "_colors" label list. Entries from index 128 are reserved for Planimate and will be used to support theming for default buttons/views etc. These new palette entries are called "roles" as they serve as a reference to a colour for a specific task (eg: button border colour) rather than a specific colour.
    Existing models will not be affected as the previous palette defaults are not changed. the new labels are automatically merged when loading a pre 8.88 model but from then on, modellers can customise the role colours as they want, configure newly added objects not to use them etc.
    Note that Panel Background and Panel Text colour (for newly added panels) have a slot in the palette allocated to them but you will need to edit your existing Planimate.INI (Platform/INI options) to make use of them. Newly created Planimate.INI will use the new indexes instead of the default hard coded black and light grey colours as used in previous versions.
  • CHANGE The colour picker and Palette Editor have been updated to support the larger palette size. The default field is now the ARGB enabling hex codes to be quckly entered/pasted when needed.
  • NEW New paint buttons now default to having 3 states (Default, hovered and mouse-down) with colours defaulted to use the appropriate palette role colours for easy theming.
  • NEW Newly added Attribute/Cell views, Graph Views and Table Views now default to using the palette role colours allocated for them. Note that only the most basic default colours are set (as in previous versions) and modellers can still override and set other colour
properties specifically (the 64  extra palette slots that modellers now
can use will come in handy for this).
  • RENAME The "With Item Info" label in Broadcast() routine operations is now "Broadcast Options" and the description has been updated to indicate its a number of options from the _broadcastoptions label list. #5129
  • NEW Internal support for labellist default initialisers for routine parameters. This allows routine operations to have more useful defaults for parameters, when the definitions get to being updated.
  • CHANGE Paint Image objects no longer treat "Planimate Grey" (#BCBCBC) as transparent for BMP files (due to removal of old code).
    You can convert the BMPs to PNGs if transparency is desired for Paint Image objects.
    This does not affect Paint Buttons or Object/Item icons using BMPs with PL Grey transparency as such images are handled differently.
  • REMOVE No longer support ancient 256 colour (palettised) video card modes.
  • FIX Set model changed flag when palette edited from menubar
  • FIX Colour selection from the settings editor now includes colour labels
  • FIX Clicking in the treeview during a run then pressing Escape then another key would cause a segfault due to a default handler behavour when the treeview is disabled during simulate.
  • FIX column properties for text and background colour were not proerly handling AARRGGBB colours
  • FIX The list that pops up to autocomplete expression functions no longer locks open unless it was explicitly opened using CTRL-F or a DLL call is being entered. In the latter cases, Esc closes the list.


  • CHANGE InsertColumn() / AppendColumn() change in behaviour when a table has no columns and a template column with rows from another table is used.
    In previous versions the new column would get all the rows from the template column IF the target table had no columns, which is inconsistent to inserting a column with existing columns but no rows.
    They no longer populate rows in this case, leaving the table with column(s) but no rows.
    Unchanged: If the target table does already have rows, as many rows as possible or available (whichever is smaller) in the template column are copied into the target table.
  • NEW Snap To Grid alignment context menu option (for multiple selected objects) applies the current drag snap crid to each object in the selection.
  • NEW Added filter to system tuple list (adding attributes for broadcast)
  • NEW Added filter to "All Label Lists" list, broadcast sources etc. #5079
  • NEW Option in panel context menu "Make This The Top Level Panel". It only appears when the Advanced Editing option is enabled AND Ctrl-Clicking the panel background.
    This delete's the owning portal of the current panel and makes the panel the topmost panel. The existing top panel becomes a portal. This will likely create out of scope data issues and will lead to worse problems if used with a panel using local item classes defined outside of it.
  • FIX Out by one pixel in graph area clip prevented thin lines at y co-ord 0. Prevent vertical bars at zero drawing anything.
  • FIX Proximity test for distance to line for log driven graph
  • FIX When a modelling error occurs during processing a real time (eg: hover) or delicate (eg: panel transition) event, the error handler no longer attempts to stop the run since stopping the engine at that time does guarantee a stop - via a segfault.

8.87.0 (new model version 765)

  • NEW Spatial Links and Tracks support per-road bend points. Bend points can either bend the entire set of roads (in a spaced way as in previous versions) or, now, one or more specific roads. In this case the roads(s) allocated to the bend point pass through it.
    In Edir mode, the context click on a road menu now adds a road specific bend point. Its affinity can be changed by context clicking it.
    Up to 8 roads are supported. This may change someday.
    Using road specific bend points avoids the graphical anomolies that occur with sharp bends and bend points not assigned to any roads (ie: previous version bend points).
    If one reduces the number ofg roads on a link with road specific bend points, abandoned bend points will linger which cannot be clicked until the number of roads on the link is increased or bend points are regenerated from a bend point table with correct bned point road data.
    This feature is primarily intended for data driven spatial link layouts on a map although the train noodlifier has been updated to support per-road bend points and appears to work.
  • NEW Bendpoint table (used with Map) supports additional column "_roadbits" which needs to be present if you intend to support road specific bends. The values in this column are treated as a bit field:
value 0:  bend point shifts all roads (keeping them spaced) as in
previous versions.
value 1:  bend point directly positions road #1, otherwise ignored.
value 2:  bend point directly positions road #2, otherwise ignored.
value 4:  bend point directly positions road #3, otherwise ignored
value 8:  bend point directly positions road #4, .....
Values can be added, eg: "6" apples the bendpoint to roads 2 and 3. To calculate bit from road number, use: pow2(i._road-1) for cases when i._road is 1,2,3 etc.
For a single road link a value of 0 or 1 are equivalent but will have very different behaviour if the link roads is changed.
Note that a bendpoint update without the _roadbits column will lose all road specific details for bendpoints.
  • NEW Link Click broadcast now includes "_road", the road number that was clicked, a value from 1 to the number of roads for that link/track. This value should be used when updating bendpoint tables but take note of the bitmasking used in bendpoint tables.
    The closest road to the click is returned.
  • CHANGE When bend point markers are visible, they now register a hover cursor change. This may be made optional in a future version.
  • NEW SetMenuBar() depth value of -1 causes rows to be ignored in the menubar table until a row with depth 0 is encountered. This reduces table bashing when using context specific menubar items. #5084
  • REMOVE Removed train car display mode. Existing references to select it via s.TrainCarMode will generate a model error.
  • FIX Dialog data reference editing

8.86.0 (new model version 764)

  • NEW Dialog() routine operation text fields now support references so they can use text expressions, include dynamic text/value data
in the dialog etc.  #4083
  • FIX A few cleanups to the Dialog() editor and added a Close button option
  • NOTE Dialog() is being retained given it was possible to make it routine text copy/pasteable (as mentioned in PL 8.0.0 notes)


  • FIX Internal refactoring of mouse event handling to make Planimate more responsibe to simultaneous rapid mouse movement and clicking especially on maps.
    The changes were widespread but simple and included internal renames and cleanup of handlers for the different edit/user modes.
    This version remains compatible with 8.85.0, please report anomolies.
  • FIX Wrong version number in release notes 8.85.0.


  • NEW The broadcast from a routine operations now supports a new option for the "With Item" field: bit 4: send immediate: causes the broadcast to send immediately instead of being deferred until the item leaves the change object and reaches a point of capacity. #5080
    This is like an immediate message but broadcasts are never sent in lookahead. This is experimental and the option should be used only when a dispatcher or deferring the broadcast is really impractical.
    New label list "_broadcastOptions" enumerates broadcast options and they can be combined using "|".
    The code for the various broadcasting routine operations has been internally merged but the operations are kept distinct as their name distinguishes their behaviour and scope.
    A subtle difference which will not affect existing models is that for BroadcastToPanel() and BroadcastScoped(), if the subsystem ID is 0, the root panel is used if there is no object label at 0. Past versions would treat zero as an error in this case.
    Having a change object receive an item as a result of it sending an immediate broadcast is not supported.
  • NEW Log Driven Graph configuration table "_barcount" enables auto-fit of vertical bars if used in conjunction with a -ve width value (must also be in same configuration table) for the overlay. This implements the same capability as auto-sized vertical bars as released in 8.74.0.
  • NEW DragIcon() routine operation enables an end user to position an arbitrary icon image. The starting panel x/y co-ordinates are passed via attributes or table cells which will be updated with the final position.
    The icon name can include icon overlay commands.
    This is useful where things are positionable by end users and avoids having to create a portal and track clicks on it.
  • NEW Link click broadcast now includes: "_bendpoint" is 0 if the click is on the link before any bend point is >0 bend point number if the click is on a bend point (1..n) is <0 bend point number if the click is on the link after a bend point.
    "_bendtablerow" is set to the row number in the bend table (if any) for the associated bend point. Its set to the first row if the click is before the first bend point. It will be 0 if no map paint object, no bend table associated or the bend table does not contain the columns nor there is a row in the table matching the from/to locations. Only one spatial link in a given direction between locations is supported.
    "_dragged" is set if: 1) the new panel option "Broadcast Spatial Link Handle Drag" is set
and a bendpoint was dragged  OR
2) If that panel option is not set and the user is dragging an
existing bend point (in which case the mouse is still down and you
can go straight to DragIcon() if you want to control the drag image).
In cases where a bend point is clicked/dragged, "_x" and "_y" are set to the panel co-ordinate of that bend point.
  • NEW Panel option "Broadcast Spatial Link Handle Drag" When used along with "Broadcast Spatial Link Click" option, if a drag is detected on a bend point, the regular bend point drag handler is used then the Link Click broadcast is sent with _bendpoint > 0, _dragged set and _x/_y being the new position.
    This does NOT update the co-ordinates in any bend point table (used with tiled maps), the modeller must do this which will involve a call to XYToLongLat() and updating the row at _bendtablerow in the bendpoint table.
    This option can be set using panel property "LinkClickHandleDrag"
  • NEW Panel option "Show Bend Markers (Run)" controls if bend points are shown on the panel during run. Only applies to Spatial links at this stage.
    Panel property "ShowBendPointsRun" enables modellers to set this option (repaint needed after changing it).
  • NEW System attribute BendPointSize enables the size of bend points to be set. This affects the size of the marker or associated icon and the size of the hit test area.
  • NEW System attribute BendPointIcon is a text attribute that names an icon to use for bend points. Setting this also sets the bend point size based on the icon. An empty name restores the default marker. Modellers must ensure this icon is included in a compiled application by one of:
- placing it the model's DB
- placing it in a shared DB named in the application compiler form
- having a model object somewhere in the model use the icon
(the object need not be used)
  • REMOVE Option "User Can Bend Spatial Links" as capabilities above replacee it.
  • FIX Table automatic cell sizing mode missed margins in calculations causing the last row to be missed when there was plenty of space for it, when the selected font size was "just right" to expose this.
  • FIX Resizing notes with Group Anchor
  • NEW Group anchoring assistance:
- prompt to enable group Anchor when editing anchor options and other
objects on panel have group anchoring selected.
- prompt to set the minimum size if it isn't set already
- reset any edge anchors if user enabled group anchor on a panel
configured to auto-fit and it was not at the required size to
edit the layout
  • CHANGE Group Anchor Limit, if set > 0 or automatically calculated, is now clamped against the "Base" size instead of ignored in cases where the limit is less than the base size of the object. For a table view with automatic sizing (limit -1) the size then used will be at least the base size of the view, otherwise limited by the space required for data, all constrained by the available space determined by the anchoring.
  • REMOVE Support for s.ItemBroadcastReceivers as the wait dispatcher obsoletes it. A message will be given if an old model uses it and you can Find it by searching on its text in the Find dialog.


  • FIX A number of issues with attribute editing / reference tracking within the attribute editor. Some of these were introduced 8.72.1, #5077,#5078

8.84.0 (new model version 762)

  • FIX Visibility Control was not being saved for the Clock View
  • FIX Using Ctrl-W to hide the sidebar would result in undocked windows if user mode was toggled.
  • FIX Event/Routine Performance Profiling (Debug option) is now compatible with older version (pre v17) DLLs. Previously the data wasn't retained.


  • CHANGE Paint Map remote tile fetch and associated display updates only occur if Planimate is in run ready/running mode. In stopped mode only existing local tiles are used.
  • FIX Paint map remote tile fetch no longer introduces long delays when the tile fetcher is being reset (panel change, tileset name change) in cases where the remote server is unresponsive.
  • FIX Paint map remote tile reports error after 6 consecutive failed tile requests. A stop/restart or change panel resets it.
  • FIX Menubar File / "Info For Model File" no longer present in user mode (appeared for modeller with Advanced Editing option selected).

8.83.0 (new model version 761)

  • NEW The Paint Map now saves the WGET URL however it is not used in compiled applications, its use is intended for developers to build tile sets. This may change in the future.
  • CHANGE Paint Map tile rendering now done in one pass when it needs
to upscale tiles due to missing tiles at the preferred zoom  level.
  • CHANGE The Paint Map now uses multiple threads to fetch tiles from a remote tile server when the WGET URL (context menu-Edit) is set. This keeps the UI responsive. Four fetch threads are currently used. As tiles arrive the display updates (this update is rate limited). Tiles are only fetched for the current zoom level but the map will still upscale coarser tiles, in a darker grey in this mode. Hence it is useful to collect tiles by progressively zooming in.
  • CHANGE Changed the structure used to store "Text" columns in Tables to make sorting tables with text columns and 100,000+ rows viable.
  • CHANGE Combo list as used in table filters now faster with many text cells
  • FIX Using "Cut" on a portal then navigating to a panel that has a viewport to a panel in the cut hierarchy. The viewport will now be blank until the portal is pasted..
  • FIX Update the hierarchy tree to remove a "Cut" portal's hierarchy.
  • FIX Column Overlay Graph with automatic bar width (-ve percentage values) now accounts for edge margin properly, particularly important when only a few bars in the graph
  • FIX Colour Picker widget overlap with text in it.
  • FIX Button overlap in column overlay popup
  • FIX F2 full routine line edit when windows not constrained to main window
  • FIX Distribution values which are delays have time interval formatting after edit.
  • FIX Internal: Removed custom "delete" operator overload in PLDist to resolve some memory management issues, and fixed cases where shared constants were not used after a distribution edit.
  • CLEAN Separated use of popup list form, either font or advanced style options
  • CLEAN Refactored threading and mutex wrappers to clean up all build platforms.
  • CLEAN Some missing newlines in MDL file object details section.
  • NOTE Released PLDLL API update (PLDLL v@0 / PLAsDLL V7)


  • NEW PL-As-DLL API additions (now at V7)


  • NEW The lists which show Attribute, Tables and Label Lists now include a filter field. Any text in the field will prune the list to items that contain the text in the Name or Scope columns for attributes and tables, or Name or Index columns for the system managed label lists such as Model Objects, Broadcats etc.
  • FIX The image to tile maker now enables anti-alias
  • CLEAN Internal module renames MinGW (gcc under Win32) build cleanup


  • NEW the Debug Window has a new menu option to write its contents to the clipboard #3863
  • NEW Debug Window has menu option to load it with the Future Events from the Future Events List. This enables them to be browsed #2875
  • NEW The Debug and Watch windows now support the UnconstrainPopupWindows Platform Option introduced in 8.81.0, enabling navigation to them using the Ctrl-Shift-Tab introduced in that version.
  • CHANGE Re-arranged the popup when a table cell formatted for label list is clicked (the default popup with the list and field). The field now has default keyboard focus. The list auto-filters based on what is typed into the field. The Add button is now "+" and next to the field. <Tab> then <Space> is a shortcut to the add button. <Tab> <Tab> <Space> is a shortcut to the field. For 'Add', the text in the field is used as a default IF it doesn't match an existing label. The Alias button is removed as it is confusing and doesn't make sense in the context of selecting a label.
  • CHANGE The Selecting a Broadcast popup is also updated, as above. The Filtering is very useful as it handles partial internal matches.
  • CHANGE The "Data Table Column Check" option available for Gantt/Train and Log Driven Graphs now shows the columns that are missing and present separately, and you can select columns for automatic addition. It also indicates "required" columns for the view to function.
  • FIX A bogus repeated extention stripper call prevented making a compiled EXE if the Planimate EXE file name contained multiple "."s. From 8.77.2.
  • FIX Modernised look of text fields and list boxes
  • FIX Aligned fields in Attribute Edit dialog
  • FIX If the sidebar "Tools" window has focus, it now forwards control keys (eg: Ctrl-G) to the main window and gives the focus to the main window.
  • FIX More elegantly handle Attribute and Table edits when names conflict with an existing one and/or will "obscure" one up the hierarchy. It now gives the opportunity to fix the name without losing the edit or propagating reference renames first. #567
  • FIX Minor renames to menu options
  • FIX Smoother Zoom effect when notes open, broadcasts are animated etc.
  • CLEAN Internal: Eliminate use of deprecated C++ class "strstream" Major cleanups reduce warnings from Linux/gcc to just one place: the PL DLL API where intentional funkiness is occuring with function pointers. Visual studio/Windows builds are level 3 warning free (as usual). Using managed strings instead of char arrays in more places.

8.82.0 (new model version 760)

  • NEW Compiled EXE maker (PBA) has additional "Include DB" field. This causes all content in the specified DB file to be packaged,
in addition to the Model's DB file (if one exists).  #5061
This is useful in models where SetIconRemote() is used to dynamically load icons and such icons are in a "project wide" DB. In such cases PL is unaware to automatically identify the need for such icons.

8.81.0 (model version same)

  • REMOVE The Clock Window is removed. You can use a Clock View on a panel which is efficient and obeys anchoring. If you want the clock in a window, you could arrange to open a small popup panel with a clock view in it.
  • CHANGE Recategorised and renamed Model Options. Somewhat more structured now.
  • REMOVE Removed "Show Note On Load" option. This used to show a note called "<Main>" in the model DB.
  • REMOVE Redundant option "Ask Dataset type on load" was for DataSet1
  • NEW Ctrl-Shift-Tab moves between top-level Planimate windows for an instance that are not owned by another window. Experimental. #528
  • NEW Platform/INI option Edit / UnconstrainPopupWindows enables routine list windwos and table editors to have an independent z-order instead of being forced in front of the main Planimate window. This is useful with the new Ctrl-Shift-Tab hotkey.
  • REMOVE "Hide Model Load/Save Options", now redundant as these File do not appear in User Mode for modellers.
  • REMOVE Obsolete routine editor options "Include Separator for attref prefix" "Include Scope For Portal Attributes"
  • REMOVE Internal remants of old palette code that was used for Clock Window and the Advancing Time window, which was internally refactored to work without it.
  • REMOVE LockWindowUpdate() test workaround for bad video driver


  • FIX DataSet2 column testing showing unnecessary message (8.80.1) Passed automatic testing as message only appears for modellers


  • FIX Multiple issues with display of track/link multiple roads. Extra lines and gaps resolved.
  • NEW PL provides label list "_dataset_types" which enumerates the different data object types that can be used with DataSet2
and when working with data object labels.  #3788
  • REMOVE The File menu options to Load/Save model are no longer present when PL is in User Mode. They are confusing as they wont appear in a PBA and the lack of "New" in user mode led to "out by one" choices.


  • NEW The View -> Accessed Files list now includes any model loaded DLLS. DLLs are unloaded when a run is stopped unless model option "Keep DLLs Loaded On Engine Restart" is selected.
    In this case, the DLL appears in the list and right clicking it (with PL in Stop mode) gives the option to unload it. #4734
    Due to Windows architecutre it is not possible to fully unload a DLL that uses dotNET/CLR. PL will re-bind to the SAME instance if it reloads the DLL.
  • CHANGE No longer unload DLLs on switching to Flow or Paint mode.
  • FIX Now reload the icon cache after "Resource DB File Admin". #3796, #3765 It is also reloaded after "Image Mover" is used.
  • NEW Icon palettes (Choose Icons, Image Mover) have hover tips. Improved messages when deleting icons
  • FIX Table Driven Entry shows available columns for time/class column name options (if linked table can be located). #3860


  • FIX Change Object / Icon now supports directly editing the icon name so overlay icon commands can be entered. Note that using this to change the current item's icon is preferred than using SetIconRemote(), its more efficient and has the benefit that Planimate can track the use of the icon automatically which assists when creating a PBA.
    SetIconRemote is useful when you want to change a different item than the current or the icon name cannot be pre-determined (eg: it is dynamically built using strings based on a number of parameters).
    Also fixed leak if icon was chosen but index dialog was cancelled.
  • FIX Positioning of ends of paint lines when editing
  • FIX Remove obsolete DataSet1/Scenario routines from operation browser
  • FIX Entry context menu "Arrival Details" has useful summary
  • FIX For modellers, DataSet2 operations show a message if the configuration table is missing the basic columns to use DataSet2.
  • FIX Choose Icons when no DB error
  • CHANGE Change Object context menu text reworded
  • CHANGE Increased minimum time of initial About box for PBA to 2 seconds

8.80.0 (new model version 759)

  • CHANGE Saving a model no longer creates a DB file if one does not exist for the model or its a new model.
    Using the Go To button in Image Mover or Resource DB File Admin in the Tools menu are ways to create an empty DB for the current model.
    This is useful during development but you still need to create a model DB to store images you load dynamically (eg:LoadIconRemote()) when making a PBA, in order for the PBA compiler to know about them.
  • NEW System attributes GanttDragAlpha and GanttDragIntensity adjust the visibility of gantt blocks whilst being dragged. Defaults have changed and are currently 160 for alpha and 80 for the intensity scaler.
  • NEW Gantt option "Show Move/Resize Mouse Cursors" changes the mouse cursor when its over blocks / edges of blocks. New view property "CursorChangeEnable" sets this option A repaint is required to update the hotspot registrations.
  • FIX Reference properties like t.table.RowCount now work when formatting themselves to text
  • FIX The way views update has been changed to not affect icons outside of their bounding box.
  • CHANGE Rewrote Paint note box handling so the note box is better handled instead of the link box. Notes now support anchoring. The link moves relative to the top left corner of the note.
  • CHANGE Tools/Image Mover no longer complains if there is no model DB for the loaded model. One will be created if "Go To Model DB" is used. Tools/Resource (DB) File Admin now suggests the model DB as a default whether it exists or not, for whatever name is entered a new DB will be created if it does not exist.
  • CHANGE Newly created notes do not ask for a DB selection and save within the model. You can use their DataBase Note context option to select a note from a DB/store in DB. Storing Notes within the model avoids need for using the DB.

8.79.0 (new model version)

  • ADD CopyAllFromView() has option to include column labels (1 = yes)
  • FIX When making PBA icon names which start with '#' are not included. This prevents ARGB codes being flagged as errors in PBA construction. *** Hence do not name icons starting with # ***
  • FIX No longer fail if HandleDragBlock passed view with no data (overlapping gantt views with first one hidden can cause this)
  • CLEAN Internal renames (routine processor)

8.78.0 (new model version 756)

  • NEW Item classes have option to include the item ID in info panels (these appear above item).
  • NEW "Pause" is now available as a button action, no longer requiring a broadcast. To be useful, model option "Mouse Clicks While Running" needs to be selected.
  • CHANGE Message items are now created using the Message Item icon which can be set using "Choose Icons" for the item class.
    For new models, the default message icon uses an overlay and you can do the same by right clicking icons in the choose icons list and creating an overlay command.
  • CHANGE If clicks during simulate are enabled, clicking an entry is now also supported. This is useful for click entries.
  • CHANGE Renamed entry modes and sorted list.
  • CHANGE Entry mode "User Click" now called "Click (Single Item Moves)" used to leave item at entry, it now moves just that item without continuing run, which is much more useful.
  • CHANGE MultiServers used by a single item no longer use a fly-out in their context menu.
  • CHANGE Times described by multiservers are much cleaner with defaults omitted
  • CHANGE The confirmation when user attempts to add a new stream is more informative on why they should be careful about doing this.
    Using multiple streams runs the risk that the sequence from one may correlate to the other, though this should be very unlikely with the generator and how it is initialised.
  • FIX Chart scale updated properly on model load
  • FIX Can rename an object label to fix its case
  • FIX IF a model run was started whilst in Flow Edit mode, edit mode display remnants occured.
  • FIX The zoom effect with model option "Animate Messages/Broadcasts" is on
  • FIX Dispatcher size icon hide, new implementation
  • CLEAN Internal large scale renames (IFScreen,IFForm)

8.77 2

  • CHANGE Replaced "Stat" text from font descriptions
  • CHANGE The buttons in the Graphics dialog set the Ok button to receive Enter pressed after they are used.
  • CHANGE Newly dropped exits have their names hidden by default IF Settings/ Show Advanced Menus is selected. You can click under the exit to rename it without the leading "!'.
  • FIX Use of new anchor management was not updating when autosized panel was in a viewport. Like introduced when viewport rewritten 8.62.3
  • FIX The _run_pause broadcast is now sent when a pause occurs due to the use of the "Pause After Advance" option in the advance to time dialog.
  • FIX PBA creator handles a model not having a DB file instead of failing. Failures give more details.
  • FIX PBA maker validates a DLL is present up-front if the "Make DLL" option is selected.
  • CHANGE Internal hover descriptions of objects updated (unsed at moment)


  • FIX Deleting dispatcher setfault

8.77.0 (new model version - note load speed below)

  • NEW The Dispatcher merges in Queue functionality and replaces it.
    Large models with queues will take longer to load as they're converted.
    The graphics and co-ordinate handling have been rewritten. Icons of different sizes supported in all orientation modes. Icon rotation (if AutoRotate is enabled for the item) is used. The overflow indicator works properly (had redraw issues) and queue space allocation takes into account whether it is enabled. Additional item spacing can be specified. The new Default dispatcher mode is "FIFO". The existing "Normal" mode is renamed "Any Item Can Leave". Converted queues retain their old name, and position (mostly).
    Please report any speed impact, there may be optimisations possible.
  • NEW Dispatcher option "Reneg To Second Path When Full" Instead of blocking an incoming item when full, the Dispatcher will send it straight to the reneg exit over the second path leaving it (renegging works like a switch with two paths out). If that path is blocked it is a model error.
  • CHANGE The Automated Testing system (/TESTRUN command line option) now returns 100 for a success instead of 0. This makes it possible to detect seg-faults etc. as 0 is returned by the system in such cases.
    Those of you with automated testing procedures of your own, please contact me fif you need an updated batch file ;)
  • CHANGE Only show "LENGTH" in item click popup for items on a route. You can still see it for other items by clicking "SYSTEM..."
  • FIX NoScrollWidth / NoScrollHeight properties for a table view return
-1 if the view is on a panel that is not visible. This can happen
if the PL window is minimised.
  • FIX Click on path arrow head is ignored in Object Mode if shift or ctrl keys are down


  • FIX About box application banner now supports optional size of 584x264 instead of 570x264 which positions the banner so there is no white margin on either side. For other image sizes the image is positioned or stretched into the central 570x264 as occurs in previous versions.
  • CLEAN Internal rename of some LinkedList functions for code readability


  • FIX Copy/paste of visible text note no longer loses text when its selected to store the text in the MDL not the DB.
  • FIX Dispatcher with alpha fill during run was overpainting itself
  • FIX Guides no longer leave a hole in path lines


  • FIX Scaling of dispatcher broadcast/message icon for new icon set
  • CHANGE RemoveFileExtention() is now compatible with Text formatted data as well as labels. #5007
  • FIX Reign in repeated errors If a model is missing its modelname.DB and an icon cannot be located
  • NOTE This version ships with an updated _Planimate_System.DB
  • CLEAN Some internal renames of view flags

8.76.0 (new model version)

  • NEW Planimate now ships with a new set of object and toolbaricons.
    Older version models will retain the previous objecticons. For such models the Tools menu contains option "Upgrade Model To Use 24x24 Version 8 Icons". When selected you are prompted to confirm the update. Refer to the text in the dialog.
    The new icons are shipped in _Planimate_System.DB which replaces _!SYSTEM.DB and must be present for editing from this version onwards.
    _!SYSTEM.DB is retained for backward compatibility but this version of Planimate only depends on the icons in it for models which have not been upgraded or make use of other icons therein.
    The new standard is for 24x24 object and item icons but the sidebar defaults to 16x16 icons, this can be switched.
  • NEW The sidebar/toolbar icons use 16x16 versions of the new Planimate icons.
The  INI / Tools / ToolIconSize value enables selection of the size
of the icons in the tool windows, 16 or 24 gives unscaled icons.
A value such as 20 will downsize the 24x24 icon set.
  • NEW For newly added item classes in models using the new object icons, the "Carry" icon defaults to the item icon with a message overlay. If you change the item icon you can use similar notation to create your own message overlay.
  • NEW The "Go To" button in icon palettes supports both old and new system icon databases.
  • NEW Additional panel colour settings: "Object Name Colour" sets the colour of object name text "Object Fill Colour" sets a backdrop colour for objects "Object Name Fill Colour" colour to fill area under object names
    A transparent version of the panel background colour works well for fill colours when objects overlay flows etc. A slightly different shade of the background colour can also be effective.
  • NEW Menubar/Panel Menu "Copy Properties" enables panel colours to be copied recursively to sub systems on the panel.
  • NEW INI / Panel options to configure the default colour for object names, and fill for newly added panels (PanelNameColor, PanelObjectColor and PanelNameFillColor(.
  • NEW Table View option "Re-apply Filter On Changes" re-applies a column filter when any change to the table occurs. This option is experimental and will have serious performance inpact on large tables. #4997
  • CHANGE The "Hide Object Borders" modeller option is now on for new models. This option is overridden and a border is shown if the object has no icon assigned.
  • REMOVE Menubar/Panel Menu "Background COlour" option has been removed, use the option in the Panel area context menu.
  • FIX Icon Menu can "Locate" an icon that uses overlay notation (the first name is used)
  • FIX The Don't Show Zero and Don't Show Clear Value column options now
prevent such values from populating the column filter dropdown  #4996
  • CLEAN Internal item class renames, default sizing handling, object redraw

8.75.0 (new model version)

  • NEW Table column option "Show As Image" interprets the text of cells in that column as icon names and displays them instead of the text. #4747
    For this to be useful, the column should be formatted as Text and set using $= assignment.
    Left/Right/Center text alignment options apply to the icon. Icon overlay commands are supported. No autosizing of table so make sure space allowed for icon by choosing appropriate row lines.
  • NEW Dialog/Field option "Accept Empty Text" enables "no text" to be an acceptable entry for Text formatted data.

8.74.0 (same model version)

  • NEW Column overlay graphs support calculating the width of vertical bars automatically. If the width for an overlay is set to a -ve value, it is treated as the percentage that each bar fills its available space, which in turn is based on the number of rows in the table and the width of the graph. #4973
  • FIX If a paint button in a hover state changes state (eg: due to a click broadcast changing it) the state change overrides the still-active hover if the new state is a "No Hover" state. #4972
  • FIX Release mouse capture upon a model stop/breakpoint dialog #4974
  • FIX Redundant viewport hide after a model stop
  • FIX HidePanel now only acts for panel in a popup not viewport #4971
  • CLEAN Refactored column overlay graph code, now-relevant internal names Confusing internal names for panel in a popup/viewport

  • NOTE Synced VS2013 and VS2015 project settings during refactor


  • FIX IF a blocking switch with a decision depending on data that was changed within the same broadcast tree that preceeded using RemovePortal() on an ancestor of the switch (and hence the switch) it resulted in an Unblock FEC event not being properly removed, resulting in a VERY difficult to track down seg-fault at a later stage.


  • NEW Icon Overlay Script new command "E:" enables colour exchange. Substitutes a given colour with another with full alpha support. Useful with template icons.
    eg: Change solid blue to transparent green: [E:#FF0000FF,#A000FF00]MyPNGFile
  • NEW Icon Overlay Script new command "R:" enables rotating (in degrees) of an icon/colour block.
    Example: [W:24 H:24]#00000000|[R:45]_PORIDLE A transparent area of 24x24 is created to allow space for the rotated _PORIDLE icon's corners.
    Note that you can already rotate portal and item items on-the-fly using object properties/system attributes and the item auto-rotate options. This enhancement is intended where you want to rotate a sub-component of a composited icon.
  • NEW Icon overlays can now be used with Planimate's multi-frame icon capability to dynamically composit animated icons.
    Reference a multi-frame icon using a name followed by @ eg: GROUPNAME@
    Then use SetPortalIcon on a dummy portal to create the frames at run start and all other references (eg: item icons) will work. For each frame use an overlay command followed by the group's name, the @ symbol and a 2 digit frame number eg:
    [ 1] SetPortalIcon(s.OwningPortalLocation,"_ENTIDLE|GROUP@01") [ 2] SetPortalIcon(s.OwningPortalLocation,"[R:90]_ENTIDLE|GROUP@02") [ 3] SetPortalIcon(s.OwningPortalLocation,"[R:180]_ENTIDLE|GROUP@03") [ 4] SetPortalIcon(s.OwningPortalLocation,"[R:270]_ENTIDLE|GROUP@04")
    This creates 4 sub-images for Icon "GROUP@" and if used as an item icon (set with Choose Icon / Enter Name Text for the item class) then Planimate will cycle through the images as the item moves.
  • FIX /RECENT command line option re-enabled
  • NOTE Releases will now include Planimate64.dll which is a DLL version of Planimate for use when compiling a PBA which is called from dotNET. At this stage only 64 bit DLL versions will be released.

8.73.0 (same model version)

  • NEW Dynamic Icon Creation and Overlay #4749 By using new naming, icons can be created on-the-fly featuring overlay, colour keying, colour filtering, scaling and RGB colour block creation.
  • NEW The Choose Icons selection menu has a context menu on the different icon states which has option "Locate". A nmew option has been added "Enter Name Text" which enables an icon to be directly named without using the palette.
    This is useful with the new Icon Overlay capability as you can predefine a state icon as a combination of icons if you don't need to determine it all dynamically during run using SetPortalIcon() or SetIconRemote() etc.
  • FIX Note Bounding Box context menu option only available if note is visible.
  • FIX Icon palette shows file type for icons in a DB and extra highlight box to help locate highlight when image is large and opaque.
  • FIX Flip icon option for PNG images (GDI+) was flippijng out due to bad bit masking.

8.72.0 (new model version)

  • NEW The Paint Map View now supports positioning / panning of Paint objects as well as Portals/Links.
    This enables a Paint Map to have additional graphics (highlights, buttons, text .... even viewports on a map seem to work) which track the map as its panned.
    This is achieved by naming an optional "Paint" table in the map paint object, the table has columns _paintid, _x,_y,_long,_lat and you add paint objects to it from their context menu (they need to be in paint label list first) or in code.
    The "Reposition Objects" Change Object in the Map portal should have the following lines added (note one single repaint at the end). Assuming your paint location table is called "paint".
    [ 1] // [ 2] LongLatToXY(l._Paint_Objects[Map],t.paint[]) [ 3] ITERATEROWS (r.row,t.paint[])
[ 4]      r.paintobject = t.paint[r.row][c._paintid]
[ 5]      SetPaintXY(r.paintobject,t.paint[r.row][c._x],t.paint[r.row][c._y],5)
[ 6]    ENDLOOP
[ 7]    //
[ 8]    ForceRepaintPanel(s.OwningPortalLocation)    //repaint specific panel - less flicker when in viewport
If you want to get fancy and scale/hide the paint objects, this is the place to do it (as you'll find done for the portals in the Map demo model).
NOTE current implementation is not optimised for more than a few hundred paint objects unlike portals where thousands should be viable. Also strange things may happen with co-ordinate wrap for very "far away" paint objects.
These will be dealt with when a use case warrants the effort.
  • NEW PL now supports model-code copying a portal which has views of its innards on the SAME panel as the portal, where those views use visibility control references which reference data scoped WITHIN the portal.
    Previously these required a stop/restart after the copy.
  • CHANGE SetPaintPosition() has been renamed SetPaintXY() and has a new optional parameter to specify the reference edge/corner (as for PositionPaintObject). Older models will set this value to 7 (lower left) for compatibility. New instances default to 5 (object center) which is useful when using paint objects on maps and is consistent with how portals etc. are positioned.
  • FIX DataSet2 file with an external file embedded croaked the load if the config table didn't have an external file row for it. In this case the embedded file is now ignored.
  • NEW Cell views now update for Text formatted columns, now possible due to refactored view code.
  • SPEED Optimised cell and attribute view updating and visibility testing (important for performance).


  • CHANGE MatchMultipleKeys() now returns 0 if the table has no rows #4929
  • CHANGE No longer close if /RECENT fails to load the most recent model.
  • FIX Now register Field/DateTime/Combo as "ModalChild" in the cell edit handler which enables a Focus Lost Auto Close popup to have a table view supporting simple edits.


  • NEW Tools menu option "Clear Routine Breakpoints" clears all breakpoints set on lines in the routine editor in the entire model. Note this does not affect BreakpointIF lines.
  • FIX Background colour applied to entire routine window

8.71.0 (new model version)

  • NEW INI / RoutineEditColors settings: UseInvertedRoutineColorSet: A tri-state value that controls whether the "Inv" version of routine editor colours are used.
    0: (default) Planimate automatically uses the "Inv" colour set if the system Window Text colour is "lighter" than the System Background colour, as occurs when Windows is configured with a high contrast theme.
    1: Always Planimate uses the "Inv" colours (eg: "RoutineOperationColorInv") for the routine edit list window regardless of the system colour theme. This enables a dark themed routine list in environments where menus, lists etc. are otherwise light themed.
    2: Never Planimate uses the regular colour set (without the Inv) for the routine listing.
  • NEW INI / RoutineEditColors option StartPanelColorFlipped: Starts with panel colours flipped as occurs with the /FLIP commandline option. If set, EnablePanelColorFlip is implicitly enabled.
  • NEW INI / RoutineEditColors option
EnablePanelColorFlip:  Enables Ctrl-Shift-K to change the colours
used in panels to support a mostly-dark background, as enabled
by the /FLIP command line option.
  • CHANGE The unused area in a routine window now follows colour set for INI option RoutineBackgroundColor
  • NOTE Further theming may be implemented but if you want the UI dark use the a system "High Contrast Dark" theme. It does not affect the colours on panels unless you use the panel colour flip options described above.
    Whilst Windows 10 (1607) includes a "Dark" option in Settings / Colors MS haven't implemented it for desktop applications.
  • NEW Routine operation PositionPaintObject() provides the positioning capability of LinkPaintObjects() without creating a link, ie: an instant "position paint object relative to parent" capability. Parent can be 0 to use the entire panel.
    This avoids complex co-ordinate calculations as just edges or corners are specified.
  • NEW Log Driven Graph option "Scale Per Overlay For Area Plots" enables extra processing so area graphs with a colour gradient has it start and end at the used area of that overlay.
    This adds overhead so only turn it on for gradient area graphs.


  • FIX Unchecked view-type parameter in routine operations causes silent fail
  • FIX Paint map doesn't show errors when file name is empty
  • FIX Flow editing delay, and object click menu when current step left clicked
  • FIX Route editing
  • FIX Escape key cancels selecting an object
  • FIX The correct message appears in titlebar when selecting end points for pipe or spatial link
  • FIX Crosshair cursor now visible on a black background
  • CLEAN Internal clean up of object selector

8.70.0 (model version 748)

  • NEW System attributes "s.MouseDownX" and "s.MouseDownY" give the co-ordinate of the mouse at the time of the last mouse down, before any double click delay, button release wait etc.
    These are in panel co-ordinates like s.MouseX and s.MouseY
  • FIX System error when paste-replacing a portal with an object label with a portal which has an object label.
  • NOTE When moving portals between models, references within a portal get updated more reliably if you "Cut" the original instead of "Copy".


  • FIX Graph scrollbar & scales not updating as dragged/resized when paused. Present since before 8.36.1?
  • FIX Gantt click popup required a close to dismiss it. This was introduce in 8.38.1 when the popup was extended for other functionality.
  • FIX Tools / Show System Attributes segfault
  • FIX If you upgraded to 8.69.0, the "Send _Key BCast For Nav Keys" model option MAY be On as it is a recycled bit and 8.69.0 did not clear it for older models.
  • SPEED Sort comparison avoid one level of indirection
  • CHANGE Large internal rewrite and renames to:
- make less inelegant how modal event loops (like dragging) are handled
- prevent such loops from using excessive CPU unnecessarily
- reduce unneeded classes, use static members, inline stuff
- merge function use, remove unneeded enums
- how keys and double clicks are forwarded to modal handler
- rename of event related structures
Look out for mouse/keyboard issues within graphical editing/browsing
  • CLEAN Internal renames of the panel/window interface code (even had some SimView references in there)

8.69.0 (model version 747)

  • NOTE The following three options intended for use together
  • NEW Panel Popup option "Capture Mouse On Open" Intended for transient popup windows that are hover sensitive to ensure they receive mouse events even if the mouse leaves their window.
  • NEW Panel Popup option "Close On Escape" Causes a popup to be closed if the escape key is pressed. This should be used with transient popups for basic keyboard support.
  • NEW Panel Popup option "Close On Mouse Exit" Auto-closes a popup if the mouse has been within it since it appeared and subsequently leaves its client area.
  • NEW End User option "Send _Key BCast for Nav Keys" will send a _key broadcast for Escape. If a view with focus doesn't take the keys it also sends arrow keys, PgUp,PgDn,Home,End,Space, Tab and Enter. Note the "Close On Escape" option takes precedence for a popup.
  • NEW Linux PL can load/use Linux compiled Planimate DLLs. The demo MatMult in the repo includes a sample makefile. PL expects extension .so.1.0 and looks in the current directory.
  • CHANGE No longer show the default background context menu on left click in paused mode.
  • CHANGE Option "No Pause Messages" defaults to Yes for a new model when the "Advanced Editing" INI option is set.
  • CHANGE Internal rework of mouse capture to consolidate handling Cleanup of how the focus object receives keys, works with popup and viewport. Report any model UI issues, cleanup was needed.
  • CHANGE Adjust high contrast mode colour mappings.
  • SPEED Horizontal and vertical graph bars faster if they don't useg gradients

8.68.0 (model version 746)

  • NEW Entries have a new mode "Table Driven Block Indexed". Like Indexed, it is more efficient than "Table Driven Remove Row" however instead of the table growing indefinitely, it has the oldest rows removed when there are more than 1024 of them, giving the best of both worlds as far as processing efficiency and memory usage.
    At the time the rows are removed, the "current" row remains and becomes identified as row 1 in the "_index" item attribute.
  • NEW Clicking an Entry or Exit while paused now includes the number of items that have left / entered, respectively. This is useful for determining how active a given flow has been.
  • NEW Clicking on Change while paused includes last execute time if it has a routine that has been invoked that run.
  • FIX The combination of edit options "Open Label Combo/Date Calendar" and "Label No List If One Item" no longer triggers a pointless animation if there is only one item in the list.

8.67.0 (model version 745)

  • NEW The Sort() routine operation now supports 4 sort columns.
  • NEW Routine operation PositionLastRow() is useful in cases where a table is sorted and you wish to insert a new row. You append the new row (or TupleAppend) then instead of calling Sort(), use PositionLastRow() which accepts the same parameters as Sort() but is faster.
    A key assumption is that the table is already sorted according to the parameters and only one unsorted row has been appended. IF the table is already sorted, this operation is efficient.
  • NEW Routine operation CheckTableSorted() tests whether a table is sorted to sort column criteria compatible with parameters to Sort().
    Testing is *much* quicker than was calling Sort() as Sort() performs slowest when a table is sorted.
    In this version Sort() now does a pre-check too (which will benefit un-updated models) but this may be removed in the future when use of CheckTableSorted() is established.
    The routine returns the first row number that is out of order, or 0 if the table is sorted.
    This is provided for speed critical special cases, the time for UI related sorting is generally inconsequential and modellers should strive to code to "know" or maintain sorting up-front when speed is critical, plus use the new PositionLastRow() mentioned above.
  • NEW Debug Option "Log Sort Info" writes details about every Sort()/ AdvancedSort() including columns and ordering and where the first out-of-place row (if any) was found.
    This is useful for tracking down unnecessary sorting in a model since Sort() uses the QuickSort algorithm which performs worst when the table is already (mostly) sorted. Kind of ironic.
  • SPEED Added caching/recycling of data structures used when sending broadcasts with parameters that don't initiate from an item. In the past these broadcasts were used only for time-insensitive UI but they now are used in track logic so caching is important.
  • CHANGE The value of s.AutomaticRestartAfterError is ignored unless in User Mode since it interferes with debugging.
  • NEW Command line option /RECENT causes Planimate to automatically load the most recent model. Good with a shortcut.
  • NEW Command line option /RUNPROFILE runs the model as if the Debug option "Enable Event/Routine Performance Profiling" is selected. Reports auto pop-up each time the engine is stopped/restarted or you can use the Tools/Show Run Profile option mid-run.
  • FIX 64 bit PL unable to find DLL if the path before the DLL contained the text "64".


  • FIX CreateTiles bug required tileset DB and image name to be same

8.66.0 (model version 744)

  • NEW A new view type, "Clock" enables an attribute-view like view to be added to any panel to show the simulation clock.
    This can be added from the Clock window context menu or via the Add View context menu on a panel background click.
    The view follows the same format as the clock window.
  • NEW Routine operation CreateTiles() enables creation of a tileset DB from an arbitrary image file. This is useful where map-type navigation is required on a user supplied map.
    In this usage, the co-ordinates are arbitrary with (0,0) being the centre of the image provided, the image is treated as the entire "world".
    Given only one source image, the map will get very blocky as you zoom in. The depth of zoom is a parameter. For a 2000x1000 source image, zoom level 3 is the "nominal" resolution. (for tile maps zoom0=256,zoom1=512,zoom2=1024 etc). Hence you only want a couple of additional zoom levels from 3 with this source image size.
    IMPORTANT: if an existing paint map is pointed to the target database, it must be pointed away from it (using SetPaintImage() ) before using CreateTiles(). After it can be pointed back to the new tileset file.
    Return codes: 0: MAKETILE_OK
2: MAKETILE_DBDELETEERROR (in use by a paint map?)
3: MAKETILE_FILEERROR (error writing temp tile file)
4: MAKETILE_DBERRO (error putting tile(s) in DB)
  • CHANGE Added an on-load report to highlight any models using Cell views with Change Tracking broadcasts. If you're favourite model depends on this let me know. It is intended to only support change tracking for attributes. This will reduce overheads for tables.

8.65.0 (model version 743)

  • NEW Routine operation SetPreviousTailData Enables track taildata to be set for a road/length multiserver that a train has just left. This is useful when taildata information is not known until the front of the train leaves the road/multiserver.
  • NEW Change object profile run time logging changed to log time spent in routine code only, not recursed. Hence the note on lookahead in 8.62.2 can be disregarded.
  • NEW When the Debug option "Event/Routine performance profiling" is enabled, Change objects that take >= 1 REAL second in move or 0.1 REAL second in lookahead are now logged as "Slow" in planimate.dbg (which you can open using Tools / "Show Debug Log"), with their complete path in the model for your convenience.
    The lookahead time is separately measured to move time, it may highlight opportunities to move code that does not need to occur in lookahead to only execute on item move.
  • NOTE Speed tips
    On a mid range i7 the Planimate framework can execute > 20 million routine lines a second, so one real second of routine time is a lot of operations and may indicate:
- working with large tables (sorts, searches, nested iterates)
(MatchedIndexFast and BinarySearch may be useful if the data permits)
- memory thrashing due to un-preallocated row inserts / appends
(more detailed diagnostics to come for this)
- many column inserts/deletes/column tuplename renames which
cause Planimate to update column references (slow) in
the rest of the model. Using s.DisableColumnRefUpdates can reduce
many seconds of delay to milliseconds. See 8.17.0 notes.
- over-repainting (eg:accidentally repainting within a loop)
- creating/deleting objects
- messaging out to other routines
The total time for a message is about 5 to 10 routine lines worth
of execution time
  • FIX Viewport is now transparent to clicks if not connected (unless paint edit mode)

8.64.0 (model version 742)

  • NEW Paint objects have property "Owner" which returns the first nonzero owning portal index up the hierarchy of owners. #4880
  • NEW Paint button option "Send Hover Even If No Hover State" enables paint buttons to send hover broadcasts even if they have no explicit hover state (or only one state). In this case the button does not change state. This option can be used along with a hover state in which case the hover state takes precedence and works as before.
  • NEW Paint button hover broadcast new item attribute "_hovered" indicates hover, 1 = hovered, 0 = not. Useful when there is no hover state.


  • FIX Removed extra line when tables have no column titles or filters #4878
  • FIX Viewports handle double clicks again in paint mode for model editors, like they used to. #4881


  • FIX Updating of cell views now resolves row index every table update WARNING: Avoid cell views on speed critical tables. Table Views are more efficient because they do not have the option of view data change broadcast that cell views have.
    Removing view change broadcast from cell views is being considered as cell views could be implemented with lower overhead to the table they are associated with.
  • CHANGE Cell view updates now work like table views; if a resize ocfurs udpates stop until the end of a routine. This would impact stepping through code.
  • NOTE Be aware that all views hanging off a table impact performance of changes to that table since even if they are not visible the engine has to deal with them.
    A future version of PL may have option to discard debugging views in a PBA.
  • CLEAN Merge code that associates panels with windows/popuips/viewports No additional breakagae was intentionally introduced.
  • FIX Typo in panel/popup options


  • NEW Routine operation LinkPaintObjects enables a paint object to be directly linked in position to another paint object (the parent). You can select the edges/corners between which the links are established as well as set a pixel offset. The default puts the linked object under the parent.
    Multiple objects can be linked to a parent. Once set, the link persists even if run is stopped but it is not saved. A linked object must not have anchors set or it could be ripped apart. Likewise paint inheritance is not supported for linked objects.
    The Options bits are currently unimplemented.
  • NEW Viewport option "Auto Fit To Target" causes a view port to automatically resize its area to the size of the panel. This is intended for small viewport panels.
    The top left corner of the viewport is the constant when it gets resized (but a parent paint link can subsequently override it)
    Obviously this option is incompatible with the Panel being configured to "Auto Fit Panel To Window".
    This option IS compatible (and intended) for use with the "_panel_layout" broadcast.
  • NEW The "_panel_layout" broadcast is now also sent to viewports configured with the "Auto Fit To Target" option. This enables a model to resize views and use FitPanelToArea to then adjust the panel size which will then propagate to updating the viewports size. Then, if the viewport (now a paint object) is linked then its position will be correctly maintained after its resize.
    Unlike when used with a popup, the _panel_layout handler does not need to call RefitPopup.
    Resizing of viewports is ONLY performed when opening the panel containing the viewport. You cannot update a viewport's size whilst the panel the viewport is on is visible.
  • CHANGE Pixel calculations for viewport sizing
  • CHANGE Rework viewport initialisation


  • NEW Viewports are now paint objects. They are added and edited as for any other paint objects.
    Right click on a newly added viewport to set its target.
    Routine operations that address a viewport can now be passed a paint label as the "Panel With VIewport".
  • REMOVE Removed the very old 16 bit random number generator. This was selectable using the "Use Old Random Number Generator" Engine option. Models which had it selected will report a message when loaded and reconfigure to run with the 32 bit random number generator which has been the default for new models for over 7 years.


  • NEW Call count/times of DLL functions are now included When Debug/Event Routine Performance Profiling is enabled.
  • NEW If Debug/Event routine performance profiling is enabled, the report is automatically shown if the model restarts the engine (which clears/invalidate the counters).
  • NEW Clicking on a Change object when Debug/time profiling is enabled displays a popup with the time the change object last took to execute.
    Lookahead and Enter/Move times are shown separately.
    This can assist in finding bottleneck code.
    Note that often (but not always depending on engine optimisation) these times include processing time for subsequent zero capacity objects. For best results, work backwards from an exit or a capacity object when investigating timings.
  • SPEED DLL loading was inefficient when multiple instances of the same DLL were used, possibly introduced 8.62.0


  • FIX Printing issues due to gdi+ resolved - gdi+ mishandles page units by default on a print device context but explicitly setting page units to pixels works around it.

8.62.0 (model version unchanged)

  • NEW Table views now support tables with variable row height, enabled using the "Variable Row Height" option. Rows will adapt to how many lines are required to show the text in all columns in the row without clipping. In this mode ellipsis are disabled and if the column is too narrow to fit a word it will be split up. #4782.
    The table "Row Height" (specified in lines) sets the minimum number of lines, typically you'd leave this at 1.
    This involved changing text rendering, when ellipsis are enabled and how text position is calculated. The change impacts tables and paint buttons which use the text wrap in a box routines which in turn are based on Win32 DrawText but add missing capability to it.
    Only text and label formatted columns play a role in determining variable row height, numeric/date columns are skipped, for performance reasons.
    Effort has been made to be backward compatible but a visual inspection of all the different configuartions of paint and table view options is recommended!
    When text data is changed in code, you may need to repaint the panel for new row heights to be calculated, but the existing handling may be sufficient - it was not changed to protect the simulator's performance.
    Some basic clamping is performed to prevent a cell becoming higher than can fit in the table view's data area.
    Do not expect the ability to scroll within a given cell, in this case create a viewer/editor panel and dump the text into an RTF view to enable users to read/edit cells with many rows of text.
  • CHANGE Cell text and row labels now vertically center in rows that have more space than required. #4744
  • FIX Attempted workaround gdiplus FillRectangle being broken for printing. Other issues possibly exist as printing has not been used much since PL version 5 and gdiplus was added in PL version 6.


  • NEW If Planimate fails to locate a DLL it now attempts to extract the DLL file from the DB. Such an extracted DLL file will be deleted
when the DLL is unloaded.  #4850
It is assumed the directory Planimate is running from is writeable to Planimate.
This is NOT to be used when shipping PBAs which use DLLs. These should be separately shipped and installed together with the PBA. It is also not intended for dotNET DLLs / assemblies.
Tested working with a PBA compiled to a DLL.

8.61.0 (new model version 740)

  • NEW Added a secondary set of Pipe level monitor options/test values. So have Source Level Monitor A, B and same for target. _pipe_flags labels updated to suit.


  • NEW Added option to clear profile data in tools menu. This is useful when analysing performance of models with a lot of start up activity.
  • NEW Pipe option "Transfer On Stop" causes a final transfer of material as would have occured by a pipe update at the time a pipe is stopped (using pipe control). This prevents the last sample being lost when stopping a pipe. Note that if a limit condition is reached as part of this update, an enabled pipe broadcast will be sent even though the pipe is now stopped. Modeller's broadcast handling code can test the pipe control value to handle this case if needed.
  • CLEAN Rewrote how table views manange views, many renames for dependencies
  • NEW DLL:Added table data changed callback capability to PL/PLEngine
  • FIX Pipes with any broadcasts enabled were always sending load limit broadcasts
  • FIX PLAsDLL callback LookUpLabelDValue was incorrectly parameted in PL


  • NEW Pipe options "Broadcast Source Level Monitor" and
"Broadcast Target Level Monitor"    #4839
enable thresholds to be specified. When source/target cross this
level (either direction) a broadcast is sent.
A broadcast is not sent on run start or when a pipe starts from stopped.
This enables monitoring of stockpile levels etc. whilst the pipe continues to run.
The monitor level references can be changed dynamically, if the pipe is running and the change impacts the comparison, expect a level change broadcast when the next pipe bin update occurs.
Do not rely on exact euality as no rounding is performed in the test.
Nonitor level change broadcasts are not affected by the "Only Pipe Stop/Start resets broadcasts" pipe option.
  • NEW The pipe change broadcast now sends an additional value, "_pipechanged". This is set for any value in "_pipeflags" that has changed since the last broadcast.
    This is particularly useful for the new level monitor broadcasts: "_pipechanged" indicates what changed to send the broadcast (non zero bits)
"_pipeflags"   indicates the state of the pipe
A single broadcast may convey multiple changed bits so test carefully.
The bits used for _pipechanged and _pipeflags are now: 1 : Target At Upper Limit 2 : Source At Lower Limit 4 : Load Limit At Zero 8 : Source >= Source Monitor Level 16 : Target >= Target Monitor Level
These are in the _pipe_bc_flags label list.
  • CLEAN Big internal re-organisation of the Main module with most callbacks moved to a separate module. Clean and documentation of the #define options for the Win32 EXE, Win32 DLL, Linux EXE, Linux LIB and Android build targets.


  • CHANGE DLL call interface TABLEDIRECT params now send dataobject for the table handle compatible with plengine. This does not affect existing DLLs.

8.59.0 (new model version)

  • NEW Model/Engine option "Scope Pipe Events BCs To Pipe's Scope". If selected, pipes broadcast change events only to their scope instead of globally.
  • CHANGE Closing a routine editor now triggers the check for autosave interval.


  • NEW An embedded dotNET window (in a Paint Window object) will now get size change updates. If the parent paint object is anchored and the panel its on resizes, the dotNET control can respond and do its own dynamic layout.

8.58.0 (no model version change - DLL progress only)

  • FIX Planimate DLL call was not reporting any errors transferring data back after calls in NON table-direct mode.
  • FIX Planimate DLL call table parameter passed with a column was not writing data back to the table (fix above exposed the error).
  • FIX Fixes to PL-as-a-dll broadcast tuple handler if run needed to start (was not handling separate thread case)
  • NOTE PL DLL calling API V20 adds PL_GetProc callback which enables use of the PL-As-A-DLL functions (and hence PL.Net wrapper) in DLLs that Planimate is calling. This is directly available but provided mainly for the C# wrapper (see below).
  • NOTE PL.Net updated to PL V8. Now PLCLR (the newly developed Planimate call dotNET bridge DLL) can use it to enable C# DLLs that PL calls to call back to PL (eg: to broadcast or access PL dataobjects on their own).
    ***** And so we've come full circle *****
- dotNET/C# can call/embed Planimte
- Planimate can call/embed dotNET/C#
A new merged DLL API will be released when its ready and documented.

8.57.2 (unreleased)

  • FIX AddPipe now supports use with an original pipe that uses a pipe configuration table.
    For this to work, the target should be a cell in a newly added row in the pipe configuration table which will receive the new pipe object index.


  • FIX DLL call API now support AUTO type output only parameters and added support for I/O label list transfer. Existing DLLs unaffected.


  • NEW New Paint object "Window" provides a place for a Windows child window which along with PLCLR enables a dotNET form/control to be embedded as a modeless interface in Planimate [Experimental] Not supported in a viewport and resize support yet to come.


  • FIX I/O parameter handling in DLL call ASFUNCTION mode calls

8.56.0 (new model version)

  • NEW System attribute s.ContinueCurrentTimeOnly. Any write to this system attribute causes Planimate to continue processing events until there are no more events at the current time.
    This is intended for use in "non FEC" broadcast cases such as table view "Don't defer BC on FEC" and Gantt view "Send Broadcast On Mouse Down". In these cases a broadcast is sent immediately with no other side effects being processed.
    You would find such side effects on the FEC, with PL paused.
    By using s.ContinueCurrentTimeOnly=1 you can ensure other broadcasts and unblocking as a consequence of the broadcast are processed.
    Up to now modellers have been able to use s.ContinueRun=1 but this would cause the simulator to continue on to future events if a simulation run was in progress which is not always desirable.
  • NEW The highlighted DLL parameter in the DLL parameter popup is now bolded and remains so if another parameter is clicked. Default column widths have been tweaked. #4800
  • FIX Ctrl-F (insert a function in the reference editor) was broken since 8.38.1. If you've never used it, it pops up a useful list of all the maths and string operations that are available wherever data is referenced - not just in a routine.
  • FIX Synchronised the code for train graphs and gantts, both have the fix width from 8.55.1. Also reduced redundant data processing.
  • FIX Rewrote the way popups are managed when editing a reference. Resolved interlock issues which caused deadlock in the routine editor when the step editor was closed whilst the parameter popup was visible.
  • CLEAN Teased apart the field based reference editor from the old dialog reference editor, now only used to insert references. Previously the two were part of the same class.


  • NEW DLL API now supports parameters which are both input and output. They are defined as PL_IO in the DLL definition table and appear and are accessed as inputs in the DLL (like TABLEDIRECT is already) except any changes made to them will be propagated back to the source data.
  • FIX Non Auto X scale for gantt now supported
  • FIX Gantt now sends right click broadcasts as well with _buttons attribute set 1=left 2=right.


  • FIX DLL parameter dialog highlights the line for the parameter the carat is currently at. Does not work for nested function parameters.
  • FIX Some cleanups to DLL parameter dialog handling
  • FIX Shift key grid override when dragging #4795
  • CHANGE Internal rework of DLL API to support embedding dotNET/managed code The new API will be released when it is ready. Previous DLLs should be Ok.
  • CLEAN Palette caption handling


  • NEW Gantt click includes value "_drag_type" values being 1=left edge, 2=right edge, 3=center. A right click bitmask of 4 may be added in future.
  • NEW Gantt option "Send Broadcast On Mouse Down" causes block click broadcasts to be sent on the mouse down instead of on release. This supports dragging.
  • NEW Routine operation DragGanttBlock() performs the graphical drag of a block in a gantt. Works in conjunction with gantt click broadcast. Refer to "Gantt Block Move" demonstration model.
  • FIX Vertical bar graph mode can extend negative
  • CLEAN Cleanup of internal move/resize rectangle code


  • FIX Case where a table edit did not update the screen.
    Detail:situation of an item animating due to a table after-click BC for a table configured with single click to edit and to show the current cell was causing the animation manager to overwrite the update to the edited cell. The way table cell selections are updated from animation buffer1 to window now uses direct blit instead of via flushing dirty rects, keeps the animation layer (buffer2) in sync and intact. Refer 8.46.1 / 8.30.1 / 8.30.1 / 8.25.1


  • FIX Train tails offset


  • FIX Co-ordinate calculation for single roads had an optimisation with incorrect logic, introduced 8.53.0
  • CLEAN Internal project file cleanup / renames, builds with VS2008,2013,2015

8.53.0 (new model version)

  • CHANGE The code that displays roads for tracks and spatial links has been rewritten. On screen road ordering now follows new rules. Simulation logic is unaffected.
    For spatial links, roads are now numbered from 1 (as for tracks)
for all cases.  This makes indexing in tables easier.
For multi-road tracks and spatial links, roads are now numbered from the top down (for a left to right link, rotate accordingly if the link is angled).
---1--- [A]---2---[B] ---3---
Roads are now always spaced by the same distance (no double space for 2 road case). When there is an even number of roads, the road lines are offset to keep the display symmetric.
  • NEW Routine operation SetLinkRoads enables the number of roads and road spacing of a spatial link to be set.
  • NEW SetLinkColor has an extra parameter to specify which road default=0 selects all roads, otherwise 1 .. road_count valid
  • CHANGE ClearSpatialCache renamed to ClearLinkCache AddSpatialLink renamed to AddLink RemoveSpatialLink renamed to RemoveLink SetSpatialLinkWidth renamed to SetLinkWidth CopySpatialLink renamed to CopyLink DeletePanelSpatialLinks renamed to DeletePanelLinks
  • CHANGE Operations SetLinkColor, SetLinkWidth,SetLinkCost,SetLinkRoads and RemoveLink now will accept a spatial link data object passed in the Portal 1 parameter. Portal 2 should be zero in this case.
  • FIX Positioning of popup'stop left retained when ReFitPopup used
  • CHANGE The default value of TrackRoadSpacing is now 9 as this value is interpreted differently (see notes above). This keeps double tracks spaced similarly to previous versions.
  • FIX Prevent single line title box being shown in Table Views when No Margins option is selected.

8.52.0 (new model version)

  • NEW Experimental Spatial links now have road count/road spacing settings Item has system attribute "ItemLinkRoad" [OBSOLETE CONTENT REMOVED SEE 8.53.0]
  • FIX The engine was not properly handling the _system_close broadcast when a run stop was initiated from model code. This would lock UI if the modeller cancelled the system close.
    This issue was introduced by changes to reduce flicker during PL close.
  • FIX An Exit configured to "Stop All Runs And Quit" would also trigger a save
  • NOTE Merged bend display code for pipes, track roads and new spatial link roads.


  • FIX Have changed the way HTML Help is called to make it compatible with windows 64 bit (statically link, removed event relay since HTML Help runs in its own process these days).
  • NOTE HTML help does not load content properly if the CHM file is on a network drive.

8.51.0 (new model version)

  • NEW Broadcast "_Panel_Layout" is sent to a popup or main window panel when a window is opening before the "_Panel_Visible" broadcast. It is sent at a time before the size of the popup has been finalised. This enables code to determine the size of a pop up panel as it opens.
  • NEW New view properties NoScrollWidth and NoScrollHeight return the width/height that a table view requires to not need scrollbars. The values include space for scroll bars unless the table view options to hide vertical/horizontal scroll bars are selected. #4756
    This property must be used in a broadcast where the panel is visible or becoming visible (such as _panel_layout). Using this when the panel is not visible will give a platform error.
  • NEW Routine operation ReFitPopup() enables a modeller to update the area used by a popup window. This is intended to be used within the "_Panel Layout" broadcast after a model has made changes to the size of a panel whilst a popup of that panel is opening.
    This is useful following FitPanelToArea() after views have been positioned/resized by modeller code.
  • NEW Table view option "No Margins" reduces margins in table views. This is useful in conjunction with the Hide Title view option. #4745
  • NOTE When a table view has no margins and its title hidden, you can access its edit menu by right ctrl-clicking on cells in edit mode.
  • NOTE ReFitPopup() is not designed to work with Anchoring. Use Anchoring to position objects given available space in a window. Use ReFitPopup to minimise a popup's size based on used panel area.
  • FIX No longer purge unreferenced attributes which have a view #4755


  • FIX Change to BrowseFile in 8.50.2 had broken when browsing for read


  • FIX The Don't Show Frame panel popup option now applies to popups configured for modal dialog
  • FIX Routine editor multiline fields allowed newlines to be pasted which would render the model unloadable.
  • FIX BrowseFile now properly sets extention of a typed file name to the selection made in the file type combo if the name entered did not have one.


  • NEW Column option "Always Edit As Single Line" forces a text field formatted column in a table configured with rows having a multi-line height to not use ENTER to start a new line. #4751
  • FIX CreateMD5Hash() now supports the LHS parameter being text formatted #4730
  • FIX Panels with popup options configured to "Act As Modal Dialog" were ignoring the "Hide Caption Bar" option, now fixed. Note that it is your responsibility to provide a way for the user to close such a popup since the window close box is hidden. #4746
  • FIX When saving a model, if the compressed result of a table column blob dump was exactly 1024 bytes, a new line inserted before the terminator marker caused the model not to load. This was fixable by removing the new line in the MDL. #4729
  • SPEED Moved table column DataWriter buffer to stack from heap
  • REMOVE Redundant option Always Load DLL From File. #4743


  • REMOVE The ability of a Planimate executable to change itself into a DLL has been removed. See note in 8.48.1.
  • REMOVE As per note in 8.48.1, Planimate calling a DLL now always loads the DLL from a file. Please remove DLLs in DB files, they just waste space. The /DEBUGDLL command line option is obsolete and removed.
  • RENAME Command line option /MAKEEXEKEY renamed to /EXEKEYFILE
  • REMOVE Command line option /DEBUGDLL
  • CHANGE DLL call API added get window handle callback, API now at V19
  • FIX It was possible to segfault PL by using F2 to full-line-edit a Dialog() routine line. The current implementation of Dialog() does not support arbitrary attributes used for titles etc. Some safeguards have been added but the Dialog() will not be otherwise enhanced as upcoming dotNET integration makes it obsolete.
  • CLEAN Internal cleanup of startup/shutdown code


  • FIX Clearing a cell range now works correctly with ranges of filtered rows. #4690


  • FIX SetViewportZoom range checks the zoom factor provided
  • FIX A compiled PBA will only look for external DLL files in the
same folder as its EXE instead of its current working directory.  #4674
  • REMOVE FORWARD NOTICE that Planimate 8.50 will remove: 1) Ability for Planimate to convert itself into a DLL. A precompiled DLL version of Planimate will be available on request to users with an active level 4 subscription. This DLL will be selectable when making a PBA if your target is a DLL.
    2) Planimate calling a DLL purely "in-memory". Instead, your PBA's installer will need to ensure any called DLLs are placed in the same directory as the PBA executable.


  • CHANGE There was a minor memory leak when repeatedly calling a DLL function with TABLE, LABELLIST or STRING parameters. The more common functions using TABLEDIRECT and ATTRIBUTE only were unaffected.
    This was introduced in 8.38.
    The fix removes 8.38's optimisations when these parameter types are used in DLL calls. For speed critical applications recompile the DLL using version 17 of the Planimate call DLL API.
    Note this is unrelated to using Planimate as a dLL.


  • NEW Edit/Find now has advanced find option to search for objects which may restart the model. #4642
  • CHANGE Edit/Find now searches RTF note link text, RTF note names for DB based notes and RTF note text for in-memory (non DB stored) notes.


  • CHANGE Model option "Pause After Run Start" is now ignored for runs with /BATCH or /TESTRUN command line options.
  • CHANGE When /BATCH or /TESTRUN are used, a model attempting to open a popup is now logged as an error and the run is stopped since the model cannot depend on the result of an interaction with a non-popup.
  • CHANGE s.AutomaticRestartAfterError is now IGNORED when /BATCH or /TESTRUN command line options are used. Any error ends the run.
  • FIX Protect internal SetNeedRedraw / FlushToScreen in WindowList in case user manages to call them in /BATCH mode
  • FIX Missing table update when double buffered display mode and non current cell clicked in single click to edit mode (the selection box was remaining on previous cell until after the new cell edited).


  • FIX Table views with "Single Click To Edit" de-selected in run mode were missing a display update when cells were clicked but not edited (introduced with animation layer rewrites). #4613
  • FIX Added interlock to prevent closing routine editor whilst a routine line edit was active. #4610
  • FIX Mouse down tracking rows, columns, filter columns and resizing columns was also missing a display update in run mode due to double buffered animation needing RegisterDirty / Flush in the tracking loop.
  • FIX Increase DLL parameter popup initial size #4611
  • FIX DLL parameter popup wasn't sizing properly/showing scrollbars Note this palette can be resized from the bottom right corner
  • NOTE Low level changes to dialog/UI handling


  • FIX The expression parser was removing brackets in cases like 1/(2*3) . Although the expression was parsed properly, subsequent text editing with the missing brackets would result in it not acting as expected. #4609
  • CHANGE Routine operations Add,Sub,Mul and Div used to present themselves as +,-,* and /. This became a minor problem when the ability to enter mathematical expressions within a reference was added, because it created situations like where the display of the routine operation "Sub (-)" with an expression as a parameter would not include needed brackets.
    This became more of a problem when the textual parsing of routine lines was implemented in Planimate 7, a wonderful example of compounding unintended consequences of otherwise innocuous changes.
    These routine operations now present as functions in routine code to clearly distinguish them from the equivalent mathematical expressions. This also resolves another potential text edit issue when these operations are used to process entire table rows/columns,
  • TIP Using routine operations Add/Sub/Mul/Div to process entire table rows/columns has always been a Planimate feature though it had become problematic with text parsing of "+"/"-" as you cannot perform arbitrary expressions on entire rows/columns yet.
    Hence be aware that these routine lines are all valid:
    t.table1.Column(3) = Add(t.table1.Column(2),123) t.table1.Column(3) /= 5 t.table1.Column(5) = Mul(t.table1.Column(3),t.table2.Column(1))
    and they process MUCH faster than iterating in a loop.
  • NOTE A future version of Planimate may convert uses of Add,Sub,Mul and Div in routines to expressions using +,-,* and /, depending on feedback.
    This version has made NO changes to the model format or internal representation of the routine, it is just distinguishing the routine operation from the expression operation in the listing of the routine code.


  • FIX The "experimental" Parameter Popup (8.38.1) for DLL calls was referencing the wrong place for output parameter information, leading to seg-fault if a DLL routine operation had less inputs than outputs. Info in the popup might also have been confusing.


  • NEW Group Anchor stretch limits can automatically determine the required width and/or height for a table view (ie: no scrollbars needed).
    To enable auto max sizing for group anchored table views, set the Stretch X Limit and/or Stretch Y Limit to -1. Closes #4594
  • FIX Group Anchor stretch limits, pixel roundoff


  • NEW New anchoring options "Stretch X Limit" and "Stretch Y Limit" enable a maximum size clamp on anchor managed objects configured to resize for the given axis. These specify a limit in pixels for after which remaining space is allocated to other resizeable objects in that row/column. #4564
  • NEW Work Area menubar menu also shows minimum panel size #4585


  • FIX Dragging group of anchor managed objects propagating base layout update. Missing Refresh fixed 8.43.1 had hidden that the update wasn't occuring.


  • FIX Dragging a group of objects now prevented if at least one object is using anchor management and the panel is not at the minimum size for the layout.
  • FIX Panel / "Resize To Minimum For Layout Editing" missing refresh


  • NEW Group anchor now supports objects positioned within objects.
    In the Anchor Settings, the modeller can specify a Group Number. Objects with the same group nubmer are processed together. Hence Group 1 objects have their positions determined before Group 2, Group 2 before Group 3, etc.
    Objects can also be assigned a Parent Paint ID. This value is looked up in the paint label list and enables a paint object to be provide the default "edge" for anchoring instead of the panel.
    This is useful in a case where a bounding frame for a user interface area is managed by a paint object in Group 1, and buttons that will be within this object, configured in Group 2, can then refer to their bounding frame. This enables much more complex layouts to be automatically managed.
Note that the  Parent Paind ID must be an index to a paint object
which is on the same panel and which has a LOWER group number than
the object referring to it. Otherwise the setting will be ignored
by the anchor manager.
  • FIX Paint object references were not being properly updated during copy/paste of model hierarchies containing them. This has most likely been the case since version 5.
  • FIX If a non-portal was targetted for a Dispatcher broadcast target, an error in the error message report would cause user disappointment.
  • CLEAN Internal renames to clarify copy / paste model structure management
  • NOTE Code internally compatible with VS2015 apart from EXE to DLL which will be eventually replaced with distributing directly compiled DLLs.


  • FIX The label list editor was not using the correct method to search for an existing label. Likely introduced 8.30.0.
  • CLEAN Convert the code that manages memory tables to use templates


  • NEW DLL API updated to version 16, added callback HoldSectionRoad()


  • NEW Anchoring value "Group Anchoring Lock To Point" enables an object to act as if its scaling in a layout but then retain its initial size, based upon a co-ordinate set by this value. This enables more complex layouts where multiple columns of resizing views all should align but some of the views should not actually be resized.
    The value sets the corner to align to after the layout is completed: 1 = top left 2 = top right 3 = bottom left 4 = bottom right 5 = center within space
    NOTE that aAnchoring other objects to the edges of a "locked" object may lead to unexpected results.
  • FIX Anchoring more complex arrangements of multiple adjacent objects
  • CLEAN Commonize memory management code


  • FIX DLL API reallocate rows now commits the current rows used as set by the DLL before the reallocation, not doing so was losing the appends made by the DLL just before reallocation of the table.


  • NEW Added debug logger diagnostics:
- switch lookahead result
- switch lookahead previous cache hit
- switch lookahead cache reset
- lookahead into track result
Internal module rename/include re-org to clarify the engine
  • FIX The time range filters for the Debug Logger did not handle models with a different edit/run dates or a model that changed its run date.
  • FIX Debug Logger window now restores properly after being hidden and is less resource intensive whilst running with it minimised, even though events are still being logged.


  • FIX Called DLL reducing size of table direct table now properly propagated.


  • FIX Table paste handler now allows empty label cell text if label list option "Interpret Empty Input As Label Index 0" is set.
  • FIX Table paste handler skips empty cells for numerics, using the clear value instead. Note labels are separate and handled as described above.
  • FIX Table view Ctrl-V honours in place edit / edit during run state options


  • NEW Group Anchoring & The Layout Manager
    A new anchoring system enables more sophisticated model UI layouts where multiple views can scale in a co-ordinated manner to fit the available window area. Previous versions required complex model code to maintain the layout and it was easy to disrupt the layout whilst editing the model.
    The new layout system is backward compatible with previous models, which default to anchoring to screen edge only, as previous.
    An object will have its position managed by the new layout manager if its anchor option "Group Anchoring" is selected and at least one edge has an anchor set.
    Its called Group Anchoring because an object anchors to the closest adjacent object which also has "Group Anchor" selected.
    If there is no adjacent object for a given anchored edge, the edge of the panel is used.
    The layout manager can be used as follows (graphical sizing method):
- Enable Panel Options / Engine / "Auto Fit Panel To Window" and
Disable Model Options / Engine / "Globally Disable Panel Auto Resize"
- Size the PL window to a "minimum" size that supports your layout.
The panel size should adapt.
- Select Menubar / Panel / "Resize To Minimum For Layout Editing".
Assuming the panel didn't already have a minimum size, Planimate
should offer to set the minimum size for you.
(note that selecting this option sets Model Option / Engine /
"Globally Disable Panel Auto Resize").
- Create a layout of views on the panel. Paint & Viewports also work.
- Set anchors on single edges if you want to retain a margin
or both opposite edges to enable scaling.
- X and Y axis are processed separately (refer to example model).
- Don't forget to also select the "Group Anchor" option.
- You can now test your layout by disabling "Globally Disable
Panel Auto Resize". For your convenience, you can access this
from the Window menu.
You can revert to the base layout using the menubar "Resize To Minimum For Layout Editing". This restores the objects to their base position.
The manager works by striving to retain the margin to the closest adjacent object for edges which have an anchor set. If both sides of an object have anchors, the object is stretched to maintain the margins.
Where multiple such objects are in a row (or column) the manager will apportion extra space based on a ratio that the modeller can customise.
The layout manager works well for situations for which it is intended. It has known limitations: - reflow of objects is not supported (objects rearranging in 2 axes) - it does not attempt to handle situations where changes to one axis create/remove a constraint on the other axis - it does not support intersecting or contained objects (conceivably the modeller could use its result as a starting point to positioning unmanaged objects). Closes #4453.
  • NOTE Use of Group Anchoring with objects that use Paint Inheritance IS NOT SUPPORTED.
  • NEW In paint mode, edges of views and paint objects which are anchored are highlighted using a dashed line. If the object is not "Group Anchored" the markers are red, otherwise they are blue.
    The Window menu has a new option "Toggle Anchor Markers" to hide the anchor indicators.
  • NEW Menubar Panel option "Resize To Minimum For Layout Editing". This resizes the current panel to its minimum size and disables the auto-fit of all panels using the "Globally Disable Auto Resize".
    This makes it straightforward for a modeller to revert a panel to its "base" size for editing a layout, avoiding having to manually set its size and disable the auto resize.
    A feature of the anchor manager is that it retains the base bounding rectangle of all objects selected for group anchoring. When "Resize To Minimum For Layout Editing" is selected, all managed objects are restored to their position as last edited. This is useful when debugging a layout where the anchoring rules mess up the layout once the panel is allowed to auto resize.
    If using group anchoring, you must only edit suchobjects after selecting this option to properly size the panel. Planimate will notify you if the panel is not at its base size and you attempt to move or resize a managed object.
  • NEW Menubar Window option "Toggle Disable Auto Resize". This gives quick access to the model option Engine / "Globally Disable Auto Resize". It is useful when you want to test a layout after having worked on it with the panel size restricted to its minimum.
  • NEw The Paint Mode background context menu has a new option in the "Other Options" submenu, "Enable Group Anchor For All Anchored". Selecting this will enable the new "Group Anchoring" anchor option for all views and paint objects which have at least one edge already anchored. You will see the anchor markers change from red to blue.
    This option is intended to assist modellers converting existing layouts.
  • NEW New anchor settings: "Group Anchoring X Stretch Ratio" "Group Anchoring Y Stretch Ratio"
    These values apply only to objects anchored on both sides, horizontally and vertically respective.
    The actual values do not matter, Planimate uses the ratio between the values to determine how additional available space is allocated in cases where multiple resizeable objects are in a row or column.
    This can be useful where its desirable to have one view (such as a graph) get much more allocation to additional space than another view.
  • NEW Alt-clicking the edge of a view or paint object in Paint Mode toggles anchoring on/off for that edge. This is indicated graphically by the anchor marker display. Alt-clicking beyond the edge shows the object's Anchor Options dialog.
  • NEW Paint context menu / Other Options / "Bring Off Panel Objects Into Panel" can be used to regain access to objects positioned outside the panel's area.
  • FIX Newly added Paint/Image objects were being added to the bottom left of the panel instead of at the selected location.
  • FIX If index matching had a bad column, it would be report the error then segfault Planimate.


  • FIX Fix DLL parameter type name typo

8.39.0 (new model version)

  • NEW Table view context options for model editors only: "Copy/Export Table With Options" "Paste/Import Table With Options"
    These give access to the Import/Export clipboard options for tables that are otherwise reached in the Table Editor context menu.
    These options do not appear in PBAs.
  • NEW Three new Track system attributes add flexibility to track display:
s.TrackRoadSpacing  sets a value used to calculate spacing between
track roads (default 4.5)
s.TrackLineWidth    sets the line width of track lines (default 2)
s.TrainCarDisplay   if set, selects to show train cars instead
of noodles (default 0)
These can be changed during run though they require a force repaint to take effect. The options are not saved as they are intended to support dynamic scaling based on map zoom.
The train car/noodle toggle is useful in cases where zoom levels make train cars too small to display.
Noddle display has been defaulted since its more "established".
  • FIX Fix the math used for train car calculations, track down and eliminate an edge case which caused flicker as trains started on a road. (auto-calculation of direction failed when tip of train on track).
  • NOTE Currently train cars do not get drawn if their length is partially within a node (multiserver / entry), this is a result of doing the math properly and awaits review of Future Of Tracks.
  • CLEAN Large rewrite and merging of the track train car/noodle processing
  • FIX The changes to train item length in 8.37 caused it to be uninitialised until either a modeller set it or an item was recycled by the item allocator. This could cause random nasty train length calculations if the modeller did not explicitly set length.


  • NOTE Routine/expression editing is in experimental state due to rework. Please report any new anomolies when typing references. Models saved with this version ARE compatible with 8.30.0 in case any show-stoppers have been introduced.
  • NEW Planimate displays DLL functions in the dropdown completion list when you type the name of a PL DLL followed by ":", eg: you've typed "matmult:" and have the matmult.dll available. If PL cannot load the DLL, the editor continues without suggesting the completion.
  • NEW Experimental parameter popup when you begin typing parameters to a DLL, eg: you've typed "matmult:DotProduct(". This popup persists while you type in parameters for the call, displaying names, types and parameter comments set by the DLL author.
    The popup can be positioned/resized. A future version will save its position in defaults. A future version may extend use of this popup (eg: routine, function and property parameters). DLL call nesting is not completely handled.
  • FIX Divide by zero in train car dividers (points on top of each other)
  • NOTE train car dividers were introduced 8.32.0 are still in "EXPERIMENTAL" state. They may be removed depending on feedback.
  • FIX Cancelling edit of a routine line comment was not undoing changes #4461

8.38.0 (new model version)

  • NEW Rewrite of Planimate's internal management and calling of DLLs.
    For model editors, DLL calls are now expression functions instead of routine operations. These take the form:
    result = dllname:functionname(parameters)
    This change has a number of benefits:
    * You can call a DLL multiple times on one routine line or as part of a bigger expression or a parameter to another routine operation, or even in a condition. * The calls are performed much quicker due to caching and optimisation. This is important when the DLL will be called very often. * Calls to a given DLL's routines can occur from hundreds of places in a model (eg: at locations), this is efficiently handled. * The DLL API now allows DLLs to return a data value instead of the usual processing status code. This is useful for maths functions. * Calls to DLLs in lookahead are now supported, in the past they were skipped in lookahead. Enabling this requires the DLL developer set a flag for the operaiton.
    Models with the old routine operation CallDLL() are translated to the new notation upon load, CallDLL() is no longer present.
    Older version DLLs will continue to work. If you want to use function/lookahead call, you need to compile your DLL with DLL API version 15 and set the appropriate flags as demonstrated in the API demo.
  • NOTE At this time there is no UI/tips for the DLL routines/parameters. This is a high priority due in the next release.
  • NEW Model option "Use Highest Plus One For Object Indicies" causes Planimate to use the highest object index + 1 for the next added object index instead of the lowest unused index. #4458
    This enables reversing the change in behaviour of version 8.30.0
  • SPEED Use smarter tests to determine if columns in a table are referenced to reduce overheads when columns are inserted/deleted by a model and s.DisableColumnRefUpdates is not being used to prevent unnecessary refreshing #4457
  • FIX Memory leak in PL's DLL callback cbTableFromDataObject handler.


  • FIX Clipping of mouse resized boxes was not properly handled. #4116
  • FIX Better reporting of missing _!SYSTEM.DB when loading sidebar. #4107


  • FIX PBA not running (8.36.1)


  • NOTE New track options are experimental
  • NEW Model option (Engine) "No Track CheckNext Lookaheads" If set, Planimate does not perform an extended lookahead when a train is otherwise ready to enter a track road.
    This option should be enabled in models which implement their own train controller logic which does not require Planimate to lookahead test beyond the road the item is about to enter.
    When set, s.DoingTrackCheckNext will always be zero and Track Lookahead Separator switches are redundant as the second path is always taken.
  • NEW Model option (Engine) "Don't Auto Add Blocked Trains In Flows" If set, Planimate does not add a train blocked by a track to the blocked train list if the train becomes blocked in a flow which attempted to move the train onto the track.
    It does not prevent a train being added to the blocked train list if:
- the train is getting blocked whilst trying to leave a road
- the RegisterBlockedTrain routine operation is used.
  • CHANGE Have changed how item length is handled. It now is transferred/returned in messages and is sent in broadcasts. #4429 (the value persists even when TailInfo data isn't allocated on item)
  • CHANGE Routine operation "PasteFromClipboard" has been renamed to ImportFromClipboard to reflect that it performs the import/creation of table structure as available in the Table Editor's File menu.
    This is very different to PasteIntoView and Ctrl-V pasting which paste data into the existing table structure.
  • CHANGE ImportFromClipboard (was PasteFromClipboard) error return codes have changed. Zero is still the "success" caes. Other errors are now values from the "_import_errors" label list. #4137
  • FIX Inadvertent center after anchor options edited for paint object
  • FIX Recent cleanup prevented scroll bar updatds when switching between panels with different panel areas, leading to no-redraw area situations


  • NEW Label list "_dllerrors" enumerates the return error codes when calling Planimate DLLs
  • NEW If a Windows shutdown occurs whilst Planimate is open with a changed model loaded, an autosave is performed. If the model is unsaved, the autosave file will be placed in the Planimate folder in the user's Documents folder. #4346
    This is a last ditch attempt to save work, developers should manage Windows Update restart options to prevent rude and unexpected restarts - you can configure Settings/Update to give a notification when a restart is needed.
  • NEW Ctrl-A works in table editor/views to select all #4347
  • NEW Train graph event rows value can be set to zero in which case the highest label index in the associated label list is used to determine the display row count
  • FIX Added popup close completion check to the mouse move event handler to enable popups to close as result of hovering within the window's own area but over a object within that steals the hover.
  • CHANGE Have changed the way Planimate nags when a model is loaded with no DB present. A message is only given if a non-system icon fails to load.

8.36.0 (new model version)

  • NEW Routine operation RepaintPaintObject has a new parameter "Clear Color". The default "255" (corresponding to no colour
in the _colors label list) does nothing.  #4344
If changed, the bounding rectangle of the paint object is filled with this colour before the paint object is drawn.
This is useful when paint objects with rounded rectangles are individually redrawn as alpha blending used in anti-aliasing the round rectangles otherwise leads to remnant pixels of the previous colours.
This is only useufl if the background colour that the paint object is on can be used, otherwise another strategy will have to be used such as full panel repaint or placing paint object into the animation layer.
  • NEW Routine operation AddTable() enables a model to add a table. #4345.
  • NOTE A very functional sqlite database interface DLL has been developed, this will be released into the Planimate Developers Tools idBase region after testing and documentation is complete.