ReleaseNotes:Planimate 5.06 Release Notes
From Planimate Knowledge Base
- NEW Paint property "TextWidth" in the paint property label list
This is a read only property that enables a modeller to determine the width required for the current text in the paint button.
The actual button's width is not changed.
This is useful where the modeller wants to examine a number of paint objects, determine the maximum width, then set all the objects to that width. In this case, the "auto width" option should be off for the paint objects.
- NEW Routine operation "SetPaintTip". This enables the tip text of a paint button to be changed dynamically.
It is similar to the "SetPaintText" operation in that a parameter can determine whether it sets all states or the current state only. (relevant for buttons only)
- FIX The way that close-on-click popup panels were being closed was generating recursion in the "DeActivate" message handler. Though this was not noticeable to end users, it triggered debugger errors.
Have reworked the way popup panels close to avoid this.
Popups need to be tested in the various ways they can appear and be dismissed; this also includes viewports (which should not have been affected but use the same codebase).
- FIX Pipes with the "Adjust update interval to reduce errors" option selected no longer give errors if they are running with an hourly load rate set to 0.
- NEW The routine line editor will now edit long references in a multiline field. This means very long references can be displayed completely in the editor.
- CHANGE Title of Planimate window - "Planimate" now substituted by "Planimate(r) by InterDynamics"
- FIX Window title - removed the dangly "-" when "Ready" in edit mode
- FIX CTRL-Enter does not introduce an unexpected link break in a single-wrapped multiline field (eg: used in the expression dialog)
- FIX A leak in the expression parser when the entered expression had errors with the use of square brackets has been fixed
- NEW "//" is a shortcut to adding a comment in the routine operation selector
- NEW Alignment of values in "hr min" unit mode is now more consistent
- NEW A new column option "Precise Value Edits" will cause the edit field for that column to display the current value with up to 12 digits of decimal precision.
This option is useful where a table column displays data rounded to a couple of decimal points but the complete precision of the values must be preserved if the data is edited.
Commas and trailing zeros (after the decimal) do not appear in the field with this option on.
This option only takes effect with the "Value" and "Fixed" formats.
- NEW System attributes "MouseXPanel" and "MouseYPanel"
These return the co-ordinates of the mouse cursor relative to the TOP LEFT corner of the Planimate work area. They are useful when creating or positioning a popup panel window as this is the co-ordinate system that panels are positioned with.
This value is also not affected by the scroll or zoom of the current panel in the main window.
- NEW System Attribute (Engine) - "User Mode"
This is set non zero if the editing tools are unavailable (ie: the system is in user mode or a standalone EXE)
This enables a model to adapt its UI/operation for a developer or an end user
- NEW Label list option "Interpret '0' As Label Index 0"
This is useful where labels can sometimes be arbitrary digits and you want them treated as strings except for "0" which will be always interpret as label index 0 (usually the "empty" label)
This also takes priority over the "No Numbers" label option, ie: "0" will be allowed but no other numbers.
Note that it must be a "0" and not "00", "+0" or "0.0"
- NEW New popup panel option "Raised 3D Edge" gives a popup a raised edge like a popup menu. This option should be used with the "No Caption Bar' option also selected.
- CHANGE Have changed the way text in paint buttons with the "Fit To Text" option selected is aligned.
With the Fit To Text option on and a default button, text is centred with a margin on either side. The margin is now computed based on the size of the font in the button, rather than being fixed.
If either or both of "left align" or "right align" options are on, then no margin is added to either side of the button.
This is useful where buttons with hidden borders are being used to construct an interactive menu and you dont want extra margins on either end of the button.
- CHANGE I've made some changes to the value formatting code.
If a table column has the "Round Value In Views" option enabled, the "round Digits" is a +ve number and the units is "Value" or "Value With Commas", then enough decimal places are always shown to the specified precision and trailing zeros are not stripped.
Previously, this combination would only show up to 4 digits of precision and trailing zeros were removed.
- CHANGE The field width overflow indicator in formatted values is now always ">>>"
- FIX If a portal was copied and that portal used a scoped class that was defined further up the hierarchy (and hence not included in the copy) then that portal was pasted into a new model, then the platform would crash.
References to the class were not being properly purged from the copy/pasted portal
- FIX In certain error circumstances, a model could attempt to broadcast to itself before it was completely initialised at run start, eg: if a missing attribute error occured while the viewer was looking at a panel containing a table with a scroll broadcast.
I have changed the initialisation order to only enable the internal system broadcasts after the engine is fully initialised.
- Routine enhancements and fixes
- NEW "CopyFont" routine operation enables fonts to be copied between columns and table cells
REMINDER: When any cell in a column has a customised font/colour/fornat then every cell in that column uses a lot more memory and the table processes row operations much slower.
- FIX Expression parser would crash during editing if there was an error in a typed expression within a function (objects in memory were getting multiply deleted).
- FIX Routine editor menubar is now updated when a new routine attribute is added in the textual editor
- FIX Fixes a bug in the routine editor introduced in 5.06h which prevented adding operations without a target.
- NEW Panel Width and Height object properties (useful for a portal) are now writeable, enabling a panel to be resized dynamically
- NEW The reference text editor in the routine editor will now prompt if you want to add an unknown attribute (portal, routine or item if a flow is available) as they are typed.
The prompting occurs either when a character that cannot be part of an unquoted attribute name is typed, or when ENTER or TAB are pressed and the unrecognised attribute name is the last name in the expression.
It doesnt prompt if name text is edited in the middle of a reference; insert a whitespace after the name delimiter to get it to prompt you if you really want to add the attribute. This is to prevent incessant nagging as text is typed/revised in a reference.
During any given edit, it will only ever prompt once for a given attribute name/type combination, again to prevent nagging.
Tables, Columns and Label lists cannot be added on-the-fly.
- NEW A new INI value
If set, table columns wont be sorted by name in the routine dropdown column list. This might be useful where a specific order helps identify the columns rather than just the names
- NEW Routine operation "GetPaintProperty"
Enables a paint property, as determined by the property index from the "_paint property" label list to be read.
Note that some properties are only valid once the paint object has been initially drawn, for example width and height which may depend on the current paint object text and the current font mapped.
- NEW Routine operation "DeleteAllPaintObjects"
This deletes ALL paint objects on the destination panel. All paint objects inheriting from these objects are also deleted.
- NEW Routine operation "FitPanelToArea"
This resizes the work area of a panel to fit the objects contained within, with a specifiable border margin.
Note that some objects do not report their size correctly until they are initially drawn (as for GetPaintProperty notes above).
- NEW Time mode "xxhr yymin"
This is primarily an output mode intended for displaying an interval as integral hours and minutes - example:
3hr 16min 1hr 10min 12min
Times are rounded to the nearest hour/minute.
days/weeks are shown as hours.
- NEW _Data Object label list
Tables, attributes, label lists and sub label lists can have a label associated with them in this list.
This will be used in DataSet Version 2.
- FIX RowCount default for DeleteRow was not being set properly for a dynamic table reference
- NEW The End User option "Enable reading decimal commas" option has been renamed and now causes values to be displayed with commas instead of decimal point characters.
It applies to formats except scientific and the latitude/longitude formats.
If using decimal commas, do not forget to change the number separator from "," (Settings-> System Parameters) otherwise the number processor will get confused.
- NEW A new object property for track sections has been added:
A modeller can use this to instruct Planimate on whether a given section is "explorable" when Planimate does a "fill route steps" routine operation to resolve the exact route a train will take.
This is uesful where there are optional track configurations being explored, since the tracks for all the variations need to exist. The multiple tracks would normally create ambiguity errors.
For this to be useful, the "guess intermediate steps" option for the (sparsely defined) route should be off; the modeller should configure the sections using this property then trigger a "FillRouteSteps" for the train, so Planimate can build a non ambiguous route.
When a model starts/restarts, all sections default to SectionFillEnable=1 (enabled for searching). This state is not saved as part of the model. Hence existing models should work as before.
The setting of this option only affects the route step filler and has no impact on the train motion logic for existing routes and trains in the network
- FIX The expression system now properly handles a table column index being a sub expression with another reference (eg: a cell reference) without giving a warning.
NOTE: The editor doesn't suggest the correct column names for certain uses of nested table references. It will work if you manually type the correct column reference.
- NEW Dispatcher mode "Send Dynamic Broadcast"
In this mode a dispatcher sends a broadcast to a scope set by a reference, as for the normal broadcast.
Unlike the normal broadcast, the type of broadcast sent is determined dynamically by another reference.
This reference should be set to an attribute which has a valid broadcast label index, to identify which broadcast type to send.
Modellers should use this mode only where absolutely necessary as PL will not identify the dispatcher as a broadcast source since the type of broadcast sent is indeterminate at edit time. It can make a model difficult to understand and debug.
Document your intent when using it.
- FIX Label suggestion list updates as you type more of the label in
- CHANGE Saving an image on a panel different to the current panel no longer generates a flicker as the current panel gets resized to match the panel being saved
- This version addresses a few issues with importing and reading data
- FIX Importing data into a table with a different number of columns to the data and with an automatic resize could cause erratic behaviour, sometimes crashing the platform.
The import processor was using the incorrect # of columns after the resize, possibly overwriting memory.
- FIX The table importer will no longer complain if the last cell in a row is followed by an EOF instead of a new line before the EOF
- FIX The table importer will strip trailing spaces from values to prevent them causing errors in the number perser.
For labels, the modeller can select whether trailing spaces are removed or not in the label list.
- FIX The auto-type check in the attribute value dialog will not use a value spacer as a formatting hint unless the default spacer is a comma or the value is of "Value" type to start with.
This prevents the auto-typer getting confused in countries where long numbers are spaced with spaces instead of columns.
- FIX Item table references were not working at runtime because the table name was not being properly pre-processed, as of 5.06a.
- NEW When inheriting new paint objects onto a panel, they are placed in front of any existing paint objects on that panel but behind any un-inherited paint objects on the panel.
This keeps "local" paint objects on a panel in the foreground
- NEW Pop-up suggestions when entering a labellist and a label member both work
eg: l._colors[ will pop up a list when the [ is typed
- NEW Pop-up suggestions when entering a column reference for a table now works
eg: t.table[c. will pop up a list when the . is typed
(unlike for labels, a column label cannot be assumed as the column reference is sometimes an attribute, value or expression)
- NEW Paint objects and all the View types have an "Action Control" condition. This is similar to the View Control condition, except it controls whether the object will respond to clicks. This is useful where system state determines whether an otherwise visible object should be sensitive to clicks.
When the View Control condition is false, the object effectively becomes transparent to all clicks in it.
For Paint Objects, this applies in all modes except Paint Edit.
For the views, this applies when the editing tools are hidden and in run mode.
By testing the "HaveCurrentPendingEvents" system attribute, a view can be prevented from being modified if there are any scheduled events on the FEC.
- NEW Label lists have a new option "Remove Trailing Spaces". This removes trailing spaces on labels typed, pasted or imported into the label list. This supplements the "Remove Trailing Spaces" option available when setting up a file read.
Trailing spaces are not limited for label aliases.
- This version contains mainly fixes to 5.06A as testing of the new code
- NEW new object properties ObjectPanelWidth and ObjectPanelHeight enable the width and height of a portal's subsystem to be read
- FIX Selection of "Label" attribute field mode now works again in the graphical attribute reference editor
- FIX Extraneous quoting for labels containing a decimal in the second character fixed
- FIX BitXOR operator is consistently formatted like the other bitwise operators
- FIX Parser now reports if the label list name is bad for a label reference
- FIX Parser now handles functions when mixed with other operations
eg: 0 - t.datatable.ColumnIndex(c.Origin)
is useful for a reverse sort column index
Also extraneous brackets no longer are put around functions
- FIX Memory leak in parser
- This is an initial test release; a significant rewrite has occured which needs
- to be tested for compatibility with existing models.
- The expression parser and its integration into attribute references has been
- The key new capabilities are:
- - Any of the graphically specified attribute references can also be represented and edited textually, a big step towards a consistent routine "language".
(The graphical editor is still supported and is being enhanced next)
- - Expressions can be used for individual fields of a reference, such as the row and column index of a table.
This enables references such as
t.mytable[r.whichrow + 1][c.Column]
In previous versions, temporary variables would be required to do this,
- - A framework for strings without labels is in place
Expressions can handle any string without the need for a label list. This will be used to enhance PL's string capabilities in the future.
- - Functions with multiple parameters are supported.
- - PL will do its best to represent a typed-in expression as an equivalent attribute reference that would have been selected graphically.
This is important as there are many optimisations for the attribute reference objects.
- - Future framework for advanced references (eg: referencing data from within an external database, calling a DLL)
- As an example of the enhanced function capability, the following additional
- functions can be used in any attribute reference.
- min(x,y) : minimum of 2 values
- max(x,y) : maximum of 2 values
- atan2(x,y) : arctan; useful for finding angle of a line
- hypot(w,h) : find the length of a line with width and height
- The following basic "types" are recognised:
p. Portal attribute i. Item attribute r. Routine attribute l. Label list k. Class attribute s. System attribute/property c. Column label t, Table reference
- All the other references build on these.
- Further documentation will be posted to the knowledge base, in the meantime
- the routine editor's display shows the textual form of any reference
- edited with the graphical editor.
- IMPORTANT CHANGES
- Any previous model using *expressions* with cell references will not load.
- (these were very crude and I dont expect many people to have used them)
- This version saves in a new model file version
- Table column labels must be preceeded by "c." in all cases.
- System and Object Attribute names have had the spaces removed from them
- Spaces can be used in attribute/table names without quotes being required.
- Trailing spaces are always removed
(p.in counter + 3) / 5
- will expect the portal attribute to be called "in counter"
- A popup reference to functions is to be added.
- I am interested in any load issues or reference display problems in your
- existing models so please let me know.
- NEW New Animation Manager
- The Animation Manager and a lot of the supporting graphics code in
- PL has been rewritten.
- The previous manager was designed in an era of slow CPUs and video blit speeds.
- The algorithms it used did not scale well to handling many items and animating
- portals on larger work areas.
- The new manager opens up new possibilities for the future, though for this
- release the focus has been to get current PL capabilities working under the new
- The new manager uses more CPU and video bandwidth for simple models, but scales
- more linearly with complexity than the previous one.
- New capabilies:
- - Models with many items moving will animate far smoother
- - Changing of portal states/icons is much faster and has far less impact on the animation smoothness. Special effects with animating portals can be mixed with items animating over them without flicker
- - "zero time" animation with a high animate speed proceeds much faster, making it easier to "fast forward" through models with animation on
- - Item info panels impose less overhead on the animation
- - Item and Object icons can have time-dependent multi-state icons associated. These will animate even if the item or object is not moving or changing state, as long as time is passing or an item is moving.
This means the icons of multi-servers in "busy" state, portals in certain states as well as items waiting in a queue can have multiple BMPs associated with them and they will cycle between the images.
This is done by naming the BMPs like: TEST@00 TEST@01 TEST@02 and selecting TEST@00 as the icon. PL will then load the other images together for that image.
- - A default multi-state image time-advance of 100ms has been set for objects; the model can set this at runtime for an object using the "Object Property" attribute references.
- - the issue of "missing" items until a "continue" when changing panels has been resolved
- - items use less memory and there is far less memory throughput for models with a lot of animation (reducing memory fragmentation)
- - pipes are now rendered with a graded smoothing of the colours within
- - The end points of pipes no longer overwrite the object they connect to
- - attribute and cell views with a transparent background will redraw properly (though they impose an overhead when updating)
- - the new engine should not cause any slowdown in "advance to time" performance of the simulation engine
- - animating items should never leave debris (sometimes happened with auto-rotating items)
- Considerations and caveats:
- - A 1GHz PIII class system with 128MB RAM and AGP video is minimal if animation quality is important
- - WinME, Win98 and Win95 are no longer supported; no icons will display
- - The "No Backing Store" dynamic panel option is no longer supported
- - All dynamic panels will now allocate twice the memory for animation buffers.
For a 32 bit colour setup, the amount of memory allocated will be:
width * height * 4 * 2 * zoom-factor
eg: a 3000x2000 panel will require 48MB at a 100% (normal) zoom