ReleaseNotes:Planimate 4.21 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Release notes, bug fixes and misc enhancements to Planimate 4.21


  • spatial links properly update co-ords for moving portals even when their lines are hidden
  • new button action "Load Model" enables a model name to be specified which will be loaded when the button is clicked.
  • copy cell for individual cells
  • reordered formatting options for table column editor to match order in attribute editor
  • rewrote model exit/saveas code to support switching models


  • Colour palette now can be saved and loaded from disk
  • Copyright on opening banner page updated - new _!SYSTEM.DB
  • item details popup now wider
  • now sort broadcast labels at entries etc.


  • New option for portals enables them to respond to clicks in interdyne mode (sending the clicked broadcast) without having them respond to drags
  • create sort index now sets identical rows to the same index value

"identical" means the source cell values are the same, not the formatted strings.


  • A new table operation: "Create sort index from column"

This fills a table column with an index indicating the alphabetic order (ascending) of the FORMATTED text in the specified sort column.
By then sorting over this index column (using a regular sort), a table can be effectively sorted alphabetically regardless of label index.
Constructing the formatting strings may take a while for long tables so it may be useful to keep the index column around for rapid alphabetic sorting, only regenerating it when the strings change.

Combined with the "create label list from column" option, this gives the modeller a lot of power to do their own re-indexing without having to write to files.

  • NEW mode for dispatcher: SEND SCOPED BROADCAST

This mode enables a dispatcher to send a specific broadcast to a hierarchy of subsystems. The top is specified using a portal in the object list.
Unlike a change object broadcast, the broadcast is sent immediately, whilst the item waits in the dispatcher. The item only leaves the dispatcher once all listening entries have produced their broadcast items and they have flowed as far as they can before encountering capacity (which ends their epoch).
A modeller can now be assured that all listeners for a broadcast have received and had a chance to process it without having to put an explicit delay in the originating items path.
The broadcast is scoped to the subsystem under the object which is specified by the attref set up when editing the dispatcher.
If an index of 0 is used, the broadcast is sent globally. However if possible use a scope to make your model scalable.
Broadcast dispatchers have a solid dashed baseline.

  • EVENT processing change

The system will now only "pause" once all events at the current time have been completed. This means all side effects from an operation will be applied at the time the model is paused.
For debugging, this can be overridden via the debug options

  • ALL DEBUG OPTIONS are turned off when the system is switched to InterDyne mode. They stay off if switched back to editing mode.
  • Queue and dispatcher drawing has been enhanced. If the "Dont Show Overflow" option is Off, OR the maximum size equals the screen size, then the numerical "overflow" icon will never be required to show. Their size now reflects this, meaning less screen space is wasted by these objects.
  • fixed crash if an error occurs during model initialisation which attempts to show modeller a screen that had not been initialised yet and send that screen a _Panel Opened broadcast.

Panel Opened broadcasts are no longer sent after an error has occured

  • Dynamic spatial link operations now properly validate that the "from" and "to" portals are on the same screen, to prevent the model becoming corrupted by spatial links attempting to connect through screens
  • Now give a reason for not loading a scenario based on a different time reference from within a routine rather than trying and causing a platform crash
  • switches default to assume no blocking
  • routines default to execute only during move
  • stat hide names is off for attribute stats (so names are initially shown)
  • Have changed scenario handling to map the default scenario name (SCENARIO.SCN) through the INI file mapping system so it can be overridden in an INI file to a modeller specified default, including a folder
  • Busy cursor now displayed when running in interdyne mode
  • cyclic selection now an option for sub label lists
  • dialog fields associated with a name sorted label list are now also sorted
  • have installed some default palette colours in the user custom colours area. These can still be overridden as required.


  • Runtime system now pauses before the next event when running to "realtime", "animation starting" or stepping through events.
  • Have prevented ghost "delay" boxes from appearing when: #1 A _Model Ended broadcast sets off a "stop" exit again #2 An error occurs during processing of the _Model Ended broadcast when the model was otherwise running in time advance mode
  • Run realtime option now implemented for relative time mode models as well the time the model is started becomes time 0
  • delete label operation added

