ReleaseNotes:Planimate 4.33 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • recent list in file menu properly updated after a load


  • fixes a crash caused by appending a row to an empty table from the table view row menu

(The code was not properly testing if a broadcast should be sent )


  • The bugfix in n for the scroll BC was worse than the original bug so this release fixes the original problem in a different way


  • table scroll BCs no longer generate strange IFTableVoid errors
  • Fixed long standing redraw bug in icon selection (icon cache) if the icon being selected was the only instance of the icon in the model


New Track Options:

  • New track section type "Double (Other Road On Closure)"

Works like No Overtake except if a road is closed, then the train may used the other road if its available

  • Loop Option "No Following Trains" has been split up into "No Following Trains (Forward)" and "No Following Trains (Reverse)"

This enables a loop to act as a junction in one direction and a signal (allowing following trains) in the other.
WARNING: The models saved by this version require Planimate


if you are also testing the "Version 5" pre releases.


  • If a GANTT had the option for the vertical scroller on but id didn't actually need it (eg: # of rows in te view > # of labels) then a division by zero was getting into some co-ordinate calculations causing Very Bad Things to happen when the scroller was refreshed.

Different video hardware would probably respond differently to the bad co-ordinates passed.

  • increased model version # which should have been done in


due to the new operations added.


  • Pipe animmation works properly when items travel in the reverse direction on the pipe.

Use the pipe control attributes to reverse the activity animation as appropriate.

  • Format Into Label and Find Label Index now work for column and table targets
  • Allowable width for attribute views increased
  • File change object has a new menu option "Delete Resource".

Its intended to be used to "clear out" RTF notes.
This will remove the specified item from the runtime database (if set up) otherwise the model database is used (if available, not for a standalone EXE).
If the name does not include an extension, "RTF" is assumed.

  • new routine operation to set background colour of a panel (under display submenu)
  • bugfix: Due to support for "blocked" spatial links in


, a bug was introduced that caused PL to crash if NO spatial link leading to a target portal was found.
I've changed it to just "block" the item that cannot find a destination, as occurs with a stopped spatial link. It is conceivable that a modeller may later add a spatial link, enabling the "blocked" item to proceed.


  • Set Paint Text operation has been changed

A new parameter "For All States" (default is 1) enables the modeller to choose whether all states of a paint button are set to the new text. If this parameter is zero, then only the current state selected in the button will be update.d
For other paint objects this new parameter is ignored but should be left at the default.

  • A new paint routine operation "Copy Paint Properties" enables the properties of one paint object to be cloned into another paint object.

The 2 paint objects must be of the same kind or a runtime error will result


  • Paint copy: has new option to prevent an inherit link being made. This makes the copied paint object independent of the parent and allows an object to be copied onto the same or parent portal in an inherited hierarchy
  • New routine operation to delete paint object
  • New routine operations: "Inherit Paint Objects" and "Delete Inherited Paint"

These enable a panel to dynamically have paint objects inherited into it and those paint objects to also be deleted later. The objects do not get put into the paint label list and do not need to be because their ownership is determined by the parent panel from which they are inherited.
Since a panel can inherit from multiple sources, this gives good flexibility in creating backgrounds and interface buttons. It might also reduce the need for hiding paint objects using visibility control attributes.
If a panel already contains objects inherited from a given base panel, a runtime error is given if an attempt is made to re-inherit from that panel.

  • New routine operation "Change Panel In Popup" (Display) enables the panel displayed in a popup to be changed.

This is useful in creating "wizard" type progressions of dialogs.
The popup is NOT resized or repositioned, so the panels selected should be compatible in dimensions. Modal options are not adopted either, the initial panel's options are kept in effect.
The old and new panels do receive popup closed/opened broadcasts respectively.

  • The data targets in the file access menu of the change object can now be moved up and down relative to each other. the "Up" and "Dn" buttons act on the currently selected item in the list.
  • buttons have an "Auto Fit to text" option which fits the button to the text's width. This option is only implemented for paint buttons at the moment.
  • bugfix: Paint Copy onto the same panel as the parent with inheritance is now trapped as a model error since the paint system will not support doing this.
  • bugfix: Routine Editor and Default Attribute Naming

