ReleaseNotes:Planimate 4.27 Release Notes

From Planimate Knowledge Base
Jump to: navigation, search

Release notes, bug fixes and misc enhancements to Planimate 4.27


  • data set (scenario) saves now send the broadcast _DataSet Saved
  • changed data set load from the command line to use the same code as the model-initiated data set load


  • added new system-item attribute "Broadcast Receivers". This is set after an item is released by a broadcast dispatcher. It is set to the number of receivers that the broadcast was sent to. This includes all entries which produced an item and all sockets which sent the broadcast over TCP/IP


  • fixed bug causing crash in Find in change objects without a routine


  • The "Find->Advanced" list has a new item to find the instances of a specific routine operation. This can be used to find all times a spatial link target is assigned, a sort is done - anything that is selectable as a routine line operation.


  • Enhancement to Dynamic Object Copy enabling the object label list to be used to specify the location for the new object rather than the panel label list.

In the table defining the copy commands, instead of having a column called "_new_panel", a column called "_target_objpanel" can be used to specify a dynamic panel where the new object will be placed. This is looked up using the object label list.
In some models using the object label list may be more natural to specify a location for a copied object rather than using and maintaing the panel label list.
If both "_new_panel" and "_target_objpanel" columns exist, only the "_new_panel" column (panel label list) will be used. This is not good practice and in future having both columns may be tagged as an error so avoid having both columns in the one table.


  • BUGFIX: Spatial link routine operation "Set Link Target" was not properly clearing an internal item attribute used to track the distance the item is travelling. This would cause the computation of the spatial link time to be incorrect.

The bug did not affect using the system-item attributes to set the spatial link destination.

  • Have increased width allowed for system commands executed as part of a file access operation
  • Have created two new system attributes - Model Name and Scenario File. Numerically these return zero but if referenced in a form field OR using the new "Format Into Label" routine operation, the names can be made accessible to the modeller for display.
  • New routine operation "Format Into Label".

This enables any formatted attribute (including the string system attributes mentioned above) to be placed into a label list and allocated an index.


  • New feature: Create Standalone Application (File Menu).

This option enables a model and its resources to be packaged as a standalone executable which requires no other files to run.
When selected, it confirms that it will save the model before starting. It then:

  • Takes the current running EXE and copies it
  • adds to the copy the model (scrambled to prevent casual viewing)
  • adds the model's database (notes, icons etc)
  • adds all additional icons the model references
  • adds all additional BMPs/WAVs/AVIs/MPGs/MP3s that the model references
  • writes the result as an EXE with the name of the original model.
  • If a file called _APPBANNER.BMP is included in the same directory as the original model, it will be included in the standalone EXE and will be used as the application's about box. A template _APPBANNER.BMP file is included with this release.

Standalone EXEs are like InterDyne EXEs, they can only run in InterDyne mode. They cannot be unlocked into edit mode. They cannot save the model or load another one. They ignore any other DB files in the same directory, the resources are only loaded from the EXE.
Standalone EXEs do not (currently) need a key file to run.
The option should be used with a model which can locate all its icon resources (use display->Show Model Info to check icon and file references). Otherwise warning messages appear (but the build continues).
Media files (sounds, video) cannot be played from within another file. They are extracted to a folder created in the same directory of the EXE, called PL_Media. They are left there once used for future use. Watch out for conflicts if you have multiple EXEs in the same folder with identically named sounds etc which are supposed to be different.
Sounds are only copied into the DB if the name in the reference includes the ".wav" extention.

  • Change to media handling

Planimate can now play media files from within a database. It achieves this by extracting the files into a directory called PL_Media under the model working directory. When a media file which is not in the working directory is first selected in a Paint-Video object, Planimate now offers to copy it to the model's database. If this option is cancelled, Planimate will maintain a HARD full path spec reference to the media file instead. This will make it awkward moving the model but may be useful in a fixed setup/demo if media is being played from a CD-ROM.


Older interdyne builds still attempt to load the icons used in the object palette even though they will not be actually used. If these icons are not available, the InterDyne will take significantly longer to start up, especially if the EXE is on a network share with a large hierarchy under it. This is due to Planimate looking for the missing image files.
This has been fixed with the latest InterDyne build, but this is rapidly becoming obsolete with the save-as-EXE facility.
Showing file references while a paint image object is in the clipboard will no longer crash
Newly created paint images are not counted twice in file references


  • bugfix: time scale interval for a panel can now be set

by default this is 0, if you want to animate a viewport within a panel, the value will have to be set to 1 or a scale factor.


  • minimise option added to command execution from a change object. The option appears in the Options dialog for the file action menu, under the "File" object menu option.
  • fixed crash after model merge

Item attribute names were not being properly merged from the copy model into the loaded models. This would cause them to be doubly deleted when the model was closed, causing a gp fault.

  • fixed small memory leak which occured when arbitrary strings were loaded.


  • Have implemented an option in ODBC Read to leave the database open after the operation. This retains the connection to the DSN. If the same DSN is required again, the cached connection will be used and will be much quicker than opening a new one.

