ReleaseNotes:Planimate 4.32 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • speedup:

I've made a change to the way Planimate moves items from one object to the next, by testing for recursion in a simpler way (keep a counter per object rather than using a global stack).
This might affect event ordering in models that previously worked using recursion of the move loop, something I've trying to cut back on.
I'm interested in any observed speed ups. I haven't found any bugs with the new approach - they would manifest as items stuck at places they should not be.

  • subroutines now have an item in their menubar to delete themselves
  • bugfix: cancel adding subroutine no longer crashes
  • bugfix: facility state properly reset when agent leaves it after being blocked
  • layout change to colour palette so it can be a bit narrower AND changed spelling of "Colour" to "color" in static text since the system palette and planimate label lists use that spelling anyway.


  • Enhancements to dynamic object creation:
  • if a column called _new_name is included in the command table, its formatted value will be used to set the Object Name of newly created objects.

This is a big improvement over dynamically created objects getting "generic" names and avoids the modeller having to artificially label them.
Planimate will modify the supplied name to fit within the object name length and to be unique on the panel for that object class.

  • If any additional columns exist in the command table which have names NOT starting with an "_", then Planimate will use the value in the cell on a row which crates a Portal to initialise any matching Portal attributes in that Portal's SubSystem.

This will greatly assist in creating networks by enabling the objects to be made unique and identifiable as they are constructed.

  • The modeller can now put text inside the activity state area in the status bar using the Display routine operation "Set Activity String"

This is very useful when very long processing delays occur and you want to show the user what the system is doing as well as how far it has progressed.
It can also be used for displaying modeller defined "modes" to the user. The string is appropriately reversed when the activity bar moves across it.
If the string is a single space OR ' ' then it is treated as an empty string.

  • Adding a label '-' to the user defined menubar menus adds a separator
  • new button action to copy a named table into the copy buffer/clipboard
  • bugfix:fixed silly bug with naming items in user added menu (was overwriting label list)
  • bugfix:no longer crash with certain menu command buttons if the button is clicked during a run where clicks have been enabled during run. I've updated the command handling code to be aware of being in "Simulate" mode.
  • bugfix:routine attributes in subroutines are properly identified as needing to be renamed when the attribute in a parent routine is renamed.
  • bugfix: table name when dynamic object create table is missing some columns
  • the notification of routine name in error dialog is now aware of subroutines and should report the parent and sub routine names properly
  • Strict lookahead and Strict Attref handling are no longer an option - they are ALWAYS enforced. Any models that had these options off will need to be reworked if error messages appear when they run.
  • have cleaned out code that tracks which routine is active. Tracking code was replicated for debugging and internal management purposes, wasting time and space.


  • Spatial link delete routine operation added - deletes all spatial links on the given panel
  • Table block attribute references are no longer accepted as table references in routine operations which do not properly support the block reference as a source or destination data type.
  • The modeller can now generate a customised menu bar.

The menubar is cleared using the "Clear Custom MenuBar" routine operation (under Label String) and a sub-label list of menu options is added to the current menubar using the "Add Menu To MenuBar".
When a menubar selection is made from a user added item, the new _Menu Command broadcast is sent with the label code of the selected item.
The "Clear Custom Menubar" command switches Planimate to user mode if it is not already.
CTRL-Shift-H can be used to restore the editing menu. Other PL CTRL key shortcuts are still active when the user menubar is active.
If the Clicks During Run option is on, custom menu bars remain available for selection (unlike the inbuilt menubars which are disabled during run).

  • New system broadcat _Menu Command with attribute _command is sent to the model when a commane is selected from the user defined menubar


        • CRASH BUGFIX ***

rework to avoid event re-entrancy during click-during-simulate processing, screen changes and redraws.

  • no longer pump events when determining the speed that an item will animate. This has the undesirable effect of (sometimes) closing the panel just as an item is about to animate

Hopefully this fixes the CM model issue; after a *lot* of testing I've been unable to reproduce it after closing this loophole.

  • pressing the [x] on the "delay box" when advancing to a time no longer will break out of long or stuck iterations/while loops.