removes a label definition from a normal label list (no effect on sub or other label list types)

  • added optional "_style" column to traingraph display (holds linestyle value) and fixed handing of the optional "_color" column to properly map the colours.
  • Draggable portals now respond to click in interdyne-stopped mode by starting the model to pass the click to the model. Like buttons, portals have an option to prevent the model staying "running" once the portal click completes. However, this may really slow down interaction - if the run has to be started and stopped for each portal click. I dont recommend working this way
  • scenario load/save now available in interdyne stopped mode


  • system attribute to show/hide clock
  • fixes the use of dynamic tables in sort operations (was not realising the parameters for the sort dependend on a dynamic table)


  • table columns copied during runtime get empty tuple label names since there is little point copying the original columns label name


  • Added new option to fields in dialogs "User Can Add Labels"

If a field is a "label list" selection type field, AND the label list concerned is not "Only Modellers Can Add" then the dialog will accept strings typed in which do not match known labels and confirm with the user that they want to really add them.
I've tightened up validation if the string entered is not known AND the "User Can Add" option for the field is off. In this case, a message appears prompting the user that the label string must be set to something already recognised.


  • Added Bitwise X-OR operation
  • Rearranged order of value format modes
  • added column # to column menu and column format copy
  • Bug fix to dialogs - I was validating the row index for cell references in fields incorrectly
  • Change to undo handling in tables to properly undo formatting changes in cells


  • New "special" routine operation supports printing of multiple panels under model control. The modeller can specify which panel (panel label) or portal (object label) to print.

Many panels can be queued for printing using this routine operation. The actual rendering and printing is started once the routine ends.
Each panel can only be queued once within the one change object (to prevent flawed logic from blowing up the printer spooler...)


  • Have rewritten spatial link dynamic colour handling
  • colours once set persist across runs
  • saving the model saves the link colours
  • the link colour can by set during editing



I have rewritten the way cell-by-cell table formatting is represented and stored.
Now support editing of cell formatting including

  • text and background colour, font and units (which overrides the column units)

This is a first release after many changes to the table code, so take care to backup previous model versions.


  • Error handling on value entry tightened, dialogs and attribute stat edits dont take on a value if it causes a validation error
  • form error handling improved
  • if an error in an input field occurs, the dialog takes the cursor to the error field and stays open rather than accepting
  • Crash bug fix:

If a newly created table column was named with a long name (> 20 characters) the column tuple name would be set to a name > 20 characters. If item attributes were now updated from the table, an item attribute could end up having a name > 20 characters which would overflow the internal buffers allowed for an item name in the name processing code.
I have added a check to prevent a long title being made a column tuple name and stopped the crash which caused us to find this (column label update) but existing item/column tuple names may still have names > 20 characters - if you notice any, make them shorter.


  • increased formatting width for multilabels to 63 characters (the limit for normal labels)
  • enhanced label list export and import mode options
  • system attribute:visible panel ID # returns the panel index of the currently visible/frontmost panel
  • PANEL objects such as paint buttons can now reference tables and attributes on the portal hierachy which owns the panel, not just the "top" dynamic screen
  • Gantt y scroller now updated properly, should work reliably
  • Cell stats also dont show zeros when column configured as such
  • activity color for status bar now programmable/readable as a system attribute
  • Directional spatial links implemented
  • an option during edit of the spatial link
  • a new routine operation enables creation of a directional spatial link

the runtime link enables two spatial links to exist between a pair of objects if they are directional in opposite directions.

  • Unreliable "continue" after pause now fixed


  • label lists have a new option "Auto-Add Labels On Import" which will make them silently accept new labels without asking the user. This enables specific label lists to automatically accept labels while others ask the user for confirmation
  • label list import dialogs now show the list nam (in dialog / in title of dialog)
  • right justify option on table columns right justifies title text on primary and second title lines
  • dont show zero option on table column leaves zero entries blank in the display (including 0 labels)
  • have implemented option in change object to enable "dynamic file names" as for the scenario load/save. The file name option in the menu enables you to specify an attref whose formatted value is used as the file name.

This works in combination with INI file remappings and the user-browse option which are applied and display the looked-up name.
In this mode, the Edit->Files Referenced will always display the LAST file accessed by the change object.


  • if the table cell selection is moved (with keys) or dragged beyond the rectangle of its parent window, the window scrolls to show the selection. Note: this is the window scrolling, not the table.

I have also installed this scrolling into the "show object" code which flashes a box around an object to show it.

  • Table selections are not lost when the window is scrolled/redrawn.

