ReleaseNotes:Planimate 6.x Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • FIX Backport fix for DLL call and table direct tables marked as outputs


  • CHANGE Backport change to increase graph overlay cache rows to reduce seams


  • NEW Backport paint image smoothing option


  • NEW Copying routine code between PL and other apps now more straightforward.
    when you use CTRL-C to copy routine lines, it makes a memory copy of the routine and also puts the text of the routine in the clipboard.
    If you paste into the model (eg: with CTRL-V) without switching to another application, an in-imemory copy is performed, which also copies any needed routine attributes.
    If you switch away from Planimate and back again, and the clipboard still contains what appears to be routine code, then a subsequent paste in a routine will paste using the clipboard text.
  • NOTE  a couple of routine operations like Dialog() are not supported in text form

NEW "#AARRGGBB" including the quotes can be used to specify a colour constant in routine parameters/assignment. _corporate_logo.png _dss_logo.png _frms_logo.png _generic_logo.png _interdynamics_logo.png

  • NEW _!System.db includes new InterDynamics corporate icons:

  • FIX Change track build section details to assign a section its network details row id even if an error such as bad section type or bad length configuration occurs to avoid subsequent errors
  • FIX The File / Add Module To Current Model option was causing a fault due to caching of DB and PMB files closing the load file. This has been broken since version 5.
  • FIX Cleaned up some double-to-colourvalue problems in text formatter which should not have affected release versions of Planimate


  • NEW The RenameLabel() operation can now rename an object label. This can be used to rename a location portal label to name/title associated with the object using:
    r.OwnerObject = s.OwningPortalLocation r.objtitle $= s.OwningPortalLocation r.OwnerObject = RenameLabel(r.objtitle) (r.ObjectOwner must be formatted for l._Object_label so RenameLAbel knows the label list to work on)
  • NEW The layout code for Planimate editing forms and the Dialog() operation has been rewritten to better support scaling nad higher resolution screens.
    Two new INI settings give additional font control
    [Routine] RoutineEditFontSize This enables you to set the size of routine line text. This affects the routine listing in the routine editor.
    [Edit] DialogFontAdjust This is an adjustment factor to the default font that the operating system uses for fields, buttons, lists and static text in dialog boxes. A positive value will make the font bigger with dialog boxes scaling appropriately. A negative value will make the font smaller.
    This font size is also affected by Windows font scaling settings, hence the setting will be very specific to a given installation.. This value does not impact objects and table views on panels. These can be adjusted via the settings->Fonts.
  • NOTE Windows 8 has more extensive scaling capabilities to support high resolution screens.
    By default if you set a font scaling in the Personalisation Control Panel, the entire application is scaled including text, icons, palettes etc. This is useful if you have a high resolution screen and the user interface is too small. Windows offers the option to switch off the scaling of non font elements globally (which will then act like earlier versions of windows where only fonts are scaled).
    Alternatively you may want ot use scaling but not for Planimate. In this case you can edit the properties of your Planimate EXE or shortcut, under Compatibility, selecting "Disable Display scaling on high DPI settings" will cause Windows to run Planimate un-scaled.
    Model editors can then use Planimate's scaling capabilities to tune how it appears: [Routine] RoutineEditFontSize to adjust the routine editor - [Edit] DialogFontAdjust to adjust the planimate editor dialogs - View / Zoom (All Panels) in the menubar to adjust panel scaling
  • CHANGE The behaviour of initialising track sections from a section running table has changed. The Length and LengthMode columns now always set the section properties from the table.
    In prior versions the table would be initialised FROM the section if it had a zero length. This no longer occurs.
  • FIX If LengthMode is set for a section then the Length must be non zero. This is now validated at the time section running details are applied to the section.
  • FIX The FEC is better able to display the location that caused events with bad times to be scheduled. In previous versions it was not reporting the location reliably.


  • FIX 6.7.0 had broken non length mode Track sections
  • NOTE Internal build project files clean up to fix issues identified when testing with latest Visual Studio 2013
  • FIX Internal code renames to avoid conflicts with VS2013 runtime library
  • FIX Remove PlgBlt work around when running under Wine. If this affects anybody it could be made an INI option. This avoids use of an API that has become deprecated.


  • NEW New system attribute s.MultiServerLookThrough is set to 1 when a lookahead has been initiated by a multiserver. This can be used to indicate to code that capacity is being explored, not an imminent train movement.
  • FIX The switch multi-condition error had an uninitialised member that could cause Planimate to close as the dialog opened and restored custom window positioning.


  • NEW For track modelling, multiservers have a new option "Look Through Test". When enabled, the multiserver will test the outgoing flow with an item that is about to enter it.
    The item enters the multiserver in any case. The result of this test is available to the multiserver's time distribution as s.LookThroughBlock which will be 0 if the item could leave the multiserver and 1 if it would be blocked.
    The result can be used to add extra time for a stopping train in a station, eg:multi server time: p.NominalTime + s.LookThroughBlock * p.ExtraTime
    When enabled, a new multiserver reference "Look Through Control" (default 1 = enable) can be used to enable/disable the look through operation on a case by case basis. This is useful in cases where you know the train must stop and you can save runtime by preventing the unnecessary look ahead.
    if Look Through Test is not enabled or the Look Through Enable reference is 0, s.LookThroughBlock will be zero.


  • CHANGE Train reversal now supports reversal if the train's tail is in a multiserver in a track node.
    Additionally the route pointer is now advanced when as the reversal occurs (since the train is not entering a node via the usual entry where this normally occurs).
  • NOTE A note that whilst train reversal is a new capability, no model file format changes have been required so far and the file format index has not been increased yet during this experimental stage.


  • NEW Initial implementation of train reversal.
    If a train in a track node on a network using train length instead of loop delays re-enters the section its tail is still occupying, the train performs a direction reversal.
    The back of the train becomes the front and the train proceeds in the opposite direction.
    This is useful in situations where a train stops and the crew swaps ends.
    Trains whose length extends over multiple roads and multiservers (inside locations) are supported. It is an error to try reverse a train whose length is not completely consumed by tracks or multiservers (ie: one still entering the model).
    Currently reversing when the tail of the train is in a multiserver is not implemented. This will be added shortly.


  • NEW Help menu has option to show release notes (assuming ReleaseNotes.txt is in the same folder as Planimate.EXE)
  • FIX Planimate no longer displays an error if saving over an existing model and the option to replace an existing database is answered no.
  • FIX Copying and pasting routine lines now carries through any referenced routine attributes more intelligently. It no longer asks to create them.
  • FIX Added extra tests to prevent code evaluated on an IF test that fails with a model error
  • FIX For the case that a newer model format is attempted to be loaded by an older planimate version, it is no longer removed from the recent history list

