ReleaseNotes:Planimate 4.30 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Bug fixes and misc enhancements to Planimate 4.30


  • fixed crash bug when setting format of a table column to free text in a routine
  • text imports properly into columns formatted for free text when importing from the table editor


  • Tables can be migrated to any dynamic panel that doesn't contain a table with that name, both up and down the hierarchy.

Any existing views in dynamic panels are left intact and pointing to the table, wherever it ends up (possibly violating the scoping rules) but new views cannot be added or pasted in a place where the table is not in scope.
This can lead to confusing models especially if multiple tables in the model have the same name. If moving tables around, aim to clean up its views to follow the scoping views.

  • gantt graphs have an option to "Align Row Labels At Left"


  • routine operations to set view port pos and zoom

These are under the "Display" submenu.
The routines take 2 panel references to identify the viewport, the first is the panel containing the viewport and the second is the panel the viewport is viewing.
The first panel must be specified using an attribute (eg: routine) formatted for a panel reference. Its not possible to specify using a hard coded panel reference (this is because the other 3 available "parameter" attributes are used to specify the viewport panel, x and y scroll offsets)
To update the viewport display you need to navigate away and back to the panel containing the viewport. A display redraw doesn't work (yet); this will be addressed in a future version.


  • fixed Crop/Trim Label routine operation.

It was not properly terminating the string, possible appending random junk to the end of the trimmed label


  • "Lock Drawing" is disabled automatically if an item is animated on a visible panel, in order to prevent the animation manager crashing.

Lock Drawing is intended to prevent graphs/charts/tables from flickering not to prevent items animating.

  • Deferred Drawing option for Log Driven Graph displays prevents the graph from drawing incrementally. This option only works when the run engine is active


  • column overlay displays properly with scroll bar hidden


  • gantt, train graph and log driven graph can also have broadcasts associated
  • For portals in track networks:

The existing "Track Junction Lookthrough" option has been renamed as "Route Step Lookthrough". This more accurately reflects what the option does; ie: looking ahead on the intended route of the train to check the sections are available.

  • Have implemented a new option for portals used in track networks:

"Act As Junction"
When this option is on, all connecting sections to the portal are treated as logically one section, even if they are not going to be used by an approaching train. Hence with this option on, the sections connecting to a portal can only be accessed exclusively and this is extended past any loops acting as junctions and other portals with this option set.
"Act As Junction" takes precedence over "Route Step Lookthrough" if both are set for a given portal. Mixing use of these options in close proximity of a track network is not a good idea due to the different nature of the look aheads; an "Act As Junction" lookahead wont explore "Route Step Lookthrough" portals.


  • Column overlay views can have a broadcast associated with the time scroll bar. When the scroller window is resized or its form is used, it can send this broadcast. Item attributes set are: _pos = time offset/position _width = width of the window

Other graphical views will get this functionality next version


  • Table View Scroll Broadcast: The platform will no longer send redundant broadcasts if the scroll hasn't changed
  • data set objects are saved in this order:

label lists sub label lists attributes tables

  • sub label lists can be selected and saved into a dataset and will be reloaded from the dataset.

It is strongly recommended that if you include a sub label list in a dataset, you also include the parent label list unless you are certain the parent label list will not be changing.

  • fixed long standing bug with pipes.

An extra pipe iteration was occuring at the start of the run, before run start broadcast was sent. This meant pipes could be contaminated with stuff from previous runs (ie: not starting totally empty) depending on the state of the end bins at the start of the run.

  • If an old model with invalid attribute names is loaded, details of the renamed attributes are now also logged to the planimat.dbg debug log file. This file is created in the initial working directory from where Planimate is started.

This file is cleared each time planimat.exe is started.

  • Debug Options: Added pipe attribute tracing


  • support transparent backgrounds on buttons column overlay views log driven graph views gantt views train graph views

so they should repaint propely when they change.
This comes at a price of speed; when these views are transparent much more processing is needed to redraw the background behind them.


  • table horizontal and vertical scrollbars can be hidden on a view by view basis

Scrolling still is possible using the keys and routine control

  • The table column setting "Column Title Rows" can now be 0 which will not show any title rows for the table
  • Have Implemented GRADIENT FILLS for paint rectangles and buttons

This should allow some very pretty interfaces
1. Gradients are specified by 4 additional colours to the standard "background" colour, one for each corner of the rectangle. The "Graphics" settings dialog shows these four colours in a square arrangement.
2. If these 4 colours are set identically, the standard background colour is used regardless of the colour the 4 gradient colours are set to. Otherwise the gradient takes effect and the standard background colour is ignored.
3. Picking a colour using the "Background" button also sets the 4 gradient colours to that colour.
4. !!!! Win95 does not support gradients, the normal background colour !!!! will always be used. Also 256 colour display modes are not !!!! tested and the display probably wont be very nice on these.
5. Currently gradients do not work properly for graph views. This is because graphs refresh only part of their window area to avoid flickery redraws as they update.
(Same applies to table views)
However there is an unsupported hack enabling the use of a gradient in graphs that do not animate and that the user doesn't scroll directly. First select "None" as the background colour then set the 4 gradient colours. I've not tested this on all the graph types.


  • can add item attributes from within a routine. If in flow or interaction edit, that class is selected. If an object has multiple outgoing flow types, then PL prompts for a class selection first.
  • Table views can now send a broadcast when they are scrolled which can be used to keep other table views in sync (must be different tables)

