ReleaseNotes:Planimate 4.20 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Release notes, bug fixes and misc enhancements to Planimate 4.20


[new file format]

Added table cell properties
This is a new attref address mode enabling colour properties to be programmed and read for tables on a cell by cell basis.
These are set using colour values computed as follows:
property = background_colour_index * 256 + foreground_colour_index
(foreground is the text color)
(see CELLPROP.MDL for a simple example)

I've added an option in the table editor, in the [Table]->Advanced submenu to clear all cell properties for a table
Cell properties override any row/column colour settings. But you can keep a cell's default background/foreground by using 255 for the colour index.
Current limitations:

  • as for row colours, cell colours do not update the window unless an explicit repaint of the table is forced
  • no edit time way of setting cell specific colours, its been implemented for a run time requirement



  • dynamic spatial link deletion bug fix

Fixed bug in the handling of dynamic spatial links during runtime.
The bug: If Portal A is the origin of a link to Portal B and the link is deleted FROM B as a "B <-> A" specific delete (not an "All from B" delete), A's link instance table is left with a dangly pointer.

  • new "Debug" option "Dynamic Spatial Links" logs the creation and destruction of dynamic spatial links
  • have made significant change to the way objects are deleted to ensure spatial links/tracks/pipes are removed from a subsystem before the portals, I was not strict enough on this before
  • have added a number of new system integrity checks (the "System Error" dialogs) to check model structural integrity.

If you *EVER* see a "system error:Code xx" dialog, let me know. They should never appear.

  • Linked list Add(2) message now reworded and it only appears once
  • fixed memory leak in ODBC parser


  • added new Video paint object which will place a mediaplayer into a model window. This has options to auto-play (when shown) and to show and hide the scroller and menu buttons.

NOTE: there is a bug which causes events to occasionally be lost (i think its a re-entrancy issue) which will make Planimate stop responding to the mouse in the main window. If this happens, go to a different portal, click and return. The keyboard and menu still work.

  • added ctrl-shift-i to show the item menu if an item class is selected
  • selecting the "Bounding Box" line in a paint object now initiates a resize command, this may be easier to get to than the object corners for small objects. The new mouse arrow cursors come in useful here.


  • rewrote a lot of code to handle object co-ords as floating point, particularly the positioning of objects. This is to support spatial links and handle the link distances consistently, even when the objects are very close together on the screen.

Positioning the objects with the mouse does not set to floating point resolution, only positioning them directly in the model code.

  • fixed table stat titles - should stay hidden now
  • paint object attref scanning


  • the new exit model save on exit mode never asks to confirm save, even if the modeller edited the model. The autosave will occur silently.
  • now set the "model modified" bit when viewports edited
  • rearranged the Table -> "Table" menu and added a "Paste over" entire table
  • Added more file operations to the change object -> file menu
  • delete file
  • rename file
  • copy file
  • Default button [OK] handling added for condition and multi-condition editor
  • Switch now goes into its editor when a mode is selected
  • slight improvement to file menu in change object (shows more details of configuration, remains "sticky" to enable a number of edits to be performed)
  • now support appending to table in change object file read
  • can hide title of table objects (I still allow a few pixels to click along the top to get the edit menu)


  • fixes the version string (was not updated in s)
  • fixes bug in gantt if more display rows than label rows


  • column titles for tables no longer run into the second title row
  • auto edit down/edit across in table edit no longer locks up at the last cell
  • have reworked label and attref management so labels are referenced inside attrefs can be tracked down.

Click on the line in the label references dialog which indicates the # of attrefs referencing it and it will open a list showing where they are.

  • fixed some stop/restart run handling, particularly where a run restart was attempted from a "no init" button broadcast. The run wouldn't restart until next time it was run/restarted.
  • billboards properly re-initialise attribute values when they are regenerated during a run (nb: on screen display is still not updated if the table is visible during the refresh)
  • Added new routine operation to force a repaint/update of the screen
  • Button-type paint objects can now be associated with an attribute to control their visibility. If the control attribute is 0, the object will be hidden during the run. If it is 1, the object is visible. Do not use other values, I may decide use other masked values for other functions!

NB: In stopped/edit mode, all buttons are visible In stopped/interdyne mode, buttons associated with attribute are hidden

  • gantt graphs can now have a dynamic # of rows, based on the number of elements in the label list labelling the rows. Row Offset still operates.

To use this, set the # Of Rows to 0. This isn't as useful now since i've also added gantt y scrollbars...

  • gantts no longer crash when a _color column is used (was placing colour value into wrong variable)
  • gantt y scrollbar option added

This is only useful for gantts associated with a label list and enables scrolling of the gantt over all members in the list, limiting the display to the row limit. The offset still applies, enabling members in the list to be skipped, I may change this later so i suggest leaving the offset 0.

  • new exit mode is like stop and quit except the model is also saved, useful for batch runs which modify tables in the models which you want to retain.
  • new options in the track menu enable loop in routines/out routines to be applied to all loops in the current screen
  • viewport option in background menu enables a window to another subsystem to be placed on a screen. The view can have its own zoom and scroll set, and a mouse-over message. Double clicking on the view opens that subsystem (if enabled).