6.6.0 (new file format)

  • NEW Graph RHS scales can now also be given a title
  • NEW Graph Y axis property YScaleFmtOverride and YScaleFmtOverrideRHS allow the formatting used when displaying a scale to be overridden.
    Note that you cannot override using a label list format but a column formatted for label list can be overridden with numbers.
    This is particularly useful for giving the RHS scale its own format
  • CHANGE Graph Y Scales now allocate separate space for graph Y titles if enabled instead of the y titles sharing the same space with the Y scales
  • FIX Buttons configured to popup a panel would corrupt Planimate if clicked whilst the panel was already popped up


  • FIX Tool tips which appeared over the window that owned them (eg: top row of palettes) were disappearing in Windows 7 (and likely later versions) due to a change in Windows' messaging behaviour.
    Generally this affected editing more than model run as the panel display is double buffered during run which prevents the problem occuring.


  • FIX Pipe load monitoring / limiting was broken in 6.5.0
  • CHANGE Border styles for views and dials now default to single rect


  • FIX Reworked the gantt bar click popup to use a multi-column list with auto-sizing
  • FIX No longer repeat database open error messages in map paint objects
  • NOTE Developers should be aware that the manifest change in 6.5.0 prevents Planimate models from writing to the Program Files directory, any attempt to do so triggers a file open failure instead of running Planimate in compatibility mode (with associated messages from Windows).
    This is as intended. To summarise: Planimate applications should not expect write access to files in the "Program Files" folder.


  • NEW Panels have a new option "Broadcast Pipe Clicks" which causes pipes on the panel to send the new broadcast "_pipe_clicked" instead of displaying the default popup.
  • NEW Pipe Load Limiting can now be enabled and disabled on the fly.
    The pipe "Load Limit" reference can always be edited. The pipe option "Load Limiting Active" selects whether the pipe will start the run with load limiting enabled.
    The Object property ObjectPipeLoadLimiting enables the limiting behaviour to be read and controlled during a run. Note that the runtime setting of this property does not affect the option set during editing and the pipe will revert to this setting on a restart of the model.
  • NEW Change object "Save Panel Image" now supports PNG and JPG formats as well as BMP. The file type determines the encoding mode.
  • CHANGE Routine listings now write to a file name based on the name of the change object.
  • FIX Updated Planimate's manifest to prevent bogus compatibility warnings under Windows 7/8 on some models.
  • FIX If the option was selected, PL was doing a restart on error even when a close was being forced by its owner when running as a DLL
  • CLEAN Removed obsolete term-within-term code since PL as a DLL is only supported with PL running in its own thread.


  • NEW Can add item attribute to watch list by selecting it in the item click pop up menu
  • FIX View "Edit Order" could not be returned to zero after being made non zero
  • FIX Can select routine attribute from the routine editor while paused, this gives access to the watch list add menu.
  • FIX Watch list was causing huge slowdowns once opened as it was updating itself unnecessarily when items that were not being watched were deleted.


  • FIX Graph Views and the settings dialogs had an incorrect datatype which would mess up AARRGGBB colours under 64 bit versions only.
  • FIX Column overlay graph grid lines/scales are now drawn behind the graph making them consistent with Log Driven Graphs.


  • NEW File operations "TestFileLines" and "TestFileColumns" now support the "Show File Browser First" option and set the s.LastAccessedFilePath / s.LastAccessedFile attributes. This is useful as you can test the file's column column count then use the value to control how you read it, using the file/path that the user selected.


  • NEW Right clicking on a watch list item enables its siblings to be added or removed from the watch list
  • NEW Attribute editor enables siblings of an existing attribute to be added/removed from the watch list
  • NEW File operation "TestFileColumns" returns the number of columns in the first line of the specified file. Tab delimiting is used unless the "Delimit using commas" option is set, in which case the file is treated as CSV and any commas in double quoted enclosed text are ignored.
  • CHANGE Closing the watch window now hides it without removing its contents, enabling it to be restored. Note loading any model clears the watch list
  • NEW PL as a DLL API now supports PL_SuspendThread() being invoked multiple times or recursively as long as each call is matched by a PL_ReleaseThread() and all the calls occur from one thread, separate to Pl's work thread
  • NEW Key linked lists now report their owner in LinkedList errors


  • FIX StdDev was broken for > about 45000 values due to an integer overflow