This was unworkable and caused repeated "loop interrupted" messages to appear as the delay box continually signalled a close but was unable to be closed by the system (because it was stuck in a loop).
Pressing <ESC> is now the only way to break out of these endless loops.


  • have integrated the colour selector and the _colors label list. Colour names in the list will appear as tips over the colour squares and a colour is now selectable from a dropdown list.

This is in support of colour theming of models by using standard palette positions for standard interface objects, Jay's recent model email is an example of this.
Note that the default Planiamte _colors label list only names the first 16 colours in the palette. The default list may be changed if we get some standard allocations in place, this will only affect new models.


  • subroutines can now call sibling routines
  • dispatcher mode: "message for each carried item"

In this mode a dispatcher will send a message for every item that entering item is carrying.
This enables processing of stats, inspection of carried items etc. to be performed without the overhead of dropping off all the carried items then picking them all up again (using Trays).

  • note that if the dispatcher contains more than one item, performance will be reduced according to the number of carried items by the items in the dispatcher.
  • new option for broadcast dispatchers: "Wait for items to exit"

With this option on, the item sending the broadcast waits in the dispatcher until all broadcast items enter an exit.
Normally, the item waits at the dispatcher only until the initial thread from each broadcast entry completes (items reach a point of capacity).
This option is useful when you want to guarantee that all broadcasts have been completely processed before the item leaves the dispatcher, even if the processing of the broadcast takes non zero time or involves activities beyond a single thread (eg: pauseable zero delays, other broadcasts).

  • paint "other Options" menu has new option to delete all paint objects on the current panel which have been inherited from anywhere. This is also applied to all objects inherited from these objects.
  • A new routine operation (display) "Choose Colour From Palette" enables the user to customise a single colour in the colour palette.

The modeller provides the colour # to customise, this must be between 16 and the colour palette size (64)
The operation returns 1 if a colour is chosen, 0 if the user cancelled or -1 if the modeller provided an invalid colour index.


  • New feature: stoppable spatial links

All spatial links have a control attribute (like a pipe)
By default it is 1, meaning "go". If this attribute is set to 0, the link will be "stopped" with all items on the link being frozen and the end points of the link blocking any item attempting to enter them.
Whilst links still do not have "capacity" per se, this gives the modeller much more control over the use of spatial links to move items.
Its very important that the control attribute is something Planimate can "unblock" from, so portal attributes and fixed cell references are OK but item or dynamic table references are out. PL looks for the control attribute starting in the "from" portal of the spatial link.
Advanced user note:

  • If you click on an item on a stopped spatial link, the "TIME" field will show the start model date + the time the item has spent MOVING on the link.

If the link is restarted and you click on an item, the "TIME" field will show the resume time - the time the item has spent moving on the link (ie: as if the link never stopped).
This is to keep the animation calculations consistent.

  • fixed nasty FEC bug which would cause events not to be deleted from the delay FEC when doing a "flush" of pending events (Eg: clearing out a spatial link)
  • IF an item *with* a spatial link target set is about to go up to a portal with spatial links connected where no links accept the item, and that portal ALSO has flows connected to it, PL will no longer attempt to take any of the outgoing flows of that portal, or complain if there is no flows. The item will block instead. This is to support stoppable spatial links.


  • new percentage format display mode which will only show fractions if required by the number
  • fixed editing of cache settings, was originally limited to 3 digits
  • train graphs have option not to hide overlapping labels
  • train graph lines drawn with 0 thickness are now not drawn but their labels will still be shown
  • change object icon updates properly after routine editor closed
  • values formatted for fixed x,xxx.x and x,xxx.xx retain this format if the attribute editor dialog has a value with a comma in it during editing.
  • table selector has proper z-order when displayed within the attref browser within a field within the dialog editor
  • display option enables user mode users to pause in the middle of a broadcast. Some models need this to enable pausing during long zero time code.

Note that PL will not break any zero time pausing rules with this option (pauseable 0 delays are still needed for the pause to actually occur).


  • fixed editing of searches broken in g


  • Significant rewrites requiring verification of routine integrity *

Rework of internal code with

  • routines, searching, conditions, muilticonditions, dll calling, dialogs and distribution pattern dialog, lookahead code so watch for any problems with these
  • Routines can have subroutines defined within them. These subroutines share the same attributes as the main routine.