I dont check for circular views yet, so dont try it...
Still has a bug when animation starts (missing redraw)... more to come on this.


[new file format]
  • when a table column tuple name is changed, references to the column in routines are now updated
  • have added an option to label subsets which enables duplicate items to be added to them

This makes them useful in labelling gantt graphs where labels need to be repeated for rows. The option is only useful where sub label lists are built on the fly.
This option should be used with the "Locally Index" option since this causes the sub label list to return unique indicies (from 1) for each member, even if the member is a repeated label.


  • New display option "User Can Bend Spatial Links"

enables user to see, move and add/delete bends to spatial links during the run

  • Have added 4 new value formats

Fixed format, with one and 2 decimal places, with and without commas

  • have added extra validation to value formatting code, if ever get a system error message, contact me immediately with details
  • If a table is being edited with the "Edit Down" or "Edit Across" mode, the auto-edit stops when a cell formatted with a label list with "Cyclic Selection" option "on" is encountered, instead of incrementing the cell behind the scenes.
  • Fill down/across editing no longer leaves trails of boxes
  • copy/pasting an exported portal now also exports the portal when it is pasted into the model
  • Added "Shift Paste" for model objects

Holding down shift while selecting "Paste" puts up a dialog enabliong multiple copies of the object to be pasted. The spacing and columns for the pasted array can be specified.


  • Have now implemented the "local index" option for label subsets

When this option is on, it causes labels in a subset to be indexed from 1 with no gaps even though their parent indicies may be arbitrary.
The order and hence index of the items in the sublist is determined by the order in which they are added to the sublist, whether by the list or by the model.

  • Parser for relative times now handles -ve time eg: -1:23, -10d
  • pause click handling for entry in item click mode now fixed
  • no longer crash if showing references for a message entry with a copy of a linked dispatcher in the copy paste buffer
  • Have added option to broadcast button which prevents the model being initialised if the run has to be started just to handle the broadcast

This prevents

  • attribute clearing
  • table clearing initialisation
  • the run from proceeding and causes the run to stop again once the broadcast has been processed

The release ZIP includes an updated SYSBROAD demo model

  • A new system attribute "Handling broadcast only" is set to non zero if the current run is being performed as result of a broadcast without initialisation.

This enables a model to catch when a broadcast button has been clicked *during* a run vs. when clicking it initiates the run.

  • Have fixed graph scale display to properly handle the default grid and scale intervals when in time of day modes.
  • The scale interval can now be overridden in the scale parameters menu

As with the other scale parameters, setting it to zero selects the auto default


fixed bug in 'n' which caused routine attribute initial values to be corrupted after a model run


<new file version>

Given the incredible number of changes I've made to the code, this version will need some serious testing.
=== === Note: Updating to this version of planimate may require some changes === to your models. The changes involve how attributes are initialised === and are intended to draw a clearer distinction between attributes === which are inputs to the model, counters and outputs. === === The system will guide you through the changes required. It will === be useful to have your previous version of Planimate available === so you can use it to browse your model during the conversion === process. ===

  • ===!!! ATTRIBUTE change [IMPORTANT] !!!===

I've made a change to the way attributes are handled. This is part of a consolidation to clean up the usage of attributes and optimise performance of the engine.
The "Retain Simulation Values" option is now the default behaviour for portal attributes and no longer is an option. That means all portal attributes persist between runs.
If the intention is to re-initialise an attribute, the "Clear" value option must now be used.
Upon loading an older model, I've implemented the following translation:
If the "Retain Simulation Values" option was "on", nothing changes.
If the "Retain Simulation Values" option was "off", and

  • the attribute is marked "constant during run", nothing changes
  • the "clear at start" option is enabled, nothing changes