Table view selections remain when changing and returning from another panel

  • Have reworked naming of object / panel label lists. Its no longer called "Exporting" to avoid confusion with data export/import.
  • Attref editor allows length attribute names (20 characters) to be typed as well as browsed
  • when a column tuple name is renamed, you get to confirm if references should be updated


  • model info includes more in table descriptions including column details
  • have changed the pause code to handle a pause exit while processing the _run start broadcast

I removed an update i think was not needed anymore. Look out for other pausing problems particularly with menus or dialogs.

  • fixed silly bug in the "date only" code which was causing dates entered into input fields to yield a silly error message dialog box


  • "migrate to owner" implemented for attributes as for tables
  • new "Date Only" time field suppresses display of time fields in dates
  • have added checks to prevent very long file read elements (>256 characters) from crashing system. This occured when a tab delimited file was accidently read using comma delimiting, creating long strings for each read element.


  • Enclosing double quotes are now stripped for non-label data as well as label data, enabling import of double quoted values, times etc.

The "Remove Enclosing 's" option must be OFF for the double quote filter to operate, otherwise the single quote filter takes precedence.
NB: In all cases, any embedded "s are converted to 's since planimate cannot handle a " in a label field.


  • Sound files are now registered as used in the Files Accessed list
  • A label list can be constructed from the formatted contents of a table column using the "Create Label List From Column" operation.

This opens up interesting possibilities with multi-label formatted strings since they can be converted into "normal" labels and used for display, selection etc.
I do not do any duplicate handling, so if "foo" appears twice in the source column, it will be allocated 2 separate label indicies.
Indicies are allocated from 1 unless there is already something in the target label list. I suggest starting with a cleared out list.

  • New Table routine operation: "Table Sort Dialog" displays the "Sort" dialog for the nominated table
  • Any multi-column dialog now supports clicking in column titles to sort them. This is useful with the Edit-"Files Accessed" list as it sorts and groups all files with the same name together.

As with column widths, none of the editors retain the sort order, but it may be useful to browsing.
The editors should work OK with resorted lists, look out for any unexpected behaviour.

  • Update to attribute reference tracking attributes referenced in dialogs now also report the change object if the dialog is in a routine and the attribute modified flag is properly set for read only fields


BUGFIX - the continue run system attribute now works again, was broken by a change in C


  • SCENARIO LOAD AND SAVE can now be initiated by the model

New "Special" routine operations enable a routine to save/load a specified scenario.
Scenario number must be from 1 to 8 and corresponds to a scenario in the Edit->Scenarios list.
The Filename should be set to a label list with an entry containing the name of the file. The extention must also be included in the name.
The name is mapped through the INI file mapping system so an INI file can override the file name if required.
If the filename is "-" (no quotes), the file name set up for the scenario is used instead. If a given scenario set is only being saved to one file, its better to use the default name, it can then be easily changed by using Edit->Scenarios.
When loading a scenario, the scenario number doesn't really make a difference (it still has to be valid) but is provided so that the default scenario filename for that scenario number can be used (by using a name of "-" in the routine) .

  • spatial link color can now be changed (new calculation mode)

changes color of any link between two objects. If the link does not exist, nothing happens.
A redraw is required after this if the link colour is not being set for a link added in the same routine/epoch. In these cases, an automatic redraw *is* scheduled.

  • Year of date calculation operation decodes the year of the given time.

If running relative time, first year is 1 If running calendar (most models these days) its a 4 digit year.

  • viewport properly applies scroll when changing the panel zoom level

note: If viewport scrollbars are visible, the viewport may change the scroll if viewed at a high zoom out level. If scrollbars are visible, any scroll set up by the user is retained.

  • have increased the minimum viewport size to avoid small viewports being created which can no longer be edited (they get completely consumed by scrollbars)
  • routine editor retains window scroll as rows edited [this should cut down the mumbling and swearing... :) ]
  • default width used by stat views and table columns updated updated for the newer time and calendar modes to show the time fields instead of cropping them.
  • dial and paint image display

