ReleaseNotes:Planimate 5.30 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • NEW Routine editor lines are coloured at a finer grain. Table cell references in particular will have their row and column indicies correctly coloured
    The colour for Routine, System and Item attribute references can now be explicitly set in the INI editor RoutineEditColors section.
  • NEW Options editor shows colours and RGB values for palette entries, making it easier to tweak the routine colours.
  • FIX Custom colours being specified as #RRGGBB were being incorrectly parsed. Any INI #RRGGBB colours set up in 530n will need to be checked.
  • FIX Route list is better about retaining selection after a cancelled edit
  • FIX Model tree correctly shows object name when a pasted object is also added to the model object list
  • FIX Paint buttons were being sized one pixel too wide/high if an image was determining their size for a state.
  • FIX Planimate should no longer create PL_Media folders unless it has something to put in there.


  • NEW Pipe option "Clear 0-Time Display When Stopped"
    When enabled, the pipe will clear itself when the run control attribute becomes 0. This can be useful in some cases where you want to clearly show that the pipe is inactive.
    This option only impacts "0 time" pipes since they effectively dont have capacity/values in them.
  • NEW Can browse views of a table
    Table Editor -> Table -> Show Views, also in the context menu when you right click on a table in the table list.
  • FIX Pipes were mismanaging FEC events if a bin update triggered a control attribute change (eg: endpoint and control same attribute). This generated a linkedlist error


  • NEW You can set the page orientation and paper size defaults for a print job.
    Two new system attributes (and label lists) enable this:

s.PrintOrientation (_print_orientation label list) s.PrintPaperSize (_print_papersize label list)

