ReleaseNotes:Planimate 4.18 Release Notes
Release notes, bug fixes and misc enhancements to Planimate 4.18
- screen flicker when run starts has been reduced <please report any new problems with this>
- redraw during model load stages reduced to prevent database errors
- scrollbar size bug for table graph when scrollbar is not full width and table is cleared now fixed
- crash during model reload should be fixed (clock position was being updated at bad time during load)
- unblock algorithm change completed to properly flush the unblock history list if something move, to ensure that if something moves as result of an unblock, other unblocks will be properly performed.
- have changed unblock algorithm for portals.
It stores portals which were previously explored to avoid repetition.
Previously this history was managed hierarchically, which meant that the same branch would be re-explored completely if reached during unblock from different places (eg: multiple portal entries)
Now I only purge this unblock history list once the unblock completes. So a given portal will only be unblocked once in a given unblock call.
= much faster operation when tracks form circuits or multiple entries/exits are used.
[new file version]
- Dial chart scale background colour can be set. This enables the scrolling chart mode to be used over different colour backgrounds without the scale being drawn using the panel background colour.
- internal clean up of dial code, please report any new problems with dials
- ODBC error handling for Read() extended to catch more error conditions
[new file version]
- Table column titles can span multiple lines
- the # of lines can be set from the Table button
- The fonts used by tables for their contents and labels can be set on a table by table basis. The table will track the global setting if the local font is set to the same font/size as the global font (the default case)
- File access (change object)
- CANCEL on the user file dialog no longer elicits an error, the file oeration is simply not performed
- The user file dialog uses the extention of the file specified by the modeller as the default, so initially only files with the same extention will be shown. This can be overridden in the usual file dialog manners.
- Help buttons: The section name can also be a numeric context identifier. This can be used where ambiiguities are a problem or there is no index
- supports /DEBUGODBC command line option - enables ODBC debugging
- larger ODBC command buffer
- support longer ODBC commands (4096 chars now)
- dont try load models with these long strings in earlier EXEs
- reworked exit code to clean up sending of the "_system close" broadcast
<new file format>
- horizontal scroller reworked for gantt and train graphs:
- scroll settings can be accessed with the right button when paused by clicking in the scroll window
- scroll settings now set start and width rather than start and end times
- Initial width now acts as a width limit (you can stretch the scroller past this but it will revert to the limit when the data is changed by the model)
- formatting for -ve money now displays as ($xxx) Planimate will still import -$xxx formats but they will be displayed using the new format
- help menu has new menu item for model specific help
- For development version - this looks in the HELP folder for a .HLP file with the same name as the MDL file currently loaded
- For interdyne version - this looks in the HELP folder for a .HLP file with the same name as the EXE
- new button mode enables a help button to be assicated with a section in the model help file. The model help file is located as described above
- new command button - print
- the default options for exporting a table to the clipboard can now be configured (in the File menu in the table editor) and will be retained.
The defaults for all old models are formatted and column labels on, row labels off.
- implemented note option to hide notes in interdyne mode (for development notes)
- status bar flow/class edit operations are now properly disabled when a run is started
- fixed bug with the new cursor handling which caused the mouse cursor to disappear it was over a disabled button (eg: in the dialog editor)
- added a new display option "Do Not Defer Stat Updates"; when selected stat displays are updated with every change to an attribute. This will produce more flicker but is desirable when an item is animating along a flow which changes values in zero time
- removed the check for variable length tables when loading a cell stat It was unnecessarily purging the stats; they are OK on VLTs now.
[new file format]
- clock bug fix - it no longer makes the main window active if the main window is disabled
- the pointer over note cursor is the background cursor rather than being indeterminite
- note z-order on mouse down properly reflects its position over buttons so buttons behind notes dont see the click
- note can be closed by clicking on the note button
- the advance timebox now centres relative to screen, not planimate window. It shouldn't appear offscreen anymore
- new option to send broadcast to model when exitting system
- the broadcast is already sent if the model is running when a close is performed, this option will start the model if it is not running to give it the opportunity to do any finalisation
- ability to set table text row colour, just like the row background colour
- change object file operations have an option to show the file browser to confirm the file which will be read/written
- the selected file name is not retained
- a confirm is required for non append file writes to an existing file
- The model error dialog no longer will show the browse/item/pending events buttons if the system is running in interdyne mode, to protect the user from the unknown...
- routine change object has new icon when one or more lines may be evaluated "only during move"
NOTE: you will need the latest _!system.db for the new change object icon
- fixed bug in animation management
was not handling hide/redraw of change object when an item is sending an instant message and trace animation is on
- reworked screen visibility handling
to prevent invalid items left in the animation manager when the model is run minimised. A screen determines whether its contents are visible dynamically rather than tracking visibility with a state variable
- new icon for change object with during move option or marker
- attref code cleanup, should be slightly faster and smaller memory footprint for models
- fixed crash if fill intermediate steps used on an empty dynamic route
- clock no longer keeps focus as much as it used to
- clock now lives in the menubar
- optimised way screen containment is verified
- matched attribute copy for broadcast - can now broadcast item to different class without the error. Matching attributes are copied
- added a new "Scoped broadcast operation" - broadcast to a subhierarchy at the object you target the broadcast at
- add label now returns the label index added, not ordinal index. -1 is returned if the add fails or is aborted
- New operation "Test Label" tests whether a given index value is in use by a given label list
Puts 1 if yes, 0 if no into the target
- can now have comments between select and case statements
- Routine editor dialog can be scaled in size
I haven't written an editor for these fields yet - if you are comfortable using REGEDIT then read on...
Planimate now retains persistent user options in the registry, at this location:
The parameters are read when Planimate starts and written/created when Planimate exits. So dont bother editing them whilst Planimate is running.
range from 20 to 100 and scale the size of the routine list dialog.
reports which route is being explored when the model is interrupted in the middle of a long guess intermediate steps operation
Have reworked route assignment handling; can now support setting the current route step during lookahead. So you dont need to follow a route step assignment routine with a delay before the train enters the network.
Added more model struturing rules. These will force existing modellers to come to terms with how Planimate handles movement decision making in their models. However its an essential step in keeping the modelling environment coherent.
- New option: Strict AttRefs In Lookahead
Its off for old models, again I suggest turning it on as it removes a potential source of modeller error.
Turning this option on has this effect:
A switch in Blocking Mode following a routine which is marked "Only During Move" will now report an error.
This protects against unexpected results if the routine before the switch was setting an attribute required by the switch - but because the routine is executed "Only During Move" and the switch requires the change during lookahead, the change would not be seen by the switch.
The modeller needs to think about how the switch is being used. If its acting to route an item, simply setting the switch to "Assume No Blocking" will avoid the new error message.
This enables the switch to defer its decision to when the item actually moves - but means the switch cannot act as a gate.
If the switch must act as a gate, then the preceeding routines must be executed in lookahead - so "Only During Move" must be turned off. This in turn requires that the preceeding routines dont perform operations which cannot be performed during lookahead, like table operations. Otherwise the system will report errors. The solution is then to split the "movement" and "lookahead" activities into separate routines.
- fixes route reallocation problem (during lookahead) which caused a gpf (introduced when i reworked the route stuff)
- Fixed a bug which caused Planimate to misbehave badly when running models without the "Strict Lookahead Messages" options on
it would report bogus routine lookahead problems
- many routine operations that quietly did not execute during lookahead will now also stop further operations from executing during lookahead.
I've done this to force modellers to come to terms with routine operations which can be done during lookahead vs. ones which cant - and set up routines appropriately (Run Always or Only During Move)
I strongly suggest turning on the "Strict Lookahead Messages" display option and dealing with the problem objects it reports. It will be on by default later on anyway...
- I have made available dwell and departure intervals for timetabled train items, these can be read and set within loop entry routines and portals.
Unlike previous versions, they are also available at the portal where a route ende
TT_TEST.MDL demonstrates their use in implementing loop delays in portals
- fixed "Delete spatial link" - was making bogus reference to P:attribute
Interdyne build changes:
-> No run menu -> No log menu -> release notes option hidden -> hardcoded title -> fit to model window on load
- reworked ctrl-paste code to avoid problems with direct references to the thing being replaced within the thing which is replacing it
- removed the "screen" pointer in dialogs :- dialogs can now only reference attributes within scope
- bug fix: bad undo management if decoding a single element multi label to attributes
- LOOKAHEAD changes
I've changed lookahead undo management significantly so that:
- iterations, whiles, selects, ifs etc can now be performed (and undone) during lookahead
- multilabel tupling can be done during lookahead
I've also reworked the error line display when a routine error occurs so it will support upcoming features.
This means that the platform will support executing much more complex routines during lookahead (before any item moves) - this will be required soon for the messaging during lookahead enhancements.
IT also means that EXISTING models will run slower if they have routines which contain iteration etc. which are NOT set to "Only During Move" execution.
Previous versions of Planimate would quietly skip the iteration (etc) during lookahead but versions from now on will actually execute it - unnecessarily
- since an older model could not benefit from using complex routines during lookahead (they were automatically skipped).
SO: Make sure routines are "Only During Move" unless they are required during lookahead - because an object immediately downstream of them depends on their outcome - eg: a gating switch, variable capacity, route assignment etc.
- In conjunction with above, I've added a display option "Strict Lookahead Messages"
Turning this on causes Planimate to stop with an error if the model attempts to execute a routine during lookahead which contains something which cannot be "undone" (eg: table operations) which means the routine doesn't get executed.
Whilst this situation doesn't compromise model integrity (I dont allow decisions to be made if the lookahead detects "dirty" attributes, and you are forced to add "capacity"), I think we should enforce some discipline and have this option "on" so modellers correctly mark their routines as lookahead or move only.
- Gantt graphs now only show rows for indicies which are associated with a label. So they will properly show a subset when driven from a label subset.
They still properly handle the row count and offset, the offset now determines which label # (by count) to start at
- A new gantt option "Draw From Top" draws the gantt from the top rather than bottom-up
COPY ROW operation - expects a source and target row reference. It will copy data from columns with matching tuple names. This enables tupling between 2 tables without an intermediate item
- loops now place trains "thrown" into them in an extra road which disappears when the train leaves
- Item direction can be set, intended when using the "throw" capability so trains move off in the right direction
The ITEMDIR model demonstrates it
- Significant changes to engine to support re-entrant lookaheads
(including messaging from a routine... more details to follow)
idkbase note 157