6.3.0 (new file version)

  • NEW Column overlay graphs can now plot points on lines and area graphs using an icon selected in the overlay's settings menu. This is useful with graphs configured to allow dragging of points.
    Log Driven graphs will get this capability in a future version
  • CHANGE Internal rewrites (icon nametables, graph plot cache)
  • NEW Planimate DLL API enables a callback function to be registered for when the model becomes paused. This simplifies a container application tracking when a running model reaches a target time and becomes paused.
    Other enhancements to support advancing to time are documented in the Planimate API release notes and on the wiki page:
  • CHANGE Run pause reasons (different to stop reasons) have been extended to include AdvanceTimeReached. These are enumerated in the planidll header for users of the Planimate DLL.
    Internal cleanups and renames of code related to run pause and advance to new event time.


  • NEW Added logging of SetPortalIcon() to the debug logger. These get displayed under the "Info/Notes" category (for now) as "GraphicsOps" events and include the new icon name in the Info column.
  • NEW Added "Show Watch Window" to breakpoint dialog menu
  • FIX If the table column list was used with a column that was too wide for a table view, it would cause PL to close.
  • FIX Cells with "Rename Instead of Adding Labels" now work with sub label lists.
  • FIX SetColorPaletteEntry() was flipping red and blue in 6.2.0


  • CHANGED Renamed routine operation ChooseColor to ChoosePaletteColor Existing uses will be automatically updated
  • NEW Routine operation ChooseColor enables selection of an RGB colour by an end user.
    Returns the AARRGGBB colour (AA always FF) or -1 if colour selection was cancelled by the user.
    Modellers must check for the -1 case. It will appear as FFFFFFFF in an ARGB formatted cell but its not actually a valid colour.
  • CHANGE The routine operations ColorPaletteEntry and SetColorPaletteEntry now return and expect alpha values as well.
    Existing models and colour data need to be updated to include the alpha value. Table data should be formatted as "Colour AARRGGBB". The alpha value needs to be FF to make the colour fully opaque.
    A reminder that user colour values are stored as 0xAABBGGRR but the BB and RR get swapped by the format code. This was explained in 6.0.0 release notes


  • FIX When setting a paint buttons's text, it now re-evaluates its state first, making it possible to set the text for other states by changing the control attribute then setting the text.
  • FIX Moved "Add To Watch List" to bottom of attribute menu and ensure it does not appear for item attributes when editing a class


  • NEW Watch list (tools menu) This enables watching of portal, routine and item attribute values at a fine grained level with watching controllable by model code as well as by selection from the attribute editor.
    Its useful in conjunction with stepping through routines.
    Note that watching table cells is not supported as they do not inherit from attributes. Tables can have table views unlike routine and item attributes in a routine.
    Item attributes are watched per attribute per item.
    The routine operations WatchListAdd() and WatchListRemove() enable attributes (item, portal, routine) to be added and removed from the watch list on-the-fly. They are the only way to watch an item attribute.
  • NEW Debug Log window and Watch List now save their positions in the INI file. This can be controlled using [Edit] SaveDebugWindow and [Edit] SaveWatchWindow.
    The co-ordinates are saved in DebugWindowX,DebugWindowY and size in DebugWindowW and DebugWindowH, same for the watch window except its WatchWindowX etc.
    if the W/H values are 0 (initial default) then PL auto-positions the window. Hence making the width/height values 0 and setting SaveDebugWindow=0 will causae Planimate to act as it used to and not save whatever position the debug window is in.
  • FIX Double clicking a change object during run no longer causes intermittent crash if the model only contains one change object. This was caused by the icon cache reloading the change icon


  • FIX Routine line selection after cut/delete rows is now consistent
  • FIX Debug-stepping now supports panel open routines but avoid changing panel whilst stepping through such routines.
  • REMOVE Management of DataSet1 (Scenario) save structures. These were wasting memory and causing problems with dynamic portals