If the values are 0, the default or previous value used in the current session of Planimate will be used. After a print, these values will be set to the actual selections made in the print dialog. s.PrintPaperSize can have many other values apart from the few included in the label list. If you need to preselect a specific size not offered in the default list, check the value after printing a page. NOTE: Don't add to the _print_papersize list as Planimate controls it NOTE: These attributes must be set before the first page is queued for printing.

  • NEW Column option "Dont Show Clear Value" (and property "DontShowClearValue"
    This is like "Dont Show Zeros" except it tests against the column clear value instead. This enables a custom value to be hidden from a table view display.
    This option can be used along with Dont Show Zero.
  • NEW Paint lines now have visibility control, click action and action control. They also have the option for tip text but this uses the area the line covers.
  • FIX Added an explicit "None" button to the icon selection palette
  • FIX Routine reference editor now corrects case for any attributes/ table names typed in to match the case of the actual attribute/ table.
  • FIX Row line height for copied table is now copied
  • FIX Can change "Advance For" time from within the breakpoint dialog menu. This is useful if an error occurs while advancing-to-time and you want to watch the animation.
  • FIX Closing routine editor with the window minimised no longer saves the window position as a minimally sized (but not minimised) window.


  • NEW Default colours used in the routine editor can be edited using the Model Options editor / Platform INI / RoutineEditColors section
    The colours with "Inv" at the end of their name are used when the system is running a colour scheme where window text is lighter than the window background colour.
    Colours are either decimal palette indexes (0 = black) or #RRGGBB format
  • NEW "Natural order" sorting is now default and used in:
    • label list editor
    • table column filters (drop down combo)
    • label select dialog (old style pop up)
    • dropdown combo but ONLY if "Dynamic Combo List" is selected for the table column or attribute view.

This means labels with numbers are sorted like this: 1,2,3,10 instead of 1,10,2,3

  • NEW Routine operation : UpdateLoopEntryDelay
    Sets the loop entry delay to a new value. This can be performed when a train enters a location. The delay is measured from when the original loop delay started. If no loop delay is active, the operation does nothing.
    If the new delay has expired, the loop entry end will occur at the current time.

  • FIX PL now gives a helpful error message if an attempt is made to call a DLL which is not compatible with the architecture. (ie: 32 bit versions can only call 32 bit DLLs and same for 64 bit).
  • FIX Memory leak in string management for filter list generation


  • CHANGE Re-issue changing comment split character to "//" The release notes below have been updated.


  • NEW Time Unit mode "Calendar D Mmm Y hh:mm"
  • NEW Broadcast Entry can show/browse indirect sources (eg: in routines) of broadcasts.
  • NEW Routine operation CountIfMatch This returns the number of times a column in a table contains a value
  • NEW Routine editor shortcut '{' and '}' take you to the previous/next "CASE" line in the routine.
  • NEW Menubar option Panel->Replace Reference
    Enables replacement of a reference by another reference, scoped to the current panel and its contents/subsystems.
  • NEW Option on Cell Views "Don't Follow Table Colours"
    By default cell views will follow the colour set for columns text/background in the table. Turning on this option prevents this, enabling the Graphics settings for the cell view to be effective.
  • NEW You can now "Move" and "Copy" attributes to any portal in the hierarchy (menu options via the Attribute button in the editor, replacing the Migrate To Owner option).
    NOTE: Views will remain associated with the original attribute if it goes out of scope.
    NOTE: A copied attribute could "cover" up access to the original or another attribute with the same name as it. Take care with this.
  • NEW Enhancement to routine line comments in the routine list
    If a comment line contains the text "//" (2 slashes) then that acts as a separator, controlling what displays in the routine description and comment area.

text  : displays in both areas, as usual //text  : displays on the right only, leaving the routine area blank text//  : displays on the left only, leaving the comment area blank one//two  : displays "one" on the left and "two" on the right.

  • FIX Changes in 5.30d caused inter-object references to not be properly managed when objects moved between models and deleted. This could cause a problem with a Message Dispatcher in a portal that is moved to a different model without the Message Entry which it is pointing to being also moved.
  • FIX FormatForList() error reporting had a bug when the label list was not found.
  • FIX Double clicking change object with a minimised routine edit window restores the editor window.
  • FIX Condition Table (multi condition switch) is resizeable
  • FIX Combo boxes update their list with the current selection matching the initial text in their window. This makes using the arrow keys to change the setting (without the list dropped) more consistent.
  • FIX A new 'control' column inserted by the track network build has its cells set to '100.0' (full availability)
  • FIX Copying attributes did not update internal label scope


  • NEW Expressions can use these functions to perform bitwise operations
    BitAnd(a,b), BitOr(a,b) and BitXOR(a,b)
    Treat a,b as nearest integer and perform the binary bit operation equivalent to C's "&", "|" and "^" operations.
    This can be useful when a number of states has been stored into a single number using the combination of powers of 2.
    eg: BitOr(32,64) = 96
  • NEW Pipe Broadcasts have been enhanced. 3 pipe options control what events get broadcast:

    "Broadcast: Target at Target Upper Limit" (previous PL versions had this as the pipe broadcast limits option)
    This can be used when "Source/Target Limits" is also enabled which enables the "Target Upper Limit" attribute.
    The pipe will send broadcasts when its target is at or above the target upepr limit value.

    "Broadcast: Source at Source Lower Limit"
    This can be used when "Source/Target Limits" is also enabled which enables the "Source Lower Limit" attribute.
    The pipe will send broadcasts when its source is at or below the source lower limit value.

    "Broadcast: Load Limit at 0"
    This can be used when "Load Limiting" is also enabled. The pipe will send broadcasts when the "Load Limit" attribute is depleted to 0.
    This is useful when a pipe is to stop after transferring a given amount of material.

The broadcasts set these item attributes:

_pipeid  : the pipe object index (or 0 if no index set) _pipeflags  : reason for the broadcast.

The "_pipeflags" value is a bitwise combination of values depending on what broadcast options are enabled and on the condition the pipe is in. The values are in the "_pipe_bc_flags" label list and are: "TargetAtUpperLimit" (value 1): The target is at or above the target upper limit "SourceAtLowerLimit" (value 2) The source is at or below the source lower limit "LoadLimitAtZero" (value 4) The load limiting attribute has reached 0 eg:a vlaue of 7 would indicate all 3 conditions have occured.

NOTE: If the pipe direction is reversed (control attribute -1) then source and target are reversed and the "Target Lower Limit" and "Source Upper Limit" attributes are used for limit testing.

NOTE: Broadcasts will be repeatedly sent once a limit condition is reached. You must reset the pipe's parameters or use the control attribute to stop the pipe until it is needed again.
  • NEW Label list selection popup has a checkbox to hide/show system label lists (names start with an underscore).


  • NEW Switch displays extra "Target Cache" info in its runtime click menu (this should normally never appear)
  • NEW Dispatcher runtime click menu has new "Unblock" option to assist in debugging stuck trains
  • NEW Routine operation "SetIconRemote"
    This enables setting an icon for an item somewhere else in the model. ie: you pass the item ID rather than it working on the item at the change object.
    You might have read this by querying a spatial link for its contents, or you are tracking it in a table as an item moves through the model.
    TIP: if you pass the item ID of the item at the change object (s.ItemID) then the icon of that item will be changed, no searching is needed in this case and the location can be 0.
    Location can be a portal or object id containing the item. If its 0 the entire model is searched - this is potentially very slow (see the exception above).
    Planimate only searches spatial links, tracks, multiservers, queues and dispatchers. It searches hierarchically if a portal or 0 is specified as the location.
    The icon name should be text or a label. PL will search its usual DBs for it. Dont include an extention.
    *** IMPORTANT NOTE ***
    Since PL cannot know what icons you may load, it has no way to make sure the icon is included in a compiled PBA.
    You have two options to deal with this:
    option 1: Include any dynamically assigned icons in the (modelname).DB file
    option 2: (preferred) Have a private panel in your model with an object like an exit (low overhead) configured to use the icon you will be using with SetIconRemote().
    This will ensure the icons get packaged in the PBA and has the added benefit of the icons being pre-cached by Planimate since the platform knows they are used when the model/PBA loads.
    TIP: you can copy the icon name from the combo at the bottom of the icon browser / image mover palettes.
    Note that no screen update is done by this operation. Icons will update when they next move.
    Icons in links will update on the next movement update. Items waiting in queues and dispatchers can be updated using RepaintObjects(), which is faster than using ForceRepaint()
  • FIX Fixed an issue in the expression handling that caused operations strlen(), strcompare(), strfind() and strchar() to stop with an error if their input string was a Column reference (which is valid as it resolves to the column's tuple name when treated as text).
    In previous versions this was worked around by using a temporary text attribute. This should not be necessary anymore.
  • FIX Button action with menu bar option "Advance" (time or interval) would not perform the advance if the button was clicked whilst the simulation was running (clicks during simulation enabled)
  • FIX References format more consistently in routine editor
  • FIX Dispatcher edit dialog renamed "Max Length" to "Max Capacity" for clarity
  • FIX DLL call TableDirect was passing reduced total row/column count if a cell reference was passed instead of an entire reference. The proper counts are now passed to the DLL. Note this is an unusual case as the norm is to pass an entire table refefence.


  • NEW Routine operations QuerySpatialLink and UpdateSpatialLink
    These enable items on the link to be read into a table and changes made to items already on a link.
    They both expect a table with columns:
    "ItemID": set to id of item use "-1" for UpdateSpatialLink to skip row

"Ratio": position on link (based on its nominal direction) 0.0 = start object, 1.0 = at end object use "-1" for UpdateSpatialLink to retain current position "TotalTime": total time to spend on link, use "-1" for UpdateSpatialLink to retain current total time "Direction": 0 = forward, 1 = reverse

"Stopped"  : 0 = normal, 1 = item is suspended at its current position

  • TIP: Spatial Link Times The time an item would have spent on the link had it started at its current totaltime, given its current offset, can be calculated as follows:

time_elapsed = totaltime * ratio (direction forward) time_elapsed = totaltime * (1.0 - ratio) (direction reverse)

The time an item has remaining is hence: time_remaining = totaltime * (1.0 - ratio) (direction forward) time_remaining = totaltime * ratio (direction reverse)

  • NEW Can now stop an item on a spatial link.
    This is achieved using the "Stopped" column in tables passed to UpdateSpatialLink().
    Unlike using the control attribute which stops the entire spatial link. stopping a single item does not prevent others from entering the link.
  • NEW Table column list editor now has editing of column properties when multiple columns in the list are selected, and multiple selected rows are retained for the next edit.
    This means properties including format, width, colours, font and alignment can be edited for many columns at the same time.
  • NEW Numeric operation fmod() is a floating point modulus operation
  • FIX Handling of 0 row tables in column editing


  • NEW Table columns can now be editied and reviewed using a list. This is reached from within the table edit window, under the "Column" menu item "Column Editor".
    Right clicking on a single row is like right clicking on a column in the table editor, properties can be changed and columns inserted/dusplicated/deleted.
    If the table has no columns, a right click in the list enables one to be added.
    Multiple rows in the list can be selected, right clicking on these enables delete or "Paste Over" (see below)
    The "Options" column in the list summarises a few of the column option settings, using single letters, as follows:
    C: Zero at start R: Round display P: Protect from edits Z: Dont show zeros H: Hide repeated values V: Precise value edits F: Disable column filter
    The dialog is resizeable and remembers its last position within a Planimate session.
  • NEW "Copy" and "Paste Over" column edit options.
    "Copy" makes a copy of just that column in the table copy/paste buffer. Its useful with the "Paste Over" option which requires that a single column is in the copy buffer.
    "Paste Over" enables one or many columns (using the new Table Column List dialog) to have particular properties replaced with properties of the column in the copy buffer.
    You can select which properties will be replaced, others will be left alone, including Format, Width, Alignment, fonts and colours.
    Replacing Data and Cell Properites is also an option but it is off by default. Note with these - if the copied column has more rows than the column(s) it is pasting over, only the available rows in the destination table are filled in.
  • NEW Right clicking on a table in the Table List dialog now shows a context menu with options including to edit, use the new column list dialog, rename and resize and delete the table all without having to go via the table editor.
    Note that selecting the column list dialog from this context menu will also show the table editor in the background whilst columns are being edited as the editor's services are needed by the column list dialog.
  • REMOVE Removed column property copy, its superceeded by the new "Table Column List" dialog.

  • FIX Showing system attributes in a model error that occured at the start of a run could cause PL to close if the portal being viewed had not been initialised yet at the time of the error.


  • FIX Found and fixed issue with VS2008 builds of 32 bit Planimate.
    An inconsistent setting in the build projects was the cause of the problem.
    This release is again built with VS2008 and has better performance than the VC98 build (5.30h2).
    (the 64 bit version is unaffected; 5.30h remains current for it).


  • FIX 32 bit version rebuilt with VS98 as VS2k8 compiler still has issues even without SSE2 enabled. This will be identified in due course but from now VS98 will be used for the 32 bit builds


  • FIX Fix a special case where a dispatcher with the "Look Through In Lookahead" option on was not propagating unblocks behind it if it contained an item.


  • NEW The "Advance Time" dialog which appears when PL is fast forwarding a run has been reworked.
    It now uses Windows system colours and includes:
    • model name if its not a standalone application
    • last loaded dataset name (if its been set by PL or the modeller)
    • an approximate ETA estimate
    • model time updated more regularly
  • NEW Planimate option (Run): "Advance Time Dialog In Main WIndow"
    If this is set then the advance time dialog will not be a floating popup window but instead fixed in the model's main window.
    This can be useful when many models are running on one system and the association between advance time dialogs and PL instances gets confusing.
  • NEW Planimate option (Modeller): "Disable Paint Inheritance Update"
    This prevents paint object changes from being propagated to inherited objects. It may be useful in cases where dynamic panel sizes are used along with paint inheritance.
  • NEW Added "Purge Attributes" in routine editor menu
  • FIX The calendar code now handles centuries which are not a multiple of 400 years (eg: 2100AD) as non leap years.


  • FIX This is a rerelease of 5.30e, compiled with the original 32 bit compiler (VS 98). It seems the new compiler configuration for the 32 bit build 5.30e has problems with combos, no further details available yet.
    The 64 bit release of 5.30e seems OK.


  • NOTE Due to significant rewrites, verification of run consistency with a previous stable version (5.30c) is recommended.
  • NOTE The oldest computer spec that can run PL has been increased. PL requires processors at or newer than 2003 generation CPUs which have "SSE2" instruction capabilities (which boost math performance).
    This means at least a Pentium 4 or an Athlon 64. Recent Intel Core, Intel "i" series, Atom and AMDs are fine.
    This does not affect 64 bit versions of Planimate.
    This looks like a useful guide but should not be taken as official.
  • NOTE The 32 bit version of PL is now built with Visual Studio 2008, improving performance.
  • NEW Planimate calling DLL API has been enhanced
- DLL can now query PL clock time and engine state
- DLL can post a real time tick broadcast

  • FIX If an error occurs during model initialisation, any defer draw is cancelled (if its not a standalone EXE).
  • FIX Can now break out of "fill intermediate route steps" during model initialisation, and it displays the state in the titlebar so you know thats what its doing.
  • FIX Made routine step editor resizeable and retain its position throughout an edit session
  • FIX Made more popups resizeable (like the references browser).
  • FIX Increased formatting width for references to reduce instances of cropping away of details in longer references.
  • FIX An attribute, cell or table view in very close proximity to a model object could display garbled content after an edit until the model was continued.
    This was a graphical issue and the platform now ensures such cells are redrawn cleanly.
    Previous version models might be forcing a repaint to get around this. This will still work but should be unnecessary now.
  • SPEED Significant amount of code was refactored for performance ** handling of table index validation (and clearer out of range message) ** track code (train direction check) is now lookup based ** rewrote how attribute references read and write to tables and attributes ** matched row operations reworked to improve performance particularly with column lookups. ** internal renames of code that should not affect anything.


This release marks a milestone in Planimate's network modelling abilities.

It's now possible for models to add Portal copies and Tracks to themselves "on the fly" without having to stop/restart.

It is a major step towards network models that build and update themselves from live databases (continuing to run as they do so). It capitalises on Planimate's executable data structure design and comes with a performance boost due to refactoring and cleanup.

  • NEW Routine Operation: CopyPortal(original,panel,x,y,name)
    This enables a portal to be copied and placed on a panel WITHOUT stop/restarting the simulation engine.
    The new portal's sub-systems are initialised and connected to the currently running simulation.
    The model can immediately connect the Portal with tracks/links and start using it.
  • NEW Routine Operation: AddTrack(from,to,section-type)
    This enables a track to dynamically added or a track's type to be changed on the fly.
    The track is added to the object list and the index is returned.
    The section running table is updated.
    IF the track is configured to have less roads then it used to and there was a train on one of the extra roads, the train will disappear from the model.
    Track code will be faster and less memory intensive as some cleanup and consolidation was performed.
  • NEW Routine operation: AddPipe(from,to,copy_pipe)
    Adds a new pipe. If copy pipe is none zero, its properties are copied.
    Returns the object index for the new pipe
  • NEW Routine operation: RemoveTrack(From,To)
    Removes any track starting at portal From and ending at portal To.
    If From is a track object index, it is used directly
  • NEW Routine operation: RemovePipe(From,To)
    Removes any pipe starting at portal From and ending at portal To.
    If From is a pipe object index, it is used directly
  • NEW Routine operation: GenerateTrackTable(panel)
    This generates/updates the track section running table for a panel.
    The panel should contain a track network. If a section running table doesn't exist, it is created scoped to the panel, otherwise any table that matches the configured section running table name up the hierarchy is used.
  • NEW Routine operation: QueryNetwork(Table,Panel)
    This expects a table with columns "From","To","Type","ID"
    It appends to the table a row for every track, pipe or spatial link on that panel.
    "From" is the object index of the start portal (_Model_Objects labels)
"To"   is the object index of the end portal  (_Model_Objects labels)
"Type" is the object type of the link (_object_types labels)
it will be "Track","Pipe" or "Link" (spatial link)
"ID"   is the object id of the link (_Model_Objects labels)

  • NEW Routine operation: SumIFMatch(match_column,match_key,data_column)
    Sums values in "data_column" for rows where the corresponding cell in "match_column" matches the value "match_key".
    The columns can be from different tables and of different lengths.
  • NEW Portal context menu option "Cut".
    This enables a portal to be put into the copy paste buffer without being copied, meaning that object references etc. stay intact.
    It is useful for moving portals between models and is a shortcut to the equivalent procedure of making the portal a module then importing it.
  • NEW Background menu option "Paste Once" (appears only if a portal is in the copy/paste buffer)
    This performs a paste of the copy/paste portal without making a further copy for subsequent pastes.
    Its very useful when large portals are being moved about as it avoids unnecessary waiting for the second copy to be made.
  • CHANGE AddSpatialLink(), AddDirectionalLink() and CopySpatialLink() now all add the new link to the object label list and return its new index.
    Existing models which dont expect a result will use s.NullAttribute so they remain functional.

  • CHANGE Reduced the amount of prompting that PL makes when building/updating the network details table automatically at the start of a run.
    If the network details table needs updating, PL will give a single prompt. Selecting OK will allow PL to create needed columns, add objects to the model object list and insert rows in the network details table without any further questions.
    Note that the routine operation GenerateTrackTable proceeds without any user prompting.
  • FIX Pipe parameters optimisation for constant times:
    If a quoted value (eg time) is entered into the pipe "Total Time" for example, it would remain quoted and converted at runtime, which is not optimal
    Quoted values now get interpreted to formatted numbers at edit time.
    If you see quoted values in the pipe edit menu, then edit/OK them and they will be converted to formatted values.
  • FIX Description for 'ceil()' expression operation
  • SPEED Cleaned up internal implementation of tracks, simplifying how they are represented during edit and runtime.
  • SPEED A number of significant rewrites and speed ups on how PL represents dynamic panels.
    • rewrote the way Planimate represents the model hierarchy
      (avoid maintenance of a flattened hierarchy list except on load)
    • sped up loading models with better panel management
      (panel reference handling)
    • added more hierarchy integrity checks on load
    • sped up closing Planimate (remove unnecessary DeleteObject dependency checking).


  • NEW Pipe context menu enables copy/pasting of all pipe properties, references and settings between pipes.
  • FIX The selected cell in the table editor was being incorrectly redrawn. Table Views were OK
  • FIX Maximising a popup panel with the auto fit option on would restore its position instead of leaving it maximised.


  • NEW Printing a panel that is open in a popup now works


  • NEW Table View Properties, usable with GetViewProperty and SetViewProperty routine operations.
    These enable access and setting of the bounds of a current selection in the view.
    Cells are specified in terms of cells in the view not source table cells. Cells are numbered from 1. Setting any one of these to 0 will clear the current selection.
  • NEW Table column property "RoundValues" enables access to the table column option "Round Values In Views"
  • NEW Table column property "RoundWidth" enables access to the table column setting "Rounding Width"
  • NEW Label List "_export_options" names the option bits usable with CopyToClipboard
  • NEW Routine operation ShowHelp gives access to help files in the same way that buttons can be configured to show a section from a help file.
    The names can be provided as quoted strings, labels or text formatted cells/attributes.


All older model compatibility code has been removed. This means PL will only load models which have file formats later than 604. You should use Planimate 5.25z4 to upgrade older models.