if an image fails to load ONE error message is displayed and details are logged to the planimat.dbg file

  • I now prevent image redraw of viewports at inappropriate times (while model loading)
  • routine operation menu now has separate sub section for spatial link operations
  • have significantly increased ODBC command buffer space (now 16k)
  • tupling to/from an item carried by another should now actually work
  • write to file operations now have "quote all" option to quote all fields (including titles) useful for comma separated files
  • Columns and rows of tables written to file now support formatting and the quote all option as well
  • A new system broadcast _VIDEO STOPPED gets sent to the model when a video clip finishes playing
  • have reworked broadcast system slightly so button click broadcasts put the engine into "simulate" mode while their event is being processed. It should be OK but look out for any problem with button broadcasts.


  • reading a tuple doesn't mark the table as modified in the references


  • fixes crash bug caused when a table is edited, the active panel changed and a key typed (eg: ctrl-s)

The focus was being left on the now hidden table

  • fixes crash bug with bend points. Copying a bend point did not properly copy some new management structures leading to a crash when the copied object using the bend point (spatial link) was deleted.

saved models are OK
4.21 [new file format]

  • === IMPORTANT ===

The system will now complain whenever a model is loaded which does not have both "strict attrefs" and "strict lookaheads" display options turned on. The model will still run, but the warning will always appear when its loaded.
These options were introduced before the conference last year and must be kept ON to assure integrity of the latest lookahead capabilities of the simulation engine.
The options were provided to keep older models running. These models used a different set of rules which the current engine runs only with its safety checks disabled. The time has come to abandom compatibility with the old rules.
The October conference notes include material on dealing with lookahead.
Generally its a case of setting change objects to "only during move" and switches to "assume no blocking" - unless you need to block an item at a switch in which case you have to deal with lookahead issues.
Also see release notes for


If you have problems converting your model, please seek assistance from Rick or Tony.

  • ADDED: Panel label list

Similar to an object label list except dynamic and panel screens can be added to it. As for objects, they must be uniquely named and numbered.
You export a dynamic screen or panel using its properties menu. The <ADD> button in the panel label list editor adds the current panel.
I've updated the "make screen visible" to now work with a label from a panel label list as well as a model object label list. This means you can now make panels visible by model control.

  • Viewports in panels now implemented. A viewport in a panel can view a dynamic screen.
  • viewport option enables contents to be directly edited

when activated, the viewport gets a 2 pixel margin so its edit menu can still be accessed, since lcicks within the viewport are passed to the subsystem being viewed.
NOTE: many edit operations within a viewport may still fail (add panel, flow editing etc).
I have only provided direct click viewports to enable viewports with user draggable objects to be used in InterDynes. Dont expect too much from them.

  • viewport scroll can be set numerically to help tweak exact settings when the scrollbars are hidden.
  • scrollers no longer impose view limit if the redraw is due to printing. This should mean printouts of gantts etc work as expected.
  • new performance measures appear in the run profile

Evts/model minute gives a measure of how dense the events in a model are occuring. This will depend on model structure, update intervals settings, complexity of model dependencies such as unblocking etc.
Evts/real minute gives a measure of how quickly the model is running and will be CPU and system dependent as well as model dependent.
nb: real time is measured from when the model is started and includes any time spent paused

  • item attribute selection dialog has a new column which summarises the options. The letters used are as followed and are underlined in the editor (and can be used as shortcuts):

clea[R] at start (R for reset...) [C]onstant Include in [P]opups Include in info p[A]nels [I]nteger rounded Re[T]ain on paste/replace Range Chec[K]ed [S]cenario - Used in at least one scenario

  • have done some serious rework to label subsets and the base label list code.

Sub label lists now have an option to include the "-" entry which maps to 0. This can be included even if the parent label list does not have a '-' entry, for example object and panel labels.
Local indexing code has been cleaned up a bit to handle the 0/"-" index which is a special case.
Object, Panel and Sub Label Lists share common selector code now, let me know if something is amiss with the selection process.

  • Cell properties now shift with cells when tables are sorted (not with fixed length tables though - these are being phased out since VLTs do it all now)

The table block operations should now preserve cell properties.

  • A new column option enables reset of cell properties when a cell is edited or pasted over. Using this, cell properties can be used to indicate edited (or in this case unedited) data - once the cell is edited, it loses its specific property and becomes default in appearance.
  • Cell properties now support the "use default" background colour (255 * 256) + text color
  • added "play once" option to the video/AVI playback object (the new as-yet undocumented paint object...)

idkbase note 154