The tuple includes _rowscroll and _colscroll attributes (use Help->Broadcast Tuple Reference for this info)
The demo model "Table Scroll Broadcast" is on idBase as an example of how to do it.

  • fixed crash bug when copying object and object stats in a multi-selection. Even though they can be multi-selected, object stats are not copyable, the copy of the object stat only happens when the parent object is pasted.
  • Pipes have a new attribute "Output Scale" which scales the outgoing material as it gets dumped into the pipes output. This enables rescaling of quantities to occur without separate calculation logic.

If the pipe is run in reverse, the scaling is then applied to its input in reverse, hence keeping the total amount of material in the network consistent

  • BUGFIX: on-sort broadcast would be lost or become table click broadcast on a copied table view.
  • BUGFIX: debug log when setting paint arrow removed


  • Help menu has new option "Broadcast Tuple Reference'

This displays the different internal broadcast event types and the item attributes that are set when that event causes a broadcast to be sent

  • Gantt,Train Graph and Log Driven graph have a "Table Columns" option in their edit menu which displays the table columns the views look for and whether they are present in the table associated with the view
  • Reverse Iterate routine operation
  • Rearranged system attribute menu flyout
  • Added two new system attributes - table row and table column

This gives access to the rows/column count for the table being referenced by the overall attribute reference. The advantage is that they can be used directly in a row or column index without having to use a separate temporary attribute and a separate routine line to set it.
These attributes can determine a table from:

  • direct references within an attref
  • dynamic table references
  • item table references (if item is available)
  • implied (eg: a sort column attref in a sort knows the target table even though that table hasn't been directly specified in that attref


  • default panel size now 672 pixels. If you have a previous version INI file you wont notice this new default.
  • snapping of objects reworked so the grid follows panel area resizes. Existing models will not be on the new grid but it should be consistent from now on even with panel resizes.

In other words: the grid now aligns with the top of the window so the height of the panel doesn't affect the grid positioning.

  • fixed comma separated values when the value is -ve
  • can read and set position of time scrollers in the graphical table views (column overlay, gantt, log driven, train graphs)

The demo model "graph scroll set" in idBase demonstrates how time offset and width can be set for a graphical view (very similar to setting a table view scroll).

  • changed way double clicks are processed

PL will now wait for the mouse to release after the second click before processing the double click. This makes double clicks and screen change broadcasts work properly without false "pause" messages appearing.
-- Alot of rewrite of scroller code for the graphical views. Look out for any strange behaviour in graphical view scroll handling.


[new file format]
  • new change object file operation to create a folder from a filespec or label name

(if the folder already exists no error is given and the folder is left intact)

  • have reworked file operations in change objects. Operations affected are

[** needs testing with existing models **]

  • rename file
  • delete file
  • copy file

These used to return a result in the first data target attribute (if any).
They now use the error result attribute instead. Older models are converted to use this attribute instead of the data target.
The result codes returned depend on the error. Models must test against zero to see if an operation was successful since different error codes can be returned depending on the operation and nature of any error.

  • "fill selection" now possible in tables if a region of cells is selected. The cells are filled with the value of the selected cell when this option is chosen.
  • System attribute "Multiple Run Count"
  • is 0 for normal runs
  • is the # of multiple runs for a multiple-run session
  • Table columns have an option "Hide Repeated" which causes them to hide repeated values from appearing under each other. This can clean up complex display tables with some columns containing very similar data
  • Fixed bug in table editor, an undo caused the table to lose it row label and colour column settings
  • fixed bug loading model from command line when OS was inserting quotes into the filenames (affected PMB files)
  • showing references from table editor now hides table editor while reference is being shown then restores it
  • Routine operation (Label-String) to rename a label.

A source and target label can be specified to do the rename. If the target list already creates a label with the same name as the renamed label, the target is set to the index of the existing label, othrewise the target label string is renamed and the index stays the same.

  • table resizes and imports no longer update the table editor if its visible so they will occur much faster
  • table editor views properly resize when rows are added/removed to accomodate row labels


  • sped up scrolling of table view when scrolling to end of very large tables
  • fixed very nasty bug which involved viewports, hover bcs enabled in the vp and table views in the viewport. The hover bc "closing" code was reshowing the viewport when it was trying to shut down, causing a subsequent table update to try refresh a table view with a non existent window.

This produced a few "invalid screen" pointer warnings followed by a crash.

  • out of screen table editors are now brought back into the screen area This could happen if the model was edited with a system with high resolution or split screens then opened on a laptop with low resolution.


  • Distribution dialog enhancement - CDF (continuous cumulative distributions) can be associated with a Planimate Table (as can PDF). A new attref mode "CDF" enables the selection of a table and the column which will provide the probabilities. Column 1 of the table provides the target values.

A CDF is different to a PDF in that:

  • instead of returning individual points, it interpolates between them according to a uniform random value (0..1) and hence the returned value is continuous.
  • instead of specifying probabilities as percentages per point, a cumulative sequence of probabilities is specified. This must be increasing in row order and should start at 0 and end at 1.

The following example table will produce a distribution with 25% of the values between 0 and 5 and 75 % between 5 and 10.
0 0 5 0.25 10 1.0

  • set table cell colour property now fixed (broken in prev version by a bad double->int cast)
  • deleting a selected viewport no longer crashes platform
  • new INI options for table titles added, fixed string bug in INI which noone should have noticed (yet)


  • I've implemented a PLANIMAT.INI file to store defaults for modellers.

The file is stored in the same folder as PLANIMAT.EXE.
The INI file is read whenever a "new model" is created or a model is loaded. (Settings in the loaded model will override INI file settings)
If an INI file doesn't exist, it will be created.
After Planimate reads the INI file, it rewrites it again so newly added INI parameters in the current version of Planimate are made available to the modeller for editing.
You can use NOTEPAD to customise settings in the INI file. There is only a few at the moment but now the framework is in place I'll be able to expose more defaults in this file so a modeller can customise the platform to their liking.
=== In the future watch out for this: === If you use an older version of Planimate which knows about INI files (ie:


or later) with an INI file created with a newer version, any settings added by that newer version will be removed from the INI file by the older version of Planimate.

These INI files have nothing to do with model INI files. Models must not use PLANIMAT.INI for their INI parameters. Any older models relying on PLANIMAT.INI for this purpose must be changed to use a different file name.

  • The old registry entries for RoutineEditorWindow Width and Height are now stored in this INI file instead. The registry keys for these will be ignored in this and future versions of Planimate.
  • pasted model objects now also follow grid snap
  • broadcast exit gets name set to the broadcast, as for BC entry
  • "dont initialise run" broadcast buttons fixed, were broken in recent broadcast rework
  • RTF views now support CTRL-B,CTRL-I,CTRL-U for bold/italic/underline and support "Find" (CTRL-F) and bigger notes.
  • no longer crash on selecting column heading menu for totally empty table


  • changed grid snap
  • paint objects are pasted at snapped lowerx/y co-ord
  • newly formed boxes have all 4 sides snapped to grid
  • routine printing reworked
  • pages are now printed as queued, whether in the one routine or within the _page printed notification broadcast.

This fixes a bug in printing different panels within the _page printed broadcast handler

  • when an entry is in broadcast mode, selecting a broadcast renames the entry to the name of the broadcast
  • z-order/multiple screen fixes for:

Z order fix: Edit-Labels Edit-MultiLabels Edit-Broadcasts
Initial Position: Table Editor initial position Objects/Items palettes
These are now based at the top left oc-ord of the Planimate main window so they appear on the correct screen in a multi-screen system.


  • Create Label List From Column has been enhanced.

IF the target is a COLUMN formatted for a label list, then indicies in the target are filled to match the indicies of the labels added to the label list from the strings supplied by the source column.
In this mode, labels are not repeated, if a string already exists, its existing index is used and placed in that row of the target table.
The target table column must have the same # of rows as the table providing the source strings.


  • Fixed rectangle calc bug which caused a row of junk pixels between the status line and the Planiamte model area
  • Fixed a long-time bug with box buffer handling which caused moved or resized objects to jump to strange sizes and locations, very easily noticed with viewports
  • Popup windows with the "Ensure Visible" option on should now properly crop to the Planimate work area when the windows have no caption bar (and are hence child windows rather than independent windows)


  • Fixed ordering of hover scanning so topmost portals sense the hover broadcast first


  • I've changed the way most tuple broadcasts are sent (eg: table click, gantt click, graph click, sort complete, button state

These all need retesting to ensure I haven't broken them.
The change was to properly use the default BC handling of clearing side effects rather than forcing a specific continue/pause after epoch to achieve the same thing.

  • Portal Hover broadcasts now properly handle re-entrancy, previous version could easily crash as hover broadcasts are sent even during item animation.

Also made them process in background so hovering doesnt cause mode change flicker

  • fixed mouse reading of co-ords for portal hover and have implemented a fix to prevent double-events when a popup is opened due to the broadcast

(see HOVERPOP.MDL in note [#116] )


  • Hover broadcasts added for portals [#116]


  • Fit panel to model area now ignores hidden objects when computing the bounding rectangle
  • New time format displays relative times without seconds (if seconds are present on input fields it will still read them though)
  • First row for file reads now supported for attributes as well as tables. This allows rows to be skipped in a file when the target is an attribute
  • fixed bug in pause handling in


(If continue flag set, model would pause after current epoch) 

idkbase note 115