Due to the different scope between the routine editor's "attribute names" dropdown and the "name replace" when a name is changed, a situation could be created where a name in an item reference could trigger a global rename of that name when a newly added attribute had its default name changed.
To avoid this (and the annoying "rename existing" dialogs when a new attribute was created within a routine) the "New Attribute" dialog is no longer preloaded with the name in the attribute reference field next to the "add" button.


  • Paint Copy: A model can now copy an existing paint object into a nominated panel and it will create an inheritance link between the original and the created paint object.
  • have removed obsolete objects from the object palette. Since standard and "meta panel" object palettes are now the same, they use the same layout.

They are still internally supported but not for much longer

  • bugfix: routine call - a long nme can now be entered in a routine call
  • bugfix: time scaling mode behaves much better when mouse clicks occur. I've rewritten the delay code that this uses so it should be more reliable


  • added an "Active broadcast" indicator item in the "pause" menu for developers. This will indicate any broadcast currently being processed.

This is very useful when resolving endless loops within a broadcast or management of pause/continue options within broadcasts.
if your intention is to continue a run beyond the immediate effects of a broadcast button, use the "continue run" option on the button rather than forcing a run continue within the routine code.

  • bugfix: loading bug with RTF notes causing font pointer to be corrupted
  • new Change object File mode: Test/Read Resource Size

This mode is similar to the Test File Size routine mode except it looks in databases as well.
In this mode, "Target File Attribute" names a file/resource. If the name doesn't include an extention, "RTF" is assumed.
The file operation sets the first "Data Target" (if any exist) and the "Error Result" to the file size (in bytes) of the resource or -1 if the resource is not found.
This is useful to test if RTF notes exist.

  • changed the "Test File Size" routine operation to also set the "Error Result" attribute to the file size. Beforehand the "Error result" target attribute was not used.


  • the '*' in front of note links is now editable as part of the string
  • note text link boxes can be resized and the note description is centred like a button. If the box has any kind of border, it will not be auto-sized to fit changing note text fonts, so allow some space around the text to accomodate variations in fonts on different systems. If the box has no border, it gets autosized to match the font.

Note link font can be changed.

  • very basic support for rotated text in paint objects. Bounding boxes do not properly update to the rotated text but without a border/background it looks ok.
  • inherited paint objects and paint index:

If a paint object does not have an index ssigned in the paint label list but its parent does, then its parent's index is used when a button broadcast is sent and in the "Button Paint ID" system attribute.
This means any modification made based on that paint index will really be modifying the parent object (of which there could be many inherited objects)
This gives the modeller lots of flexibility in their use of paint objects, inheritance and the paint object label list.

  • new "Paint" routine operation to show/hide RTF note paint objects (as with other paint operations, it requires repaint to take effect)
  • fixed bugs with "_external files" label list handling.

The PL_MEDIA subdirectory is now scanned for resources other than media files


= This version of Planimate begins the retirement of the following objects:
Server Conveyor Facility Mark Record Assembler
This version will warn about any of these objects being present upon load.
You can use the "Find" function to locate the objects, use the "Advanced" button and select "Obsolete Objects". This will help track down the objects.
Generally Servers and conveyors used for simple delays can be replaced by single capacity multiservers.
Assemblers and Facilities can be implementing using attributes and simple logic in a subsystem.
Contact InterDynamics for assistance in converting your models.
The intention is that subsystem based "modules" will replace the functionality of these objects, with the advantage that the specific logic of the objects can be customised way beyond the hard coded capabilities of these objects that are being retired.

  • new table option "Reset Cells to Default At Start"

This enables a variable length table to be cleared leaving the existing rows intact.

  • table views created on multimonitor systems should properly be brought back into view on systems with different display configurations even if they were created on a non-active display to the left of the default display.
  • key [F4] toggles between run (ctrl-G) if stopped or stop (ctrl-T) if paused
  • form fields have an option to not confirm newly added labels
  • now show the "hand" mouse cursor over tables with send broadcast (no editing)
  • Table columns have an option "Edit Labels In-Place" to enable labels to be directly typed rather than using the dropdown. Typing an existing label sets the cell to the index of the label otherwise a new label is transparently added.

