ReleaseNotes:Planimate 5.10 Release Notes
- NEW A new DLL data interface mode has been added, TABLEDIRECT which enables PL to pass table memory directly to the DLL which can read and write to it.
PL must preallocate the maximum number of rows the DLL would need, but it eliminates a 2 step copy process between the DLL, the dll interface and PL itself, allowing huge tables (millions of rows) to be shared by PL and DLLs that generate and process them.
- SPEED Have rewritten the PL FEC to optimise it for speed. All event processing should be faster. I'm interested in observed performance vs. 5.10o
- NEW /DEBUGDLL command line option enables DLLs to be debugged using an external debugger. Normally PL loads DLLs in a way that does not enable them to be debugged.
- CHANGE Distribution patterns supported 2 ways of generating PDF/CDFs, using an internal, hidden table and using a model table reference.
They now just support the model table reference, which keeps the data exposed and simplifies their UI.
- CHANGE Some optimisations to the label list code for faster adding
- FIX Viewports inside view panels would not animate smooth because the owning view panel had an "Update Interval Scale" of 0 which could not be edited.
It was this way since normally view panels do not contain dynamic objects to animate. View ports change all that.
This property can now be set from the background context menu. If you have a viewport with dynamic animation, set the "Update Interval Scale" to 1, or whatever fraction of the nominal interval you want the viewport to update at.
- REMOVE Removed the range checking option from attributes.
- REMOVE Removed billboard tables. Old models using them will not load
- REMOVE Menu item to access the old icon editor. You can still call up its EXE manually for the time being but future versions of PL will be abandoning the ICN format
You can convert ICN to BMP using Tools->Resource File Admin
- NEW Penel-Engine Option "Broadcast Track Clicks" enables a broadcast to be sent when a user clicks on a track section. This includes details on the end points, section object index and mouse co-ordinates.
Help-Broadcast Tuple Reference-TrackClicked documents the fields
- NEW Routine operation "TableReferenceSet"
This will return non zero if a table reference resolves to an actual table. This is useful in testing if an item table reference is actually set to anything, enabling say a module to have optional table parameters.
- NEW LogDrivenGraphs now also send broadcast on the right mouse button. the new "_buttons" attribute is set to 1 for left button and 2 for right button.
This can be used to add modeller defined context menus to log driven graphs
- NEW Table clicks now send "_buttons" as well (1=left,2=right) to be consistent with other broadcasts. _contextclick is still sent for compatability.
- NEW Column option "No Combo If Only 1 element" will suppress a table combo dropdown appearing if the label list associated with the cell has only one member, however a cell click broadcast will still be sent. This is useful in some UI situations.
- FIX PL no longer requires all the parameters to a DLL to be respecified if the DLL's parameter counts change. This helps when editing a model with a new version of a DLL
- FIX PL will now pass tables with zero rows to a DLL so the DLL will still see the number of columns that were allocated. This prevents DLLs from giving validation errors.
- FIX A buffer in the table click broadcast send code was not big enough (no reported issues with this)
- NEW Label lists have a new option "Remove Leading Spaces" This works like the "Remove Trailing Spaces" option except for leading spaces; any such spaces from user input or imported data are removed.
- NEW New viewport option "Wheel Scroll On Click" enables a viewport with the "directly handle clicks" option OFF to be clicked (to get focus) and then scrolled with the mouse wheel.
- NEW Added support for out-of-scope writing to item table references.
The routine operation "OutOfScopeWrite" enables writes to an item table reference pointing to a table which is not in scope. The item table reference concerned needs to be passed as the parameter. Write access to the table will then be allowed for that item.write access will only be granted if the item table reference is
-- pointing to a table at the time the OutOfScopeWrite() operation is performed
--out of scope write access is lost when the item table reference is reassigned or cleared
--out of scope write access does not carry through message sends or returns, broadcasts or items split from the original item.
item table references can always be written to if the table is in scope at the location where the reference is used. Getting permission with OutOfScopeWrite() is not necessary in this case
This operation can lead to hard to debug code, since table access can be occuring from unexpected places. The routine operation can be searched for (using the Find routine operation capability).
A key benefit of this feature is enabling code reuse and empowering modules to operate on table data they are "called" with.
<sup</sup>FIX Module loading/model merge code now supports data object reference, including references to label lists in the data object list. Its quite complex to implement as there are 2 levels of merge needed, firstly the data object references are merged then the label lists are merged (which may merge data object lists when lists are combined).
- FIX Using SetViewportScroll() on a visible viewport has immediate effect
- FIX Rework scrollbar code; scrolling should be smoother in popup dialogs
- CHANGE The HandlePopupMenu and SetMenuBar routine operations now will read 2 additional columns in the menu table, if they exist.
IF THE MODELLER WAS USING COLUMN 4 or 5 for their own data, this data needs to be moved as the menu ops will use what is in column 4 and 5.
The existing columns were:
column 1: depth column 2: code (refer to 5.09f notes) column 3: label NEW COLUMNS are: column 4: disable flag, 0 = item enabled, 1 = item disabled column 5: tick mark, 0 = no tick, 1 = ticked ********************************************************************** ** Older models using HandlePopupMenu and SetMenuBar with additional ** modeller data in columns after the first 3 will need updating. It is intended that these columns will eventually be labelled but this has not been incorporated in this release.
- NEW Change->File option "Execute commands using shell"
When this option is selected, executed commands are processed via the windows shell rather than the low level EXE loader.
This enables URLs and data files to be launched, with Windows automatically determining the application to open the data files with as happens when they are double clicked.
- NEW Change->File Option "Dynamic Command"
When this option is selected, a command line for the execute command feature is specified using a reference, like a dynamic file reference. The default is a "0" or "1" which obviously wont achieve much. A label reference will usually be useful.
- FIX Some of the obscure file operations might have autopurged themselves (eg: DeleteResource), now fixed
- NEW Log driven graph data and configuration tables can now have a column _colorrgb. If this column is present, the cell provides the colour as an RGB value rather than a palette index, enabling any colour to be specified.
This column overrides _color if both are present in the same table.
The EncodeRGB() routine operation may be handy.
- NEW Routine Operations InterpolateValue (Arithmetic) InterpolateColor (Paint)
InterpolateValue can be used to compute an interpolated value between value1 and value2 based on a ratio value. If the ratio is 0.0 then value1 is returned, if its 1.0 then value2 is returned.
InterpolateColor does the same thing except it works for RGB colour values, which represent a colour by 3 bytes packed together and hence need special handling to interpolate correctly.
- CHANGE Internal graphics code uses more RGB colours with translation from palette colours moved to higher levels. The palette handling code should still be intact so palettised images are still supported.
- NEW Table option "Lock Cell Format"
This option prevents table cell formats being copied (losing the existing format) when routine code assigns a table, row or column to another table, row or column.
This makes it easier to transfer data to a view which has customised cell formats. This option will be on for newly added tables and off for tables in previous models. Turning it on also speeds up table data copying.
Note: when setting one table to another ie:
t.table2 = t.table1
cell formats in t.table2 will only be retained if the 2 tables are identically sized before the assignment.
- NEW New option Settings->End User option "Defer display until Model Loaded BC"
This prevents a model loading in User Mode or as an application from displaying anything in the main window to after the Model Loaded broadcast has been sent. This is useful for applications which need to process some data before presenting an initial display to the end user.
- FIX Paint palette works again
- CHANGE Graphics internals pen/brush caching removed, some internal cleanup to support future graphics features
Removed palette oriented pen/brush cache in preparation for supporting RGB colors in PL
- NEW Condition editor reference buttons now use inplace field editors like the routine editor (if enabled). This enables typing of references, adding attributes on the fly etc.
Also as with the routine editor, pressing F2 opens the full reference selector dialog.
- FIX The menubar handler now waits for button up status to prevent bogus "pause" dialogs appearing when user menubar options trigger broadcasts (and hence the run engine) which were seeing the mouse button as down even though a mouseup event had already occurred.
- FIX Points/blobs in graphs are now properly clipped
- FIX If clicking on an object in a viewport caused a model error which stopped the run AND hover broadcasts were enabled, the platform would crash due to hover broadcast being sent as the run was being shutdown
- FIX Log driven graph lockup when autoscaling was enabled but there were no points to plot
- FIX Prevent some junk being drawn on edges of graphs when they have been scrolled
- FIX Viewports without a view no longer block clicks
- FIX Viewport's show flow lines when parent is a view
- FIx Breaking out of an iterate tables loop was broken
- FIX If a model's DB became inaccessible whilst the model was loaded (eg: network share) then PL would crash when new model was being processed even though the DB wasn't necessary.
- CHANGE An unconnected wormhole exit now gives an error rather than acting blocked. this has enabled:
- CHANGE The Paint Button ImageWidth/ImageHeight properties now evaluate the state attribute of the button when determining which image to return information for. This is useful as it means you can query the image information of a button before it has actually been redrawn in a changed state.
- SPEED A lot of function inlining (preventing calls) and cleanup has resulted in reduction of core engine processing overheads:
- item create/destroy/enter/exit monitoring at portals
(whether portal monitoring was enabled or not) is faster
- all exits process lookaheads slightly faster
- class mapper/unmapper calls in portals that dont use them (ie: most)
now avoids unneded checking
- unblocking stack depth checking is faster (UnblockPrevious())
- routine case handler current-line tracking faster
(needed so PL can report which line when a model error occurs)
- iterate/iterate table current-line tracking faster
- NEW New format "OS Percent" is like value except values are scaled by 100 and a % is appended
Input wise, it handles values with a leading, trailing or no percent symbol.
- FIX If a table view scroll was linked to a broadcast and that broadcast did a repaint and that repaint caused the table view to redraw and it that redraw determined that a scroll bar was not necessary then a crash would occur as PL attempted to query the now non-existent scroll bars position in the original scroll handler
- FIX Fix reference expression parser: index was not being deleted in unexpected cases causing a leak and an attref scan error to be reported as a result
- FIX Reworked endpoint plotting for column overlay graphs to handle closing/opening of bars at the endpoints vs. points. This should remove unexpected things at the right hand side and stray points at the LHS in point mode.
- NEW Routine operation "SetViewportTarget"
This enables the target of a viewport to be set dynamically.
It takes 3 parameters: Panel With Viewport Current Panel Inside Viewport New Panel Inside Viewport
"Panel With Viewport" and "Current Panel Inside Viewport" identify the viewport to modify.
Current Panel can be 0 to specify the first viewport found; this is useful if the panel only contains one viewport.
Panel With Viewport can be 0 to specify the toplevel panel
The New Panel can be 0 to specify "no panel" in which case the viewport becomes hidden in user mode.
Panel references can either be object list references (need to be portals) or panel list references.
Updates are applied immediately; no force repaint is needed.
- NEW Enhanced portal subsystem menu and hence sidebar context menu (more options available)
- NEW Enhanced viewport editing including ability to fit to viewed portal
- CHANGE Unlinked viewports no longer display in user mode
- NEW A number of new value formats have been added which use the user's locale settings in the operating system (OS) to perform formatting and parsing of values.
These are particularly useful in interfacing to other apps which expect data in a local locale format.
The new formats are: "OS Date Time", "OS Date", "OS Time", "OS Currency", "OS Value"
NOTE: Since these formats are locale/user specific, a formatted DAT file written using these formats may not be readable by an instance of Planimate running in a different locale.
- NEW The Switch mode "Lookahead Separator" has been repurposed to "Track Lookahead Separator".
In this mode a switch will forward track "checknext" lookahead tests out the first outgoing path. Any other tests including normal item lookaheads and movements are directed out the second outgoing path.
The "Assume No Blocking" option works on the second path. Track CheckNext tests (out the first path) do not depend on the setting of this option and are always performed. Things are easier to work with if the assume no blocking option is on.
This mode is useful in track models where the modeller is adding logic to Planimate's track "far" lookahead rules. It makes it easier to separate the "far lookahead" flow from the actual item movement flow.
The suggested method:
Separator switches after portal entries connected to tracks should have assume no blocking off
Separator switches after modeller capacity/wormhole entries etc (where the modeller is triggering the track checknext lookahead) should have the "assume no blocking" option on. Otherwise they are more complicated to work with (you have to lookahead twice, second time without track checknext).
- NEW A new routine operation "EnableTrackCheckNext" enables a tracks modeller to convert a standard Planiamte lookahead (eg: when an item is about to leave a capacity in a portal) into a track lookahead detectable by the "Track Lookahead Separator" switch mode.
This is useful where items are being transferred between different track networks, eg: using wormholes.
The operation executes during lookahead and is automatically undo by Planimate when the lookahead thread unwinds behind the change object. If PL is already doing a track lookahead or an item is actually moving, the operation does nothing.
- CHANGE Switches no longer cache decisions made during track lookahead. This shouldn't affect existing models as the track lookahead mechanism already purges the cached decisions. This change makes the EnableTrackCheckNext routine operation work properly for switches in the track lookahead path (following the separator, which already works ok).
- CHANGE The switch has been optimised. Some switch modes are now more efficient in cases where the switch is used by the same class in succession.
- NEW RHS Y Scale for log driven graphs.
This enables graph data with 2 different Y scales to be pllotted on the one graph. The 2 scales are autocalculated and displayed separately, one on the left and right sides of the graph.
To use this first enable the RHS Scale option in the scale options. You will need to use the Overlay Configuration Table added in 5.09r to specify that a given overlay should be processed using the RHS scale. Add a column "_rhsscale" and set this to 1 for the overlays
- CHANGE Log driven graph - data overlays which are not enabled will no longer affect the autoscale computations.
- NEW Switch mode "Lookahead Separator"
- NEW Added a test for a track logic condition where a loop exit delay end is being sent where the item no longer has knowledge of the section that it had come from (lookahead issue).
- CHANGE Renamed system attribute "DoingLookahead" to "RoutineInLookahead" to more accurately reflect what it is signalling - ie: a routine is being executed during lookahead, not item movement.
This will also be set for messages sent from a routine in lookahead.
- CHANGE Adjustment to y scale values to make them consistent with y scale labels
- FIX Log Driven Graph handling of overlay 0 fixed. This overlay is not plotted but can still be used to set scale ranges.
- FIX Fixed an issue that could crash when a hover broadcast was sent whilst PL was busy initialising the model (eg: doing track route fill intermediate steps at startup)
- FIX Fixes the undoing of random numbers generated doing lookahead; the random generator was not being properly reversed, causing it to generate a different random value during move. This affected code where an attribute was set during lookahead and immediately used in a blocking switch with no intervening capacity. The attribute of the item would be inconsistent with the path it took.
- FIX Fix the DLL loader crashing if the DLL wasn't found
- FIX Added 2 checks to detect if a train is transferred from one track portal to another (eg: through a wormhole) and that train had a loop entry delay under way. In this case it is important that the destination also have loop delays enabled so PL properly handles the loop delays on both ends. If the option is not consistently set then PL will now report an error.
Previous versions would become erratic due to a loop delay end event being unable to associate with a road to make "clear".
- SPEED reworked the track fill steps recursion stack handling to use a faster table and avoid allocation of memory until its actually necessary
- NEW 5.09z introduced cell writes to item table references that refer to a table that is "visible' or in scope. It is now extended to allow row and other operations as well.