BUT if neither clear at start nor constant during run were set, then Planimate now needs a way to return the attribute to its initial value each time the run is started.
Since I dont know if the modeller is doing a "Clear" of the attribute in a routine using the clear value, I cannot just set "Clear At Start" and use the last value of the attribute to set the clear value.
The loader hence has to ask the modeller to select an initialiser for the attribute, in order that the attribute can be set to the same initial value each time the run is started.
When required, the loader will present a dialog showing the attribute, its last value, its clear value and its comment. It will offer a number of options.
The options presented are:
1. "Previous Att Value" - use the value the attribute was at when the model was last saved to initialise the attribute every run. This turns on Clear At Start with this value.
2. "Previous Clear Value" - use the clear value to initialise the attribute. Turns on Clear At Start. This will usually be the best option for counters, accumulators and performance measures since the clear value will probably be zero, even though it was not used.
3. "Assume Its Constant" - assume the attribute is a user input or configuration information and wont be changing during the run. The "Constant During Run" option will be turned on.
This is the SAFEST option since the model will behave as it used to unless it needs to modify the attribute from its saved value, in which case it will complain (cant modify constant attribute).
If the model complains, the reason the attribute is modified can then be investigated and the question asked:
IS the attribute

  • an input or constant to the model (which should hence be constant)
  • a counter (which then can be initialised by using the clear value) OR
  • an output (whose value at the start of the model doesn't matter and both the constant and clear options can be left off.

  • Added a mechanism to access OBJECT ATTRIBUTES

There are 4 standard object attributes, Count In, Count Out, Occupancy and State. Most are supported by most of the objects.
Each object attribute for an object can be associated to a target using an attref. I stronly suggest only using Portal attributes, not table cells!
When the object's attribute changes (eg: its state or occupancy is changed by something) the attribute will reflect the change. I handle unblocking from this change.
To avoid confusion and unexpected results, I validate against multiple objects (or multiple attributes of the same object) logding information into the SAME Portal attribute. I dont validate this with tables, if you go straight to a table cell, you are on your own.
Its much better to go to a portal attribute and then publish the portal to a billboard, if you really MUST get the data into a table.

  • changed attribute reference editor (Attref) to select "OK" as the default button after some of the buttons (such as "browse") are used
  • reworked palette display to stop them doing unexpected things to window ordering when redrawn, including dismissing some popups before a selection could be made
  • removed extra redraw of conveyor and multiserver (road) items during screen redraw.

Apart from slightly slowing down the redraw, this would cause a re-entrancy problem in the animation manager which would cause an unexpected popup if double clicking into a portal containing a busy conveyor and cause an internal integrity check to quietly log an error to the planimat.dbg file.

  • have cut back use of the "disable stat" option, it now only applies to object stats. This saves significant memory for each portal attribute
  • have fixed reference scanning so attributes used to index a table lookup etc. are not marked as "modified" even though the destination may be modified. This tended to confuse reference browsing.


  • added second title row option for tables

with this option enabled, a second row of column titles is displayed
This enables units etc. to be shown under a column title This field is always centred


  • reading the calendar time is now valid in relative time mode,

you get the # of seconds since 1 jan 68


  • fixed dialog result code handling (broken when i added the /BATCH command line option


  • I now force an application redraw when saving an image, which enables the image to be saved even if the planimate window as hidden (and hence ignores normal windows redraws)


  • changed redraw code when run starts
  • a screen clear which shouldn't be needed has been removed, this should reduce flicker when model starts which was very noticeable when the model responded to button broadcasts
  • The model is now first drawn immediately after preinit end completes

This means that animation on the _run start broadcast will no longer leave black trails and not redraw properly.
Animation on _preinit start _preinit end _model loaded
will leave strange trails since the model is not ready to display yet and these events are intended for advanced internal initialisation only and the user should not be exposed to them in normal circumstances

  • fixed a serious memory leak in the grid view


  • implemented "save to image" change object file operation which saves the current window to a BMP file
  • now handle '-' in Time Of Day time format (HHMM)
  • removed the "/TIMEOUT" command line option it wasn't properly supported in windows
  • added the "/BATCH" command line option

This suspends showing the about box or any dialog boxes which would be encountered when running a model.
In particular:

  • message boxes are OKed and logged to PLANIMAT.DBG
  • confirm boxes (ok/cancel) are cancelled (the negative) and logged to PLANIMAT.DBG
  • "yes-no-cancel" boxes like the save dialog are "No-ed" and logged to PLANIMAT.DBG
  • Model error dialogs are not shown but the _PLERROR.TXT file is still written
  • Model generated dialog boxes are not shown and the result 0 is returned to the model


  • fixed loader to handle loading from database for InterDynes the previous way i was reading the model info was breaking it


  • Added "BREAK LOOP" routine operation Look out for problems with routine code
  • Added new command line option

/INIFILE=FILE.INI causes FILE.INI to be always processed as the default INI file, overriding any specified in any loaded models.


  • Columns of tables were being rounded when data exported or edited. This means any data processed through B will need review.

The problem occured because of a change made to the formatting code (added display rounding at a lower level) and the export/edit routines were not deselecting it.

  • CTRL-B now works in interdyne-stopped mode as well


[new file version]
  • Have added "ELSE" routine operation

IF handling was heavily modified, so keep a look out for anything unexpected in IF handling, in the editor and at model run time.


[new file version]

Interdyne mode keyed EXEs could randomly crash on startup because I wasn't initialising the window title string at the right time during system startup

  • VALUE FORMATTING and rounding code rewritten
  • Values (table column display) are now rounded after being scaled when a "minutes only"..."days only" type time format is used.

They are also rounded for the value and money formats.
BUT the rounding is NOT performed for the mixed time and calendar modes

  • routine errors in initialising now report the routine line number properly
  • paint mode ctrl click enables more object mode editing on objects
  • new "Null" system attribute enables dialog results etc. to be thrown away without having to create a dummy attribute
  • have added extra debug info when database read errors occur
  • ctrl-shift O toggles object palette ctrl-shift F toggles class palette
  • new attribute reference mode:

Matched row index
Like a matched cell or row, but returns the row # of the match rather than looking up a cell or returning a complete row.
If the match fails, it returns 0

        • change made to track object detail item attribute ***

for a section, returns: 0 = single road section 1 = first road of a multi road section 2 = second road of a multi road section

  • ctrl-b (back to last page) supported in InterDyne mode

idkbase note 155