ReleaseNotes:Planimate 4.17 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Release notes, bug fixes and misc enhancements to Planimate 4.17


  • Now support user colours in table row colour indexing
  • Multiple window handling [experimental]
  • "Open In Window" (Portal object menu -> other) now does not crash when exitting and it animates items better than before (still some non-permanent redraw problems if you wiggle things while its animating)
  • You can open *ANY* panel or subsystem in a separate window by holding the unlikely combination of CTRL-SHIFT-ALT while doing whatever you would do to open the subsystem/panel

(click on button, double click on portal etc)
Note - currently sub windows do not handle ANY mouse clicks, so you cannot burrow leaving a trail of windows, do it by working your way out instead.

  • Now validate the source/target for a blockmove is actually within the source/target table [check]
  • A user cancelling the new add label dialog now properly returns -1 rather than crashing


[new file format] 30/5/99

New table operations

  • rebuild billboard table

brings billboard up to date after the controlling label list has been modified

  • set column target

target must be a column ref, the columns' title is set to the formatted string of the attribute


[new file format] 25/5/99

LABEL LIST routine operations added

  • Add Label - lets user add an arbitrary string to a label list. An index is automatically assigned to the new label

The target must be a settable attribute formatted for the label list you wish to add the label to. It will be set to the label index which was assigned to the label, or -1 if the operation was cancelled or a label name which already exists was entered.

  • Re-Index label list operation added

This enables a label list to be re-indexed (in alpha order) under model control
=== I DO NOT UPDATE ANY ATTRIBUTES OR TABLES WITH THE NEW LABEL INDEX === VALUES so any existing values in such places formatted for this label list will be effectively scrambled.

bug fixes:

  • stat operations (portal copy etc.) were crashing if an item class attribute stat was on the screen - fixed
  • bug in database search code introduced in version P was causing database errors due to bad lookups if there were no system databases in the working directory - fixed


FIXED crash bug from R on some machines

  • A field in the scenario management structure was not being initialised, causing random crashes on model load/new operations


= scenario management
New scenario management system

  • 8 scenario slots have been allocated, Edit Scenarios enables you to name the slots and give default file specs

If the name is empty, the slot is unused.

  • Tables and Attributes have a scenario button / option to enable selection of which scenarios they will be saved into
  • When selecting save scenario, the user picks the scenario type to save
  • In addition, the edit scenario dialog enables a "save all data" option to appear in the scenario save dialog

