ReleaseNotes:Planimate 10.x Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • CHANGE Updated to version 2.0.0 Licensing. No impact on end users.


  • FIX Errors when using a "Stop Run And Exit" Exit in conjunction to intercepting the _system_close broadcast. Introduced in PL 9.15.2.


  • FIX Memory handling in icon load could overflow stack after 10.13.1 change.


  • REMOVE Compiling a Planimate PBA using an Internal or external runtime .KEY file is no longer selectable. Only "Time Limited Demo" or "Unkeyed Standalone" (the latter if the user has a level 4 (open PBA) license are supported.
  • CHANGE Provision of a user name when making an Open PBA EXE is now optional and the relevant fields will not be shown in the About box if User Name is left empty.


  • FIX s.CancelClose not working when close box used and then setting it in _SystemClose broadcast.
  • CHANGE Item attributes in item click popup no longer pad the attribute name.

10.13.1 (model version 822)

  • CHANGE Increased internal text buffer limits. Text cell limits have increased from 16kB to 256kB.
  • CHANGE Increaesd name limits for objects, tables, columns etc. from 32 to 63 characters.
    This will better support models generated from external data.
  • NOTE Models will use more memory than they used to. This may push some large models to requiring 64 bit Planimate and plenty of system RAM.


  • FIX BrowseFile was not applying the requested file extensions properly for a filename which lacked one, broken in 10.1.7.


  • CHANGE PL releases now include PLEngineCore.dll, a dotNet DLL.
    If you are not using a dotNET DLL which makes use of this DLL, you can ignore this file.
    If your application makes use of a dotNET DLL, this file must be placed in the same directory as the Planimate EXE during development and the same directory of the PBA EXE for releases.


  • FIX Support Int64 types when importing from a dotnet DataTable.

10.12.0 (model version 821, unchanged)

  • CLEAN This is a cleanup release where older model compatability has been removed.
    Only model versions 800 and later can now be loaded (9.29.0).
    You can use any version between 9.29.0 and 10.11.4 to save/upgrade an older model which this version will then be able to load.
    This cleanup has enabled removal of translators including:
- viewport becoming a paint object
- dials merging with attribute views
- queues merging with dispatchers
and other internal changes, and keeps Planimate faster and efficient.
You should notice no operational difference between 10.12.0 and 10.11.4. Please contact InterDynamics if you find a problem.


  • FIX Label list fields in Dialog() operation.


  • NEW s.LastAccessedDataFile is set by UserKeyBrowse() if a file was selected to load the license from, otherwise it will be set to an empty string (eg: if license text is pasted from the email).
  • CHANGE UserKeyLookup now supports a target attribute or cell formatted for a label list in which case it will try match the text of the license data in the list and use the label index. If the text is not matched, 0 will be used. Unknown text will never be added to the target label list. To achieve this, read into a text attribute and use FormatIntoLabel().
  • FIX Memory leak when strings are returned from dotNET to PL.


  • FIX LoadLicenseText not catching parse errors in the raw text.


  • FIX A bad or missing license data for a date formattted attribute would cause UserKeyLookup() to fail.
  • NOTE Updated compiler.

10.11.0 (model version 821)

  • NEW System attribute s.GetDirectory returns the current working directory. For Planimate with a loaded model this should be the directory the model is in. For a PBA is may be a different directory depending on the use of BrowseFile().


  • CHANGE Paint map now supports either ${x} or {$x} notation for substituting tile co-ordinates in the fetch url.

10.10.0 (model version 820)

  • NEW Paint property "FetchTilesFromDBFile" enables dynamic changing of the paint map option to use a DB or folder tree for tiles.
  • CHANGE Paint Map "Fetch URL" now expects and requires a new syntax. Previously it was just the root path for the tile source. It now must includes placeholders for the tile long/x, lat/y and zoom values plus the extension.
    eg: "http://mytileserver/tile/${z}/${x}/${y}.png"
  • NEW Using SetPaintImage() on a map with a filename starting with "http:" or "https:" will set the remote getch URL instead of the local tile source file. To empty/null out the tile fetch URL, use just "http:".
    The paint map object must not be configured to use a tile DB when using a remote fetch URL, it must be using a tile folder.


  • CHANGE Paint Map server tile fetch option now uses "curl" a standard windows component to retrieve tiles instead of expecting to find WGET. Remote fetching is not to be used directly in production models.


  • FIX Typo in routine definition, IntoPanelRemote should be InfoPanelRemote
  • FIX Implement co-ordinate clamp for SetObjectPos()


  • FIX Problem when pasting key text using the Help / Select License Key Activation Code dialog. This was introduced in 10.8.0.
    Any PBAs built with 10.8.0 or 10.9.0 where the end user pastes a license code instead of selecting a KEY file need to be updated.

10.9.0 (model version 819)

  • NEW Model Option / Advanced / "Enforce Precise Spatial Link Arrival Times" This causes the arrival time for the item at its target location to be calculated precisely even when the item traversing through multiple portals.
    This is useful when all of these apply:
  • * items may traverse multiple portals on a spatial link to reach
the specified target AND
  • * you are using a map or other mechanism which repositions portals linked by spatial links AND
  • * you are not explicitly setting link costs (meaning the pixel position of objects determines each link distance relative to the entire traversal) AND
  • * you do not add extra delay at locations to the items AND
  • * you need precise repeatability in the final arrival time to the target.
    In this circumstance, repositioning the objects impacts the ratios used to calculate the individual traversal legs which can result in a tiny (16th decimal place) error in the final arrival time.
    Under the right circumstances this may cause the model to run differently when multiple items contend for a resource at a given time. This option ensures the final arrival time is fixed regardless of link cost ratio changes.
    The precise arrival time mechanism is only engaged:
  • * each time a time is set using s.ItemTransitTime OR
  • * routine operation SetItemLinkTarget() is used with a >0 time OR
  • * routine operation SetTransitTime() is used.
    Any previously set arrival time is discarded if:
  • * routine operation ReverseItem() is used on the item
  • * routine operation UpdateLinkItems() is used on the link
  • * Link "Run Control" is not set to 1.0 at any point whilst the item enters or is on a link to the target.
(these obsolete the arrival time).
Alternatives to using this option in situations where the portal icons are moved include:
  • * Set the link costs based on latitude/logitude or any other non changing metric, to avoid a changing ratio OR Use single steps between portals instead of spanning multiple portals (typical in more complex models where modellers want
fine grained control).
  • NEW Change object has option to hide its icon during run
  • NEW Operation "OpenRoutineWindow" enables display/hiding of a change object's routine edit window programmatically. Commands are: 0: Close window 1: Open window at last position 2: Open window to fill the work area.

10.8.0 (model version 818)

  • NEW UserKeyLoadText() loads a license key from a text string
  • NEW UserKeyBrowse() enables browsing or pasting a license key and returns the license text.
  • CHANGE UserKeyLoad renamed to UserKeyLoadFile()

10.7.0 (model version 817)

  • NEW FitPaint() operation resizes a paint object to fit its contents as the editing option does. This may not work with group anchoring since the panel most likely be at the templating size.
  • CHANGE SetPaintImage has all-states option. Default to 0 for pre 817 models.


  • CHANGE s.LastRunStopReason is now updated just before the run end broadcast is sent, enabling the modeller to intercept why the current run is stopping. If you need to know why the *previous* run stopped in a run end broadcast, arrange to store the value beforehand eg: in run start.


  • CHANGE Updated to License Manager 1.2.0

10.6.0 (model version 816)

  • NEW SetPanelSize() enables a modeller to change the area of a panel. This is useful with popups.
  • CHANGE Table ImportFromClipboard will now format a column for text if its the first row of an empty table being imported, the format for the column is default (value), auto format is selected and the data would have otherwise reported a failure to parse.


  • FIX Edge offset calculation for paint objects was incorrect when a given width/height was even.


  • CHANGE A failed matched cell within a Paint Button State reference no longer reports an error, instead it evaluates as zero. If the paint button has no state with ID 0, the button's state is left unchanged.
  • CHANGE When a portal is exported to clipboard or file, it will now bring with it any tables and attributes that are referenced within it but are defined outside of it.
    On Paste From Clipboard these data are removed if the destination where the portal is pasted has same named data in scope.
  • CHANGE Ctrl-Paste From Clipboard now does a Replace, just as Ctrl-Paste does.
  • CHANGE Holding Ctrl as a file is selected in "Add To Model" enables a replace.

10.5.0 (model version 815)

  • NEW System attribute s.SystemRealTimeUTC retrieves the computer's system clock and translates it to Planimate's calendar date epoch. Whereas s.SystemRealTime retrieves the local time (adjusted for timezone
  • / and daylight savings), s.SystemRealTimeUTC retrieves the time as universal time / UTC.
  • FIX UserKeyLookup() handles dates and metadata values correctly.


  • CHANGE Paint buttons configured with no click action but with multiple states including a hover state now longer absorb clicks on them, instead passing them through to objects under them. This enables them to be used for highlighting input views.
  • CHANGE LcienseManager at 1.2.0

10.3.0 (model version 814)

  • NEW Operation LinkDistance(from,to) returns the total spatial link distance were an item to travel between locations on spatial links. Returns -1 if no link path is found.


  • FIX Hovering within a popup causing that popup to close now supported.


  • NEW Button state option "Retain Original Image Size" will prevent upscaling an image, centering it instead.
  • NEW Pressing "a" key while dragging/resizing is equivalent to pressing Keypad+ to change the snap grid. Fixed cases where the cycling wasn't being used.


  • FIX Upscaling artifacts when using an icon overlay command to create a larger colour swatch.

10.2.0 (Model Version 813)

  • NEW Border style "Single No Right" keeps the right edge of objects "open".
  • NEW Added alternate grid values DragGridX2 and DragGridY2 in platform INI settings / Edit. These enable a modeller to have coarse and fine grid settings in addition to no grid. You move between settings by tapping the keypad + key whilst dragging an object. Toggle Grid in the Window menu toggles between the current grid setting and no grid.


  • FIX Updated PL manifest to explicitly report Win10 compatibility. Fixes file browser in High Contrast mode after a breaking change by MS in Windows 10 1809 update. (backported to 9.41.5).


  • FIX Zero length table exception, re-enable exception dialog


  • SPEED Faster double data trasnfer to c#


  • NEW Columns via DLL interface support different rows being returned. More rows will grow the table, less leave existing rows at the end unchanged.


  • NEW Can return text array from c# to a text formatted table column.
  • NEW Implemented text colunm return for PLDLL (DLLAPI now at version 21)


  • FIX Returning a resized table when passing 2D array of double to dotnet.


  • FIX During the creation of a PBA, the model is compressed and encrypted.
    A long standing underflow conversion gotcha would cause the PBA to not load if an encrypted block started with a certain byte.

10.1.0 (Model Version 812)

  • NOTE Note that new UserKey licensing is separate to Planimate "KEY" files and is intended to give PBA's full control over license handling as well as developers the capability to embed custom fields in key files for their applications.
  • NEW UserKeyLoad() enables loading of a new format XML license key. If this fails it returns non zero and s.UserKeyLastError is set to the text of the error. s.UserKeyValid can be used subsequently to a load as well (it will be false before the first load).
  • NEW UserKeyLookUp() enables querying a named property of a loaded license key file. The result parameter can be numeric, date or a text formatted attribute.
    Refer to the license reference module for a listing of valid property names.


  • This is a major update with changes to how Planimate is built.
  • Planimate now incorporates some dotNET libraries and more are to be added.
  • Planimate now incorporates functionality of the PLCLR DLL and PLEngineCore.DLL.
  • Do not try use external versions of these DLLs with Planimate.
  • In particual models using "plclr:" need to be updated as detailed below.
  • NOTE The Edit/Find dialog is handy for finding "plclr:"
  • Replace: p.handle = plclr:new("mydll:myclass")
  • With: p.handle = CLRNew("")
  • Comments: An empty string uses the dll and class specified in the portal attribute instance definition you would have used to access methods and properties using the handle.
  • Replace: p.result = plclr:delete(p.handle)
  • With: CLRDelete(p.handle)
  • Comments: No return result
  • Replace: p.result = plclr:GetProperty(p.handle,"PropertyName")
  • With p.result = p.handle.PropertyName
  • Comments: For when the property name is a constant and p.handle is formatted for "Instance" with dll / class name specified.
  • Replace: p.result = plclr:GetProperty(p.handle,
  • With: p.result = CLRGetProperty(p.handle,
  • Comments: For when a dynamic property name is used OR the handle is not formatted for an instance.
  • Replace: p.result = plclr:SetProperty(p.handle,"PropertyName",r.value)
  • With: p.handle.PropertyName = r.value
  • Comments: As above, you also can use CLRSetProperty() if the name is dynamic
  • NOTE Properties support c# values, dates, strings, bool etc.
  • Replace: p.result = plclr:SetOwner(p.handle,r.paintid)
  • With: CLRSetOwner(p.handle,r.paintid)
  • Comments: For setting the owning window to either a paint-window or the current Planimate window, see WPFTest example.
  • NOTE Currently there isn't a replaceement for plclr:Call apart from explicitly naming a method after an instance handle.
  • MEW For developers of c# DLLs, access to PLEngineCore.dll is required for editing and compiling your code. Starting with this version, you can use the /SAVEENGINECORE command line option to extract PLEngineCore.dll.
    Note that the DLL is the same for 32 and 64 bit versions. It is updated occasionally with newer APIs, these will be mentioned in the release notes. You do not need to distribute it with your application.