To keep a particular connection open over multiple change objects, each change object using that DSN must have the "Keep Open" option on.
Only one DSN can be kept open, a new one will override an older one.
However if a second DSN is accessed while an existing DSN has been cached AND the KeepOpen option is not on for the second DSN, the original DSN will remain cached/open.
Future Planimate versions may support caching multiple DSNs.
A modeller should close a DSN (by making the last access to it from a change object without the KeepOpen() option. Not doing so is not good practice and a warning will be logged to the Planimate debug file when the model is closed.

  • App Panels within App Panels can be included in flows


  • Password required to switch out of interdyne mode even with editor key


  • fixed long time bug in distribution pattern dialog which did not allow a stream apart from 0 once a PDF table had been assigned to a PDF distribution


  • fixed bug which caused the big string editor to appear for values as well


  • Fixed some issues with string table cell copying
  • Now support long strings with line breaks for table cell strings
  • Routine operation "force repaint" does not occur if advance time dialog is visible. This will make advance-to-time faster if the model has any force repaint operations in it.
  • Fixed bug in counting of redraws for panel screens


Any subsystem can create an object label reference for its owning portal using a new routine operation Label->Create SubSystem Label.
This is very useful in cases where a parent portal has been dynamically copy/pasted and a portal contained therein needs to also be referenced using an object label reference. A routine executing within this other subsystem can allocate and obtain a label reference for that subsystem and store it in an attribute, in effect creating a "handle" to that subsystem.
This helps avoids having to copy/paste systems in layers in order to get label references to subsystems deeper in the hierarchy which is copy/pasted


I've reworked the way server connections are handled to make the IP code more robust against unexpectedly closed connections


Initial test for initiating a URL read from a change object (FILE operation) no content is actually read from the web server yet.
The "from" spec can either be a file spec, in which case the URL is read from the first line of the file OR a direct URL reference.
In either case INI file mappings are applied to the from file name/URL


(removed older release notes from end of this file)

  • fixed another bug in TCP/IP handling which caused broadcasts to try to send over unopened server connections
  • Table fill/index operations will now stop at the edge of a selected region rather than continuing to end of the table
  • system confirms with user before changing the width of a column after a format change occurs


  • fixed bug introduced in d in IP code acting as client

yyyy-mm-dd date format is now formatted with leading zeros for mm and dd to ensure they are always 2 digits

  • broadcast buttons now support sending a broadcast to the scope of the dynamic panel they are most closely linked to.

This is an option of the broadcast (within the click action) and is on by default for new buttons as it encourages modularity.

  • paint button states are now selected by ID not by their position in the list

Each paint button state can be assigned an ID code. Older version models are assigned IDs 1,2,3 etc. and hence stay compatible.


  • I've implemented a basic web server for Planimate. It will serve simple web pages but its primary purpose is to facilitate Planimate being triggered via a URL, the completion of forms etc.

It will not cope with heavy loads (or complex pages loading multiple images) as it doesn't multi-thread its processing of requests.
To start the server, select Edit/Sockets and enable the HTTP server. Its disabled by default. If you have IIS running on your machine (or any other program already using port 80 to serve) you will have to use a different port #.
Once running the server responds during edit and run mode.
1. At the moment, just entering the address of the machine (I'll use loopback here,, assuming local testing) will yield debug diagnostics.
Eventually this will retrieve a model-default page instead and the debug will have a specific token to retrieve it.
2. Entering the name of a file in the current Planimate working directory (or a subdirectory thereof) will retrieve the file -> retrieves index.htm if it exists
The server will only serve htm,gif,jpg and txt files, for security
3. Entering a parameterised string as follows will trigger a Planimate broadcast (the model must be running)
In this case broadcast "mybroadcast" will be sent using item class "item" and if an item attribute called "attribute1" exists, it will be set to 12345. Many attributes can be set using '&' to append further assignments.
If during processing a broadcast, the model creates/writes to _www.htm in its home directory, this file will be sent back to the client. Otherwise a default _www.htm is generated and served back.
A demo model is provided to demonstrate this.


  • Implemented new time format

This format is used in SQL/ODBC dates



A new type of paint object called a "Button" has been added. This object has the ability to have a number of states defined, with an attribute reference determining which state the object appears in when the panel it is on is redrawn. States are indexed in the order that they are defined (and appear in the state menu for the button) starting at 1.
For each state, the button can have the following properties:

  • the style of border, background, text and border colours
  • the button text
  • the font used for the button text
  • the tool tip text
  • the name of a BMP image to fill the button background with
  • options whether
  • the button text should be centred or left aligned
  • the button text should be top or middle aligned
  • the button should be visible to the user
  • the button should be clickable by the user

States are given names, which are used when inheriting to propagate changes. States added to the parent are added to the children, states deleted from the parent are deleted from the children if they exist. States named unique to the children are left untouched.
I've not implemented and dealt with state ordering issues at this time.
In any case, the paint button will give modellers plenty of flexibility to create and manage dynamic user interfaces with far less complexity than previously.

  • fixed bug with ODBC diagnostic messages - the statement handle was being deleted before the debug message was displayed.


  • fixes a bug introduced in 4.27 which caused a crash if a control-paste replaced the original object which was copied.


  • Log Viewer no longer crashes with log model names
  • Added new dynamic object operation: REPLACE (command code of 3)

In this mode, _original_id specifies the object ID of the original to copy and _new_id must be set to specify the object ID of the object that will be replaced.
The new object will hence get the ID _new_id.
The _x,_y and _new_panel columns are ignored in this mode.

idkbase note 147