(this replaces the display option "Include All In Scenario"

  • SCENARIO SAVE/LOAD can occur at any time:

Loading and Saving a scenario occurs whilst the model is "initialised" and ready to run.
If the model isn't running, it is started and stopped after the scenario operation completes.
So, for scenario data to be saved/loaded properly when the model is STOPPED (not paused), the targets must be:

  • variable length tables with "Clear At Start" off
  • fixed legth tables with the "Retain Values After Run" on and "Clear At Start" off
  • attributes with "Retain Simulation Values" on and "Clear At Start" off

Otherwise the values will be cleared/forgotten as the model is started/ stopped

  • redraw of multiservers when paused fixed
  • out shelf now handles unblocking when its capacity limit attribute is changed


! column insert/delete/append operations now added for tables

  • column insert can copy an existing column, or use 0 to not copy any existing column
  • I dont suggest using column labels with any table which will have dynamic column changes
  • redraw of loops during run fixed
  • added new panel option to show loop names during the run
  • added option on table import dialog to enable resize # of columns

turn off to prevent the system offering to resize the columns in a table when importing data

  • reading the route step count of an item without a route no longer causes a error, it returns 0
  • new routine operation to insert a single step and delete all steps from an item route

The route location index needs to be an object index


  • changed the new "copy to clipboard" command

It now has a parameter, to control writing options
The value can be:
0 - use defaults (row & column labels, formatted values)
or a sum of the following codes:
1 - write row labels 2 - write column labels 4 - format the values
For example, a code of 6 writes formatted values with column labels only


models will use the default of "1" which you probably dont want.

note: For the "paste from clipboard" option, the dialog will have the options set as were applied when the "Paste from clipboard" operation was performed in the table editor. The defaults are
row labels, column labels & formatted values

  • no longer start without key file (undone change in



  • INTERDYNE VERSION EXE - shipped as INTERDYN.EXE on demand
  • Starts expecting to find a model called INTERDYNE
  • This model must be encoded using the PLENCODE utility
  • The model should be inside a DB file such as _DATA.DB

Differences for the INTERDYNE EXE

  • Only runs in interdyne mode, can never switch to edit mode
  • Does not show the planimate about box on startup
  • Can not load/save models except the (encoded) one it reads at startup
  • Does not put entries into the registry
  • Title of application is "Planimate (runtime)"
  • PLANIMAT.DBG does not get written
  • Most of the coding changes to this version were to support the "interdyne" builds, there should have been no problems introduced into the "planimate" build


  • New table calculations enable reading and writing the target table to the clipboard.

The system clipboard is updated as the item moves through the change object.

  • Importing into a variable length table (VLT) may change the number of columns; this is supported as long as you dont use column labels with such a table
  • model runtime importing into a fixed length table no longer can change the number of columns (which would have compromised integrity)

Note: as with all system clipboard operations, the system clipboard is only written to when you ALT-TAB away from planimate


  • Planimate now runs in interdyne mode if it doesn't find a key file (can load, not create, save or edit)
  • Upon startup in interdyne mode the file pick dialog appears; a model must be selected otherwise the system exits
  • "New Model" removed from menu in interdyne mode
  • tool tip text can now be associated with buttons (any click-action paint object)
  • When the mouse is over a paint object with a click action OR a tool tip, the cursor becomes a hand
  • As the model is running the mouse cursor changes to a arrow/wait cursor to indicate something is going on
  • Planimate logo panel does not display if the system starts in interdyne mode
  • Option in Edit->Schedules to purge all unused GLOBAL Schedules

USE THIS if you have been merging models together... if any used schedules then they may be multiplying like rabbits after each merge!

  • FIXED BUG in table driven entry

The table driven entry failed to work if at least 1 item attribute was not being tupled

  • message item icon transfer bug fixed - icon was being lost if the message item was carrying items
  • cloned items (used for messaging) are now reported in the debug log
  • bug fix - Selective drop option of intray would *lose* items which weren't meant to be dropped... oops!


  • have fixed name string handling to avoid crash caused by an attribute name which exceeds 16 characters (the new attribute dialog allows 20 character attribute names but the table column name code was not ready for this...

I will be increasing the standard name length slightly at some stage

  • New display option enables hiding of the run control buttons from the button bar
  • Have enhanced the way the ODBC DLL is loaded. Planimate no longer complains if ODBC is not installed... until you try and use it... and even then the error is non fatal.

SO... you no longer HAVE to have ODBC installed to run Planimate
If you are hacking it with the ODBC DLLs in the same directory as Planimate, I *STRONGLY* suggest that you remove them now to avoid future problems.
If ODBC is installed normally, you need take no action, this version should work fine.
I now keep the DLL loaded (after its first use), so ODBC operations should be faster.


  • scenario save/load no longer messes up the loading due to the table column headings
  • added new system attribute which lets model access the current mouse position

(check out the CHASEY model for a demo)


1/5/99 *** new file version
  • fixed setup bug in facility stoppage editor which would cause crash when editing stoppages using agents
  • fixed copy bug when messaging agents (introduced in




  • in trays have a control attref to determine whether an item gets dropped off


  • Agents have now been further merged with items
  • the item/agent option for an item class can now be changed on the fly for an item/agent. This means an item can act as an "agent" at an in tray in one instance and in another instance it can act as an item (and itself get picked up)

A new system->Item attribute "Act As Agent" determines how any agent-sensitive object (in tray, out tray, facility) will treat the item. The default setting of this attribute is that of the items class (set during edit of the class)
For proper operation, you must ensure that any change made to this system attribute is seen during lookahead - if set in a routine just before the object, the routine must execute during lookahead. Otherwise the item may be let in as an item when in fact you wanted it to enter as an agent.
ANYAGENT.MDL demonstrates how a single item class can act as both an item and an agent

  • new broadcast broadcast sent when a portal is clicked

_Portal Clicked
If the broadcast is not caught, the normal Attribute/Table browser appears

  • item attributes can now be updated from table tuple names (in table menu)
  • continuation system attribute (assign to 1) sets continue mode so a user event broadcast (eg:portal click) can continue the run.

Equivalent to the user button "continue" option
LINKS model demonstrates how portal clicks can be processed during a run and the creation of dynamic spatial links

  • dynamic spatial links added

Spatial links between portals can be added and removed on the fly
When adding, if a link already exists (in either direction) a new one is not added
When deleting, link(s) in either direction are removed. No error is given if no links were in place between the 2 portals.
DYNSPATIAL model demonstrates them (as well as the "proper" way to enumerate over a label list)

  • removing a spatial link with an item on it will cause a possible crash since the FEC event is not yet purged and the link for it is gone...
  • dont yet validate creating a spatial link between portals on different screens...


  • splitter edit - turning on partial attributes transfer option now turns on transfer attribute options, rather than it turning off again unexpectadly
  • Renaming a table with a long title no longer will propagate the long title into the table's tuple name (it will be cropped)
  • button blitting fixed when zoom is not 100% (button contents would shift up/down as it was moused over, depending on the zoom)
  • a subsystem can be made visible via a routine operation using the owning portal's export index
  • tuple operations to carried item implemented
  • Button bar now does not display unlinked buttons in interdyne mode

The "up" button no longer appears in interdyne mode

  • click handling on portals now handles background portals properly
  • portals can now be dragged in model pre-init (check for side effects with other objects being clicked in preinit mode)


Several new experimental enhancements

  • drag portal during pause option - enables user to reposition portals in paused mode
  • spatial links now update as portals are moved but modeller still has to force a cache refresh!
  • internal broadcast "_Portal Moved" is sent to the portal's subsystem after it is dragged
  • New 12 hour time format mode (supports import/export of 12:30 PM)
  • fixed z-ordering problem for objects vs. their stats
  • the objects were being drawn in reverse order to their views

I have made things consistent by now drawing objects in forward order so new objects (for a given object type) obscure older ones (as one would expect)

  • I have relaxed some of the clearing of fields when switching from cell to column/row modes. This will help retain settings when changing between attref modes but may cause unexpected stuff to appear in the fields (usually 0s) if you go Cell->Row->Column since the fields are not forcibly re-initialised to 1 upon entering the different table mode.

Let me know if it troubles you

  • Broadcast and dialog buttons automatically start/pause the run if clicked when the model is stopped. Experimental

      • IMPORTANT CHANGE for agents and carried item access
  • carried item indexing has been changed

0 = first (as before) 1..n = first to last (1 used to access the second item)
[needs testing]


  • implemented label list operations (SUBLABEL.MDL)


  • carry attribute selection shows all item attributes regardless of type

Track bug fix:

  • loops with steps at them were not properly advancing the route step pointer when looking ahead




incorrectly tagged models as 227, they should be v228 but wont cause a problem unless they loaded with a pre 



Validation changes


Route assignments which fail a match on a non zero index now stop the model with an error rather than continuing silently. Use index 0 to unassign a route.
Change objects with empty route assignment tables will have the route assignment table removed on load to prevent model run errors

  • Fixed bug loading dialog templates (they were being saved with the wrong version #
  • Have reordered the way broadcast events are posted to the FEC (from change objects sending broadcasts). They now are now put following events at the same time rather than in front of them. This will help make broadcasts occur in the order generated - but dont let your logic depend on it!!!

Remember the zero time FEC event ordering rules - dont assume any order for FEC events occuring at the same epoch of time

  • Have fixed item messaging so the messaged item icon is retained even if the messaged item is carrying other items.


[new file version - to support saving of custom colour palette]
  • cleaned up portal state editor, deletes states properly
  • alternate entries and exits get clipped to the screen on creation
  • added another 16 colours to the colour palette

these are initially all white - at the moment you must edit the model file directly to edit them
find the section as follows:
Colors 16 ffffff ffffff ffffff : (total of 16 RGB colour values) ffffff ffffff
You can edit the 16 values. The colour information is coded in hex as follows:
Let me know if any problems emerge with colour handling. Since there are now 16 less free palette slots, bitmaps which looked fine in 256 colour mode may now look less detailed. Switch to hi-color.

  • Change Object Calculations: added trig functions, moved square and sqrt to "trig" sub menu
  • added validation to all scalar evaluations - if a calculation yields a non-rational number (eg: sqrt(-1) ) an error will be flagged and the model stopped, rather than putting the value into a table where it would wreak havoc with the import filter etc.
  • exporting a section now uses the name generated by its connection points rather than its internal "track" name

SECTION BOOKINGS ----------------

  • a particular road of a section can be booked for an interval by a train. This booking is made using a booking id, a new system attribute of items.

New calculation operations support:

  • adding bookings to a section
  • reading back all bookings from a section
  • clearing a sections bookings

Sections are read and written using a VLT which must have the following columns:
"_book id" identifier of the item which the section is booked for. an integer >= 1. Only the item whose system attribute "booking id" matches will have access to the section during the booked interval
"_from" "_to" Specify the time range over which the section is booked

BOOKING.MDL demonstrates setting up a booking, reading back the bookings and them in action.
Sections which are currently in a booked state will report this in their pause click popup. A model can also read back the booking tables for any section using the read booking operation mentioned above.
There is no lookahead in the track logic for impending bookings, they come into effect immediately and prevent further access to the track. Where foreknowledge of a booking is required (to prevent starting a service) interrogate the sections booking list by reading it back OR talk to me about implementing a lookahead readback on a section.

idkbase note 158