If the other new column option "Rename Instead Of Adding Labels" is on, then if the text typed is not an existing label, the original label index will be renamed to the text entered. If the text typed is an existing label, a message is given and no change is made.
HOWEVER, if the index in the cell was 0 (usually "-") then

  • if a new label is typed, it gets added
  • if an existing label is typed, the cell index gets assigned to it.

The label list "Only Modeller Can Add" option can be used to prevent new lebels being added in both cases above.
In summary:

  • use "Edit Labels In-Place" to enable the user to type existing or new label names, with the table cell indicies being updated automatically to point to the newly referenced labels
  • add the "Rename Instead of Adding Labels" option to enable the user to rename a number of existing indicies, without the table indicies being changed (as long as they are not 0).
  • The "Bring To Front" and "Send To Back" paint object menu commands are now applied to all paint objects which inherit from them as well. The bring one step forward/back commands are NOT applied to any child objects.
  • a minimised table editor does not retain its properties when closed. This prevents a minimised window which does not realise its minimised from being restored when the table editor is opened again.


  • Have added a new label list "_external files"

IF an imagea file name exists in this list (including extn) then PL will first look for that image in the current folder and then subdirectories BEFORE looking in the database as would occur normally.
if the file is not found in the working directory or the PL_MEDIA folder then the databases are searched for the file and it gets extracted into the PL_MEDIA folder (if found).
This enables a standalone EXE to carry some default images within itself but then extract them so the user can override/customise them.

  • paint buttons now send some tuple attributes:

_panel : Panel of the button (from panel label list) _paintid : Index of the paint object (from paint label list)

  • A new system attribute "Button Paint ID" is set while a paint object checks its visibiltiy/state attribute reference. If the object is in the paint label list, it can be used to assist in looking up visibikity for that paint object.
  • paint box inheritance has been enhanced to try preserve width/height and/or position when only one of these is changed. This will make box width/height track changes in width/height even if the position differ, and box positions track changes in position even if width/height differ.
  • routines can have longer names


  • New routine operation enables position of paint object to be set using the paint object label list.

The X and Y values specify the lower left co-ordinate of the box which bounds the paint object.

  • TRACK LOOKAHEAD change have implemented a new system parameter (Display-System Parameters) which can be used to limit the # of steps that TRACK lookahead will actually look into Portals (this doesn't affect loops since the track system knows how to look inside those).

If this value is set too low, models with many portals and few loops will lock up due to missed lookahead checks

  • TRACK Debugging There is a new "Unblock" item in the section runtime click menu which will report in detail which objects are blocking any item trapped in that section. Due to lookahead this can be quite a distance from the actual section.
  • fixed a small memory leak in routines that generated random numbers
  • fixed a nasty bug with immediate messages sent during lookahead.

If the immediate message (msg. from routine) was followed by a blocking switch, the switch would give a system error due to its TestEnter not ever being invoked (no switch decision being made). This was caused by the immediate message not resetting a flag used to signal that lookaheads have completed.
For this bug to appear, the immediate message had to be sent from within a portal so the "missing" lookahead could result in the item leaving the portal anyway.
(immediate messages can involve items MOVING during the lookahead of another item, causing strange sideeffects in the engine if they are not handled precisely)


      • Due to the model database rework, it is VERY important to backup your models and ALL DB files before using this version.

Edit notes with care to make sure they get saved as expected. There are many cases of databases being renamed/moved etc. while editing that I've tried to cover; if something strange happens and a note doesn't save, try remember the editing/saving trail you performed to assist in debugging.

  • removed text only note fields (old style multiline text boxes)

Any existing ones are now converted to "RTF" notes upon load of an older model. You may see them being converted at the top left of the model window - this will only happen when an model is loaded and updated.

  • have added a new database that Planimate will search in for model resources, the "Runtime Database". This is set in the Edit menu and enables resources (eg: notes, BMPs) to be bundled with a standalone EXE but NOT included in the EXE itself.