6.1.5 (new file version)

  • NEW Cell text/background colour now supports RGB values as well as indexed colours.
    In previous versions the only way to set/get cell colours was by using the "Property" value on a table cell

    eg: t.table[1][1].Property which returned an integer consisting of the text and background colours in the lowest and second lowest bytes respectively.
    This mechanism is unuseable for RGB colours and is now obsolete, though still supported for the time being.
    4 now routine operations enable reading and setting table cell text and background colours as full ARGB colours:
    GetCellBackgroundColor() GetCellTextColor() SetCellBackgroundColor() SetCellTextColor()
    These expect a cell reference in the first parameter and a Plaimate colour value (either colour index or ARGB) for the colour they set/return.
    If a cell does not have a specific colour set, the "none" colour of 255 is used.
    NOTE that partially transparent cell colours are not explicitly supported, in some circumstances there will be overwrites if the data in the table changes dynamically. You might be able to get around this by giving the table view a transparent background colour but note that this will impact redraw performance.

  • FIX Expression parser now interprets AND, OR and XOR as '&&', '||' and '^'. This fixes importing of routine listings generated by Planimate which use AND, OR and XOR in conditions to be more friendly to non C programmers.
  • NEW Ctrl-A in the routine editor selects all routine lines
  • NEW The pow(x,y) function (x to the power of y) is now available in expressions as well as a routine operation
  • FIX Routine import from clipboard now sets undo


  • FIX Repaint causing advance to time box to reappear when not needed and remain stuck open
  • FIX Importing text into routine now handles non breaking spaces (space character with high bit set).
  • NEW The hierarchy and portal menus have a new option "Copy Path To Clipboard" which copies the names of the steps in the hierarchy to reach the portal
  • NEW Tip text for portals is now shown in edit mode as well along with the object name/type
  • NEW If the first line of a routine is a comment, it is shown as tip text for the change object in edit mode (experimental)


  • NEW System attribute "s.LineTestMargin" sets how many pixels (in Planimate panel co-ordinates) Planimate uses to detect clicks on lines. In cases where lines are in close proximity, the modeller may want to reduce this.
    This is global to the model but can be changed using a panel open broadcast to make it panel specific. The value is not saved with the model and is reset when a model is loaded.
    The default is 5
  • NEW Paint Map Object has a new option "Wrap Map At 180E" With this option on, the map display supports wrap-around at its right where the International Date Line is normally the limit.
    This is useful when maps involve areas near New Zealand.
    When this option is on, co-ordinate calculations have been updated to allow objects to be positioned East of the date line (they will have longitutes co-ordinates > 180).
    This option is only supported when the "Fixed Map Zoom" option is also enabled.
  • NEW PasteFromClipboard has been enhanced to now return a result code. For older models this is set to s.NullAttributes.
    The result code will be non zero if Planimate reported an error during the import operation.


  • FIX Broadcast Bug:
    If in paused mode, a button click broadcast triggered code that dynamically changed the view panel of a viewport, and the new view panel of the viewport contained another viewport, then Planimate would "continue" the run even though this was not requested - the model should just pause after the button click broadcast.
    This was caused by the nesting of panel visible broadcasts as the outer viewport opened its new panel and that panel opened its viewport and the panel it pointed to.
    After a broadcast, the broadcast send code checks if the "continue" flag was set by the model, so it can instruct the engine to proceed with the "continue" after the broadcasting has completed (as set by s.ContinueRun = 1).
    However this test was incomplete, it was detecting the "continue" flag set when the engine state was "continue & pause after epoch" which is used to clear side effects of broadcasts.
    Specifically, the recursed (inner) broadcast handler was converting the "continue and pause after epoch" state set by the outer broadcast handler into a "continue". The test is corrected.
    Look out for any cases where a broadcast does not fully execute all expected same-time events/side effects.
  • FIX Handling of non gradient colours for paint rectangles


  • NEW Log Driven Graph mode "Point Rectangle" can be used to draw rectangles with co-ordinates based on graph-space values. Used with transparency, it is very effective for highlighting parts of a graph display.
    If _borderstyle is set, a border can be shown with _bordercolor if the _Borderstyle is set to "Single" or "Double". The standard rectangle border styles are supported.
    The _x and _y co-ords set the lower left corner of the rectangle. Additional columns _x2 and _y2 are used to specify the top right corner of the rectangle.
  • NEW Log Driven Graph mode "Point Line" can be used to draw a line with co-ordinates all passed in a single row of the data table. This requires columns _x, _y, _x2, _y2 and supports _color (or _linecolor if present), _width and _style columns.


  • SPEED Rewrote substantial parts of routine line processing to streamline the code and make routine lines execute faster, particularly the ones that are likely to be executing in lookahead.

<link rel="stylesheet" type="text/css" href="chrome://s3gt/skin/s3gt_tooltip.css"></link>