(call subrouting is under "special")
Subroutines have their own editor window (at the moment) which remembers its position separate to the main window.

  • friendlier message for unlinked buttons when in user mode with no option to select a target now
  • the lookahead undo mechanism has been rewritten to allocate memory in bigger chunks less often and to basically operate faster. Routines in lookahead will be improved
  • no longer crop paint objects upon loading to avoid them being repositioned if slightly off screen
  • system attribute enables reinitialisation of random seed without having to restart the engine
  • attempt to fix bug with lingering advance to time box. Added a new error message which warns that an attempt to pause has occured during a background thread process (eg:panel open BC) which is a Very Bad Thing.
  • Fixed a crash which occured when a hover BC caused the popup it was in to be closed.

Hover BCs were not intended for UI control and you may end up with stuck windows or laggy response on some systems due to the overheads with processing on every mouse co-ordinate change.

  • issues with message dispatchers and graphical loops identified and a demo model has been produced to demonstrated which I'll release soon


  • added check for null printer handle to avoid printing to invalid handle
  • fixed inserting rows into empty table in edit mode - was trying to send a BC in edit mode -> crash
  • percentage value format - displays values like 0.274 as "27.40%"
  • log driven graphs have new scale options to always include 0 in the x/y scales when autoscale is on
  • The colour of paths (when show paths is on and not in flow/interaction mode) can be set from the item class menu.

Selecting "None" uses the defaults.
If you override the colour for one class you may want to override it for all classes otherwise the automatic colour selection may repeat colours.


  • New support for building standalone EXEs which use a separate external InterDyne keyfile as their license. This enables the one standalone EXE to be distributed with various different runtime licenses.

It is important to specify wither an "External" or "Internal" keyfile is being used as InterDyne licenses (external file) differ from Runtime Licenses (internal).

  • The menu bar can be hidden in user mode, enabling a modeller to reclaim its space and provide their own control UI for an application.
  • fixed bug calculating gantt popup height when the block times are visible


  • Object schedules on dispatchers and portals have been removed
  • the unavail state for dispatchers and portals has been removed

Possibly a slight speed increase as these two objects are commonly used

  • redraw locking is reset upon PL stopping if a stop occurs whilst it is active


  • have rewritten the FEC to use separate lists for zero time and delay events. This should increase performance slightly as it enables the events to be managed a little more efficiently.

If you can prove its slower (vs.


) then I'd be very interested in a demo model of this.

  • FEC event reports now have longer field for object name
  • Fixed bug in model popup panel management - was not properly testing if a popup was already opening causing corruption if it was popped up several times and preventing the popup from closing
  • Popups opened by the model are now clsoed when the engine is restarted.
  • Adjusted the exact point where a panel closed broadcast is sent. Previous versions sent it at a time where no panel had proper focus, causing very funky things to happen. It is now sent after the new panel has been given focus but before the "panel open" broadcast is sent for the new panel.
  • Have added a check to the pauseable zero delay multiservers to flag an error if a pauseable zero delay is attempted in a background thread (eg: a timer tick or a panel open/closed broadcast). Pauseable activity is not allowd in these threads for obvious reasons.
  • closing log viewer no longer possible while its redrawing

Also have fixed the redraw interrupt keypress to reset properly the next time the log display is redrawn.
Also fixed the selection box display


  • Table editing enhancement

= if using tables which send after edit broadcasts, read carefully as = the options available to the user have changed
The edit broadcast capability on a table view has been enhanced to handle notifying the modeller that a range of cells has been modified by the user.
This affects table views with the "Cell Click Broadcast" set and the "Send Broadcast After Edit" option on.
Previous versions of Planiamte would disable the cut, clear and scale cell editing functions because there was no way of notifying the modeller about these events. This is no longer the case. Planimate can notify of an edited range.
The modeller can disable block edits from being made using a new option on the table view "Disable Block Edits".
Since existing models wont have "handlers" for block edits, this option is turned on when older models sending edit broadcasts are loaded. HOWEVER be aware that this option is stricter than Planimate used to be and PASTING is now considered a block operation and hence not allowed if this option is on.
If this option is off, then the modeller must anticipate edits affecting more than one cell sending a broadcast as follows:
The cell click broadcast sends _row and _col tuple values to indicate the edited cell. In addition, it will now also send _to_row and _to_col values indicating the end of a modified range (inclusive).
If a single cell is edited, then _to_row and _to_col equal _row and _col respectively. Hence existing code can be upgraded to handle a range by wrapping it in "for" loops for the row and columns.
Further notes:

  • The other tuple values set by this broadcast, _previous and _current, will be set to 0 if more than a single cell is specified in the range (ie: _row != _to_row or _col != _to_col).