This gives the ability for end users to customise these resources even though the rest of the system is locked up inside the EXE.
The modeller will have to make sure the "runtime" DB is distributed along with the standalone EXE.
During editing the runtime database must reside in the same directory as the model. For a standalone EXE, the runtime database must be in the same directory as the EXE.
Its not recommended naming a runtime database with a leading "_" as that makes it a database that Planimate automatically searches anyway.
Planimate will use the runtime database (if set) to put newly created notes in.
Contents in the runtime database are not included in a standalone EXE, the database MUST be shipped together with the EXE. Otherwise the end user will experience many errors.

  • have added a new label list _Paint Objects. Paint objects can be added to this list from their edit menu. This will enable them to be commanded by a routine, opening up lots of interesting capabilities.
  • new routine operation: Set Paint Text (label string submenu)

This enables a paint object (selected using a painb object label) to have its "text" set to the formatted value (eg: label) of the second parameter in the routine.
"text" is interpreted as follows:
Text : text of the the object Button : text of the currently selected button state Image : image name that the image will display RTFNote : note name that the rtf note displays
This text is retained after the model stops/restarts so the modeller takes responsibility for initialising it.
There is no redrawing when detail is changed; the modeller can issue a repaint when all changes are done.

  • have rewritten note loading to enable notes to be in any database that is accessible to the model (same rules as icons)
  • rewrite: label list management code has been merged to enable better reuse of common stuff. This should not affect PL much but look out for any problems. The lists involved are: Object Labels, Panel Labels and the new Paint Labels.
  • when selecting a note from a database, pressing <shift> before the note selector appears will enable another database to be selected.

This enables notes to be brought nto the model from a number of databases.
If <shift> is not pressed then Planimate will default to:

  • the "runtime" database if assigned to the model otherwise
  • the model's associated "DB" database
  • the edit menu has been rearranged and I've added some details on the various items
  • bugfix: file browser with "dont change directory" option tests for directory change properly and now reports if a file in a different directory was actually selected by the user.
  • bugfix: database file import didn't check the limit counter properly. This would have caused extra garbage to be read into RTF notes but the RTF format would have usually cuased this to be ignored.


  • BUGFIX: Fixed save bugs in 4.33

(was not writing portal details to the file - models badly corrupted)
The version number was also wrong

  • SPEEDUP:Lookahead code
  • I've cleaned up the Lookahead code (TestEnter) to minimise the testing of visibility/debug flags which would slow down this time critical operation.

(now do the testing once up-front for each TestEnter search)

  • Moved special case code for multiple portal exit support out of TestEnter() so it only executes if required.
  • SPEEDUP:Portal entries

Searching was being performed on entry to every portal (flow/track/spatial) to support multiple portal entries. A cache means this searching is no longer required in the 99% of portals which do not use multiple portal entries. In the case where multiple portal entries ARE used, the system will perform as before.

  • new broadcasts "_popup opened" and "_popup closed" get sent to popup windows when they are opened/closed
  • the "Make Panel Visible" routine operation has been enhanced. If a value of "-1" is used, it goes back to the previously visible panel (like CTRL-B)
  • system broadcast processing has been reworked to use a table for some internal flags rather than many IF statements, to do with enabling some BCs to be sent without any listeners being present. This also simplifies a special case test for the timer tick BC.


  • ENGINE REWRITE - ==================

may affect run order, requires careful verification of item movement
I've rewritten unblocking in Planimate in order to speed up the item movement code which is critical to Planimate's performance.
The following functionality has been removed:

  • Portal interaction menu (selecting the way items entering are counted)
  • There is now no class specific counting of items for portals (the existing occupancy counters will remain)
  • No portal item limit/blocking of items
  • No hierarchic unblocking (since theres no longer any limit) of items behind a portal
  • the Portal "Full" state is obsolete.

This functionality was implemented before we had switches+attributes and was very simplistic - yet supporting it was very complex and slowed down ALL model code even if the functionality was never used.
Removing this code will clean things up. In the cases where you need to limit a portal's capacity, use a switch + portal attribute.
A warning will be given when a model is loaded where a portal had a capacity limit set. This is logged to the debugging file to assist in updating the model.

  • Popup option on panels enables them to remain open after the run terminates.

This is useful for "control" panels which restart the engine

  • If a portal is in "Act as Junction" mode then the junction rule is enforced even if the sections are double, however the rule is so strict that the sections end up acting as single sections.
  • Track unblocking now works for portals which are junctions but contain capacity (eg: a queue) causing the flow based unblocking to fail.

(originally capacity was not expected in a junction portal)

idkbase note 210