ReleaseNotes:Planimate 5.31 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search


  • NEW Portals used on panels with Map Paint Objects have a new edit menu option "Update Map Co-ordinates".
    This is useful when working with Paint Maps which position portals in edit mode (5.31l) making it easy to set the map coordinate of portals and their adjacent bend points based on their screen position.
    Documentation updated:
  • NEW Map Paint object edit menu option "Clean Node/Bend Tables".
    This option should be used when portals are deleted from a panel with a map.
  • CHANGE Planimate will now delete portals even if they are linked into tracks/ pipes/spatial links. Any such links are also deleted.
  • FIX Replace dialog from/to lines now follow selection. From/To/OK ordering when working through the sub-dialogs.


  • NEW Paint map has option "Handle Drag During Object Edit"
    In Object mode (not paint) the map view now allows dragging and zooming (with wheel) the view with a mechanism for updating portals and bend points.
    The Map responds to drags only when the CTRL key is pressed. To zoom, give the map focus with a ctrl-click first.
    This reduces impact on object editing and drag selections.
    Detailed notes on this are on the wiki.
  • FIX Cell view with out of range column no longer closes PL when a row is added to the table.
  • FIX Preallocate route step instance table when initialising routes
  • CHANGE GetBendPoints() will get all bend points (links,pipes,tracks) if 0 is passed for link_type. The table should contain an additional column _linktype.


  • NEW Clicking on a broadcast entry in run paused mode shows a popup which will display the last time and last source of any broadcast.
    Clicking on the source takes you to that object.
    NOTE: only object sources are tracked at this time.
    The menu also contains a "Create One Now" option which used to be the default action when clicking on a broadcast entry.
  • NEW Menu bar option Menubar/Tools/Show Recent Broadcasts
    This pops up a list showing the most recent broadcasts, and (where available) which modelling object generated them.
  • CHANGE The "One Or More Views" message when adding an attribute view only appears if the destination panel already has a view for the attribute.
  • CHANGE New views appear at the top left of a panel.
  • CHANGE After selecting a broadcast for a table view, if a new selection is made and the user hasn't explicitly selected when the broadcast is sent, a dialog now notifies that the option dialog will appear next and why.
    This only appears once in a Planimate session.
  • FIX Changed the way map tiles are faded when the "Progressively Fade Upscaled Tiles" and "Anti Alias Upscaled Tiles" options are used together.
    Instead of becoming more transparent, the tiles are darkened.
    This works around a graphics bug in Windows 7 64 bit (GDI+).


  • FIX "Dont Show Zero" column option now prevents 0 appearing in the label list dropdown combo's field.
  • FIX Mouse scroll broadcast should now sense continuous scroll wheels better
  • FIX A repaint occuring in a drag now works again during simulate mode (was being locked out by redraw handling code)
  • FIX Changed alpha/offset for shadow (eventually will be settable by modeller).


  • FIX Fix routine editor issue causing random PL close
    The Routine Step Editor was enhanced for resizing in 5.30e (December), causing code to be called that used a variable that hadn't been initialised at that time.
    Most of the time the variable would be NULL; PL would fail in the rare cases that it wasn't.


  • NEW Object property "ObjectHide"
    This sets a runtime property on objects which defaults to off. When set:
    ** Object Icons wont display ** Objects wont animate items to their entry/exit ** Tracks/Links wont show items in them and not show their outlines ** Pipes wont display ** Object Names wont display
    Currently implemented for Portals, Tracks, Links, Pipes
  • NEW Item Class System Attribute s.ItemClassScale
    This sets a master scale factor (as an integer percentage) for ALL items of the class of the current item.
    Changes to this will apply to all items of the class upon the next display update or redraw.
    The value resets to 100 (no scaling) at the beginning of a run. The item specific s.ItemXScale and s.ItemYScale are applied in combination with the master scale factor for the item's class.
  • NEW Have rewritten how Planimate Based Applications (PBAs) are compiled.
    The codebase that compresses & encrypts DataSet2 files is now used when compiling PBAs, making them significantly smaller when a large model was part of the application.
  • NEW Added more buffer checking to catch string issues particularly in the routine editor and in formatting references.
    Please report *any* "system error" type messages as they indicate an unexpected situation in the platform.


  • NEW Planimate Map paint object rewrite & enhancements:
    Key new features: Map can dragged with the mouse and zoomed with the scroll wheel (with some simple model support).
    Summary Of New Features:
    Option:"Log Successful TIle Request" Option:"Progressively Fade Upscaled Tiles" Option:"TMS Map Tile Format" Supports map data in TMS format as used by MapTiler.
    New Properties: "Longitude", "Latitude" (retrieves centre position) "FixedMapZoom" (control of the fixed zoom option)
    New Map Routine Operation: "SetLatLongXY()" This gets the map to determine the closest centre Longitude/Latitude which maps a pixel within the map with another co-ordinate. This supports dragging the map with the mouse.
    Refer to wiki page for details.
    Useful information on map tile formats:
    Thanks to all who have contributed to progressing this capability.
  • NEW Modeller can now receive a broadcast when the scroll wheel is turned. This is enabled using the "Broadcast Scroll Wheel Events" Panel->Engine option.
    The broadcast is sent is "_Panel Scroll" and it includes attributes "_panel" and "_scroll".
    "_scroll" is negative when the wheel is rolled up and +ve when rolled down.
    If a viewport or popup has focus, the broadcast is sent to its subsystem.
  • NEW Label list "_paneldrag_commands" has names/values of commands sent by the _panel_drag broadcast
  • CHANGE Panel drag broadcasts are now also sent during simulate/run mode if the "Mouse Clicks While Running" option is selected.
  • CHANGE GetBendPoints() and SetBendPoints() operations will now also match columns named "_x" and "_y" if "X" / "Y" are not present
  • FIX Cutting a portal with a visible subsystem (eg: from the hierarchy) would close PL
  • FIX PL now handles animating items at an extreme zoom. Previously when an item left a spatial link or track to enter a portal, it could cause the animation manager to stall (releaseable with ESC key).


  • NEW Paint properties for paint buttons with images:
    ImageFrameCount Gets the number of frames of a multiframe image/animated GIF
    ImageFrame Gets/sets current frame of a multiframe image/animated GIF. Frames are numbered from 0.
    You will need to set paint property ImageTimeStep to zero before attempting to set the frame number as the default is to step through frames automatically.
  • NEW Routine operation "RepaintPaintObject"
    This repaints a single paint object plus all the objects/items in the animation layer.
    It is useful for redrawing maps and image paint objects which are not set to display in the animation layer and which do not change position and size, but just change their contents.
    Using this can avoid ForceRepaint, leading to smoother updating when paint objects like the map view are used.
  • FIX Reindex label list would lead to problems if a subsequent file load attempted to look up labels. The lookup would fail, causing duplicated labels to be created.
    It would be OK if the model was saved/reloaded after the reindex, but by then bad references to duplicated labels could exist in tables etc.
    This issue was introduced back in 5.24m and was caused by a cache not being rebuilt after the reindex.
  • REMOVE "Select License Key File" option removed from user mode menu bar.
    Modern models shipped as EXEs do not use this.
  • REMOVE The Load and Save DataSet options have been removed from the menubar.
    These were used by DataSet1 which is now obsolete.
    The button actions supporting dataset1 are retained for now but anticipate them being removed.
  • CHANGE The "Help For Current Model" option in the edit menubar and "Help..." option in the end user default menubar now only appear IF an explicit Help File Name has been set in the dialog at Menu Bar / Edit / Edit User Model Info.
    If you had the help file the same name as the model, you'll need to edit the dialog and enter the name for the help option to be available.
  • CHANGE The /SCENARIO command line option no longer loads a dataset1. Instead it sets s.LoadFileNamePath to the string. On startup a model could test this string for non empty and use it to preload a dataset.
    NOTE: For a PBA you can omit the /SCENARIO= and just provide a filename to achieve the same effect.
  • CHANGE Command line options descriptions updated, "Planimate /?" for a listing.


  • NEW Enhancement to text expression matching as used in column filters.
    '!' now has special meaning if it is the first character of a match term, it makes the match term a "NOT" term.
    A single term such as "!foo" will match everything except "foo". Likewise "!c*" will match everything that doesn't start with the letter "c".
    When a NOT term is followed by other match terms, it acts as an excluder. For example, "!cat;c*" will match all items starting with "c" except if its "cat" since the "!cat" part removes it from contention for further matching.
    In summary: When a NOT term is before another term, it acts as an excluder of anything matching the term after the "!". When a NOT term is the last term, it acts as an includer of anything NOT matching the term after the "!".
  • NEW Options added to Paint Map
    "Disable Anti-Alias For Downscaled Tiles" (default on) etc. Fixed zoom mode now supported.
  • NEW Track speed restriction now supports running trains faster than the nominal speed of the track (restriction level 100).
    Running at a restriction of "150" will run the train at 1.5 times the speed the train would run at if the restriction was "100".
  • FIX A table with "ClearOnSave" option could cause views to generate an error when saving.
    This should no longer occur.
  • FIX Changes in 5.24i had left the "Run In Real Time" model option dysfunctional - pending events were not being processed by the regular continue timer events.

  • CHANGE The "Directly Handle Clicks" option on a viewport now only applies 1) when running model 2) when in user mode
    This makes it easier to edit viewports. It also reduce inadvertent
    editing through a viewport which is beyond their intent.
  • CHANGE Updated internal compression libraries used for DataSet2


  • NEW In another significant leap in capability, Planimate now supports displaying maps stored as multiple segmented tiles and at various zoom levels.
    The format supported is known as "Slippy" as used in Open Street Maps and is described here:
    A new paint object, "Map" is similar to a paint image except you provide the name of a folder (where the map data is located). You specify the map range to display using longitude/latitude ranges in degrees.
    You can use new paint properties to set the view dynamically. "LongitudeFrom", "LatitudeFrom" (top left (NW) corner "LongitudeTo", "LatitudeTo" (bottom right (SE) corner
    Setting a latitude range is optional. Its best to just set the centre and let the map determine the latitude range based on the longitude range.
    The map object looks after selecting a resolution/zoom of tile to give the best display. It will automatically revert to lower resolution tiles for regions where high resolution images are not available, mixing them dynamically as needed. This is optional.
    New routine operations LongLatToXY() and XYToLongLat() work with the new Map object to efficiently translate co-ordinates (in a table) between panel pixels and map co-ordinates.
    Further details here:
  • NEW Routine operations MinIndexIFMatch and MaxIndexIFMatch
    MinIndexIFMatch(Match Column, Match Key, Data Column) returns the first row with minimum Data Column value for rows where Match Column matches Match Key.
    Returns 0 if no rows match.
    MaxIndexIFMatch does the same except finding the maximum.
  • FIX Prevent viewports without click-through being draggable during a run.


  • NEW Change object -> File mode "SaveWindowImageMemory"
    This works like SaveWindowImage except the image is put into the icon/image manager with the name specified. Any existing references to that image name will update when next redrawn (or animated).
    The first data target should be the portal index of the subsystem image to capture.
    This is useful for creating dynamic buttons which display the contents of other panels in the model.
  • NEW Dial has option to "Edit Owner" which is useful when its hidden.
  • FIX Saving image of a panel no longer flickers its contents
  • FIX Standalone EXE no longer supports ctrl-alt-shift to open panel in a popup.
  • FIX Shadows shown for objects in object mode
  • FIX Better defaults for distributions when original is constant 0
  • FIX Missing redraw for advance time dialog and distribution graph
  • FIX Dials now follow anchor rules of parent views (note unlike attribute views they will stretch/sink if both ends are anchored).
  • FIX Drawing issues of log driven graph with "Defer Updates" on causing missing updates.
  • FIX Viewport "invalid handle" error message, situation as follows:

- Model contains a viewport inside a viewport
- Viewports configured to directly handle clicks
- Inner viewport has the keyboard focus because it was clicked
- Model is running and user presses Ctrl-T
Normally this stops the engine and viewports hide/reinitialise.
In attempting to hide the inner viewport, the management structure for it was locked by the key event it was processing. This prevented it closing until the event is done.
The outer viewport (unaware of inner viewports) then forcibly closed the inner window, leaving the management structure with a broken window handle. Integrity checks detected this.
Was able to intercept a message to inform the management structure of its window being forcibly deleted.

  • FIX Showing references for an attribute view clicked within a viewport within another viewport.
    Note that viewports were not designed for editing nor nesting so take care with backups if you use them for this.
  • SPEED Further speed up to panel draw/redraw and switching panels. Fixed inefficient handling of queue/dispatcher overflow counter icon (forcing redraw/memory reallocation)
  • NOTE The following Dial modes are being reviewd. Some or all may be removed:
    Lamp CheckBox Value Label Image
    The intention is improve the remaining modes with supporting bitmaps etc.
    Paint buttons and attribute views can replace these capabilities.


  • NEW Paint button state options

"Flip Image" - flips the image left/right "Image Shadow" - draws image shadow (PNG/GIF)

  • NEW Portal option for Shadow (PNG/GIF images only) (note: shadow only shown during run)
  • NEW Item class option for shadow (PNG/GIF images only)
  • FIX Status line redrawing when setting activity string now uses correct font
  • FIX Changing model animation update interval now works when triggered from a broadcast.
  • FIX Reduce repeated data when clicking on dials
  • FIX Drawing PNG/GIF images with image offsets set beyond the source image range
  • FIX Paint-Image objects now also work with PNGs
    Note: the difference between a Paint-Image and a Paint-Button with an image is that the paint image doesn't keep the image in memory.
  • FIX Glitches with rotated icons introduced 5.31


  • FIX Fix tooltip/hand cursor registration - was causing problems for buttons in the animation layer


  • NEW The Planimate Animation Engine has been significantly revamped. Code consolidation, refactoring and new graphics APIs have boosted performance and enabled new capabilities.
    Please look out for any animation issues while the new framework settles in.
  • NEW Planimate now supports "PNG" image format for icons (object/item), paint buttons and the paint image object, including full support of per-pixel alpha blending (variable transparency) with rotation, scaling and flipping capabilities.
    PNG images which are not rotated draw faster (flipping is OK). BMP is fastest unless using transparency, then BMP is same as unrotated PNG.
  • NEW Planimate now supports animated GIFs in the same way it supports multi-frame BMPs using the IMAGE@01 IMAGE@02 etc naming notation.
    Animated PNGs are not supported (not standardised) but using the IMAGE@01 naming convention should work for PNGs.
  • NEW Paint objects now support high performance animation. A new paint object option "Show/Update In Animate Layer" makes the paint object behave more like an icon.
    With this option on, the paint object will be repainted every animation update (when all the other icons get updated).
    This means any positional (x,y) or property (state, zoom, transparency) change to the paint object will be automatically reflected on screen when the next animation update occurs, with no need for a wlow "force repaint".
    Paint objects with this option on appear behind object icons but in front of views and regular paint objects.
    All the objects with the option "on" retain their relative paint z-order.
    This option needs to be used with care, particularly with the paint "Image" object and JPGs. By design, this object does not cache images in memory, which can lead to high CPU usage.
    You can turn the option on and off at any time using the paint property "ShowInAnimateLayer". Turning the option off for objects which are not changing will improve performance but can cause z-order inconsistencies if there are overlaps with other objects.
  • NEW Paint buttons support multi-frame/animaged GIFs for their state images. This looks nice for hover states.
    Paint objects default to an update interval of 100ms. This can be set using the ImageTimeStep paint object property.
    When using a multi-frame image with a paint object, the ShowInAnimateLayer option should be turned on.
    For items, the systme attributes: "ItemImageXStep", "ItemImageYStep" and "ItemImageTimeStepMS" are used to control how frames are chosen.
    For objects, the object properties are: "ObjectImageXStep", "ObjectImageYStep" and "ObjectImageTimeStepMS"
  • NEW Paint objects have new properties "Transparency" (0 = translucent, 255 = opaque) "ImageRotation" (angle in degrees) "ImageTimeStep" (interval between images in milliseconds)
    They are defined in the _paint_properties label list and can be set/read using the SetPaintProperty() and GetPaintProperty() routine operations.
    Currently they are implemented for paint buttons with an image and no frame/text/background colour.
    Currently this parameter is not saved nor editable This will be reviewed as performance is evaluated.
    The intention is to add transparency for paint button frames and text. Initially you can use images for these effect.
    Theseertise are stored per paint button state, so changing a button's state can change its appearance/behaviour
    ImageTimeStep is useful with images with multiple images such as GIFs.
    NOTE: Using rotation slows down drawing, if you have a fixed rotation and many icons, you might want to use pre-rotated images.
    NOTE: This transparency is in addition to the per-pixel transparency that PNG images support.
  • NEW Paint buttons now support being redrawn whilst pressed down. This enables use of a background broadcast to update a button via a RepaintObjects() operation, enabling animated buttons.
  • FIX There is a fix in behaviour with button hover states. If you mouse down on a button then drag to another button, the current button retains the hover selection (and continues to track mouse entering/leaving it) until the button is released.
  • NEW When editing, you can now Hide paint buttons like other paint objects. The option has been renamed to "Hide (Temporary Editing)" to reflect the intent of the option - a temporary hide to facilitate editing.
  • NEW Can edit the view order for Portals. This is useful when animating then. The order can also be set numerically.
  • NEW Paint object view order can now also be set numerically.
  • NEW Paint object property "ViewOrder" enables the view order of a paint object to be read and set by a model using the SetPaintProperty() operation.
  • CHANGE Planimate now makes use of the "GDI+" graphics framework in Windows. This library has been standard since Windows XP.
    Be aware that Windows 2000 did not include GDI+ but if dotNET is installed then it will be there.
    It may be necessary to consider this if clients are using old (and now obsolete) versions of Windows. GDI+ can be downloaded here:
  • SPEED Portal Animation performance significantly boosted. Smoothly animating 2000 portals (BMP images) is now viable. Use s.CurrentPortalX and s.CurrentPortalY to position them.
    If your model is animating over time, you dont need to ForceRepaint() or RepaintObjects() as long as an animation update interval is set.
    If you are animating in a loop, use RepaintObjects(). This now also works with paint objects with the new Animate Layer option described above.
  • FIX Icon palette behaviour when an image of a different type but with the same name is re-selected is improved but some design issues mean its best to reload PL if you change say a bitmap to a JPG as its caching can be problematic.
  • FIX Fix leak in "Fit To Size" menu option for paint buttons
  • FIX Fit To Size on paint objects now supports having a single border.
    Previously border was not taken into account.