In other words it is not possible for the modeller to know the previous values if a range of cells was modified.

  • the fill and index menu selections send an individual broadcast for each cell modified so the previous and current values are available
  • A cut or insert menu selection will send a BC with the range from the top left cell to the new bottom right cell in the table.
  • any row operation from the row menu (if enabled) will send a BC with the range from the top left cell to the bottom right cell in the table, regardless of the row menu item chosen.
  • new table view option to disable block edits, that is any editing operation that could modify a range of cells without the modeller being notified of the exact cell and its previous value.

This does not include fill and index because they send a separate broadcast for every cell modified.

  • new platform attributes in the Display -> System Parameters menu.

FEC Event Cache
This sets how many FEC events Planimate keeps on hand. For best model performance it should be > than the maximum number of concurrent pending FEC events.
Item Cache
This sets how many items PL keeps cached ready for use. For best model performance it should be >= the maximum number of concurrent items that ever exist in the model.

  • Extensive rework of how objects test if they are visible. This will improve the speed at which Planimate Advances To Time by reducing the number of checks
  • Rework of
  • Multiserver
  • Queue
  • Dispatcher
  • Intray/OutTray to squeeze more speed out of them (inline functions, better list management)
  • FEC tweak to try optimise the way items are placed in the FEC. Extensive testing with a large model shows there is need for much more improvement here.
  • Fixed what was a possible future bug with FEC which could have caused the message dispatcher fix in


not to always apply.

Unfortunately this will slow down the FEC slightly :(

  • Menu item to show the running debug log file


  • Gantt views have an option to suppress showing the times in the popup which appears when the gantt blocks are clicked 4.32
  • New time format mode: Day (1..); Time HHMM

This displays a value as a day number and hours/minutes
If day 1 is sunday then:
1d 0000 midnight sunday, value = 0 7d 2359 23:59 saturday, value = 6*86400 + 23*3600 * 59*60
A user can specify 2400 as a time eg: 1d 2400 interprets to 2d 0000

  • fixed line drawing changes in


to ensure that single pixel lines still are drawn. This should fix dial-chart drawing
  • new standalone EXE functionality

Planimate standalone EXEs are now produced with the use of a new DLL plugin to Planimate. Please contact InterDynamics for access to this DLL.
3 kinds of standalone EXEs can be created depending on the developer keyfile:

  • 10 day time limited
  • EXEs requiring an individual "standalone" runtime license which InterDynamics provides
  • EXEs not requiring an individual license (open)

All developers can produce 10 day time limited standalone EXEs.
Developers can apply to InterDynamics for licensing and key files to produce individually licensed and/or open licensed standalone EXEs.
Developers who currently have a newer key file enabling production of standalone EXEs have the ability to produce individually licensed standalone EXEs. These EXEs require a runtime license from InterDynamics.
To produce standalone EXEs not requiring a runtime license, please contact InterDynamics to arrange open licensing and a new developer key file will be provided.

  • message dispatcher event order clarification & fix:

If a message item triggered any broadcasts AND the message item did not enter and leave in the same thread (ie: any capacity in the message item thread) then when the message item went into its exit, it was possible that the broadcasts would be processed before the original item tried to leave the dispatcher.
For this case, I've put priority on moving the original item out of the dispatcher before any broadcast events are processed.

  • no longer support "Interdyne" exe compilation builds. The new standalone EXE functionality superseeds it.
  • new developer INIfile items under [display]

StartX, StartY
Initial position for window in screen co-ordinates. If (-2,-2) is specified, the window is centred (the usual default). If (-1,-1) is specified, Windows sets the default according to its window manager rules. Otherwise the screen co-ordinate (top left) is used.
StartW, StartH
Initial width/height of the PL window
If 1, the PL window starts maximised. When restored, it reverts to the co-ordinates as set above.

idkbase note 209