https://wiki.planimate.com/api.php?action=feedcontributions&user=Rick&feedformat=atomPlanimate Knowledge Base - User contributions [en-gb]2024-03-29T05:53:15ZUser contributionsMediaWiki 1.39.5https://wiki.planimate.com/index.php?title=Distribution&diff=4312Distribution2023-11-09T11:27:18Z<p>Rick: </p>
<hr />
<div>When specifying a random value, a numerical distribution can be selected which determines the statistical pattern of the random values.<br />
In Planimate random values may be involved<br />
<br />
* at en [[Entry]] condigured for periodic arrivals.<br />
<br />
* at a [[Delay]] for the delay time.<br />
<br />
* at a [[Switch]] configured to use a random pattern.<br />
<br />
* When using the [[Routine_Operations#random|Random]] routine operation.<br />
<br />
Different Distributions suit different situations, see[[Distribution Pattern Dialog]].</div>Rickhttps://wiki.planimate.com/index.php?title=Distribution&diff=4311Distribution2023-11-09T11:16:10Z<p>Rick: Created page with "Distribution Pattern Dialog"</p>
<hr />
<div>[[Distribution Pattern Dialog]]</div>Rickhttps://wiki.planimate.com/index.php?title=Category:Pages_using_DynamicPageList3_parser_tag&diff=4309Category:Pages using DynamicPageList3 parser tag2023-10-20T09:09:57Z<p>Rick: Created blank page</p>
<hr />
<div></div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4308Main Page2023-10-20T08:37:22Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2021|2021]],[[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
<br />
*[[View|Views]], [[Paint|Paint]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4307Main Page2023-10-20T08:35:49Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2021|2021]],[[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
<br />
*[[View|Views]], [[Paint|Paint]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
<br />
[[Category:]]<br />
<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Planimate&diff=4305Planimate2023-02-24T11:07:29Z<p>Rick: </p>
<hr />
<div>Planimate® is a simulation based development environment and is a product of [http://www.interdynamics.com/ InterDynamics Pty Ltd.], which uses the platform in the delivery of world class planning and scheduling systems.<br />
<br />
Planimate originated as a tool to visualise the effects of random variation on queuing and production lines.<br />
<br />
The notion of graphically building a simulation that animates individual event transactions in flows (we now call them items) was conceived by Dr. Douglas Seeley. Riccardo Macri has been Planimate's principal developer since its inception in November 1988. In the late 80s key underlying principles were forged, which enable Planimate to automatically "look ahead" and "unblock" items as they interact in the model.<br />
<br />
In the early 90's Planimate was known as SimView and developed under the University of South Australia's Techsearch group. With its innovative capabilities, a number of papers were published at this time.<br />
<br />
InterDynamics Pty. Ltd. was founded in Australia in 1992 and it owns Planimate, its trademark and the intellectual property behind it. The name Planimate was chosen as it embodies the intent of the software: facilitating system planning through the use of animation.<br><br />
<br />
Planimate has evolved into a comprehensive platform for creating applications that are highly visual and user friendly. For developers it retains much of its graphical programming roots while at the same time providing programmatic capabilities for complex simulation, rich user interfaces and connectivity to dotNET and C libraries for integration with data bases and business systems.<br />
<br />
__TOC__ <br />
<br />
=== Models<br> ===<br />
<br />
Planimate models are largely [[Graphical Modelling|graphically programmed]]. A time based discrete event simulation engine manages scheduling and concurrency in the simulated system. Random variation can be incorporated to test the model's resiliance to unexpected circumstances.<br> <br />
<br />
Models can dynamically restructure themselves whilst in-memory. This enables modelling situations where normally fixed resources are dynamically reallocated.<br> <br />
<br />
Planimate enables models to be wrapped into self contained applications. These are a single EXE with minimal installation needs, containing all the model needs to run. This streamlines deployment and updating of models in a reliable manner.<br> <br />
<br />
Input data, scenario configurations and results that a model generates can be stored outside the model itself, in highly compressed and encrypted data set files. <br />
<br />
=== Animation<br> ===<br />
<br />
A suite of GUI tools enables the visualisation of the activity and data as it is generated by the simulation model. These include icon over map displays, icons flowing over graphical decision trees, dynamically updating tables and status panels, a variety of graphs and chart types and heat maps. All these GUI elements support real time interaction with an user which can then feed back into the simulation model.<br> <br />
<br />
=== Distinction from traditional programming languages<br> ===<br />
<br />
Planimate's integration of animation, concurrency, data visualisation, workflow and time-based modelling give it an edge in the rapid creation of dynamic simulations. Traditional programming languages and spreadsheets do not natively support these concepts whereas in Planimate they are implicit and require no extra APIs or libraries to be mastered and managed. <br />
<br />
Planimate is used as a rapid prototyping enviroment as very little coding is required to produce conceptual level animations. These can be incrementally developed to include more system detail. For example, a mine can initially be modelled as a delay with a simple distribution and later enhanced to actually represent its physical structure and its operational characteristics and limitations. <br />
<br />
Planimate can animate both physical and logical activities. A physical activity might be the movement of a truck. A logical activity might be the business rules used to decide the next task the truck will be assigned to. This animation enhances the communication of concepts and operational practices and enhances ''visual verification'' of models.<br> <br />
<br />
Further detail on distinguishing capabilities [[Capability Overview|can be found here]]. <br />
<br />
=== Application Areas<br> ===<br />
<br />
Planimate is applied in many domains including:<br> <br />
<br />
*Transportation and Logistics Networks (rail, trucking, shipping)<br> <br />
*Manufacturing<br> <br />
*Warehousing<br> <br />
*Service Scheduling and Rostering<br> <br />
*Maintenance Planning<br> <br />
*Competency Training Simulators<br> <br />
*Mining<br> <br />
*Decision Support<br> <br />
*Testing &amp;&nbsp;Proof Of Concept<br> <br />
*Analysis of Complex Behaviours<br><br />
<br />
As it is easy to build simple models with Planimate, a number of universities use it to teach simulation concepts, statistics and logistics.<br> <br />
<br />
=== Availability &amp;&nbsp;Demo Version ===<br />
<br />
InterDynamics sells access to Planimate using a [[Licensing|licensing arrangement detailed here]]. <br />
<br />
A free [[Download|time limited demo is available here]]. This version is intended for initial exposure only and hundreds of revisions have occured since its release, adding far superior capabilities and performance than the demo. You can peruse the copious for an insight into the platform's continuing evolution. <br />
<br />
Educational institutions have free access to the demo version of Planimate. Please [http://www.interdynamics.com/ contact InterDynamics ]with details of your institution.<br> <br />
<br />
=== Support ===<br />
<br />
A number of support mechanisms are available to Planimate licenseholders [[Support|and they are detailed here.]]</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Planimate_12.x_Release_Notes&diff=4304ReleaseNotes:Planimate 12.x Release Notes2023-02-24T07:36:29Z<p>Rick: Created page with "__TOC__ === 12.26.21 === * '''NEW''' Model option / Advanced / "Pipe Detect Short Limit Crosses" enables pipes to send a limit cross broadcast if the respective source/target..."</p>
<hr />
<div>__TOC__<br />
<br />
=== 12.26.21 ===<br />
* '''NEW''' Model option / Advanced / "Pipe Detect Short Limit Crosses" enables pipes to send a limit cross broadcast if the respective source/target was outside the limit just before an update which causes it to re-enter the limit. With this off, the pipe requires a whole update iteration with the pipe not in the limit to re-enable a broadcast being sent.<BR/> This option is ignored if the "Only Pipe Stop/Start Resets Broadcasts" pipe option is selected.<BR/> This option is selected for newly created models.<BR/><br />
<br />
* '''FIX''' Ghosting Entry during advance to time<BR/><br />
<br />
* '''SPEED''' State changes of objects were doing unnecessary graphics.<BR/><br />
<br />
=== 12.26.20 ===<br />
* '''NEW''' A minimised routine window will run code with much less delay than when it is visible. This enables routine views to be left open, ready for when it is time to look at their execution.<BR/><br />
<br />
* '''FIX''' Routine Step Editor enabled edits in the panel window / menubar while it was open, creating confusing situations where a modeless window needed to be closed before another. This has been addressed for the routine list being in front of the main window as well as when the UnconstrainedPopupWindows INI option is set, that enables the routine list to be independent.<BR/><br />
<br />
=== 12.26.18 ===<br />
* '''FIX''' Ctrl-V- into a table is now prevented by the "Disable Block Edits" view option which already controls the context menu for this.<BR/><br />
<br />
* '''FIX''' Adding a random stream then immediately generating a preview.<BR/><br />
<br />
=== 12.26.17 ===<br />
* '''FIX''' Fix reference editing interlock which would re-enable an owning form prematurely when F2 was used to build a reference for insert into the reference edit dialog.<BR/><br />
<br />
* '''FIX''' Work around Win11 specific UI stability regression when editing the Dialog() routine operation. Now disable entire step editor instead of the selection list within it during the edit.<BR/><br />
<br />
=== 12.26.16 ===<br />
* '''FIX''' Some text fixes to pipe context menu<BR/><br />
<br />
=== 12.26.15 ===<br />
* '''NEW''' Routing editor Attribute menu has options to add all attributes in the routine to the watch list, with and without clearing the watch list first.<BR/><br />
<br />
* '''NEW''' Pipe context click shows the table cell that is in use and numbers have trailing zeros stripped.<BR/><br />
<br />
* '''NEW''' Pipe context click during run has new "Accumulators" submenu shown when Load/Unload Accumulators option is enabled.<BR/><br />
<br />
=== 12.26.14 ===<br />
* '''SPEED''' Train graphs display much quicker when the view contains many movements. (don't use anti-alias and transparency when showing densely packed data).<BR/><br />
<br />
=== 12.26.13 ===<br />
* '''CLEAN''' Internal project library cleanups<BR/><br />
<br />
=== 12.26.12 ===<br />
* '''CHANGE''' A blocking switch will now retest from reference t.table.RowCount or t.table.ColumnCount. However consider this may impact performance if a switch is using these references and many rows are inserted into the table individually, for example.<BR/><br />
<br />
=== 12.26.11 ===<br />
* '''FIX''' An empty or unmatched column name (string) is no longer acceptable in the AdvancedSort operation when using the "ColumnAsText" option.<BR/> You can use the filter column to exclude a column from the sort, if required (for info on the sort filter see notes for 9.33.0).<BR/><br />
<br />
=== 12.26.10 ===<br />
* '''FIX''' Added label for the missing column option property "ShowAsImage".<BR/><br />
<br />
=== 12.26.9 ===<br />
* '''CHANGE''' No longer attempt to service Panel Hide broadcasts generated while the simulator is stopping (eg: a Ctrl-T).<BR/><br />
<br />
=== 12.26.8 ===<br />
* '''FIX''' Extend change in 12.26.7 to not send pause broadcast in a background run and to only attempt to clear background events once after a broadcast that initiated a background run completes.<BR/><br />
<br />
=== 12.26.7 ===<br />
* '''FIX''' A _run_continue broadcast is no longer sent when a background (quietly processed system) broadcast) is sent. Was causing lockup when _System_Close broadcast was sent after a user explicitly stopped the run (leaving a never-processed event).<BR/><br />
<br />
* '''FIX''' Debug window Add FEC Events To Log checks for stopped model.<BR/><br />
<br />
=== 12.26.6 ===<br />
* '''NEW''' PLCLR supports c# methods with double? params where passing s.NullAttribute will set the double? to null. This should also work for CLRSetProperty()<BR/> It is NOT currently supported for: p.handle.PropertyName = s.NullAttribute The property will be set to "0". (the = operation currently only propagates a number).<BR/><br />
<br />
=== 12.26.5 ===<br />
* '''FIX''' Fix table format change issue introduced 12.26.4<BR/><br />
<br />
=== 12.26.4 ===<br />
* '''NEW''' PL NET API includes FORMATCHANGEEDIT table notification<BR/><br />
<br />
=== 12.26.3 ===<br />
* '''FIX''' AdvancedSort() was not checking for missing config table<BR/><br />
<br />
=== 12.26.2 ===<br />
* '''CHANGE''' When a user pastes from the clipboard, columns configured to "Protect From Edits" are skipped to prevent users having a workaround to change them.<BR/> Pastes within the Table Editor ignore protected columns.<BR/> If rows are added by the paste, protected columns remain at their default value.<BR/><br />
<br />
=== 12.26.1 (model version 845) ===<br />
* '''NEW''' QueryAnimation retrieves animation information about items on spatial links on a visible panel. Columns (all optional) are _x, _y, _itemid and _rotation. Any column without a preceeding underscore will receive any item attribute matching that name. Minimise such columns as the lookup is slow.<BR/><br />
<br />
* '''FIX''' QueryLinkItems and UpdateLinkItems were not matching columns by name, just requiring the names were present.<BR/><br />
<br />
=== 12.25.0 (model version unchanged) ===<br />
* '''CLEAN''' Internal refactoring of DLL/dotNet callbacks and main code modules to clean up the code and clarify calling conventions.<BR/><br />
<br />
=== 12.24.1 ===<br />
* '''FIX''' Additional dependency tracking when switch deleted during run.<BR/><br />
<br />
=== 12.24.0 (model version 844) ===<br />
* '''NEW''' View title click broadcast (model UI option enables) sends broadcast globally when the title of a view is clicked and no other conditions in the view have picked up the click.<BR/><br />
<br />
=== 12.23.1 ===<br />
* '''FIX''' Spatial link item animate offset when auto changing scale.<BR/><br />
<br />
=== 12.23.0 (model version 843) ===<br />
* '''NEW''' Panel/Display option "Scale Spatial Link Items" will scale items on the link in proportion to scaling applied to the start and end portals of the spatial link.<BR/><br />
<br />
* '''FIX''' Now support using a Column reference in switch Additional References.<BR/><br />
<br />
* '''FIX''' Error running a routine triggered by a value change broadcast from an attribute view when the attribute was changed by a routine. instead of user interaction with the attribute view / dial.<BR/><br />
<br />
=== 12.22.4 ===<br />
* '''FIX''' Gantt scale font now checks for customised Y scale font in Graph Settings<BR/><br />
<br />
=== 12.22.3 ===<br />
* '''FIX''' Area and line graph drawing optimised. Note change in 12.22.1 reversed, Note that the contour line should be used in an area graph if peaks and valleys at the same X position are important.<BR/><br />
<br />
=== 12.22.2 ===<br />
* '''FIX''' The UI code that provides a filtered dropdown list was failing if the same text with different case was present in two items. This can happen if a scoped label list has the same name but different case as a global label list.<BR/><br />
<br />
=== 12.22.1 ===<br />
* '''FIX''' Area graphs use the highest value when multiple y points share the same final x pixel on the graph. This happens when a large number of data points are displayed in a graph with fewer x pixels.<BR/><br />
<br />
=== 12.22.0 (model version 842) ===<br />
* '''NEW''' CheckViewExists() enables a model to test whether a panel contains a view to a table of a given view type.<BR/><br />
<br />
=== 12.21.5 ===<br />
* '''CHANGE''' ShowTableEditor and HideTableEditor support the reference being a data object list reference to a table.<BR/><br />
<br />
* '''FIX''' Gantt bar block dragging handling (from 8.67.0)<BR/><br />
<br />
* '''FIX''' Delay was not broadcasting change broadcasts<BR/><br />
<br />
* '''CHANGE''' Retain On Paste Replace for tables and attributes now also checks the state of the new "replacing" table or attribute. This enables a modeller to retroactively decide that data should be retained, by setting the option in the table or attribute which will be replacing the old. Paste/replace operations may be slower.<BR/><br />
<br />
=== 12.21.4 ===<br />
* '''NEW''' Model OBject and Paint Object label list overview dialogs now have new button "ReIndex" which will renumber the label indicies from 1. References to the labels in code, references and table columns formatted for the particular label list will be updated.<BR/><br />
<br />
=== 12.21.3 ===<br />
* '''CLEAN''' Remove redundant train-car position calculations<BR/><br />
<br />
=== 12.21.2 ===<br />
* '''FIX''' Delay and train tail handling issues introduced 12.3.1<BR/><br />
<br />
=== 12.21.1 ===<br />
* '''NEW''' Icon command [F:1] horizontally flips the icon<BR/><br />
<br />
=== 12.21.0 (model version 841) ===<br />
* '''NEW''' Additional 4 "taildata" fields for track train items.<BR/><br />
<br />
=== 12.20.5 ===<br />
* '''FIX''' Implement use of .Owner in object attributes eg: s.OwningPortal.Owner.ObjectXPosition refers to the portal containing the portal that contains the panel where the object is executing this code.<BR/><br />
<br />
=== 12.20.4 (model version 840) ===<br />
* '''NEW''' In routine operations expecting a panel reference for scope, you can use s.OwningPortal instead of s.OwningPortalLocation which resolves to the current panel even if the owning object has no object label.<BR/> This can reduce the need for adding portals to the object list.<BR/> This can be combined with .Owner eg: s.OwningPortal.Owner.Owner works two levels up the hierarchy.<BR/> The .Owner property will work with other reference to portals or panels such as l._model_objects[Location].Owher however it currently does not resolve to a number, only use it in routine operation parameters expecting a panel.<BR/><br />
<br />
* '''NEW''' CopyPortal() and RemovePortal() now support item flows. When copying, if the copy is on the same panel as the original, any immediate path steps before and after the original portal will be copied to the new portal. Useful in cases such as a switch preceeding the original portal.<BR/> RemovePortal() will delete any paths the portal was on.<BR/><br />
<br />
* '''CHANGE''' No longer retain previous name/title in the add table dialog.<BR/><br />
<br />
=== 12.19.0 (model version 839) ===<br />
* '''NEW''' Paint Button's have options to set an x and y pixel offset for the text they display. This is intended for fine alignment when unicode symbols are used. Ensure you do not position the text outside of the paint object bounding rectangle.<BR/><br />
<br />
* '''CLEAN''' Remove obsolete context help labels<BR/><br />
<br />
=== 12.18.1 ===<br />
* '''NEW''' Options related to time moved from the Run and Settings menus to a new Time menu.<BR/><br />
<br />
* '''NEW''' Renamed and streamlined Tools / Time Field Format to "Relative Time / Calendar Date Reference" to make it easier to switch from the default Relative Time mode (useful for statistical education models) to Calendar Date (useful for schedule based models).<BR/><br />
<br />
* '''NEW''' New models default to having a clock view which can be positioned, copied between panels or deleted as appropriate for the model being created.<BR/><br />
<br />
* '''CHANGE''' NEwly added clock views justify center.<BR/><br />
<br />
* '''NEW''' Help menu has a link to the NEW Planimate Discussion Forum.<BR/><br />
<br />
* '''NEW''' Clock Display Format Preference "Relative Seconds Since Start" now shows the clock as a relative time even when Planimate is running in Calendar Time Mode.<BR/><br />
<br />
* '''TIP''' You can add a new clock view using Panel context Right Click / Add / Data View / Clock.<BR/><br />
<br />
=== 12.18.0 ===<br />
* '''REMOVE''' Inbuilt signing of PBA EXEs.<BR/><br />
<br />
=== 12.17.2 ===<br />
* '''NEW''' End User model option "Don't Load In Planimate LITE".<BR/><br />
<br />
=== 11.17.1 ===<br />
* '''REMOVE''' Command line options for compiling a PBA<BR/><br />
<br />
=== 12.17.0 (model version unchanged 838) ===<br />
* '''NEW''' PLEngineCore dotnet API: (Version 13) DataObjectName(IntPtr) : the name of table/attribute/labellist TableTitle(IntPtr) : the title of a table DO DataObjectIndex(IntPtr) : Data object index of the DO, 0 if none DataObjectExportName(IntPtr): DO name of object or "" if not in DO list<BR/> DataTable TableName property and ExtendedProperties "TableTitle" and "DataObjectIndex" are now set when calling GetDataTable().<BR/><br />
<br />
=== 12.16.2 ===<br />
* '''FIX''' Expired PBA was not displaying a message.<BR/><br />
<br />
=== 12.16.1 ===<br />
* '''FIX''' UTF8 / Unicode support through PLCLR dotNET interface.<BR/><br />
<br />
=== 12.16.0 (model version unchanged) ===<br />
* '''NEW''' Can send an attribute, cell formatted for a label list as well as a direct label reference to dotNET as a string parameter The string will be null if the parameter isn't a valid label.<BR/><br />
<br />
=== 12.15.1 ===<br />
* '''NEW''' PLCLR passing a p.handle can be received using an "Object" c# type.<BR/><br />
<br />
=== 12.15.0 (model version 838) ===<br />
* '''xc'''<br />
<br />
* '''NEW''' SavePanelImage has a new scale parameter (default 1). Setting zoom to 2 or 4 causes the panel size to be scaled as well as fonts, line widths and icons. Other values are not recommended.<BR/> This results in a higher resolution and higher quality image, it is not just pixel doubling (the same mechanism is used when printing a panel).<BR/><br />
<br />
=== 12.14.0 (model version 837) ===<br />
* '''NEW''' File option AddUTF8Header will include the 3 byte UTF8 header in data files. This header helps some programs realise the file is multi-byte unicode instead of ANSI but may confuse other programs so use according to where your file is being read.<BR/> This option is ignored if ANSI encoding mode is being forced.<BR/> See the notes for 11.3.6 for info on how PL defaults to ANSI for older models and UTF8 for newer ones when reading/writing from CSV files.<BR/><br />
<br />
* '''FIX''' Reading data from file now checks/strips UTF8 header. A UTF8 header overrides any parameters to use ANSI.<BR/><br />
<br />
* '''FIX''' ReadViewFromFile() was ignoring options/defaults related to UTF8/ANSI.<BR/><br />
<br />
* '''FIX''' Extra detail when a bad character is parsed as a value/time.<BR/><br />
<br />
=== 12.13.4 ===<br />
* '''SPEED''' Reduce overhead When a track model has selected not to use the blocked trains list, or a model contains no tracks.<BR/><br />
<br />
* '''CHANGE''' Wider list when selecting a DLL/class for a handle attribute (c#).<BR/><br />
<br />
=== 12.13.3 ===<br />
* '''CHANGE''' About box label<BR/><br />
<br />
=== 12.13.2 ===<br />
* '''FIX''' Cell specific fonts supported for table views without customised columns<BR/><br />
<br />
* '''FIX''' Setting Cell Specific font for a selected range of cells (TIP use a column font instead of cell specific for an entire column)<BR/><br />
<br />
=== 12.13.1 ===<br />
* '''NEW''' Key Class changes<BR/><br />
<br />
=== 12.12.4 ===<br />
* '''NEW''' PL API v12 adds GetColumnInfo(), GetCellInfo(), GetTitleFont(), PLColorToARGB() and IsNoneColor()<BR/><br />
<br />
=== 12.12.2 ===<br />
* '''FIX''' DescribeFont() now determines the font that will be used to show a cell even if it is defaulting to table or model default. It can be called with a column or entire table reference to determine the font that will be chosen at that respective level.<BR/><br />
<br />
=== 12.12.1 ===<br />
* '''CHANGE''' Retain expanded state of a tool window even if it is empty.<BR/><br />
<br />
=== 12.12.0 (model version 836) ===<br />
* '''NEW''' Panel property ActAsChildWindow enables changing that panel option on the fly.<BR/><br />
<br />
* '''NEW''' Paint property "Type" enables model code to act differently for different paint object types (eg: buttons vs. viewports).<BR/><br />
<br />
=== 12.11.6 ===<br />
* '''FIX''' PL DLL StringToValue now performs heuristics if the format doesn't parse (like CSV file read).<BR/><br />
<br />
=== 12.11.5 ===<br />
* '''NEW''' PL DLL Api added column title callback, API version 11.<BR/><br />
<br />
=== 12.11.4 ===<br />
* '''FIX''' PositionPaintObject had incorrect offsets when objects were starting with negative co-ordinates.<BR/><br />
<br />
=== 12.11.3 ===<br />
* '''CHANGE''' Holding Ctrl while double clickling a code object opens the routine using a default window position instead of any saved position.<BR/><br />
<br />
=== 12.11.2 ===<br />
* '''NEW''' Platform INI setting INI / DebugLogFile enables override of where Planimate places its debug log file.<BR/> This is useful where running Planimate from a synced location causes problems with the log file being held open by Planimate.<BR/><br />
<br />
* '''FIX''' Linux build<BR/><br />
<br />
=== 12.11.1 ===<br />
* '''FIX''' SaveImage() required a model object on the panel otherwise saved image was black.<BR/><br />
<br />
=== 12.11.0 (model version 835) ===<br />
* '''NEW''' Border Style: "Single Top Right"<BR/><br />
<br />
* '''FIX''' Added retries to renaming files to work around short term locking by file syncers and A/V scanners. Retries every 5 seconds up to 30 seconds.<BR/><br />
<br />
* '''FIX''' Pasting copies of anchored views<BR/><br />
<br />
=== 12.10.0 (model version 834) ===<br />
* '''NEW''' System attribute s.SystemTimeZone returns the number of minutes that the operating system time is ahead(+) or behind(-) of UTC. This will also include any daylight savings in effect.<BR/><br />
<br />
* '''NEW''' System attribute s.ActiveTimeZone On PL start this is set to s.SystemTimeZone and does not automatically change (eg: if daylight savings starts while Planimate is running).<BR/> Modellers can change this value but it is not saved in a model. It is only used to calculate the "Local" time zone for the new "ISO Local" format (see below).<BR/><br />
<br />
* '''NOTE''' The existing system attribute s.TimeZoneCorrection specifies the number of minutes to offset dates displayed/input for all calendar time formats apart from the new "ISO" formats.<BR/> It enables the model to store dates in UTC but display/edit them in a local time zone. This value is saved with models and can be edited in the "Calendar Time Reference (Editing)" dialog which appears when you select Settings / Time Field Format / Actual Calendar DateTimes.<BR/><br />
<br />
* '''NEW''' Support for ISO-8601 formatted dates. eg: 2020-12-31T23:59:59+10:30 is one second before 2021 in SA/Australia.<BR/> These datetimes can include a timezone adjustment or end with "Z" to indicate "Zulu" / UTC standard time.<BR/> Planimate supports 2 new value Formats:<BR/><br />
<br />
* '''NEW''' Format: "ISO UTC YYYY-MM-DDTHH:MM:SSZ" assumes your model's datetimes represent UTC and outputs them as such.<BR/> If incoming data (eg: in a CSV file) includes a time zone, it is translated to UTC.<BR/><br />
This format is unaffected by s.ActiveTimeZone or s.TimeZoneCorrection<br />
but the latter may be useful if you want to display your dates<br />
in local time.<BR/><br />
<br />
* '''NEW''' Format: "ISO Local YYYY-MM-DDTHH:MM:SS+XX:YY" This presents/inputs datetimes assuming the time zone is s.ActiveTimeZone.<BR/> Note that s.TimeZoneCorrection is ignored so for output you will see the original datetime with the time zone set by s.ActiveTimeZone.<BR/> Imported dates with a time zone will be adjusted to s.ActiveTimeZone.<BR/> Using this format requires care if running the same model/data in different timezones as the datetimes displayed are not changed.<BR/> This may be useful if you want the dates to be "relative" regardless of timezone, eg: specifying a 9AM start, however writing data with this format will tie it to the current active timezone and cause it to be shifted if imported with a different active timezone. However this is not an issue with DataSet2 saves/loads.<BR/><br />
<br />
* '''TIP''' s.SystemRealTime returns the current local time. s.SystemRealTimeUTC returns the current UTC time. Do not subtract them to get the timezone offset.<BR/><br />
<br />
=== 12.9.2 ===<br />
* '''FIX''' AutoAddLabel PLAsDLL callback fixed<BR/><br />
<br />
=== 12.9.1 ===<br />
* '''NEW''' Switch mode "Lookahead Separator" separates a lookahead test (before item leaves the previous object) and the movement (when the item actually moves to the switch) onto separate paths.<BR/> This enables modelling of very fancy "look around" situations where one changes what happens to an item based on something more distant than the next object. This is useful in cases where the Delay's "Lookthrough Test" is insufficient (eg: because multiple Delays are involved depending on logic on the other side of them).<BR/> To be useful, use s.DisableUndo to enable state to be captured in the lookahead flow (first path) which can subsequently inform the logic when the item moves (second path).<BR/> It is valid for the lookahead path to block but the move path cannot block. The switch "Assume No Blocking" option is implicit regardless of its setting.<BR/> Note that cached decisions made on the lookahead path are not retained, only data explicitly set within s.DisableUndo.<BR/><br />
<br />
=== 12.8.4 ===<br />
* '''FIX''' Combo box edit field as used in table cells configured to edit with combo was not supporting Unicode.<BR/><br />
<br />
* '''FIX''' Importing from clipboard was not processing as Unicode.<BR/><br />
<br />
=== 12.8.3 ===<br />
* '''FIX''' Conveyor co-ordinate handling when the conveyor is on a resizable panel.<BR/><br />
<br />
=== 12.8.2 ===<br />
* '''FIX''' Change targetting of a library to work around a bug in early versions of Windows 10 that prevented loading licenses if running over a network instead of from an internal drive.<BR/><br />
<br />
=== 12.8.1 ===<br />
* '''FIX''' Conveyor deadlocks when conveyors linked by both control and interlock and item was blocked on the first conveyor by a gate, and all are released together.<BR/><br />
<br />
=== 12.8.0 (model version 832) ===<br />
* '''NEW''' Splitter option "Incoming Item Is Last Out" will cause an incoming item which matches the outgoing item class to leave the splitter after other items created for that splitter output record, instead of the current default of exitting first. This is very useful when waiting on a broadcast or message that is split into multiple items.<BR/><br />
<br />
* '''CHANGE''' Conveyor rounds length to prevent indeterminate behaviour. These are rounded to 0.00001 units. Note the space available comparison threshold remains 0.0001 units.<BR/><br />
<br />
* '''CHANGE''' Conveyor minimum running speed is 0.0001 units/second.<BR/><br />
<br />
=== 12.7.0 (model version 831) ===<br />
* '''NEW''' Conveyor option "HidePlaceholder" does not sure the placeholder icons on the conveyor.<BR/><br />
<br />
* '''NEW''' Delay,Queue,Pickup,DropOff have new option Show Occupancy which shows the number of items inside them as a small number at the top right of the object.<BR/><br />
<br />
* '''SPEED''' Conveyor optimised, more advanced unblocking when multiple flow feed a given conveyor.<BR/><br />
<br />
* '''CHANGE''' Text in the RUn menu<BR/><br />
<br />
=== 12.6.1 ===<br />
* '''NEW''' Conveyor now supports changing Minimum Distance during run. If the distance is increased, existing items that are too close to the one in front will not move until the one in front moves to create enough space. If the distance is reduced, a packed conveyor will repack as the items can get closer. It may also create an opportunity for an item to enter.<BR/><br />
<br />
* '''NEW''' Can directly edit a Conveyor's options as well as use a reference which is useful for beginners and simpler use cases.<BR/><br />
<br />
=== 12.6.0 ===<br />
* '''CHANGE''' License browse text not to always expect the license is actually in the email since demos access it via a link in the email.<BR/><br />
<br />
* '''CLEAN''' Internal cleanup to item code, possible speed up.<BR/><br />
<br />
* '''NEW''' Conveyor has new option "SlideOff" which causes capacity in the conveyor to be held after an item leaves. This is achived by creating a "placeholder" item which is shown as transparent. This item must travels until its entire length is past the end of the conveyor then disappears (the real item is already in the next object).<BR/> This option makes most sense when: 1) either of:<br />
- StopOnBlock is not on, so items pack, and you don't want<br />
items to pack into the space of an item that has left the conveyor<br />
- the conveyor is very short so the front item directly impacts the<br />
next entering item and if the front item just "disappears" from the<br />
conveyor, it would create unrealistic capacity.<br />
2) the conveyor is followed by another conveyor with SlidOn<br />
(if you want to be precise about the distance travelled)<br />
3) the conveyors have linked speed<br />
(otherwise note the speed of the placeholder will not relate to the<br />
speed of the real item).<br />
4) If stopping is involved, the conveyors are linked (same Interlock<br />
Controller attribute, otherwise expect the placeholder to<br />
follow the motion of the conveyor it is on, regardless what<br />
happens to the conveyor the real item has moved onto.<BR/><br />
<br />
* '''FIX''' Deadlock with a StopOnBlock conveyor followed by a SlideOn conveyor when separated by a blocking switch and sharing an Interlock Controller attribute.<BR/><br />
<br />
=== 12.5.0 (model version 830) ===<br />
* '''NOTE''' Uses new _Planimate_System.DB<BR/><br />
<br />
* '''NEW''' Delay has new state "Stopped" which is active when the control attribute is used to halt a delay.<BR/><br />
<br />
* '''NEW''' "Stopped" object state flag, as reported now by a stopped Delay.<BR/><br />
<br />
=== 12.4.2 ===<br />
* '''NEW''' Context click on Queues lists all items<BR/><br />
<br />
=== 12.4.1 (model version 829) ===<br />
* '''NEW''' Switches have the option to add "Additional Dependencies" where you specify extra attributes/columns/tables that a blocking switch needs to retest on after they change.<BR/> This is useful where a routine that executes in lookahead preceeds a blocking switch which uses the result of the routine eG: in an item attribute. In such cases the switch does not know the original data that may change and enable it to open. Such data references can now be explicitly added to the switch.<BR/><br />
<br />
* '''NEW''' Entry "Count" value is now a reference for Single and Periodic entry modes. This value is read before the _Run_start broadcast. A modeller can dynamically control the value using the _PreInit_Start or _PreInit_End broadcasts.<BR/><br />
<br />
* '''NEW''' PickUp / DropOff now support context click during run to show their contents.<BR/><br />
<br />
=== 12.3.1 (model version 828) ===<br />
* '''NEW''' Added "Control" attribute to Delay, setting this to 0 stops the delay and back to 1 resumes it. This enables a delay to be interrupted and subsequently resumed. Note that finished items that are blocked from leaving are not impacted by control, they will leave when possible. Items can enter when the delay is stopped. Preceed with a blocking switch if the block should propagate back.<BR/> Control is only available for regular time delays not Pauseable0 or low priority modes.<BR/> Note this function is untested with train tails. For best performance leave control set to "1" if not ever used.<BR/><br />
<br />
* '''CHANGE''' Internal cleanup of unblocking for conveyor and delay.<BR/><br />
<br />
* '''REMOVE''' Delay "Max Capacity" value. The capacity is solely determined from the reference.<BR/><br />
<br />
=== 12.2.0 (model version 827) ===<br />
* '''CHANGE''' Conveyor now has separate Control for end user to start/stop it (1/0) and "Interlock Controller" which if set to an attribute enables conveyors to be linked. Remove any existing code that clears this value. Description below updated.<BR/><br />
<br />
=== 12.1.2 ===<br />
* '''CHANGE''' PickUp is more flexible in use of item references If "Create Carrier Automatically" is set and the Quantity Before Pick Up uses an item reference, the incoming items that get carried are used for any item references. They may have a trigger quantity or a reference to a table row, for example.<BR/> Otherwise (a carrier item is expected to enter) then:<br />
- if the pick up quantity reference does not require an item<br />
to evaluate, it is tested as each item enters to determine<br />
if a carrier should be admitted.<br />
- if an item is required, then an unblock is performed<br />
as each item to be carried enters and the item attributes<br />
of any waiting carrier are available to the reference.<BR/><br />
<br />
* '''NEW''' DropOff option "Carrier Leaves Last" causes the carrier to only exit the DropOff after all other items have exitted. This is useful in cases where the carrier needs to be held whilst the items it is releasing are processed.<BR/><br />
<br />
=== 12.1.1 (model version 826) ===<br />
* '''NEW''' The Conveyor object, in early development. Editing options (all references): Conveyor ID: Sets s.ConveyorID for the other references apart from Interlock Controller. Length: Length of conveyor in units, relative to s.ItemLength Speed: Speed conveyor moves at in units per simulated second. A zero value stops the conveyor. Minimum Distance: spacing between items in addition to s.ItemLength Options: A bit field using l._conveyor_options StopOnBlock (1): Conveyor stops when exit item blocked instead of packing items to their minimum distance. SlideOn (2): Instead of an item entering a conveyor when there is space for its entire length (ie: dropping onto the conveyor) an item is allowed to enter the conveyor when mimimum distance is met. This means the item experiences the entire length of the conveyor (end hence delay) but means the item's tail extends past the length of the conveyor upon its entry (eg: on a loading shelf) Control: Set to 0 to stop a conveyor, 1 to start it. Interlock Controller: Ignored if a constant, if set to an attribute for multiple conveyors then they will interlock and if any stops they will all stop. Conveyors modify this value during model preinit, do NOT clear or modify it at any point in the model. Recommend using a portal attribute.<BR/> The following can be changed during run, others will be ignored: Speed Control Options - StopOnBlock behaviour can be changed Minimum Distance (as of 12.6.1).<BR/><br />
<br />
* '''NEW''' System attribute s.ConveyorID returns the value as set for a given conveyor and is for use within a conveyor's properties such as Speed, Length, Minimum Distance etc. This is useful as a row index into a configuration table.<BR/><br />
<br />
* '''NOTE''' For conveyor properties, using MatchedIndex instead of a cell reference with fixed row and column will introduce a performance bottlenecks particularly if *any* cell in the configuration table is changing often, because *all* associated Conveyors will re-evaluate their state upon every change.<BR/><br />
<br />
* '''NEW''' Item class enables setting the default Item Length for items of that class. Previously all items defaulted to a value of "100", now the default for a class is "1" and this can be changed in the item's context menu.<BR/><br />
<br />
* '''NEW''' s.ItemLength now can be set in lookahead. Item length is used both in Tracks in length mode and Conveyors. Conveyors require it set in lookahead in order to measure if the item can fit before the item is allowed to enter the conveyor.<BR/><br />
<br />
* '''NEW''' PickUp option "Create Carrier Automatically" changes behaviour to not wait for a carrier item when items are ready to pick up, but rather create a carrier item as required which then is loaded with the items to carry. The PickUp object should have one outgoing path and the class of that path is used for the item. The item will have s.ItemActAsCarrier set for it.<BR/><br />
<br />
* '''NEW''' PickUp option "Carrier Only Enters If Can Exit". With this set, a carrier item will not enter a PickUp until testing past the PickUp indicates that the carrier will be able to immediately leave.<BR/><br />
<br />
* '''NEW''' Breakpoint dialog has a new button to enable stepping to the beginning of the next routine that is executed.<BR/><br />
<br />
* '''CHANGE''' Internal refactoring of engine, many renames, run time speedup.<BR/><br />
<br />
* '''FIX''' Typing an unknown label into an "Edit With Field" cell associated with a bit mask label list no longer adds a label.<BR/><br />
<br />
* '''FIX''' The Queue option "Look Through In Lookahead", which tests objects past the queue before enabling an item to enter the queue, now also tests that the queue has capacity for the item given its constraints.<BR/><br />
<br />
=== 12.0.0 ===<br />
* '''FIX''' Handling of tracks held either by loop delay holds or train tail events when the model was stopped to eliminate system errors introduced when engine control was rewritten (v9.25)<br />
<br />
[[Category: Release Notes]]</div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4302Main Page2022-05-31T11:02:56Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2021|2021]],[[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
<br />
*[[View|Views]], [[Paint|Paint]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4301ReleaseNotes:Feature Review December 20212022-05-31T10:58:19Z<p>Rick: </p>
<hr />
<div>The last two years have seen focus on major initiatives for Planimate.<br />
<br />
This summary covers Planimate® enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.<br />
__TOC__<br />
== Unicode Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide.<br />
File/data operations now enable the developer to control when ASCII or Unicode are used, important for data interchange with systems with different capabilities.<br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate.<br />
A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details.<br />
Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application with the core engine and UI being C++ and Win32. This enables it to deeply integrate with dotNET code including embedding of dotNET controls (eg: LiveCharts graphs) into models. There's a mature and straightforward interface between Plamimate's fast Table, Attribute and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing.<br />
The core interface is called PLCLR and it provides flexible data conversion to c# types and the ability to browse and use c# class properties and methods from Planimate routine code.<br />
An open source c# library, PLEngine enables sophisticated interaction between c# modules and Planimate including interfaces to control the simulator, process data, provide value conversion and access UI features such as fonts and colors. For example, changes made to Planimate Tables can trigger updates in c# code so dotNET graphs automatically update to relfect changes in data or table column structure.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application (no install or admin access needed). It has minimal requirements and impact on the system it runs on.<br />
This makes Planimate LITE ideal for use in educational environments.<br />
<br />
More on Planimate LITE here.<br />
<br />
== Modules ==<br />
Planimate’s ability to use drop-in modules has been completely revamped.<br />
Modules are basically Portals with self contained model code which provide useful services to a model. The sidebar includes a new Modules palette. You can drag-and-drop from the modules listed into your model.<br />
Planimate includes a couple of modules, an object statistics display (useful for training with Queues and Delays) and a simple graphing module. Both are open source and implemented using Planimate flows and routines.<br />
You can add modules to the Modules sub-directory in the directory containing the Planimate executable.<br />
New features that benefit modules:<br />
* Planimate is able to run just a subsection of a model even though other parts of the model are not in a ready to run state because they are still being developed. Modules can use this to provide helpful UIs to configure themselves.<br />
* A new default item class “_general” which contains attributes for all Planimate generated broadcasts. Useful for UI and event handling as distinct to the actual simulation.<br />
<br />
* A predefined “_Button_Clicked” broadcast so you don’t need to create broadcasts for buttons.<br />
* The ability to use “relative” references to owning portals using s.OwningPortal and to work up the hierarchy using s.OwningPortal.Owner, avoiding the need to have object labels to “target” the parent portals.<br />
* A new “BroadcastLocal()” routine that sends a broadcast scoped to the Code object containing the routine, and waits for it to complete before the item continues. Great for UI update operations.<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu contains options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* Area and Line graphs handle huge data sets faster and display it such that peaks and troughs in the data are not lost no matter how much data is being viewed.<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed and stop/resume.<br />
<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch triggers when data indirectly related to the control condition changes. For example, data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
<br />
=== Dynamic Flow Copy/Delete Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== ISO Dates and UTC Time Support ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom, pan and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
Table operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
<br />
=== Misc ===<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer module.<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
*There are new Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4300ReleaseNotes:Feature Review December 20212022-05-31T10:11:17Z<p>Rick: </p>
<hr />
<div>Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide.<br />
The last two years have seen focus on major initiatives for Planimate.<br />
<br />
This summary covers Planimate enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.<br />
__TOC__<br />
== UNICODE Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide.<br />
File/data operations now enable the developer to control when ASCII or UNICODE are used, important for data interchange.<br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate.<br />
A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details.<br />
Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application with the core engine and UI being C++ and Win32. This enables it to deeply integrate with dotNET code including embedding of dotNET controls (eg: LiveCharts graphs) into models. There's a mature and straightforward interface between Plamimate's fast Table, Attribute and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing.<br />
The core interface is called PLCLR and it provides flexible data conversion to c# types and the ability to browse and use c# class properties and methods from Planimate routine code.<br />
An open source c# library, PLEngine enables sophisticated interaction between c# modules and Planimate including interfaces to control the simulator, process data, provide value conversion and access UI features such as fonts and colors. For example, changes made to Planimate Tables can trigger updates in c# code so dotNET graphs automatically update to relfect changes in data or table column structure.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application (no install or admin access needed). It has minimal requirements and impact on the system it runs on.<br />
This makes Planimate LITE ideal for use in educational environments.<br />
<br />
<br />
== Modules ==<br />
Planimate’s ability to use drop-in modules has been completely revamped.<br />
Modules are basically Portals with self contained model code which provide useful services to a model. The sidebar includes a new Modules palette. You can drag-and-drop from the modules listed into your model.<br />
Planimate includes a couple of modules, an object statistics display (useful for training with Queues and Delays) and a simple graphing module. Both are open source and implemented using Planimate flows and routines.<br />
You can add modules to the Modules sub-directory in the directory containing the Planimate executable.<br />
New features that benefit modules:<br />
* Planimate is able to run just a subsection of a model even though other parts of the model are not in a ready to run state because they are still being developed. Modules can use this to provide helpful UIs to configure themselves.<br />
* A new default item class “_general” which contains attributes for all Planimate generated broadcasts. Useful for UI and event handling as distinct to the core modelling.<br />
* A predefined “_Button Clicked” broadcast so you don’t need to create one.<br />
* The ability to use “relative” references to owning portals using s.OwningPortal and to work up the hierarchy using s.OwningPortal.Owner, avoiding the need to have object labels to “target” the Portal.<br />
* A new “BroadcastLocal()” routine that sends a broadcast scoped to the Code object containing the routine, and waits for it to complete before the item continues. Great for UI update operations.<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu now holds options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An Explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* Area and Line graphs handle huge data sets faster and display such that peaks and throughs in the data are not lost no matter how much data is being viewed.<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch knows to triggered when data indirectly related to the control condition changes. for example data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These further increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
=== Dynamic Flow Path Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== ISO Dates and UTC Time Support ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
Table operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
<br />
=== Misc ===<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer module.<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
<br />
* New Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4299ReleaseNotes:Feature Review December 20212022-05-31T10:09:53Z<p>Rick: </p>
<hr />
<div>;; This buffer is for text that is not saved, and for Lisp evaluation.<br />
;; To create a file, visit it with C-x C-f and enter text in its buffer.<br />
<br />
Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide.<br />
The last two years have seen focus on major initiatives for Planimate.<br />
<br />
This summary covers Planimate enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.<br />
__TOC__<br />
== UNICODE Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide.<br />
File/data operations now enable the developer to control when ASCII or UNICODE are used, important for data interchange.<br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate.<br />
A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details.<br />
Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application with the core engine and UI being C++ and Win32. This enables it to deeply integrate with dotNET code including embedding of dotNET controls (eg: LiveCharts graphs) into models. There's a mature and straightforward interface between Plamimate's fast Table, Attribute and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing.<br />
The core interface is called PLCLR and it provides flexible data conversion to c# types and the ability to browse and use c# class properties and methods from Planimate routine code.<br />
An open source c# library, PLEngine enables sophisticated interaction between c# modules and Planimate including interfaces to control the simulator, process data, provide value conversion and access UI features such as fonts and colors. For example, changes made to Planimate Tables can trigger updates in c# code so dotNET graphs automatically update to relfect changes in data or table column structure.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application (no install or admin access needed). It has minimal requirements and impact on the system it runs on.<br />
This makes Planimate LITE ideal for use in educational environments.<br />
<br />
<br />
== Modules ==<br />
Planimate’s ability to use drop-in modules has been completely revamped.<br />
Modules are basically Portals with self contained model code which provide useful services to a model. The sidebar includes a new Modules palette. You can drag-and-drop from the modules listed into your model.<br />
Planimate includes a couple of modules, an object statistics display (useful for training with Queues and Delays) and a simple graphing module. Both are open source and implemented using Planimate flows and routines.<br />
You can add modules to the Modules sub-directory in the directory containing the Planimate executable.<br />
New features that benefit modules:<br />
* Planimate is able to run just a subsection of a model even though other parts of the model are not in a ready to run state because they are still being developed. Modules can use this to provide helpful UIs to configure themselves.<br />
* A new default item class “_general” which contains attributes for all Planimate generated broadcasts. Useful for UI and event handling as distinct to the core modelling.<br />
* A predefined “_Button Clicked” broadcast so you don’t need to create one.<br />
* The ability to use “relative” references to owning portals using s.OwningPortal and to work up the hierarchy using s.OwningPortal.Owner, avoiding the need to have object labels to “target” the Portal.<br />
* A new “BroadcastLocal()” routine that sends a broadcast scoped to the Code object containing the routine, and waits for it to complete before the item continues. Great for UI update operations.<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu now holds options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An Explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* Area and Line graphs handle huge data sets faster and display such that peaks and throughs in the data are not lost no matter how much data is being viewed.<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch knows to triggered when data indirectly related to the control condition changes. for example data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These further increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
=== Dynamic Flow Path Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== ISO Dates and UTC Time Support ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
Table operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
<br />
=== Misc ===<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer module.<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
<br />
* New Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4298ReleaseNotes:Feature Review December 20212022-05-31T07:08:33Z<p>Rick: </p>
<hr />
<div>Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide.<br />
The last two years have seen focus on major initiatives for Planimate. <br />
<br />
This summary covers Planimate enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.<br />
__TOC__<br />
== UNICODE Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide.<br />
File/data operations now enable the developer to control when ASCII or UNICODE are used, important for data interchange. <br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate.<br />
A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details.<br />
Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application with the core engine and UI being C++ and Win32. This enables it to deeply integrate with dotNET code including embedding of dotNET controls (eg: LiveCharts graphs) into models. There's a mature and straightforward interface between Plamimate's fast Table, Attribute and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing.<br />
The core interface is called PLCLR and it provides flexible data conversion to c# types and the ability to browse and use c# class properties and methods from Planimate routine code.<br />
An open source c# library, PLEngine enables sophisticated interaction between c# modules and Planimate including interfaces to control the simulator, process data, provide value conversion and access UI features such as fonts and colors. For example, changes made to Planimate Tables can trigger updates in c# code so dotNET graphs automatically update to relfect changes in data or table column structure.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application (no install or admin access needed). It has minimal requirements and impact on the system it runs on.<br />
This makes Planimate LITE ideal for use in educational environments.<br />
<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu now holds options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An Explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* The Sidebar contains new "Modules" list. Modellers can add modules to the Modules folder in their Planimate. A couple of beginner focussed stat viewers use new capabilities to run just the module so they can configure themselves when you drag them onto your model.<br />
<br />
* Area and Line graphs handle huge data sets faster and display such that peaks and throughs in the data are not lost no matter how much data is being viewed.<br />
<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch knows to triggered when data indirectly related to the control condition changes. for example data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These further increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
=== Dynamic Flow Path Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== Easy Localised Broadcasting ===<br />
<br />
Routine operation BroadcastLocal() sends a broadcast scoped to the panel the routine is on, with a wait for the broadcast to complete, useful for localised procesing (eg:UI handling).<br />
<br />
=== ISO Dates and UTC Time ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Module Initialisation ===<br />
Planimate supports running only part of a model which is used when pasting modules as it enables them to perform initialisation/configuration code even if the rest of the model is in development and not in a runnable state.<br />
<br />
=== Relative References ===<br />
<br />
Have reduced the need for object labels for portals by enabling "s.OwningPortalr" in many cases. This enables a relative reference in the model instead of required an object label to be created.<br />
You can use s.OwningPortal.Owner.Owner (etC) to reference higher levels in the model's hierarchy. This is useful in a distribution network model when lower level handler code at a location want to determine the actual location. It keeps the lower level code generic.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
<br />
In many routine operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
=== Misc ===<br />
<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer modules.<br />
* New defaults for models: a predefined "_general" item includes all attributes included by Planimate broadcasts (you can add these to any item) which is useful for getting started quickly or as a UI handler.<br />
* An inbuilt System broadcast "_Button_Clicked" is availble to modellers to use with buttons.<br />
<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
<br />
* New Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4297ReleaseNotes:Feature Review December 20212022-05-31T06:43:14Z<p>Rick: </p>
<hr />
<div>Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide.<br />
The last two years have seen focus on major initiatives for Planimate.<br />
<br />
This summary covers Planimate enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It includes major developments. Many minor improvements are documnented in the release notes.<br />
<br />
__TOC__<br />
== UNICODE Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables. This makes Planimate a great choice where models need to support languages world-wide.<br />
<br />
File/data operations now enable the developer to control when ASCII or UNICODE are used, important for data interchange.<br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new licensing system which Planimate supports both for its own use and for use in applications developed with Planimate.<br />
<br />
A new web portal enables you to manage your licenses. The licensing system is very flexible and available as a service in its own right. Contact InterDynamics for details.<br />
<br />
Previous versions of Planimate use a “KEY” file.This has been replaced. When you upgrade to a newer version of Planimate, you will receive a new license for it.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application however the core engine and UI remain C++ and Win32. This enables it to deeply integrate with dotNET code including the ability for Planimate models to containe dotNET controls (eg: LiveCharts graphs).<br />
There's a mature and straightforward interface between Plamimate's fast Table, Attributes and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing and<br />
The interface (called PLCLR) is very flexible in how data is represented in c#, the interface being automatic and transparent. Additionally Planimate routine code can directly reference dotNET class methods and properties (with context help when editing).<br />
PLCLR is greatly augmented by an open source c# library, PLEngine, which enables sophisticated interaction between c# modules and Planimates simulator, data processing, font and graphics capabilities. For example, changes made to Planimate Tables can trigger signals in c# code so dotNET graphs can update to relfect the changes.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application, with minimal requirements and impact on the system it is running on.<br />
This makes Planimate LITE ideal for use in educational environments where the end-user application focussed features and advaned data interfacing and dotNET integration capabilities of the licensed version of Planimate are not required.<br />
<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu now holds options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An Explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* The Sidebar contains new "Modules" list. Modellers can add modules to the Modules folder in their Planimate. A couple of beginner focussed stat viewers use new capabilities to run just the module so they can configure themselves when you drag them onto your model.<br />
<br />
* Area and Line graphs handle huge data sets faster and display such that peaks and throughs in the data are not lost no matter how much data is being viewed.<br />
<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch knows to triggered when data indirectly related to the control condition changes. for example data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These further increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
=== Dynamic Flow Path Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== Easy Localised Broadcasting ===<br />
<br />
Routine operation BroadcastLocal() sends a broadcast scoped to the panel the routine is on, with a wait for the broadcast to complete, useful for localised procesing (eg:UI handling).<br />
<br />
=== ISO Dates and UTC Time ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Module Initialisation ===<br />
Planimate supports running only part of a model which is used when pasting modules as it enables them to perform initialisation/configuration code even if the rest of the model is in development and not in a runnable state.<br />
<br />
=== Relative References ===<br />
<br />
Have reduced the need for object labels for portals by enabling "s.OwningPortalr" in many cases. This enables a relative reference in the model instead of required an object label to be created.<br />
You can use s.OwningPortal.Owner.Owner (etC) to reference higher levels in the model's hierarchy. This is useful in a distribution network model when lower level handler code at a location want to determine the actual location. It keeps the lower level code generic.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
<br />
In many routine operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
=== Misc ===<br />
<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer modules.<br />
* New defaults for models: a predefined "_general" item includes all attributes included by Planimate broadcasts (you can add these to any item) which is useful for getting started quickly or as a UI handler.<br />
* An inbuilt System broadcast "_Button_Clicked" is availble to modellers to use with buttons.<br />
<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
<br />
* New Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2021&diff=4296ReleaseNotes:Feature Review December 20212022-05-29T11:20:41Z<p>Rick: Created page with "Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide. The..."</p>
<hr />
<div>Planimate combines a powerful and fast simulator with a development framework that delivers reliable and comprehensive applications that are in use every day world-wide.<br />
<br />
The last two years have seen focus on major initiatives that affirm Planimate as world class.<br />
<br />
During the same period, much finessing has occured with both beginners and experienced model developers in mind.<br />
<br />
This summary covers Planimate enhancements in 2020 and 2021, over versions 10.13.1 to 12.26.10. It only includes major developments, not the hundreds of minor improvements and fixes.<br />
__TOC__<br />
== UNICODE Support ==<br />
Planimate supports the use of Unicode (multi byte) characters in virtually every aspect of a model including labels, paint, text data and even the names of attributes and tables in the model. This makes Planimate a great choice where models need to support non ASCII characters.<br />
File/data operations have been enhanced to enable a model developer to control when ASCII or UNICODE are used, important for data interchange. This includes control over whether the multi byte file signature is written to files.<br />
<br />
== New Licensing System ==<br />
InterDynamics has implemented a new license management system including a new web portal and support modules within Planimate. This replaces the old Planimate "KEY" file you may use for older versions of Planimate. The same Planimate executable can run in various demo, educational and developer modes, based on the license. Apart from the previous time limits on access to Planimate Based Application (PBA) creation, developer licenses remain perpetual for versions of Planimate within a year of when they are issued.<br />
InterDynamics' license system is very flexible and, with arrangement with InterDynaics, can be used within PBAs to enable license handling for your PBAs. A notable feature is the ability for project managers and model developers to embed metadata in a license, enabling very bespoke custmoisation of the applications our clients use. This is all managed through the web portal.<br />
Contact InterDynamics if you are interested in finding out how you can incorporate licensing in your own application (whether it is based on Planimate or dotnet). and the options available for hosting our own instance of the licensing portal.<br />
<br />
== Planimate and dotNET ==<br />
Planimate is a dotNET application however the core engine and UI remain C++ and Win32. This enables it to deeply integrate with dotNET code including the ability for Planimate models to containe dotNET controls (eg: LiveCharts graphs).<br />
There's a mature and straightforward interface between Plamimate's fast Table, Attributes and Label List data structures (optimised for simulation) to dotNET managed data suitable for two way interfaces to databases, complex JSON data providers, ODBC sources and web APIs such as real time routing and<br />
The interface (called PLCLR) is very flexible in how data is represented in c#, the interface being automatic and transparent. Additionally Planimate routine code can directly reference dotNET class methods and properties (with context help when editing).<br />
PLCLR is greatly augmented by an open source c# library, PLEngine, which enables sophisticated interaction between c# modules and Planimates simulator, data processing, font and graphics capabilities. For example, changes made to Planimate Tables can trigger signals in c# code so dotNET graphs can update to relfect the changes.<br />
<br />
== Planimate LITE ==<br />
A no-license version of Planimate is available for users who are interested in exploring or teaching simulation. It has no runtime requirements and operates as a "portable" application, with minimal requirements and impact on the system it is running on.<br />
This makes Planimate LITE ideal for use in educational environments where the end-user application focussed features and advaned data interfacing and dotNET integration capabilities of the licensed version of Planimate are not required.<br />
<br />
<br />
== Major UI & Graphics Changes ==<br />
* A new Time menu now holds options related to simulation time and animation speed.<br />
* New models start with a clock view. Right click it to edit or delete it.<br />
* An Explicit "Relative Times or Calendar Dates" option helps beginners make the distinction.<br />
* The Sidebar contains new "Modules" list. Modellers can add modules to the Modules folder in their Planimate. A couple of beginner focussed stat viewers use new capabilities to run just the module so they can configure themselves when you drag them onto your model.<br />
<br />
* Area and Line graphs handle huge data sets faster and display such that peaks and throughs in the data are not lost no matter how much data is being viewed.<br />
<br />
* High quality panel image export (good for graphs) where the image is generated and saved at 2 or 4 times the resolution that it appears in a window.<br />
<br />
== Modelling ==<br />
<br />
=== Conveyor ===<br />
A new Conveyor object handles a number of conveyor types and options, with variable item length, the option of packing when blocked, multiple conveyor interlocking, parameterised control including speed<br />
=== Delay (previously called MultiServer) ===<br />
Delays can be paused/resumed using a Run Control attribute and support a new "Stopped" State.<br />
<br />
=== Splitter ===<br />
You can control when the original item leaves, before or after the split items, even if they are the same class. This is very useful when that item is a message as it ensures the message completes only after the other items have been produced, avoiding manual interlocking.<br />
<br />
=== Entry ===<br />
The item count can now be dynamically changed, it can reference an attribute.<br />
<br />
=== Switch ===<br />
You can have "additional dependencies" explicitly specified so the switch knows to triggered when data indirectly related to the control condition changes. for example data processed in a routine just before a blocking switch. In the past, "tickle" attributes had to be toggled to force a switch to re-test.<br />
<br />
=== PickUp and DropOff ===<br />
New options to let a carrier item in only if its not blocked from leaving, and to auto-create a carrier once a threshold of items to pick up are present. These further increase the capability these objects offer when it comes to collecting items for common movement and for implementing wait-until logic that does not require messing around with attributes and blocking switches.<br />
Similar to a splitter, for a DropOff you can now control whether the carrier leaves before or after carried items have all exitted.<br />
=== Dynamic Flow Path Support ===<br />
Routine operations CopyPortal() and RemovePortal() also copy immediately adjanced flow steps, enabling a model to restructure itself (eg: add a server) whilst retaining the use of simple zero-time flow path connections between the objects.<br />
<br />
=== Easy Localised Broadcasting ===<br />
<br />
Routine operation BroadcastLocal() sends a broadcast scoped to the panel the routine is on, with a wait for the broadcast to complete, useful for localised procesing (eg:UI handling).<br />
<br />
=== ISO Dates and UTC Time ===<br />
Planimate can read and write date times in ISO-8601 format with the option to use UTC or a local timezone offset.<br />
You have access to the sy6tem timezone and can set the timezone a given model should assume dynamically.<br />
<br />
=== 3D Model ===<br />
With some new scaling capabilities, a running 3D visualisation of a mine was developed featuring the ability to zoom and rotate the view in 3D whilst items animated on it. This was implemented using a module.<br />
<br />
=== Module Initialisation ===<br />
Planimate supports running only part of a model which is used when pasting modules as it enables them to perform initialisation/configuration code even if the rest of the model is in development and not in a runnable state.<br />
<br />
=== Relative References ===<br />
<br />
Have reduced the need for object labels for portals by enabling "s.OwningPortalr" in many cases. This enables a relative reference in the model instead of required an object label to be created.<br />
You can use s.OwningPortal.Owner.Owner (etC) to reference higher levels in the model's hierarchy. This is useful in a distribution network model when lower level handler code at a location want to determine the actual location. It keeps the lower level code generic.<br />
<br />
=== Table Reference Using Data OBject Label ===<br />
<br />
In many routine operations requiring a table to be referenced, a data object label can be used, making the code generic rather than fixed to a table or having to use Dynamic table references.<br />
=== Misc ===<br />
<br />
* When paused, context clicking objects with capacity lists the items in them.<br />
* Names (objects, attributes, tables, columns, labels) can be longer and include unicode.<br />
* You can select a group of objects and copy/paste them between instances of Planimate, this also carries across flows.<br />
* You can receive informative change broadcast when items enter/leave or other changes occue within objects with capacity. These are used by the new StatViewer modules.<br />
* New defaults for models: a predefined "_general" item includes all attributes included by Planimate broadcasts (you can add these to any item) which is useful for getting started quickly or as a UI handler.<br />
* An inbuilt System broadcast "_Button_Clicked" is availble to modellers to use with buttons.<br />
<br />
* You can reindex object and paint label lists in the UI. References are updated where they are associated with the list.<br />
<br />
* New Icon commands (preceed an icon name) to flip and create sized icons on the fly.<br />
* The text in paint buttons can be fine aligned with settable offsets. This is useful bor buttons containing symbols now available using unicode.</div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4295Planimate LITE2021-09-22T02:27:02Z<p>Rick: /* Download Planimate LITE Now */</p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
'''Planimate LITE does not include a number of features available in full Planimate, most notably Track Network Modelling.''' Details below.<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a [[Planimate | fully featured graphically programmed Discrete Event Simulator]] at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#By using Plamimate LITE you acknowledge that InterDynamics Pty. Ltd. has no obligation or liability on any aspect related to use of the software.<br />
#Planimate LITE shall not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an [https://interdynamics.com/installers/Planimate/Planimate_LITE_Install.exe installer executable].<br />
<br />
Download Planimate LITE as a [https://interdynamics.com/installers/Planimate/Planimate_LITE.zip portable ZIP file].<br />
<br />
Version 12.22.0 September 22nd 2021</div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4294Main Page2021-09-01T00:13:32Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
<br />
*[[View|Views]], [[Paint|Paint]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Paint&diff=4293Paint2021-07-28T01:40:57Z<p>Rick: </p>
<hr />
<div>In addition to Simulation Objects and Data Views, Planimate panels can contain paint objects.<br />
<br />
Basic paint objects include Line, Rectangle, Ovals and Text. These assist in clarifying the contents of a panel.<br />
<br />
More advanced paint objects include<br />
* [[Button (Paint Object)|Buttons]], which support both text and images and are useful in creating user interfaces.<br />
* [[Viewport|Viewports]], which enable a panel to contain a view of another panel. Advanced capabilities include dynamically switching the panel a viewport shows.<br />
* [[Map Module|Map]] paint objects enable models to be built around a zoomable and scrollable tiled map or schematic diagram.<br />
* Rich Text paint objects enable a panel to contain blocks of scrollable formatted text.<br />
* Video enable embedding video playback in a panel.<br />
* Window enable advanced developers to add dotNET based controls and forms to a Panel.<br />
<br />
<br/><br />
Paint objects work with [[Anchor|Anchoring]] which enables them to dynamically reposition and/or resize to adapt the user interface to different window sizes.<br />
<br/><br />
<br />
Paint related articles<br />
<dpl><br />
category=Paint<br />
</dpl><br />
<br />
[[Category:Paint]]</div>Rickhttps://wiki.planimate.com/index.php?title=Anchor&diff=4292Anchor2021-07-27T03:02:13Z<p>Rick: </p>
<hr />
<div>Planimate Table Views, Viewports and Paint Objects have options to control how they are positioned when the panel they are on changes size. These are known as Anchor Options and can be used in various ways.<br />
<br />
Anchoring relates to panels which change size because their Panel Option / Engine / Auto Fit Panel To Window is enabled.<br />
<br />
== Simple Anchoring ==<br />
Simple Anchoring involves using the "Anchor Left Edge", "Anchor Top Edge" etc options with the "Group Anchoring" options deselected.<br />
<br />
When the panel is resized and the Anchor Edge is selected for an edge, Planimate strives to retain the margin between the edge and the edge of the panel. Hence if two opposite edges of a view are anchored (eg: Left and Right), the object will be stretched.<br />
<br />
With this approach, you can not have more than one object in a given row or column stretching its size to accomodate available space since they are unaware of each other.<br />
== Group Anchoring ==<br />
Group Anchoring enables Planimate to manage much more sophisticated model UI layouts. Multiple views can scale in a co-ordinated manner to fit the available window area. Selecting the "Group Anchoring" option for an object enables it to be managed but there are some pre-requisites, detailed below.<br />
<br />
Group anchoring works by Planimate determining the closest adjacent object to a given object's edge. If there is no adjacent object, then the edge of the panel is used. Thr group anchor manager then strives to maintain the margins between the objects and the edge of the panel and the objects.<br />
<br />
To use group anchoring, the panel must have a minimum panel area set and the panel has to be sized at this minimum size. This enables the anchor manager to track a "base", minimally sized layout from which it then creates a scaled layout.<br />
<br />
=== Using The Layout Manager ===<br />
<br />
To add anchoring to a panel, proceed as follows.<br />
* In Window menu, ensure "Toggle Disable Auto Resize" is selected (ie: auto resize disabled).<br />
* Use Panel / Work Area to set the panel to minimum size. The panel work area and the mimium area must be the same.<br />
* Enable Panel Option / Engine / "Auto Fit Panel To Window". At this time the option should not take effect because of the global option Toggle Disable Auto Resize which overrides it.<br />
* Create a layout of views on the panel. Paint & Viewports are also supported.<br />
* Set anchors on single edges if you want to retain a margin or both opposite edges to enable scaling.<br />
* You can access Anchor Options from the object's context menu or in paint mode by alt-clicking on the center of the object. You can toggle anchors by alt-clicking edges in paint mode. You need to select "Group Anchoring" in the anchor options.<br />
* The anchors should be shown in Blue. If they are red, it indicates the object does not have Group Anchoring selected.<br />
* Select menubar Window / Toggle Disable Auto Anchor to enable the panel to adapt the layout to its available area. Select menubar Panel / Resize To Minimum For Layout Editing to revert to the base layout.<br />
<br />
The layout manager works well for situations for which it is intended. It has known limitations:<br />
* reflow of objects is not supported (objects rearranging in 2 axes)<br />
* it does not attempt to handle situations where changes to one axis create/remove a constraint on the other axis<br />
* Group anchoring and paint on the same object are not supported<br />
<br />
=== Resizing Proportion ===<br />
When two or more anchor managed views which can resize are adjacent, extra space is shared between them based on the ratio settings in the Anchor options.<br />
<br />
"Group Anchoring X Stretch Ratio" is used for horizontal and the corresponding Y Stretch Ratio option is used for vertical (objects stacked vertically). The defaults for these values are 100.<br />
<br />
Planimate uses the ratio between the values to apportion the space, hence two objects each with 100 share the space evenly, objects with 50 and 100 would see the first get a 50/(50+100) share, etc.<br />
<br />
=== Lock To Corner ===<br />
Sometimes its desirable for an object to act as if its resizeable but not actually change its size. The "Group Anchoring Lock To Corner" setting enables this.<br />
<br />
When set non zero, whilst the layout is being calculated the view acts as if it is being resized, then it reverts to its original size, leaving the space it created for itself empty. The non zero value used determines which corner the object collapses back to:<br />
<br />
{|<br />
|+ Lock Setting<br />
|-<br />
| 1 || Top Left<br />
|-<br />
| 2 || Top Right<br />
|-<br />
| 3 || Bottom Left<br />
|-<br />
| 4 || Bottom Right<br />
|=<br />
| 5 || Center within the available space<br />
|}<br />
<br />
<br />
=== Size Limiting ===<br />
The anchor options "Stretch X Limit" and "Stretch Y Limit" can be used to impose a limit on how large an anchor managed object can become. After this limit, additional pixels are allocated to other resizeable objects, if available, otherwise they will be added to the right hand side margin of the right/bottom most resizeable object.<br />
<br />
Generally the size limit values will be zero or a positive number specifying pixels. For table views, a special case is supported.<br />
==== Auto Sizing For Table ====<br />
Anchor managed table views support auto resizing until they reach a size where all columns (for horizontal) or rows (for vertical) are visible, hence there is no need for the table to use extra space.<br />
This auto sizing can be easily enabled by setting the Stretch X Limit to -1 (for horizontal/column) and likewise for the Y/rows using Stretch Y Limit. The table will then automatically limit its size depending on its current contents. Extra content may be added to the table after display so space is always left for a scrollbar.<br />
<br />
=== Anchor Group And Parent ===<br />
Using numbered anchor groups and paint object parents, very complex layouts of objects within objects can be created. For example, a region in a UI might contain a number of buttons. The region can be represented in the overall layout by a parent paint object, then the buttons can be laid out based on that paint object.<br />
<br />
The "Group Number" anchor setting sets the group within which a given anchor managed object is processed. Planimate starts by computing the laout of all group 1 objects, then the next highest group (if any) and so forth.<br />
<br />
The group number feature is useful when used in conjunction with the Parent Paint ID value.<br />
This value is looked up in the Paint Label List and enables a paint object to provide the bounding edge for one or more anchor managed object, instead of the panel.<br />
<br />
This is used as follows. A bounding frame for a user interface area is managed by a paint object in Group 1 which is assigned a Paint ID using the paint label list. Within this area are added buttons that are configured to all be in Group 2, with a Parent Paint ID set to the bounding paint object's ID. The manager will then take care of the layout.<br />
<br />
Note that the Parent Paind ID must be an index to a paint object which is on the same panel and which has a LOWER group number than the object referring it. Otherwise the setting will be ignored by the anchor manager.<br />
<br />
== Examples ==<br />
<br />
EXAMPLE NOTATION:<br />
<br />
+-------+<br />
| 1 |<br />
+-------+<br />
A box, sort ordinal 1, eg: a paint rectangle<br />
<br />
+------+<br />
| 1 A<br />
+------+<br />
A box with an anchored right side.<br />
<br />
+-------+ +-----+<br />
A 1 A | 2 A<br />
+-------+ +-----+<br />
Box 1 is anchored to the left and right, box 2 is anchored to the right.<br />
Box 1 can stretch, box 2 cannot.<br />
<br />
Refer to Group Anchor Demo model, select paint mode (Ctrl-P) to see the anchors.<br />
<br />
EXAMPLE 1<br />
<br />
+------+ +-------+<br />
| 1 | | 2 A<br />
+------+ +-------+<br />
<br />
Behaviour:As the panel expands, object2 moves right to keep the margin to<br />
the panel's right border. A gap opens up between object1 and object2.<br />
<br />
EXAMPLE 2:<br />
<br />
+------+ +------+<br />
| 1 | A 2 A<br />
+------+ +------+<br />
<br />
Behaviour: As the panel expands, object2 stretches, keeping its left position<br />
to object1 constant. object1 doesn't change.<br />
<br />
EXAMPLE 3:<br />
<br />
+------+ +-----+<br />
| 1 A A 2 A<br />
+------+ +-----+<br />
<br />
Behaviour: As the panel expands, object2 stretches. Its left position doesn't<br />
change meaning object 1 doesn't need to move and the result is the same as<br />
example 2.<br />
<br />
EXAMPLE 4:<br />
<br />
+-----+ +-----+<br />
| 1 A | 2 A<br />
+-----+ +-----+<br />
<br />
Behaviour: As panel expands, object2 moves to retain distance to the panel<br />
right side, object1 moves to retain its distance to the LHS of object2, ie:<br />
both objects follow the right panel margin with the distance between them and<br />
the right margin maintained.<br />
<br />
EXAMPLE 5:<br />
<br />
+-----+ +-----+ +-----+ +-----+ +-----+<br />
A 1 A A 2 A can extend eg: A 1 A A 2 A A 3 A<br />
+-----+ +-----+ +-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, the additional space is shared between object1<br />
and object2 (and object3 etc) with the margin between them remaining constant.<br />
Percentage values on each object control the sharing ratio.<br />
<br />
EXAMPLE 6:<br />
<br />
+-----+ +-----+ +-----+<br />
A 1 A | 2 A A 3 A<br />
+-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, the extra space is shared between object1 and<br />
object3, object2 retains its size and margins to the adjacent objects.<br />
<br />
EXAMPLE 7<br />
<br />
+-------------+ +-----+<br />
A 1 A | |<br />
+-------------+ A 4 A<br />
+-----+ +-----+ | |<br />
A 2 A | 3 A | |<br />
+-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, 1 and 4 stretch, apportioning the extra space<br />
according to their percentages. 3 shifts to retain margin to 4 without stretch.<br />
2 stretches to keep distance to 4.<br />
<br />
NOTE:the ratio of 2 is irrelevant as the ratio of 1 and 4 establishes<br />
4 first. 3 gets updated by 4 due to recursion. 2 is updated by the main<br />
loop, last.<br />
<br />
<br />
EXAMPLE 8<br />
<br />
+----------+ +----+<br />
| 1 A | |<br />
+----------= | |<br />
+------+ A 3 A<br />
A 2 A | |<br />
+------+ +----+<br />
<br />
Behavour: Object 1's fixed width means Object 2 is allocated all<br />
additional space as 1/3 are processed first.<br />
Object 2 hence ends up fitting itself to the space to the left of 3's edge.<br />
<br />
EXAMPLE 9 - both X and Y - the numbers are (Horizontal,Vertical) ordinals<br />
<br />
+-----------A--------------+ +--A--+<br />
| | | |<br />
A 1,1 A | 8,2 A<br />
| | | |<br />
+-----------A--------------+ +-----+<br />
+------A-------+ +-A---+ <br />
| | A 3,4 |<br />
| | +-----+<br />
| | +--A---+ +--A---+<br />
| | A 4,5 A A 6,6 A<br />
A 2,3 | | | | |<br />
| | +--A---+ +--A---+<br />
| | +--A---+ +--A---+<br />
| | A 5,7 A A 7,8 A<br />
| | | | | |<br />
+-----A--------+ +--A---+ +--A---+<br />
<br />
Behaviour Horizontal: (H numbers)<br />
As panel width increases 1 increases width with 2 staying at top right corner.<br />
2 is fixed width and establishes the left edge for for 3,4,5.<br />
3 stays same size.<br />
4 and 6 will share the increase<br />
6 and 7 will share the increase<br />
<br />
Behaviour Vertical: (V numbers)<br />
1 and 3 will apportion extra height<br />
4 tracks bottom edge of 1<br />
5 and 7 apportion extra height as do 6 and 8 but the space they get was set by 3.<br />
lose alignment, 8 needs same height as the rest.<br />
<br />
EXAMPLE 10 - both X and Y - the numbers are (Horizontal,Vertical) ordinals<br />
<br />
+--------A--------+ +--------A--------+<br />
| | | |<br />
A 1,1 | | |<br />
| | | |<br />
+--------A--------+ A 4,2 A<br />
+-----------------+ | |<br />
| | | |<br />
A 2,3 | | |<br />
| | | |<br />
+--------A--------+ +-----------------+<br />
+---------A---------+<br />
| |<br />
A 3,4 A<br />
| |<br />
+---------A---------+<br />
<br />
Behaviour Horizontal: (H numbers)<br />
1 and 2 stay anchored to the left and are fixed width<br />
3 will expand to the right<br />
<br />
Behaviour Vertical: (V numbers)<br />
As height increases 1 and 4 will expand, apportioning space with<br />
3 being kept between them with the margins above and below retained.<br />
2 is fixed height as otherwise it would collide with 4's horizontal expansion<br />
---<br />
<br />
[[Category:Paint]]</div>Rickhttps://wiki.planimate.com/index.php?title=Anchor&diff=4291Anchor2021-07-27T03:00:56Z<p>Rick: </p>
<hr />
<div>Planimate Table Views, Viewports and Paint Objects have options to control how they are positioned when the panel they are on changes size. These are known as Anchor Options and can be used in various ways.<br />
<br />
Anchoring relates to panels which change size because their Panel Option / Engine / Auto Fit Panel To Window is enabled.<br />
<br />
== Simple Anchoring ==<br />
Simple Anchoring involves using the "Anchor Left Edge", "Anchor Top Edge" etc options with the "Group Anchoring" options deselected.<br />
<br />
When the panel is resized and the Anchor Edge is selected for an edge, Planimate strives to retain the margin between the edge and the edge of the panel. Hence if two opposite edges of a view are anchored (eg: Left and Right), the object will be stretched.<br />
<br />
With this approach, you can not have more than one object in a given row or column stretching its size to accomodate available space since they are unaware of each other.<br />
== Group Anchoring ==<br />
Group Anchoring enables Planimate to manage much more sophisticated model UI layouts. Multiple views can scale in a co-ordinated manner to fit the available window area. Selecting the "Group Anchoring" option for an object enables it to be managed but there are some pre-requisites, detailed below.<br />
<br />
Group anchoring works by Planimate determining the closest adjacent object to a given object's edge. If there is no adjacent object, then the edge of the panel is used. Thr group anchor manager then strives to maintain the margins between the objects and the edge of the panel and the objects.<br />
<br />
To use group anchoring, the panel must have a minimum panel area set and the panel has to be sized at this minimum size. This enables the anchor manager to track a "base", minimally sized layout from which it then creates a scaled layout.<br />
<br />
=== Using The Layout Manager ===<br />
<br />
To add anchoring to a panel, proceed as follows.<br />
* In Window menu, ensure "Toggle Disable Auto Resize" is selected (ie: auto resize disabled).<br />
* Use Panel / Work Area to set the panel to minimum size. The panel work area and the mimium area must be the same.<br />
* Enable Panel Option / Engine / "Auto Fit Panel To Window". At this time the option should not take effect because of the global option Toggle Disable Auto Resize which overrides it.<br />
* Create a layout of views on the panel. Paint & Viewports are also supported.<br />
* Set anchors on single edges if you want to retain a margin or both opposite edges to enable scaling.<br />
* You can access Anchor Options from the object's context menu or in paint mode by alt-clicking on the center of the object. You can toggle anchors by alt-clicking edges in paint mode. You need to select "Group Anchoring" in the anchor options.<br />
* The anchors should be shown in Blue. If they are red, it indicates the object does not have Group Anchoring selected.<br />
* Select menubar Window / Toggle Disable Auto Anchor to enable the panel to adapt the layout to its available area. Select menubar Panel / Resize To Minimum For Layout Editing to revert to the base layout.<br />
<br />
The layout manager works well for situations for which it is intended. It has known limitations:<br />
* reflow of objects is not supported (objects rearranging in 2 axes)<br />
* it does not attempt to handle situations where changes to one axis create/remove a constraint on the other axis<br />
* Group anchoring and paint on the same object are not supported<br />
<br />
=== Resizing Proportion ===<br />
When two or more anchor managed views which can resize are adjacent, extra space is shared between them based on the ratio settings in the Anchor options.<br />
<br />
"Group Anchoring X Stretch Ratio" is used for horizontal and the corresponding Y Stretch Ratio option is used for vertical (objects stacked vertically). The defaults for these values are 100.<br />
<br />
Planimate uses the ratio between the values to apportion the space, hence two objects each with 100 share the space evenly, objects with 50 and 100 would see the first get a 50/(50+100) share, etc.<br />
<br />
=== Lock To Corner ===<br />
Sometimes its desirable for an object to act as if its resizeable but not actually change its size. The "Group Anchoring Lock To Corner" setting enables this.<br />
<br />
When set non zero, whilst the layout is being calculated the view acts as if it is being resized, then it reverts to its original size, leaving the space it created for itself empty. The non zero value used determines which corner the object collapses back to:<br />
<br />
{|<br />
|+ Lock Setting<br />
|-<br />
| 1 || Top Left<br />
|-<br />
| 2 || Top Right<br />
|-<br />
| 3 || Bottom Left<br />
|-<br />
| 4 || Bottom Right<br />
|=<br />
| 5 || Center within the available space<br />
|}<br />
<br />
<br />
=== Size Limiting ===<br />
The anchor options "Stretch X Limit" and "Stretch Y Limit" can be used to impose a limit on how large an anchor managed object can become. After this limit, additional pixels are allocated to other resizeable objects, if available, otherwise they will be added to the right hand side margin of the right/bottom most resizeable object.<br />
<br />
Generally the size limit values will be zero or a positive number specifying pixels. For table views, a special case is supported.<br />
==== Auto Sizing For Table ====<br />
Anchor managed table views support auto resizing until they reach a size where all columns (for horizontal) or rows (for vertical) are visible, hence there is no need for the table to use extra space.<br />
This auto sizing can be easily enabled by setting the Stretch X Limit to -1 (for horizontal/column) and likewise for the Y/rows using Stretch Y Limit. The table will then automatically limit its size depending on its current contents. Extra content may be added to the table after display so space is always left for a scrollbar.<br />
<br />
=== Anchor Group And Parent ===<br />
Using numbered anchor groups and paint object parents, very complex layouts of objects within objects can be created. For example, a region in a UI might contain a number of buttons. The region can be represented in the overall layout by a parent paint object, then the buttons can be laid out based on that paint object.<br />
<br />
The "Group Number" anchor setting sets the group within which a given anchor managed object is processed. Planimate starts by computing the laout of all group 1 objects, then the next highest group (if any) and so forth.<br />
<br />
The group number feature is useful when used in conjunction with the Parent Paint ID value.<br />
This value is looked up in the Paint Label List and enables a paint object to provide the bounding edge for one or more anchor managed object, instead of the panel.<br />
<br />
This is used as follows. A bounding frame for a user interface area is managed by a paint object in Group 1 which is assigned a Paint ID using the paint label list. Within this area are added buttons that are configured to all be in Group 2, with a Parent Paint ID set to the bounding paint object's ID. The manager will then take care of the layout.<br />
<br />
Note that the Parent Paind ID must be an index to a paint object which is on the same panel and which has a LOWER group number than the object referring it. Otherwise the setting will be ignored by the anchor manager.<br />
<br />
== Examples ==<br />
<br />
EXAMPLE NOTATION:<br />
<br />
+-------+<br />
| 1 |<br />
+-------+<br />
A box, sort ordinal 1, eg: a paint rectangle<br />
<br />
+------+<br />
| 1 A<br />
+------+<br />
A box with an anchored right side.<br />
<br />
+-------+ +-----+<br />
A 1 A | 2 A<br />
+-------+ +-----+<br />
Box 1 is anchored to the left and right, box 2 is anchored to the right.<br />
Box 1 can stretch, box 2 cannot.<br />
<br />
Refer to Group Anchor Demo model, select paint mode (Ctrl-P) to see the anchors.<br />
<br />
EXAMPLE 1<br />
<br />
+------+ +-------+<br />
| 1 | | 2 A<br />
+------+ +-------+<br />
<br />
Behaviour:As the panel expands, object2 moves right to keep the margin to<br />
the panel's right border. A gap opens up between object1 and object2.<br />
<br />
EXAMPLE 2:<br />
<br />
+------+ +------+<br />
| 1 | A 2 A<br />
+------+ +------+<br />
<br />
Behaviour: As the panel expands, object2 stretches, keeping its left position<br />
to object1 constant. object1 doesn't change.<br />
<br />
EXAMPLE 3:<br />
<br />
+------+ +-----+<br />
| 1 A A 2 A<br />
+------+ +-----+<br />
<br />
Behaviour: As the panel expands, object2 stretches. Its left position doesn't<br />
change meaning object 1 doesn't need to move and the result is the same as<br />
example 2.<br />
<br />
EXAMPLE 4:<br />
<br />
+-----+ +-----+<br />
| 1 A | 2 A<br />
+-----+ +-----+<br />
<br />
Behaviour: As panel expands, object2 moves to retain distance to the panel<br />
right side, object1 moves to retain its distance to the LHS of object2, ie:<br />
both objects follow the right panel margin with the distance between them and<br />
the right margin maintained.<br />
<br />
EXAMPLE 5:<br />
<br />
+-----+ +-----+ +-----+ +-----+ +-----+<br />
A 1 A A 2 A can extend eg: A 1 A A 2 A A 3 A<br />
+-----+ +-----+ +-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, the additional space is shared between object1<br />
and object2 (and object3 etc) with the margin between them remaining constant.<br />
Percentage values on each object control the sharing ratio.<br />
<br />
EXAMPLE 6:<br />
<br />
+-----+ +-----+ +-----+<br />
A 1 A | 2 A A 3 A<br />
+-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, the extra space is shared between object1 and<br />
object3, object2 retains its size and margins to the adjacent objects.<br />
<br />
EXAMPLE 7<br />
<br />
+-------------+ +-----+<br />
A 1 A | |<br />
+-------------+ A 4 A<br />
+-----+ +-----+ | |<br />
A 2 A | 3 A | |<br />
+-----+ +-----+ +-----+<br />
<br />
Behaviour: As the panel expands, 1 and 4 stretch, apportioning the extra space<br />
according to their percentages. 3 shifts to retain margin to 4 without stretch.<br />
2 stretches to keep distance to 4.<br />
<br />
NOTE:the ratio of 2 is irrelevant as the ratio of 1 and 4 establishes<br />
4 first. 3 gets updated by 4 due to recursion. 2 is updated by the main<br />
loop, last.<br />
<br />
<br />
EXAMPLE 8<br />
<br />
+----------+ +----+<br />
| 1 A | |<br />
+----------= | |<br />
+------+ A 3 A<br />
A 2 A | |<br />
+------+ +----+<br />
<br />
Behavour: Object 1's fixed width means Object 2 is allocated all<br />
additional space as 1/3 are processed first.<br />
Object 2 hence ends up fitting itself to the space to the left of 3's edge.<br />
<br />
EXAMPLE 9 - both X and Y - the numbers are (Horizontal,Vertical) ordinals<br />
<br />
+-----------A--------------+ +--A--+<br />
| | | |<br />
A 1,1 A | 8,2 A<br />
| | | |<br />
+-----------A--------------+ +-----+<br />
+------A-------+ +-A---+ <br />
| | A 3,4 |<br />
| | +-----+<br />
| | +--A---+ +--A---+<br />
| | A 4,5 A A 6,6 A<br />
A 2,3 | | | | |<br />
| | +--A---+ +--A---+<br />
| | +--A---+ +--A---+<br />
| | A 5,7 A A 7,8 A<br />
| | | | | |<br />
+-----A--------+ +--A---+ +--A---+<br />
<br />
Behaviour Horizontal: (H numbers)<br />
As panel width increases 1 increases width with 2 staying at top right corner.<br />
2 is fixed width and establishes the left edge for for 3,4,5.<br />
3 stays same size.<br />
4 and 6 will share the increase<br />
6 and 7 will share the increase<br />
<br />
Behaviour Vertical: (V numbers)<br />
1 and 3 will apportion extra height<br />
4 tracks bottom edge of 1<br />
5 and 7 apportion extra height as do 6 and 8 but the space they get was set by 3.<br />
lose alignment, 8 needs same height as the rest.<br />
<br />
EXAMPLE 10 - both X and Y - the numbers are (Horizontal,Vertical) ordinals<br />
<br />
+--------A--------+ +--------A--------+<br />
| | | |<br />
A 1,1 | | |<br />
| | | |<br />
+--------A--------+ A 4,2 A<br />
+-----------------+ | |<br />
| | | |<br />
A 2,3 | | |<br />
| | | |<br />
+--------A--------+ +-----------------+<br />
+---------A---------+<br />
| |<br />
A 3,4 A<br />
| |<br />
+---------A---------+<br />
<br />
Behaviour Horizontal: (H numbers)<br />
1 and 2 stay anchored to the left and are fixed width<br />
3 will expand to the right<br />
<br />
Behaviour Vertical: (V numbers)<br />
As height increases 1 and 4 will expand, apportioning space with<br />
3 being kept between them with the margins above and below retained.<br />
2 is fixed height as otherwise it would collide with 4's horizontal expansion<br />
---<br />
<br />
[Category:Paint]</div>Rickhttps://wiki.planimate.com/index.php?title=Portal_Options_Choices&diff=4290Portal Options Choices2021-07-27T02:41:56Z<p>Rick: Rick moved page Portal Options Choices to Portal Options</p>
<hr />
<div>#REDIRECT [[Portal Options]]</div>Rickhttps://wiki.planimate.com/index.php?title=Portal_Options&diff=4289Portal Options2021-07-27T02:41:56Z<p>Rick: Rick moved page Portal Options Choices to Portal Options</p>
<hr />
<div>The Object Edit Menu for a Portal has the following options: <br />
<br />
<br> <br />
<br />
----<br />
<br />
;Option <br />
:''Default '' <br />
:Description<br />
<br />
----<br />
<br />
<br> <br />
<br />
;Retain State After Run <br />
:''On''<br />
:Portals with customised state images and the "retain state" option on will retain their image and any scale factor when the model is stopped and also when the model is saved/reloaded. <br />
:Combined with the use of BMPs for state icons, this makes Portals very powerful visualisation objects. <br />
:When a portal reverts to a different icon upon stopping or starting the model (due to re-initialisation of its state and scaling) it is kept centred automatically, unlike when the user changes its state which pivots on the bottom left point. <br />
:This looks less disconcerting.<br />
<br />
;Monitor Occupancy of Subsystem <br />
:''On''<br />
:With this option on, the portal is kept aware of items entering, leaving and being created within its subsystem (and subsystems within if their portals also have this option on). <br />
:This enables the portal to indicate its "occupied" state when there are items inside. <br />
:If the model does not depend on the automatic portal state, the portal occupancy ocunt or portal item limiting based on "Use SubSystem Total" (the other modes are OK) then this option can be turned off on the portal for a performance boost. <br />
:If this option is changed, Planimate will offer to apply the change recursively to all portals under the current one being changed.<br />
<br />
;Hide P-Entry/P-Exit <br />
:''Off''<br />
:Hides the Portal Entry and Exit inside this portal.<br />
<br />
;Track-DoesLoopDelays <br />
:''Off''<br />
:Enables the imposition of Loop ENtry and Exit Delay times in a Planimate Tracks Model. <br />
:Click [[Portal Track Option Does Loop Delays|here for]] a full explanation of this option.<br />
<br />
;Retained on Paste/Replace <br />
:''Off'' <br />
:When this option is on, the Portal and its entire contents are protected from a Ctrl+Paste update operation performed by a modeller using a copied Portal, and a matching name or wildcard. <br />
:Note that individual objects (including entire Portals) within a Portal that has this setting on can still be updated with a Ctrl+Paste operation. <br />
:Thus the protection only applies to the Portal's entire replacement, not to objects within it.<br />
<br />
;Move Views with Portal <br />
:''Off'' <br />
:If this option is on and you reposition a Portal, any portal attribute views and Portal table views move correspondingly. <br />
:You can still drag a portal without repositioning the views by holding down the Shift key after starting the drag.<br />
<br />
;Show in Background <br />
:''Off'' <br />
:This enables a portal image to be shown BEHIND dials and views so nice overlay effects can be performed during a model run. <br />
:Note that the mouse focus remains sensitive to the portal I dont background the mouse focus yet so you wont be able to get to your dials without moving the image.<br />
<br />
;Handles Parent Messages/Broadcasts <br />
:''Off'' <br />
:If this option is set for a portal the following applies: <br />
:The portal can contain a message handler for directed messages sent to the owning portal. <br />
:This is the same functionality as naming the portal "_!message" but means any name can be used instead of _!message for the portal which makes paste-replacing code updates safer and easier. <br />
:The portal can contain broadcast handlers for screen-only broadcasts sent to its parent (eg: portal clicked). <br />
:This means the handlers for these broadcasts dont have to be right at the portal which has the broadcast targetted at it. <br />
:Broadcasts like "_Portal Clicked" are not normally sent "scoped" but setting this option on a portal within the one where the broadcast would normally be received enables a limited amount of scoping. <br />
:Only one portal per subsystem should have the this option on (Planimate will only search the first portal it finds with this option on in a given subsystem). <br />
:Portals with this option on can be nested if a single handler portal gets too busy, the inner portal must also have this option on and the same rule above applies.<br />
<br />
;Administrators Only <br />
:''Off'' <br />
:This implements portal security. <br />
:A portal option tags a portal and its subsystems as "Only For Administrators". <br />
:You only need to set the option for one portal and it will be in effect for all subsystems within it. <br />
:This option prevents the portal from being viewable unless an administrative password is provided. <br />
:This is set in the Edit-&gt;Admin (Portal) Password menu. <br />
:The default password is "admin" (you will need to enter this to change it) and with this default, Planimate automatically grants admin access when the model is loaded (so there is no protection by default).If the admin password is changed from its default, the admin protection is activated (after the model is reloaded). When an attempt is made to access a protected subsystem (either by direct clicking on a portal, following a jump button or a model initiated screen change), Planimate will prompt the user to provide the password. <br />
:The protection does NOT apply to panels associated with a protected portal, so these may be linked to without the user needing the admin password.<br />
<br />
;Moveable During Run <br />
:''Off'' <br />
:This option enables a portal to be dragged around on a screen using the mouse when a model is paused. <br />
:This movement ability is available to Modellers and Model Users alike. <br />
:When the portal is moved, it will produce a system broadcast (_Portal Moved) which will generate an event within the scope of the portal's subsystem it a Broadcast Entry is tuned to this broadcast. <br />
:This enables interactivity between the user and the model during a model run.<br />
<br />
;Clickable During Run <br />
:''Off'' <br />
:When this option is on, and a model run is paused, a modeller or model user can click on the Portal and it will produce a system broadcast (_Portal Clicked) which will generate an event within the scope of the portal's subsystem it a Broadcast Entry is tuned to this broadcast. <br />
:This enables interactivity between the user and the model during a model run.<br />
<br />
;Handle Without Initialising Run <br />
:''Off'' <br />
:This option is not recommended, and is due to be retired.<br />
<br />
;Automatically Add Copies to Object List <br />
:''Off'' <br />
:If this option is set, any copy made of the portal (by user or under model control) will be added to the object list and an index/name automatically assigned. <br />
:The original portal does not need to be in the object list.<br />
<br />
;Act as Module <br />
:''Off'' <br />
:Sets the Portal to act as a Module.<br />
<br />
[[Category:Object/Portal]] [[Category:Context_Help]]</div>Rickhttps://wiki.planimate.com/index.php?title=Debugging_Options_Choices&diff=4288Debugging Options Choices2021-07-27T02:40:11Z<p>Rick: Rick moved page Debugging Options Choices to Debug Options</p>
<hr />
<div>#REDIRECT [[Debug Options]]</div>Rickhttps://wiki.planimate.com/index.php?title=Debug_Options&diff=4287Debug Options2021-07-27T02:40:11Z<p>Rick: Rick moved page Debugging Options Choices to Debug Options</p>
<hr />
<div>Debugging Options<br />
<br />
These options assist with debugging a model. Many of the options will log to a debug file, this is usually called PLANIMAT.DBG and located in the directory where the EXE is located or failing that, in the application data directory for the user under InterDynamics\Planimate. This file can be opened using Tools-&gt;Show Debug Log.<br />
<br />
These options get cleared when switching to End User (InterDyne mode).<br />
<br />
'''Pause at Events'''<br />
This option causes Planimate to step through FEC events during a run, reporting each in the title bar. This is useful sometimes for debugging the order in which events occur.<br />
<br />
Pressing ESC pauses the model. Pressing L displays the pending FEC events in a list. Pressing space advances to the next event.<br />
<br />
Also logs the event to the debug file.<br />
<br />
'''Trace Animation'''<br />
This causes Planimate to show the panel of every animating item. This can significantly slow down a model! It is useful when advancing to a time where a problem is known to occur but the exact location hasn't been determined.<br />
<br />
'''Enable Breakpoints'''<br />
This option must be enabled for modeller defined breakpoints to be active. Turning it off disables all breakpoints in the model.<br />
<br />
'''Enable Event/Routine Profiling'''<br />
This option enables code which measures how fast FEC events and routine operations are processed. This option should be set before the run is started. It affects the information shown in Tools-&gt;Show Run Profile.<br />
<br />
'''Pause at Same Time Events'''<br />
Enables pausing when events at the current simulation time are still pending. Normally Planimate doesn't pause until all events at the current time have been processed, to guarantee all broadcasts and updates have been processed.<br />
<br />
'''Show Forward Test'''<br />
Animates lookahead operations by flashing the objects being tested for potential movement of an item.<br />
<br />
'''Show Unblock Test'''<br />
Animates unblocking by flashing the objects which are being tested for blocked items.<br />
<br />
'''Report Track Unblocks'''<br />
Logs information about track network unblocking in the debug file<br />
<br />
'''Debug Logging Options'''<br />
Enabling these writes details to the log file for the particular event:<br />
<br />
'''FEC Events'''<br />
Logs every FEC event'''<br />
----<br />
[[Category:Debugging]]<br />
[[Category:Context Help]]<br />
<font size="2">idkbase note 10092</font></div>Rickhttps://wiki.planimate.com/index.php?title=Table_View_Options_Choices&diff=4286Table View Options Choices2021-07-27T02:38:27Z<p>Rick: Rick moved page Table View Options Choices to Table View Options</p>
<hr />
<div>#REDIRECT [[Table View Options]]</div>Rickhttps://wiki.planimate.com/index.php?title=Table_View_Options&diff=4285Table View Options2021-07-27T02:38:27Z<p>Rick: Rick moved page Table View Options Choices to Table View Options</p>
<hr />
<div>'''In Place Edits<br>'''This enables the view to edit the table's contents. If this option is not selected, the view is "read only". <br />
<br />
'''Hide Horiz. Scrollbar<br> '''Hides the horizontal scrollbar. The view can still be navigated in full with arrow keys.<br> <br />
<br />
'''Hide Vert Scrollbar<br> '''Hides the vertical scrollbar. The view can still be navigated in full with arrow keys.<br> <br />
<br />
'''Hide Title<br> '''Hides the table title line at the top of the view. <br />
<br />
'''No Row Editing<br> '''Prevents edits to entire rows being made (eg: deleting an entire row) <br />
<br />
'''Transparent to Clicks<br> '''Makes the table view totally ignore any mouse clicks, in fact the clicks go right rhough the view to whatever is behind it. <br />
<br />
'''Single Click to Edit<br> '''By default a table cell has to be selected before a click on it will edit it. Selecting this option will make a click on any cell immediately edit that cell, even if it is not currently selected. Used with broadcasts, this option makes the table cells act like buttons. <br />
<br />
'''Disable Block Edits<br> '''Prevents editing of rectangular selections of cells. Copying is still allowed but pasting and fill options are not presented to the user. <br />
<br />
'''Don’t Show Current Cell<br> '''Prevents the highlighting of the ‘current’ cell in the view. This is useful when the view will not be edited by the user.<br> <br />
<br />
'''Resizeable Via Title Area'''<br>Enables the user to drag the separator between two column titles to resize the width of the columns. <br />
<br />
'''Resizeable Via Data Area'''<br>Enables the user to resize columns in the view by dragging any separator line in the area of the table where data is displayed. <br />
<br />
'''No Cell Menu'''<br>Prevents the cell context menu from appearing when a cell is right clicked. <br />
<br />
'''Enable Column Filters''' {{main|Column Filter}} This adds a row between the column titles and the data area. Clicking on cells in this row enables the user to view and select data that appears below or use simple wildcard expressions to filter the data that will be displayed in the view. Multiple columns can be filtered together and their filter conditions are combined to narrow the subset of the data that will be displayed in the view. <br />
<br />
'''Hover Tracking'''<br>Enables the view to track the mouse as it moves over it. The graphics options can be used to assign colours to rows, columns and cells as they are hovered over. <br />
<br />
'''Hide Cell Dividers'''<br>Removes the dividing lines between cells. In some cases where alternate row colours are used, it can look more aesthetic. <br />
<br />
<u>The following options only appear when a Cell Click Broadcast has been set for the table view:</u> <br />
<br />
'''Send Cell BC Before Edit'''<br>If selected, the selected cell click broadcast is sent when a user clicks on a table cell instead of the usual cell editing. This enables a modeller to arrange their own editing for the table cell. <br />
<br />
If the modeller wants to do some preprocessing then fall back to the default Planimate cell editing interface, this can be achieved by the broadcast handler for this broadcast setting s.EnableTableCellEdit to 1. For this to work, the "Dont Defer BC on FEC" option must also be selected. <br />
<br />
'''Send Cell BC After Edit'''<br>If selected, then the cell click broadcast is sent after the user finishes editing the cell. This broadcast will include the previous and new values of the cell, which is useful when validating the new contents of the cell. <br />
<br />
'''Send Row Click BC'''<br>If selected then the cell click broadcast is sent when the user clicks on a row label. <br />
<br />
'''Send Col Click BC'''<br>If selected then the cell click broadcast is sent when the user clicks on a column label <br />
<br />
'''Dont Defer BC on FEC'''<br>This option changes the broadcast's behaviour. It needs to be selected if you want to be able to "fall back" to Planimate's default cell editor. See "Send Cell BC Before Edit" above. <br />
<br />
'''Full Edit Menu Even With BC's'''<br>Normally when cell click broadcasts are enabled some of the editing options from the cell and row context menus are removed to ensure all modifications to the table are performed by cell edits. Enabling this option overrides that behaviour, displaying the full editing context menu even if an edit broadcast is being sent.<br> <br />
<br />
[[Category:View]] [[Category:Context_Help|Context_He]]</div>Rickhttps://wiki.planimate.com/index.php?title=Table_Column_Options_Choices&diff=4284Table Column Options Choices2021-07-27T02:36:45Z<p>Rick: Rick moved page Table Column Options Choices to Table Column Options</p>
<hr />
<div>#REDIRECT [[Table Column Options]]</div>Rickhttps://wiki.planimate.com/index.php?title=Table_Column_Options&diff=4283Table Column Options2021-07-27T02:36:45Z<p>Rick: Rick moved page Table Column Options Choices to Table Column Options</p>
<hr />
<div>Here are the options you can set for an individual column.<br />
<br />
'''Clear Contents at Start'''<br />
<br />
Remove all Rows from the Table at the start of each Model Run.<br />
<br />
<br />
'''Send Recalculate BC'''<br />
<br />
Enable this option if you want this column to transmit a "Send Recalculation" Broadcast if it changes during a model run.<br />
<br />
Tables have an (advanced) option to send a Broadcast whenever any cell in selected columns is modified by any means. The bc sent includes the _row and _col of the modified cell. The routine can use this information to update data, summaries etc.<br />
<br />
<br />
'''Round Values in Views'''<br />
<br />
Specify that the Values in this column will be displayed as rounded, though their underlying values will remain double-precision. Once set, you can select the rounding level in the column's edit menu.<br />
<br />
<br />
'''Protect from Edits'''<br />
<br />
Values in this column will not be able to be edited from Table Views. They can still be edited directly from the Table Editor window.<br />
<br />
<br />
'''Include in Gantt Row info'''<br />
<br />
Set this option to include this column's information in the Gantt View window.<br />
In a Gantt View of this table, clicking on a bar in that view shows a window with some details of that row.<br />
<br />
<br />
'''Reset Property on Edit'''<br />
<br />
This will cause cells that have a different cell property thatn the default, to revert to it once edited. Enables a user to track their edits visually.<br />
<br />
'''Right Justify Title / Centre Title'''<br />
<br />
The Column Title is left justified by default. Change that with these options.<br />
<br />
<br />
'''Don't Show Zeros'''<br />
<br />
Suppress the display of Zero values in cells in this column. Helps make some tables easier to read.<br />
<br />
<br />
'''Write using Fixed Width'''<br />
<br />
When this option is turned on, the column is written/exported using fixed width formatting. With this option on the column width (if non zero) field and the column alignment (Left,Right,Centre) take effect when the data in that column is written.<br />
If shorter than "width", the column is padded with spaces.<br />
If wider than "width", the column is cropped.<br />
<br />
<br />
'''Hide Repeated Values'''<br />
<br />
When this option is set, any cells immediately below an initial cell whose values are identical, will not be displayed, reducing clutter, making tables easier to read.<br />
<br />
<br />
'''Keep Private'''<br />
<br />
This will keep the display of the column empty in a view and cause "*"s to be displayed for editing the value/label in a field. It does not affect the popup label list so it should be used with the "Edit Labels In Place" option.<br />
No protection is provided for copying the column into the clipboard (the option is intended to make password entry possible where you would start with an empty cell)<br />
<br />
<br />
'''Edit Labels In-Place'''<br />
<br />
Use this option to enable the user to type existing or new label names, with the table cell indices being updated automatically to point to the newly referenced labels.<br />
<br />
<br />
'''Rename instead of Adding Labels'''<br />
<br />
(Works in conjunction with Edit Labels in Place Option)<br />
Add the "Rename Instead of Adding Labels" option to enable the user to rename a number of existing indices, without the table indicies being changed (as long as they are not 0).<br />
<br />
<br />
'''Column Title Tool Tips'''<br />
<br />
Shows the Column Title as a Tool Tip when hovering over the Column Title in the Table Editor Window, or in a Table View.<br />
----<br />
<br />
<br />
<br />
[[Category:Labellist]]<br />
[[Category:Table]]</div>Rickhttps://wiki.planimate.com/index.php?title=Table_Column_Options&diff=4282Table Column Options2021-07-27T02:36:09Z<p>Rick: </p>
<hr />
<div>Here are the options you can set for an individual column.<br />
<br />
'''Clear Contents at Start'''<br />
<br />
Remove all Rows from the Table at the start of each Model Run.<br />
<br />
<br />
'''Send Recalculate BC'''<br />
<br />
Enable this option if you want this column to transmit a "Send Recalculation" Broadcast if it changes during a model run.<br />
<br />
Tables have an (advanced) option to send a Broadcast whenever any cell in selected columns is modified by any means. The bc sent includes the _row and _col of the modified cell. The routine can use this information to update data, summaries etc.<br />
<br />
<br />
'''Round Values in Views'''<br />
<br />
Specify that the Values in this column will be displayed as rounded, though their underlying values will remain double-precision. Once set, you can select the rounding level in the column's edit menu.<br />
<br />
<br />
'''Protect from Edits'''<br />
<br />
Values in this column will not be able to be edited from Table Views. They can still be edited directly from the Table Editor window.<br />
<br />
<br />
'''Include in Gantt Row info'''<br />
<br />
Set this option to include this column's information in the Gantt View window.<br />
In a Gantt View of this table, clicking on a bar in that view shows a window with some details of that row.<br />
<br />
<br />
'''Reset Property on Edit'''<br />
<br />
This will cause cells that have a different cell property thatn the default, to revert to it once edited. Enables a user to track their edits visually.<br />
<br />
'''Right Justify Title / Centre Title'''<br />
<br />
The Column Title is left justified by default. Change that with these options.<br />
<br />
<br />
'''Don't Show Zeros'''<br />
<br />
Suppress the display of Zero values in cells in this column. Helps make some tables easier to read.<br />
<br />
<br />
'''Write using Fixed Width'''<br />
<br />
When this option is turned on, the column is written/exported using fixed width formatting. With this option on the column width (if non zero) field and the column alignment (Left,Right,Centre) take effect when the data in that column is written.<br />
If shorter than "width", the column is padded with spaces.<br />
If wider than "width", the column is cropped.<br />
<br />
<br />
'''Hide Repeated Values'''<br />
<br />
When this option is set, any cells immediately below an initial cell whose values are identical, will not be displayed, reducing clutter, making tables easier to read.<br />
<br />
<br />
'''Keep Private'''<br />
<br />
This will keep the display of the column empty in a view and cause "*"s to be displayed for editing the value/label in a field. It does not affect the popup label list so it should be used with the "Edit Labels In Place" option.<br />
No protection is provided for copying the column into the clipboard (the option is intended to make password entry possible where you would start with an empty cell)<br />
<br />
<br />
'''Edit Labels In-Place'''<br />
<br />
Use this option to enable the user to type existing or new label names, with the table cell indices being updated automatically to point to the newly referenced labels.<br />
<br />
<br />
'''Rename instead of Adding Labels'''<br />
<br />
(Works in conjunction with Edit Labels in Place Option)<br />
Add the "Rename Instead of Adding Labels" option to enable the user to rename a number of existing indices, without the table indicies being changed (as long as they are not 0).<br />
<br />
<br />
'''Column Title Tool Tips'''<br />
<br />
Shows the Column Title as a Tool Tip when hovering over the Column Title in the Table Editor Window, or in a Table View.<br />
----<br />
<br />
<br />
<br />
[[Category:Labellist]]<br />
[[Category:Table]]</div>Rickhttps://wiki.planimate.com/index.php?title=Queue_Modes_(Ordering_Disciplines)&diff=4281Queue Modes (Ordering Disciplines)2021-07-27T01:14:50Z<p>Rick: </p>
<hr />
<div>Selecting a Queue Mode will affect the way that incoming items are ordered into the group of waiting items.<br />
<br />
<br />
====First In First Out====<br />
The first item to enter the queue is the first to leave. Items queue behind each other in the order they have arrived. This is the default for a queue.<br />
<br />
<br />
====Last In First Out====<br />
Later items leave earliest. The last item to enter the queue is the first to leave. Items entering the queue move in front of existing items in the queue.<br />
<br />
<br />
====Highest Priority First====<br />
Higher priority items are put first. (Priority is an attribute ot the item that can be set when editing the item, or altered in a change object routine).<br />
<br />
<br />
====Lowest Priority First====<br />
Items entering the queue go in front of other items which have a lower item priority than themselves. <br /> Highest Attribute First<br /> Items with a higher value for a selected Item Attribute are put first.<br />
<br />
<br />
====Lowest Attribute First====<br />
Items with a lower value for a selected Item Attribute are put first. <br /><br />
<br />
==Any Item Can Leave==<br />
Used in situations where a regular Item, or Carrier Item may be called upon in no particular order by PickUp objects, or in model logic in combination with Switch Objects.<br />
<br />
==Send Message==<br />
Used when you want to send an Item to another location in your model to be processed. In this Mode you nominate a Target Entry from a list of available Message Entries. The Message Entry nominated need not be in the same subsystem. Refer to &lt;Send Message&gt; for more details.<br />
<br />
==Send Directed Message==<br />
Used when you want to direct a message to a alternative message entries. You get to specify the Target Object in this case using an Attribute, which means the Target may be variable. Refer to &lt;Send Directed Message&gt; for more details.<br />
<br />
==Directed Message for Carried Items==<br />
In this mode a queue will send a message for every item that entering item is carrying. This enables processing of statistics, inspection of carried items etc. to be performed without the overhead of dropping off all the carried items then picking them all up again using DropOff and PickUp Objects. Refer to &lt;Directed Message for Carried Items&gt; for more details.<br />
==Send Scoped Broadcast==<br />
This mode enables a queue to send a specific broadcast to a hierarchy of subsystems. The top is specified using a portal in the object list. Unlike a change object broadcast, the broadcast is sent immediately, whilst the item waits in the queue. The item only leaves the queue once all listening entries have produced their broadcast items and they have flowed as far as they can before encountering capacity. Refer to &lt;Send Scoped Broadcast&gt; for more details.<br />
==Wait For Specific Release==<br />
Queues can be set to hold items until there is a message sent to have a specific Item Released. Items entering the queue wait there until the routine operation "Release Item" is used to release them from the queue. The "Release Item" routine operation takes 2 parameters, Item Index and Scope Panel, representing the Item ID System Attribute value, and the Panel from which scope to broadcast the instruction. Refer to Wait for Specific Release for more details.<br />
==Restart Engine/Continue==<br />
Queues in this mode restart the model engine whilst retaining the item within them. ALL OTHER ITEMS in the model are deleted - the run is stopping and restarting at time = 0, but the item at the queue "survives" the restart and can continue through its flow. Refer to &lt;Restart Engine/Continue&gt; for more details.<br> </font><br />
<br />
<br />
----<br />
[[Category:Object/Queue]]<br />
[[Category:Attribute]]<br />
[[Category:Context Help]]</div>Rickhttps://wiki.planimate.com/index.php?title=Change_Object_File_Options_Choices&diff=4280Change Object File Options Choices2021-07-26T14:05:01Z<p>Rick: Rick moved page Change Object File Options Choices to File Options</p>
<hr />
<div>#REDIRECT [[File Options]]</div>Rickhttps://wiki.planimate.com/index.php?title=File_Options&diff=4279File Options2021-07-26T14:05:01Z<p>Rick: Rick moved page Change Object File Options Choices to File Options</p>
<hr />
<div>== Append to Existing File/Table ==<br />
<br />
Appends data below previous entries already written to the file in a File Write. Appends data below previous entries already in the Table Targets of a File Read. <br />
<br />
== Formatted Values ==<br />
<br />
Format values as defined for the attributes: <br />
<br />
e.g. <br />
<br />
*label texts are included, <br />
*money entries are displayed as $1.00, <br />
*time appears as 00:05 21.00, <br />
*rates as /min etc. as appropriate.<br />
<br />
== Accept Incomplete Tables ==<br />
<br />
(Reading Only) <br />
<br />
If the file data is targeted at a table that has more columns that in the file, the data will still be read into the columns that are there. <br />
<br />
The "Accept Incomplete Tables" file read option will also accept tables with less columns than the expected number of table columns. <br />
<br />
This enables data with variable trailing columns to be read<br><br />
<br />
== Delete File After Read ==<br />
<br />
(Reading Only) <br />
<br />
Deletes a File after it is read into the Model. <br />
<br />
== Wait for File to exist ==<br />
<br />
(Reading Only) <br />
<br />
Suspends the running model until the file exists, and can be read. <br />
<br />
== Remove Trailing Spaces ==<br />
<br />
(Reading Only) <br />
<br />
Any text data that has training spaces will have those spaces removed before being placed into the data target. <br />
<br />
== Remove enclosing 's ==<br />
<br />
(Reading Only) <br />
<br />
Removes enclosing single quotes and strips any junk outside of single quote pairs, first character must be ' for this to activate. <br />
<br />
The import filter treats quoted empty field the same as an unquoted empty field. <br />
<br />
== Automatically Add labels ==<br />
<br />
(Reading Only) <br />
<br />
Any labels not already in the label list that the target column or attribute is formatted to will be added automatically, without asking the user to accept them. <br />
<br />
== Read over Existing Table contents ==<br />
<br />
(Reading Only) <br />
<br />
With this option "on", Planimate® will not clear a table before reading into it. <br />
<br />
Instead, Planimate® will attempt to read the file based on the formats of the existing cells in the table. <br />
<br />
This is VERY useful combined with using cell specific formats in a table. <br />
<br />
The modeller can specify what format data should be read in on a cell-by-cell basis (including different label lists). <br />
<br />
With this option on, PL doesn't read data past the rows already present in the table. <br />
<br />
== Write Column Labels ==<br />
<br />
Places attribute names beside the entries, and table titles in initial row of table.<br />
<br />
''BUG: Should provide column titles, but doesn't unless you include the Write Row Labels Options as well.''<br />
<br />
<br><br />
<br />
== Write Row Labels ==<br />
<br />
Places attribute names beside the entries, and table titles in initial row of table.<br><br />
<br />
''BUG: Provides column titles as well as row labels.<br>''<br />
<br />
== Delimit Using Commas ==<br />
<br />
Use or assume use of Commas instead of Tabs to delimit values. <br />
<br />
;Note:<br />
:When a file is written using comma delimiting and quoted fields are not forced, Planimate will strip commas from value fields even if their formatting inserts them. If it is a label which contains a comma, then Planimate will automatically add quotes as needed.<br />
<br />
== Write without delimiters ==<br />
<br />
(Writing Only) <br />
<br />
Write a file output with no delimiters between cells. <br />
<br />
== Write 4 digit years ==<br />
<br />
(Writing Only) <br />
<br />
Use 4 digit years, even if date format is just two. <br />
<br />
== Show File Browser First ==<br />
<br />
Offer a File browser for the User or modeller to choose the nae of the file to be written to or read from. <br />
<br />
== Quote all Fields ==<br />
<br />
(Writing Only) <br />
<br />
Places Double Quotes around all fields in the table being written. <br />
<br />
== Dynamic Filename ==<br />
<br />
Implement a placeholder for an attribute reference to be used to identify the file name under program control, rather than manually entered, or hard coded file names. <br />
<br />
== Minimise Command Window ==<br />
<br />
When a command requires the creation of a Command window, the window will be launched, but will be minimised.<br />
<br />
== Remain in directory of chosen file ==<br />
<br />
Causes PL to not return to the default directory when a browser is used in a change object to select a file. <br />
<br />
This option only takes affect for PBAs (standalone EXEs) to prevent PL losing track of where the model being edited and its DBs are. <br />
<br />
<br> <br />
<br />
== Allow Empty Cells ==<br />
<br />
This option enables the column option "Dont Show Zeros" to take effect for tables written to a file. (normally all values are written out).<br />
<br />
== Write Precision as Displayed ==<br />
<br />
This option causes formatted tables to be written using any column specified display rounding. <br />
<br />
By default this is not enabled (to prevent unexpected loss of precision) but in some cases the format as displayed is desired.<br><br> <br />
<br />
== Execute Commands using Shell ==<br />
<br />
When this option is selected, executed commands are processed via the windows shell rather than the low level EXE loader. <br />
<br />
This enables URLs and data files to be launched, with Windows automatically determining the application to open the data files with as happens when they are double clicked. <br><br> <br />
<br />
== Dynamic Command ==<br />
<br />
When this option is selected, a command line for the execute command feature is specified using a reference, like a dynamic file reference. <br />
<br />
The default is a "0" or "1" which obviously wont achieve much. <br />
<br />
A label reference will usually be useful.<br />
<br />
<br> <br />
<br />
----<br />
<br />
<br> <br />
<br />
<br> <font size="2">idkbase note 10068</font> <br />
<br />
[[Category:Object/Change]] [[Category:Context_Help]] [[Category:Data/Exchange]]</div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4278Main Page2021-07-26T12:31:50Z<p>Rick: /* Starting Points */</p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]] and then [[First Planimate® Model - the ‘Perils of Average Thinking’|start building your first model]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
<br />
*[[View|Views]], [[Paint|Paint]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Paint&diff=4277Paint2021-07-26T12:27:18Z<p>Rick: </p>
<hr />
<div>In addition to Simulation Objects and Data Views, Planimate panels can contain paint objects.<br />
<br />
Basic paint objects include Line, Rectangle, Ovals and Text. These assist in clarifying the contents of a panel.<br />
<br />
More advanced paint objects include<br />
* Buttons, which support both text and images and are useful in creating user interfaces.<br />
* Viewports, which enable a panel to contain a view of another panel. Advanced capabilities include dynamically switching the panel a viewport shows.<br />
* Map paint objects enable models to be built around a zoomable and scrollable tiled map or schematic diagram.<br />
* Rich Text paint objects enable a panel to contain blocks of scrollable formatted text.<br />
* Video enable embedding video playback in a panel.<br />
* Window enable advanced developers to add dotNET based controls and forms to a Panel.<br />
<br />
<br/><br />
<br />
Paint related articles<br />
<dpl><br />
category=Paint<br />
</dpl><br />
<br />
[[Category:Paint]]</div>Rickhttps://wiki.planimate.com/index.php?title=Object&diff=4276Object2021-07-26T11:41:47Z<p>Rick: </p>
<hr />
<div>Objects are static nodes in a model through which items flow.<br />
<br />
<br> <br />
<br />
== Planimate Objects ==<br />
<br />
Planimate has a small number of objects but they each have a variety of modes and extended capabilities. <br />
<br />
<br> <br />
<br />
=== Entry ===<br />
<br />
{{Breakout|Entry}} <br />
<br />
=== Queue ===<br />
<br />
{{Breakout|Queue}} <br />
<br />
=== Delay (MultiServer) ===<br />
{{Breakout|Delay}}<br> <br />
<br />
=== Exit ===<br />
<br />
{{Breakout|Exit}} <br />
<br />
<br> <br />
<br />
=== Portal ===<br />
<br />
{{Breakout|Portal}}<br />
<br />
<br><br />
<br />
=== PickUp ===<br />
<br />
{{Breakout|PickUp}} <br />
<br />
<br> <br />
<br />
=== DropOff ===<br />
<br />
{{Breakout|DropOff}} <br />
<br />
<br> <br />
<br />
=== Dispatcher (part of Queue) ===<br />
<br />
{{Breakout|Dispatcher}} <br />
<br />
<br> <br />
<br />
=== Code (Change) ===<br />
<br />
{{Breakout|Code}}<br />
<br />
<br><br />
<br />
=== Switch ===<br />
<br />
{{Breakout|Switch}}<br> <br />
<br />
=== Splitter ===<br />
<br />
{{Breakout|Splitter}} <br />
<br />
<br> <br />
<br />
=== Guide ===<br />
<br />
{{Breakout|Guide}} <br />
<br />
<br> <br />
<br />
=== Spatial Link ===<br />
<br />
{{Breakout|Spatial Link}} <br />
<br />
<br> <br />
<br />
=== Pipe ===<br />
<br />
{{Breakout|Pipe}} <br />
<br />
<br> <br />
<br />
=== Track ===<br />
<br />
{{Breakout|Track}} <br />
<br />
<br><br />
<br />
=== Conveyor ===<br />
<br />
{{Breakout|Conveyor}} <br />
<br />
<br><br />
== Object Articles ==<br />
<br />
<dpl><br />
category=Object<br />
notnamespace=Category<br />
titlematch=%Object%|%object%<br />
ordermethod=pagetouched<br />
order=descending<br />
</dpl> <br />
<br />
<br> <br />
<br />
== Object Frequently Asked Questions ==<br />
<br />
<dpl><br />
category=FAQ<br />
titlematch=%Object%|%object%<br />
ordermethod=pagetouched<br />
order=descending<br />
</dpl> <br />
<br />
[[Category:Object]]</div>Rickhttps://wiki.planimate.com/index.php?title=Conveyor&diff=4275Conveyor2021-07-26T11:36:32Z<p>Rick: </p>
<hr />
<div><onlyinclude>Conveyors move items over a distance at a given speed, with the length of each item considered to avoid them overlapping.</onlyinclude><br />
<br />
<br />
== Concepts ==<br />
To start using a conveyor you need to consider the length of the conveyor (set in whatever units you like, typically metres) and its speed (units/second). The length is fixed during a run, speed can be changed as with most other conveyor properties. These are set using attribute references.<br />
<br />
In addition, the length of items is important for a Conveyor. This can be set for an item class in the Item Class edit context menu, or per item in code using s.ItemLength.<br />
<br />
It is important to remember that Planimate models are a schematic and with the Conveyor in particular, you need to manage the layout and icon sizes / scaling carefully if you need to display the conveyor and items to scale.<br />
<br />
=== Pack vs Stop ===<br />
There are two alternative Conveyor behaviours when an item ready to leave is blocked. By default, items are ‘packed’ together when the front item is blocked. Adding the ‘Stop On Block’ option changes it so all items are stopped in their current position until the front item can leave the Conveyor.<br />
<br />
=== Minimum Distance ===<br />
Conveyors enable items to enter only when there is sufficient distance to the previous item. The item’s length property, s.ItemLength is used. A conveyor can be configured to include an additional "minimum distance" which sets the minimum space between the "end" of an item and the "front" of the next one.<br />
<br />
This minimum distance can be dynamically changed, leading to some interesting behaviours.<br />
* Reducing the minimum distance while the front item is blocked causes the items to pack closer together (like cars at a traffic light).<br />
* Increasing the minimum distance whilst items are moving in the conveyor will cause items that are too close to items in front of them to stop moving until enough space opens up. Note that items never move backwards to create space.<br />
<br />
=== Interlocking ===<br />
Conveyors can be linked so if one is stopped for any reason, they are all stopped until conditions change that enable them all to move.<br />
You interlock conveyors by setting their "Interlock Controller" attribute to the same data reference. A portal attribute is recommended for this.<br />
<br />
You can click a conveyor's icon in paused mode for a report of its contents and why it is stopped, reasons include<br />
* Item blocked and its a stop on block conveyor<br />
* The speed has been set to zero<br />
* The control value references an attribute/cell that has become zero<br />
* Interlock from another conveyor<br />
<br />
=== Slide On vs Drop On ===<br />
By default an item enters a conveyor when there is sufficient space to accommodate the entire item, as if a chute above the conveyor drops items onto it.<br />
<br />
The Slide On option changes this so items enter the conveyor from its end, as if they are on a shelf and gradually sliding onto the moving conveyor. Combined with the Slide Off option, these options may be useful where the length of the conveyor is short, on par with the length of the items.<br />
<br />
Slide On vs. Drop On is an important distinction when the conveyor is short relative to the items as it has a bigger impact on the running time an item spends on the conveyor vs. being blocked waiting for enough space on the conveyor.<br />
<br />
On a conveyor moving at a constant speed, the total time an item spends '''on the conveyor''' (in seconds) is:<br />
<br />
Slide On Conveyor: ConveyorLength * Speed<br />
Drop On Conveyor: (ConveyorLength - ItemLength) * Speed<br />
<br />
Note that SlideOn conveyors do not accept new items when stopped whereas a drop on conveyor will, given there is sufficient space.<br />
<br />
=== Slide Off vs Pick Up ===<br />
By default an item exits a Conveyor when its front reaches the end, as if the item was an item was picked up off the conveyor. Normally this has no impact on other items.<br />
<br />
A SlideOff option is available to change the behaviour so once the item exits the conveyor, a "placeholder" continues to hold the space the item occupied until the complete length of the item traverses the conveyor.<br />
<br />
Unlike SlideOn, the SlideOff option's behaviour is very subtle and only has impact when:<br />
* StopOnBlock is not being used<br />
* The Conveyor gets blocked and that space the leaving item left behind is important<br />
* The conveyor is ''very'' short and the front item directly impacts the next item to enter the conveyor.<br />
<br />
Generally when an item traverses multiple conveyors you only need to consider the merit of using SlideOn.<br />
<br />
== Properties ==<br />
=== Conveyor ID ===<br />
This sets a value that is available to the other properties as s.ConveyorID, making it easier to use a table to define properties for a set of conveyors.<br />
<br />
This value should be a constant.<br />
It is not available for Interlock Controller.<br />
<br />
=== Length ===<br />
Sets the length of the conveytor in units (typically metres). This is read at run start only.<br />
<br />
=== Speed ===<br />
Sets the conveyor's speed in units per second. A value of zero stops the conveyor. No negative values allowed.<br />
<br />
=== Minimum Distance ===<br />
Sets extra spacing between items. Items are spaced by their length plus this value, default 0.<br />
<br />
=== Options ===<br />
This value can either be edited directly using the options select dialog or specified as a bit combination from the _conveyor_options label list. Options are: StopOnBlock, SlideOn, SlideOff and HidePlaceholder which hides the placeholder icon used when SlideOff is selected.<br />
<br />
=== Control ===<br />
IF this reference is set to a non-constant attribute or cell, when that data is set to zero it stops the conveyor.<br />
<br />
=== Interlock Controller ===<br />
When multiple conveyors refer to the same attribute or table cell, they will stop as a group if one conveyor is stopped for any reason. Do not modify or initialise this value.<br />
<br />
[[Category:Object/Conveyor]]</div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4235Main Page2021-07-15T07:55:11Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and '''download''' it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]] and then [[First Planimate® Model - the ‘Perils of Average Thinking’|start building your first model]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4234Main Page2021-07-15T07:53:57Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planimate_LITE | Planimate LITE and download it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]] and then [[First Planimate® Model - the ‘Perils of Average Thinking’|start building your first model]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4233Main Page2021-07-15T07:51:02Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planiimate LITE | Planimate LITE and download it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]] and then [[First Planimate® Model - the ‘Perils of Average Thinking’|start building your first model]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Main_Page&diff=4232Main Page2021-07-15T07:49:05Z<p>Rick: </p>
<hr />
<div><big>'''Welcome to the Planimate® Knowledge Base'''</big><br />
<br />
Planimate is a simulation based development environment, produced and used by [http://www.interdynamics.com/ InterDynamics Pty. Ltd.] in the delivery of world class planning and scheduling systems. [http://www.interdynamics.com/contact.html Contact InterDynamics] if you are interested in these services.<br />
<br />
<big>Planimate is available at no cost for educational use.</big><br />
<br />
Read about [[Planiimate_LITE | Planimate LITE and download it here]].<br />
</br></br>For beginners, here is an [[Planimate|introduction to Planimate]]. You can review [[Basic Planimate® Concepts|basic concepts]] and then [[First Planimate® Model - the ‘Perils of Average Thinking’|start building your first model]].&nbsp;<br />
<br />
Experienced users might want to check out the [[:Category:Release Note|Release Notes]] and browse through the [[Special:Categories|Categories]].<br />
<br />
If you are using an older version of Planimate, check out the [[ReleaseNotes:Feature Review December 2019|2019]], [[ReleaseNotes:Feature Review December 2018|2018]], [[ReleaseNotes:Feature Review December 2017|2017]], [[ReleaseNotes:Feature Review December 2016|2016]], [[ReleaseNotes:Feature Review December 2015|2015]], [[ReleaseNotes:Feature Review December 2014|2014]], [[ReleaseNotes:Feature Review December 2013|2013]], [[ReleaseNotes:Feature Review December 2012|2012]], [[ReleaseNotes:Feature Review December 2011|2011]], [[ReleaseNotes:Feature Review December 2010|2010]] and [[ReleaseNotes:Feature Review December 2009|2009]] summaries of new capabilities offered by recent releases.<br><br />
<br />
== Starting Points ==<br />
<br />
*[[Basic Planimate® Concepts|Basic Concepts]], [[Object|Objects]], [[Item|Items]], [[Interaction|Interactions]]<br />
*[[Attribute|Attributes]], [[Table|Tables]], [[Label List|Label Lists]]<br />
*[[Track|Tracks]], [[Pipe|Pipes]], [[Spatial Link|Spatial Links]]<br />
*[[Default Label Lists]], [[System Label Lists]]<br />
*[[System Broadcasts]]. [[Broadcast Tuple Reference]]. [[System Attribute|System Attributes]]<br />
*[[Routine Operations]], [[DataSet|DataSet2]], [[Expressions]], [[Functions]]<br />
<br />
<br><br />
<br />
== Recent Edits ==<br />
<br />
<DPL><br />
namespace=<br />
ordermethod=pagetouched<br />
order=descending<br />
count=10<br />
</DPL<br />
></div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4231Planimate LITE2021-07-15T07:19:20Z<p>Rick: /* Download Planimate LITE Now */</p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
'''Planimate LITE does not include a number of features available in full Planimate, most notably Track Network Modelling.''' Details below.<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a [[Planimate | fully featured graphically programmed Discrete Event Simulator]] at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#By using Plamimate LITE you acknowledge that InterDynamics Pty. Ltd. has no obligation or liability on any aspect related to use of the software.<br />
#Planimate LITE shall not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an [https://interdynamics.com/installers/Planimate/Planimate_LITE_Install.exe installer executable].<br />
<br />
Download Planimate LITE as a [https://interdynamics.com/installers/Planimate/Planimate_LITE.zip portable ZIP file].<br />
<br />
Version 12.18.1, July 14th 2021</div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4230Planimate LITE2021-07-14T01:02:45Z<p>Rick: </p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
'''Planimate LITE does not include a number of features available in full Planimate, most notably Track Network Modelling.''' Details below.<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a [[Planimate | fully featured graphically programmed Discrete Event Simulator]] at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#By using Plamimate LITE you acknowledge that InterDynamics Pty. Ltd. has no obligation or liability on any aspect related to use of the software.<br />
#Planimate LITE shall not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an installer executable.<br />
<br />
Download Planimate LITE as a portable ZIP file.</div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4229Planimate LITE2021-07-07T11:35:59Z<p>Rick: /* Terms Of Use for Planimate LITE */</p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a [[Planimate | fully featured graphically programmed Discrete Event Simulator]] at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#By using Plamimate LITE you acknowledge that InterDynamics Pty. Ltd. has no obligation or liability on any aspect related to use of the software.<br />
#Planimate LITE shall not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an installer executable.<br />
<br />
Download Planimate LITE as a portable ZIP file.</div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4228Planimate LITE2021-07-07T11:23:12Z<p>Rick: /* Key Features of Planimate LITE */</p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a [[Planimate | fully featured graphically programmed Discrete Event Simulator]] at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#Planimate LITE must not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an installer executable.<br />
<br />
Download Planimate LITE as a portable ZIP file.</div>Rickhttps://wiki.planimate.com/index.php?title=Planimate_LITE&diff=4227Planimate LITE2021-07-07T11:16:44Z<p>Rick: /* Key Features of Planimate LITE */</p>
<hr />
<div>== What is Planimate LITE ==<br />
<br />
Planimate LITE is a lightweight version of [[Planimate]] by [https://www.interdynamics.com/ InterDynamics Pty. Ltd.] which runs on any recent Windows PC with minimal installation and without the need to purchase a license.<br />
<br />
Planimate LITE can be used at no cost for educational and non commercial purposes. This makes Planimate LITE perfect for use in schools and universities.<br />
<br />
==Key Features of Planimate LITE==<br />
<br />
* Use a fully featured graphically programmed discrete event simulator at no cost.<br />
<br />
* No time or arbitrary resource limit, runs on 32 and 64 bit versions of Windows.<br />
* No activation. Planimate LITE makes no connection to the internet.<br />
<br />
* Minimal installation, no need for administrative access or installing runtimes.<br />
<br />
* Can run "portable" from a flash drive.<br />
<br />
* Support via the new Planimate [https://forum.planimate.com Forum].<br />
<br />
* Models built with Planimate LITE will load with full Planimate when you're ready to move to it.<br />
<br />
==System Requirements==<br />
<br />
Planimate is a fast and lean simulator and the LITE version has minimal system requirements:<br />
<br />
* 32 or 64 bit Windows 8.1 or later.<br />
<br />
* 4GB RAM, 8GB recommended for 64 bit systems.<br />
<br />
* 1GB of free disk space.<br />
Planimate has been known to run under Linux using Wine.<br />
==Terms Of Use for Planimate LITE==<br />
<br />
Planimate LITE is made available subject to the following terms of use.<br />
#Planimate LITE is provided at no cost and runs without time limit. It is for personal and educational use ONLY.<br />
#Under no circumstances is Planimate LITE to be used to run models which provide any benefit to a company. In such cases a runtime license is required. Contact InterDynamics Pty. Ltd.<br />
#Planimate LITE is not to be used in the provision of professional consulting services.<br />
#Planimate LITE must not be modified to misrepresent or obscure its origin and license terms, as shown in the software's About box.<br />
#Use of Planimate LITE in demonstrations and marketing is approved, provided adequate attribution is included, for example: "Built with Planimate by InterDynamics Pty Ltd"<br />
#Planimate LITE is not to be sold or included in a collection that is sold for profit.<br />
#Planimate LITE may be deployed on an internal network as well as provided to students for use on their own computers.<br />
<br />
==Professional Version Additional Features==<br />
<br />
A licensed version of Planimate is available for professional and consulting use. It adds these features:<br />
<br />
* Licensing for use in business operations and consulting.<br />
* Access to a 64 bit version for much larger models that handle large data sets.<br />
* Modelling of track/rail networks.<br />
* The ability to save and load compressed and and encrypted data using DataSet2.<br />
* Compiling a mdoel to a standalone application.<br />
* Command line batch running of models.<br />
* Connectivity to dotNET for access to web APIs, databases, Azure, advaned graphing and high quality multi-page report generation.<br />
* C/C++ DLL call API.<br />
* Automated model testing framework.<br />
* Support beyond the forum.<br />
* Access to older versions and assistance in bringing forward older models you may have.<br />
* The about box does not linger.<br />
[https://www.interdynamics.com/contact-us/ Contact InterDynamics] for further information on purchasing Planimate.<br />
<br />
==Download Planimate LITE Now==<br />
<br />
You can download Planimate LITE as an installer EXE or in portable ZIP form which can be extracted and run from anywhere.<br />
<br />
Both packages include demo models including a progressive introduction to the modelling objects and Planimate concepts.<br />
<br />
All executables should be digitally signed by InterDynamics Pty. Ltd.<br />
<br />
Download Planimate LITE as an installer executable.<br />
<br />
Download Planimate LITE as a portable ZIP file.</div>Rickhttps://wiki.planimate.com/index.php?title=MediaWiki:Sidebar&diff=4226MediaWiki:Sidebar2021-07-06T07:30:41Z<p>Rick: </p>
<hr />
<div>*Knowledge Base <br />
**mainpage|mainpage <br />
**Category:Release_Note|Release notes <br />
**Category:FAQ|FAQs <br />
**Special:Categories|Categories <br />
**recentchanges-url|recentchanges <br />
**randompage-url|Random Page</div>Rickhttps://wiki.planimate.com/index.php?title=MediaWiki:Sidebar&diff=4225MediaWiki:Sidebar2021-07-06T07:28:32Z<p>Rick: </p>
<hr />
<div>*Knowledge Base <br />
**mainpage|mainpage <br />
**Category:Release_Note|Release notes <br />
**Category:FAQ|FAQs <br />
**Special:Categories|Categories <br />
**recentchanges-url|recentchanges <br />
**randompage-url|Random Page<br />
*Planimate_LITE|Download Planimate</div>Rickhttps://wiki.planimate.com/index.php?title=MediaWiki:Sidebar&diff=4224MediaWiki:Sidebar2021-07-06T07:26:51Z<p>Rick: </p>
<hr />
<div>*Knowledge Base <br />
**mainpage|mainpage <br />
**Category:Release_Note|Release notes <br />
**Category:FAQ|FAQs <br />
**Special:Categories|Categories <br />
**recentchanges-url|recentchanges <br />
**randompage-url|Random Page<br />
*Planimate LITE|Download Planimate</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Planimate_5.x_Release_Notes&diff=4223ReleaseNotes:Planimate 5.x Release Notes2021-07-06T06:35:28Z<p>Rick: Created page with "=== 5.36i === *'''NEW''' Using anti-aliased line drawing in:<br>- graph lines (column overlay, log driven, train graph, gantt)<br> - flow editor lines<br> - track/spatial li..."</p>
<hr />
<div>=== 5.36i ===<br />
<br />
*'''NEW''' Using anti-aliased line drawing in:<br>- graph lines (column overlay, log driven, train graph, gantt)<br> - flow editor lines<br> - track/spatial link lines<br><br />
<br />
*'''NEW''' Log Driven Graph views have a new Graph Option "Overlay Starts At 0 Not 1".<br> When set, the graph view expects overlay numbering to be 0,1,2,3... instead of 1,2,3.4...<br><br />
<br />
*'''FIX''' Update routine editor menu when attributes are pasted along with lines<br><br />
<br />
=== 5.36h ===<br />
<br />
*'''NEW''' Table import/export dialog have new "Comma Separated" option which reads/writes in CSV format<br><br />
<br />
*'''CHANGE''' Recent rework caused models not to be interruptable with the keyboard during animation of an item on a flow line (0 time animation). This was a side effect of using a filter to prevent undesirable events being processed as an item is animating.<br> The ESCAPE key can now be used to interrupt an animating item in this situation.<br><br />
<br />
*'''CHANGE''' Removed the model building tutorial from the help menu. This will be migrated to the wiki.<br><br />
<br />
*'''CHANGE''' The more heavily wiki-text formatted options in the help menu only appear in "advanced editing" mode.<br> (the text these generate is used to update the online Planimate wiki).<br><br />
<br />
=== 5.36g ===<br />
<br />
*'''FIX''' s.KeyTime was not accounting for correct time offset<br><br />
<br />
=== 5.36f ===<br />
<br />
*'''NEW''' System attributes<br />
<br />
s.PBA returns non zero if running as a PBA s.KeyDate creation time for active keyfile. Useful for externally keyed PBA s.KeySerial serial # for active keyfile s.KeyName string attribute returns keyfile user name s.KeyOrg string attribute returns keyfile organisation<br><br />
<br />
*'''NEW''' Planimate about box (edit and PBA) updated<br><br />
<br />
=== 5.36e ===<br />
<br />
*'''FIX''' Cleanups to RemovePortal() (track/link/pipe instances)<br><br />
<br />
*'''FIX''' The LoadModel() routine operation now sets the stop reason to "Platform Required". This is important for models that process the s.LastRunStopReason system attribute as the model is sent the model closing broadcast in a restart just before it is unloaded. It was previously setting an error stop reason which caused models which sense this to report an error before the reload.<br><br />
<br />
*'''CHANGE''' The "_Panel Repainted" broadcast has been improved.<br> The broacast is no longer automatically sent. The modeller must enable it using s.EnableRepaintBC=1 This is an auto-resetting system attribute so the next panel shown (ForceRepaintPanel, ForceRepaint or switching to panel or opening popup) must be the one you want the receive the broadcast for.<br> PL now does the first repaint of a model at run start just before sending the model loaded and run start broadcasts but after sending the preinit broadcasts.<br><br><br />
<br />
*'''CHANGE''' The _panelrepainted broadcast is now sent with properties to process silently.<br><br />
<br />
*'''NEW''' loadpl 2.2 released, now support cross-thread load/reload of model and passing optional s.LoadDataFilePath setting.<br> Internal cleanups: load/load complete signal, PL_LoadModel API, various renames for code clarity. (Background Broadcasts now Silent Broadcasts)<br><br><br />
<br />
=== 5.36d ===<br />
<br />
*'''NEW''' Broadcast "_TrainTailExit" is sent to a location on a track network when the tail of a train has just cleared a road leading to that location. It includes attributes _id, _section and _road.<br><br><br />
<br />
*'''NEW''' Broadcast "_TrainTailExitSrv" is sent to a location on a track network when the tail of a train has just cleared a multiserver inside the location. It includes attributes _id and _object. Note that _object may be zero if the multi-server does not a model object label, this may be OK if the location knows the multiserver the item is in by other means.<br> Note that unlike for roads, no mechanisms keep a hold on a multi-server when it is occupied by a train tail. The modeller must arrange for this if required.<br><br />
<br />
*'''FIX''' Fix handling of multiservers and train length<br><br />
<br />
=== 5.36c ===<br />
<br />
*'''REMOVE''' Removed the configuration and saving of DataSet1 (old scenario files). The editing and menu options are removed.<br> The Label List _Model_DataSets is no longer present in PL.<br> Older models will not load if they still reference this label list. They should have references removed in a previous version of PL.<br> LoadDataSet continues to be supported for the time being.<br><br />
<br />
*'''NEW''' Gantt Views can now log the co-ordinates of the blocks visible to the table that drives them.<br> This is achieved by setting the "Co-ord Start Column" (basic text, not a reference) to the name of the column where the co-ordinate data starts. The data is written as as 4 columns from this column in panel co-ordinates as left-x, bottom-y, right-x and top-y.<br> The co-ordinates for a completed block are placed in the row which starts the block. The 4 points on other rows are set to -1.<br> If the start column name doesn't match any columns or there are not enough columns, the name is ignored.<br> The co-ordinates are only set on "redraw" of the gantt view, not as data is added.<br> Note that the table is updated without redraw as its not intended that the end user see the co-ordinates. Do not expect to see changed co-ordinates without an explicit redraw of the table view.<br><br />
<br />
*'''NEW''' s.LoadFileNamePath can now be set using a $= operation. This will be useful when a PBA restarts itself, enabling it to signal to itself a different dataset to load.<br><br />
<br />
*'''NEW''' Table Driven (Index) mode entries have the option to cycle around instead of stopping when they reach the end of the table.<br> This is enabled with the "Repeat Last Interval and Cycle Around" option.<br> To avoid the final event and first event occuring at the same time, the time interval between the second-to-last and last event in the table is repeated before the cycle-around occurs. Hence this option makes most sense when the events in the table are at a fixed period and the first event occurs at time 0.<br> An example where this is useful is in an hourly profile where the table contains 24 rows with times 0:00, 1:00, 2.00 ... 22:00 23:00.<br><br />
<br />
*'''NEW''' Experimental RemovePortal() routine operation<br><br />
<br />
*'''CHANGE''' Increased maximum screen length of queue and dispatcher to 32<br><br />
<br />
*'''FIX''' Socket allocation code (broken in 5.36)<br><br />
<br />
*'''NEW''' System broadcast "_Panel Repainted" is sent to a panel when its contents have just been redrawn. This can be due to the panel being shown, a force repaint, the panel redrawing due to transparent views updating or change in window size.<br><br />
<br />
=== 5.36b ===<br />
<br />
*'''NEW''' Pipes can now have parts of them hidden. The new option "Hide Next Segment" on the Bend Point context menu toggles whether the segment following the bend point is hidden at runtime. The hide applies up to the next bend point.<br> This property can be read/set in bendpoint tables using a column called "Hide" or "_hide". If a map is managing a bendpoint table and hidden segments are being used, the bendpoint table must include this column.<br><br><br />
<br />
*'''NEW''' Gantt and train graph views have option for "No Title"<br><br />
<br />
*'''NEW''' System attribute "s.AdvancingToTime"<br> This is set if an advance to time is currently in progress OR Planimate is running in batch mode (without a UI)<br><br />
<br />
=== 5.36a ===<br />
<br />
*'''NEW''' PL 32 and 64 bit versions now ship in the one ZIP file<br><br />
<br />
*'''NEW''' Pipe's in "Transfer Table Row" mode now handle additional blending columns in a different way. Instead of specifying an absolute range of columns for blending data, you now specify the number of additional blending columns and they start in the columns to the right of the source and target.<br> The default additional column count is 0 (ie: not active). The value is specified as a reference which is read on run start, hence a portal attribute can be used if it needs to be changed.<br> It is OK for the additional column count to be greater than the number of columns in the source table, PL will use what columns are actually available.<br> PL will stop with an error if the target table does not have enough columns to accomodate all the columns that are used in the source. This protects against mismatched blend data transfer.<br><br />
<br />
*'''NEW''' When s.OwningPortalLocation is used in a string expression it now resolves to the object name of the owning portal<br><br />
<br />
*'''FIX''' Paint button mouse down state was not activating during run (it was being overridden by the button state control attribute). This has been a problem since pre-5.32<br><br />
<br />
=== 5.36 ===<br />
<br />
'''This''' version has undergone internal rewrites, enhancement and cleanups.&nbsp;'''Users''' of the EXE should not notice any change between this&nbsp;'''release''' and 5.35r (model versions are same and compatible). '''The''' new developments enable an application to embed and run multiple&nbsp;'''Planimate''' models (via DLLs) simultaneously, with arbitrary control&nbsp;'''over''' loading, model data, runs and advance-to-time of each loaded PL&nbsp;'''instance.''' <br><br />
<br />
'''A''' key feature is that multiple running models will use multiple cores on&nbsp;'''modern''' processors. '''The''' changes have been carefully reviewed, nonetheless please look out&nbsp;'''and''' immediately report any issues with unresponsive UIs or models&nbsp;'''that''' do not pause/continue as expected or as in 5.35r. '''The''' PL DLL API has changed and a new version of the "LoadPL" C++ PL&nbsp;'''DLL''' container sample is available on request.<br><br />
<br />
'''The''' dotNET wrapper is due to be updated to the new API. '''API''' details will be placed at&nbsp; http://wiki.planimate.com/Planimate_as_a_DLL<br><br><br />
<br />
*'''FIX''' Pause menu appearing right after an item click popup is dismissed with a click. This occured when the "clicks during simulation" option was enabled and an item was clicked during simulation.<br />
*'''NOTES''' (internal change notes<br />
*pause check during animation in PBA dispatches win events<br />
*PL DLL no longer auto-runs model upon startup<br />
*PL &amp; toolkit init code cleanups<br />
*after set AdvanceToTime, now trigger a redraw which performs test for activating Advance Time dialog so its safe<br />
*DoUserCommand added lparam<br />
*new ID regions for toolkit/PL commands<br />
*Pause timer thread cleanup.<br />
*Boosted tick speed when a DLL<br />
*planidll api at V2<br><br><br />
<br />
=== 5.35r ===<br />
<br />
*'''NEW''' Table column editor has name of table in its title<br><br />
<br />
*'''FIX''' Handling of terminate for PL as a DLL improved<br><br />
<br />
*'''FIX''' Inconsistency with directory separators between linux and WIndows<br><br />
<br />
=== 5.35q ===<br />
<br />
*'''FIX''' PBA with external key file - no longer test for an "old" keyfile vs. a new EXE since the keyfile is already locked by the application name. Also allow older key type/key names.<br><br />
<br />
=== 5.35p ===<br />
<br />
*'''FIX''' PBA close after initial About Box.<br> The process of loading the model into the PBA can rearrange PL's font table. This was not anticipated in the About Box as it was a side-effect of its use of off-screen graphics. Just as the about box was being closed, it would revert to a previous "stale" font, causing a close dependent on arbitrary factors.<br> This has been latent since 5.35g but most likely not noticed as a specific font table rearrangement is needed for it to manifest.<br><br />
<br />
=== 5.35o ===<br />
<br />
*'''Following''' up on 5.35j, Track Train Length handling has been<br />
<br />
*'''enhanced''' and can now be incorporated into simulation logic as well as<br />
<br />
*'''just''' for animation of the length of trains on a track network.<br><br />
<br />
*'''These''' are notes on the specific features, a demo model will be uploaded<br />
<br />
*'''into''' the modellers tools area.<br><br />
<br />
*'''NEW''' Track sections now have a "Length Mode" option which enables them to be individually configured for one of two modes of operation.<br> When "Length Mode" is "No" (default), the roads in the section will operate as in previous versions of Planimate, supporting loop delay holds.<br> When "Length Mode" is "Yes", the new train length capabilities are used instead of loop delays.<br> In this mode a road will continue to be held by a train when the train leaves that road, until the tail of the train clears the road. In this state, the road is in "Tail Wait", similar to "Loop Hold" except that it is not time based but rather dependent on the speed the train is moving.<br> Planimate calculates this speed based on the length of the road the front of the train is on, divided by the running time for that road.<br> Whilst the animation of the tail's motion can be made very smooth (with a low Animation Update Interval setting), Planimate performs the calculation of the time a train's tail will leave a road only when the front of the train enters a road, hence there is minimal event overhead when running without animation.<br> For Length Mode to work, the Panel option "Show Train Trails" must be on and trains and roads must have lengths and non zero delays. Note that roads not in Length Mode still animate the length of the train without it affecting their behaviour.<br> You can mix sections in length mode and loop delay mode though this needs care as the two different modes treat track capacity differently.<br> For roads in Length Mode, if the front of a train is in a portal, its tail continues to be displayed and its item icon is shown on the node portal.<br> An additional track table column "LengthMode" enables setting the mode of a section when the track network is configured, 0 = Loop Delay Mode, 1 = Train Length Mode<br><br />
<br />
*'''NEW''' A multi-server in a track node portal can act as a road for train length purposes.<br><br> The "Set/Use Length For Tracks" multiserver option enables editing of a "Length" reference in the multiserver's context menu. With a length set, any train item passing through the multiserver will have this length included in train trail length calculations.<br> This is very useful for delays at mines, ports and loop delays as it gives the train a place to go spatially and will be visually shown by the train's length gradually disappearing/reappearing as it passes theough the node.<br> The multiserver must have an actual delay (not zero) and it should not be enabled unless its a track model using train length animation or logic.<br> This value is re-evaluated dynamically but should not be changed in the middle of a run unless there are no trains at or near the multiserver.<br><br />
<br />
*'''NEW''' Clicking on a track during a run-paused shows a menu with information on the roads. You can now select the "Train" item and it will open the item click context menu for that item.<br> This is particularly useful when a track is being held by an item inside a capacity in a network node.<br><br />
<br />
*'''NOTE''' Train length handling separated from item allocation.<br> An train can now span up to 64 roads and the memory for this is only allocated when:<br />
<br />
- train trail properties such as length/colour/width are set<br />
- the item first enters a road on a panel with the<br />
"Show Train Trails" panel option set<br />
- the Item first enters a multiserver with the multiserver option<br />
"Set/Use Length For Tracks" set<br />
When the length information is allocated, the item click context menu will display extra items:<br />
LENGTH &nbsp;:The length of the train<br />
TAILCOUNT:The number of roads the train extends over<br />
TAIL-EVT&nbsp;:The time a tail-update event is scheduled<br />
(only scheduled if a tail will cross onto another<br />
road before the front of the train is scheduled<br />
to leave the road it is on).<br />
<br />
=== 5.35m ===<br />
<br />
*'''(unreleased)''' <br><br />
<br />
*'''NEW''' Log Driven Graphs have a new option "Disable Overlays By Default" which will cause a data overlay to be disabled unless it explicitly exists in a supplied overlay configuration table and it has _enable set to 1.<br> This simplifies getting a specific overlay without having to know all the other ID's to disable.<br><br />
<br />
*'''FIX''' Gantts and Train Graphs now support free text for their text detail column<br><br />
<br />
*'''FIX''' Gantt row click popup now supports free text<br><br />
<br />
*'''FIX''' Log driven graph text handling supports free text and should be faster<br><br />
<br />
*'''NOTE''' Internal rework of track code underway, should not change current behaviour<br><br />
<br />
=== 5.35l ===<br />
<br />
*'''(this''' is an intermediate test release)<br><br />
<br />
*'''NEW''' System attribute s.PauseAfterAdvance enables the s.AdvanceToTime advance to be paused. Set before s.AdvanceToTime.<br><br />
<br />
*'''FIX''' Fix the system attribute popup when clicking on "System..." on an itme - it was stopping due to some system attributes not being available (eg: s.PipeTableRow). It now just shows 0 for these.<br><br />
<br />
*'''FIX''' An s.AdvanceToTime done in a realtime broadcast is now performed at the end of the broadcast.<br><br />
<br />
*'''FIX''' Train tail spanning over &gt; 3 roads was not following the roads inbetween. (note internal rework for tracking tail is partially complete)<br><br><br />
<br />
=== 5.35k ===<br />
<br />
*'''FIX''' An incorrect flag for references in expression mode caused them to be mishandled in the "Replace Reference" operation. Any reference or quoted string would be replaced if an expression or quoted string was the "From" reference, messing up the model.<br> This has been resolved. Currently expressions are not matched for replacement, only single references/constants, ie: you cannot automatically replace expression "p.attribute + 1" by "p.attribute - 1".<br><br />
<br />
*'''FIX''' The Debug Logger would take an inordinate amount of time to update if it was resized when it had a large number of events. This is because the control was auto-sizing its columns so the last column fills the available space, very slow when hundreds of thousands of rows are in the list.<br> The autosize of the column widths now only occurs if there are less than 10000 rows in the view.<br><br />
<br />
*'''CHANGE''' Made location in reference scan list wider and allowed more characters before it gets cropped. The INI setting [Routine] ReferenceOwnerLength enables setting the length before cropping according to your preference and display capabilities, the new default is 160 characters.<br><br />
<br />
=== 3.35j ===<br />
<br />
*'''NEW''' Train Trails This version of Planimate begins to incorporate train length into models, enabling the length of the train (item) and sections to be set. Planimate uses this information to display the entire length of the train as it moves on tracks, apportioning it along the roads the train has recently visited.<br> The colour and width of the trail can be set item by item.<br> Currently this is purely an animation feature which does not impact on the simulation, however it will be progressed so the end of the train controls the movement logic, as an alternative to the existing "loop delay" abstraction.<br> The trail of a train is only shown whilst it is actually on a track, it will disappear when a train dwells inside a portal (loop, mine etc) and reappear when the train leaves it.<br> Future versions will address this, eg: via new mechanisms to register the contents of a portal for display on its owning panel.<br><br><br />
<br />
*'''NEW''' System attributes: s.ItemLength sets the length of a train (unit should match whatever is used for section) s.ItemTrailColor sets the colour when drawing a train trail s.ItemTrailWidth sets the width of the train trail<br><br />
<br />
*'''NEW''' Track Section Table column "Length". If preset, the configuration table will set the length of the section.<br><br />
<br />
*'''NEW''' Panel Option (Display): "Show Train Trails" This should be set for a panel containing tracks where you want to display the train's length.<br><br />
<br />
*'''NEW''' Track section "Length" setting in context menu. This is provided for diagnostic and testing; lengths should be set by using the Track Section Table.<br><br />
<br />
*'''NEW''' Routine operation "ClearTrailList" removes all sections from a train's history, used when displaying its length.<br><br />
<br />
*'''CHANGE''' The Model Option "Center Icons On Spatial Links" has been renamed to "Center Icons On Tracks/Spatial Links" and now applies to tracks as well.<br><br />
<br />
=== 5.35i ===<br />
<br />
*'''FIX''' Fault caused when Advance To Time dialog appeared in a model with the "Advance Time Dialog In Main Window" option set, and the model was running in a Planimate DLL<br />
<br />
(contained in another C++ or dotNEt application).<br />
The Advance Time dialog was using the main window to position itself but this window does not exist when Planimate is running as a DLL.<br />
<br />
<br />
*'''FIX''' Dialog and a number of other internal services which depended on the main window which is not present when Planimate is running as a DLL<br><br />
<br />
*'''FIX''' Dynamically hidden objects/links were still responding to clicks<br><br />
<br />
*'''FIX''' The clear at start option for attributes, columns and tables now clears to the "run start date" not the "edit date" for data formatted as calendar time.<br><br />
<br />
=== 5.35h ===<br />
<br />
*'''FIX''' Added testing for spatial link time assignment to detect<br />
<br />
-ve times. A small negative value (1.0e-5) is clamped to<br />
zero without an error message.<br />
<br />
<br />
*'''FIX''' Added testing for spatial link distance assignment to detect<br />
<br />
-ve distances. A distance &lt; 1.0e-4 will now trigger an error.<br />
<br />
<br />
*'''FIX''' Added test condition in spatial link code to test against it attempting to schedule a time in the past as a catch-all for distance/time related issues.<br><br />
<br />
*'''FIX''' Fixed a buffer overflow when creating a spatial link name from two long object names.<br><br />
<br />
*'''FIX''' Added an interlock to prevent the "Advance Time" window being displayed if a model set s.AdvanceToTime during a broadcast but then didn't continue the model (ie: model paused). This would cause the Advance Time window to linger whilst paused.<br> This does mean PL will not show the "advance" window within a event triggered broadcast which executes a routine which sets s.AdvanceToTime then takes a long time to complete (eg: a big loop), until the engine continues onto processing other events.<br><br />
<br />
*'''CHANGE''' Support for externally keyed PBA enabled<br><br />
<br />
=== 5.35g (new file format) ===<br />
<br />
*'''NEW''' Tables hover tracking can now send a broadcast. This is selected from the table view context menu and Hover Tracking has to be enabled for the iew.<br> Hover broadcasts set _row and _col attributes and are also sent for entire row (_col = 0) and entire column (_row = 0) as well as "hover clear" where both _row and _col are zero.<br> Typically you will want to respond when _row and _col are both &gt; 0<br> Do not popup windows or change the panel during this broadcast. The broadcast is sent quietly in the background in real time.<br> Use it to change data which updates quickly or you will end up with a laggy and unresponsive interface.<br><br />
<br />
*'''CHANGE''' Reworked the way the About box is handled when Planimate starts a Planimate Based Application (PBA).<br> If an "About BMP" was selected in the PBA Compiler or there is a BMP called _APPLOGO in the model's DB, then the About box is shown before the main content of the model/PBA is loaded.<br> This is an important indicator of activity and will help prevent users from launching multiple instances of the PBA as they will now get immediate feedback that it is loading.<br><br />
<br />
*'''SPEED''' The "About Box" change exposed that a cache used with DB files during load wasn't active for PBAs.<br> Rework was required to enable its use when a model is loaded from a DB (as in a PBA) and that model reads other resources from the same DB.<br><br />
<br />
*'''FIX''' The RoutineFoldColor property in the platform INI file was not being properly initialised, causing folded lines to be "black on black". It was OK for the inverted colour sets.<br><br />
<br />
*'''FIX''' Added row/column indicator to infinite value test for table dates upon model stop<br><br />
<br />
=== 5.35f ===<br />
<br />
*'''FIX''' A restriction which caused viewport windows to be constrained to the size of the desktop area has been eased. This would cause viewports on large scrollable panels to be incomplete when the model was on a system with a lower resolution display.<br><br />
<br />
*'''CHANGE''' The viewport option "Open On Double Click" has been renamed and slightly repurposed - it only is active for modellers now.<br><br />
<br />
=== 5.35e ===<br />
<br />
*'''CHANGE''' Change to Pipe Accumulators, Out Accumulator C is now a Decumulator instead, working like In Decumulator C<br><br />
<br />
=== 5.35d (new model version) ===<br />
<br />
*'''NEW''' Pipes now support tertiary "C" load/unload accumulator targets. These work similar to the current load/unload accumulators but the additional Load Accumulator is actually a Decumulator which is decremented by the load amount instead of incremented.<br> The value is not clamped against zero so it can go negative.<br> These add to the B Accumulators added in 5.34i and enhance the use of pipes when individual levels and aggregate levels are being used concurrently in the supporting model logic.<br> EG: All pipes in a group can use a common Decumulator to track the total amount that has been loaded by the group.<br><br />
<br />
*'''FIX''' It is now possible to interrupt Planimate searching for a path through a complex spatial network (press Esc).<br><br />
<br />
*'''FIX''' strchar operation now works for character 1 (= first character)<br><br />
<br />
*'''FIX''' Reverting a column title when reverting a column to the main table in a table view with customised columns<br><br />
<br />
*'''NOTE''' Further refactoring of Planimate code so support builds under Linux. Most of the changes to PL codebase are to fix inconsistencies picked up by the other compiles.<br><br><br />
<br />
=== 5.35c ===<br />
<br />
*'''NEW''' "_alignment" label list<br><br />
<br />
*'''NEW''' Planimate logs its version number to the logfile. By using "Planimate.exe /debugfile /batch" you can create planimat.dbg which will contain a line like:<br> "Version 5.35c (4511-655) 32bit"<br> This will also work with PBA's built with this version onwards.<br><br><br />
<br />
*'''CHANGE''' If editing attribute/cell views with the Edit Order set up (so editing moves from view to view) then a mouse click no longer advances to the next view, only TAB or ENTER.<br><br />
<br />
*'''CHANGE''' Behaviour of Cyclic Selection<br> If editing a cell view using a label list with "cyclic selection" on then PL is more flexible with how it is applied.<br> If the "Edit With Field" or "Edit With Combo" options are selected, they will now take priority, overriding the cyclic selection and you get the field/combo.<br> Without these options, you only get cyclic selection if<br />
<br />
- its not an "edit down table" or "edit across table"<br />
(auto advance)<br />
- the view doesn't have an edit order value set<br />
In these cases you now get the old-skool label selection popup, just as if cyclic selection wasn't on.<br />
<br />
<br />
*'''CHANGE''' Changed the breakpoiont/error dialog so it has an icon in the taskbar which is useful in returning to the dialog if the modeller has got forced topmost unmoveable popups which could obscure the dialog if selected, causing the user to get stuck.<br><br />
<br />
*'''CHANGE''' /FLIPCOLORS (force dark) option reworked and when used it enables a CTRL-SHIFT-K hotkey to toggle back to standard mode<br><br />
<br />
*'''NOTE''' PL now builds with the "gcc" compiler as well,<br> Having the code compile with many compilers helps pick up problems (each compiler has its own nitpicks). Some minor issues were found in this process.<br><br />
<br />
=== 5.35b ===<br />
<br />
*'''NEW''' Debug logger shows formatted value for SetValue log items<br><br />
<br />
*'''NEW''' Debug logger handles incremental updates to list. If last line is selected, it will scroll otherwise it stays at current item when new ones added<br><br />
<br />
*'''NEW''' Can show debug logger from pause and breakpoint dialog<br><br />
<br />
*'''NEW''' Changed debug logger so main window is its owner to stop it getting lost. Will make this controllable in due course.<br><br />
<br />
*'''FIX''' The wrong panel was internally logged in FEC events involving an object. This was noticeable when a panel filter was applied<br><br />
<br />
*'''CHANGE''' Reduced debug log size to 500k events<br><br />
<br />
=== 5.35a ===<br />
<br />
*'''NEW''' System attribute s.EnableDebugLogger enables model code to open/close the debug logger window. When closed the logged history is deleted.<br> This reference does not open the window if the user cannot edit the model.<br><br />
<br />
*'''FIX''' Clicking beyond the last row in the debug logger would cause PL to close<br><br />
<br />
*'''FIX''' Calendar date/times are properly handled for the from/to log times and the event log times when the edit and run start date differ.<br><br />
<br />
*'''FIX''' Update display when log cleared<br><br />
<br />
*'''CHANGED''' Renamed "View" to "Display" in debug logger<br><br />
<br />
*'''FIX''' The LogMessage operation now has very little overhead in a PBA<br><br />
<br />
*'''FIX''' Handle resizing logger window, fitting the last column, retain position when logger is closed (with PL session at the moment).<br><br><br />
<br />
=== 5.35 ===<br />
<br />
*'''This''' version introduces a new tool for debugging (Tools/Show Debug Window).<br> The Planimate Debug Logger Window enables a developer to record, review,<br />
<br />
*'''search''' and filter the operation of a model, a powerful tool when developing,<br />
<br />
*'''debugging''' and becoming acquainted with a model's code.<br><br />
<br />
*'''It''' is deeply integrated into the Planimate Engine, taking advantage of the<br />
<br />
*'''model''' being available for navigation to sources of events.<br><br />
<br />
*'''Key''' features of the logger include<br />
<br />
*'''*''' Selectable logging of a number of key Planimate operations including item movement, broadcasts, messages and value set operations over an adjustable time range<br />
<br />
*'''*''' Multiple filters can be applied to the display including location, item ID, data object, time range and raw text match of the logged events<br />
<br />
*'''*''' Keyboard shortcuts for rapid navigation of data including skipping time, FEC event, item movement and text search<br />
<br />
*'''*''' Efficient - whilst deeply integrated into the PL engine, it has negligible performance impact when not in use and less than 2x reduction in model speed when logging is active. The debugger uses a fixed circular buffer of about 200MB which retains the last One Million logged events<br />
<br />
*'''*''' Modellers can include their own reports (including data values/text) into the log<br />
<br />
*'''*''' Extensible for more logging event types - a basic set is currently supported.<br><br />
<br />
*'''Currently''' the filters and display modes are accessed using context clicks<br />
<br />
*'''on''' the lines and the menu bar, still in early stages.<br><br />
<br />
*'''NEW''' Routine operation LogMessage(text)<br> Writes text to the debug logger window and the planimat.dbg file if either enabled. Text can be a text expression including attributes and labels as well as quoted text, combined with the &amp; character<br> eg: LogMessage("Stockpile at " &amp; p.Location &amp; "overflow")<br> note that these messages are intended for model development/debugging and should be removed from release models.<br><br />
<br />
*'''REMOVE''' Shared routine support has been removed.<br> Any encountered are reported and removed. Any Change objects using the shared routine will be reported and become "empty".<br> If you run PL with the /DEBUGFILE command line option, the messages are logged to the planimat.dbg file, which you can get to via the "Show Debug Log" option in the tools menu, which appears when /DEBUGFILE is used.<br> You might want to use the information reported to find objects using the shared routine in a previous version of PL and use the "Make Local" option in the routine editor before migrating to this version.<br> Shared routines were mainly used when PL had track loop objects. Removing them makes the platform more efficient and makes it easier to track routine calls in the new debug logger that is being developed.<br><br><br><br />
<br />
=== 5.34i ===<br />
<br />
*'''NEW''' Pipes now support secondary "B" load/unload accumulator targets. These work just like the current load/unload accumulators and are useful for additional logging/control<br><br />
<br />
*'''CHANGE''' Internal rework for new trace logger (not yet available)<br><br />
<br />
*'''NOTE''' Event step debug and item movement logs to debug file (debugging options) are currently unavailable.<br><br />
<br />
=== 5.34h (not released) ===<br />
<br />
*'''CHANGE''' Viewport Sizing Viewports with the "click through" option set used to<br />
<br />
reduce the box made available to the<br />
window within in order to retain a clickable border.<br />
This occured with the "Directly Handle Clicks" option enabled and was required for viewports to be editable in older PL versions.<br />
Since 5.31e, editing is always possible so reducing the window rectangle is no longer required.<br />
This means that viewports with "Directly Handle Clicks" enabled will now have a slightly bigger window area. The overall box of the viewport hasn't changed, just the area it can use to display the other panel.<br />
This has been done to eliminate single pixel offsets which occured with resizeable panels containing anchored viewports, noticeable if the modeller had set up their own border around the viewport.<br />
<br />
<br />
*'''FIX''' Stray column of pixels to right of the status bar cleaned up<br><br />
<br />
*'''FIX''' Table view title was slightly too wide when border style was None<br><br />
<br />
=== 5.34g ===<br />
<br />
*'''NEW''' Distribution dialog has a new mode "Expression" enabling an expression to be used to specify the random generator.<br> The expression can draw one or more uniform random numbers (values from 0 to 1) from the distribution's stream using the new system attribute "s.rnd01"<br> This system attribute is only useable in a distribution in the new expression mode. This ensures compatibility with the undo mechanisms in the PL engine, which also revert the state of the random generator when the random routine operation is used in a routine in lookahead.<br><br />
<br />
*'''NEW''' A Planimate DLL routine can now be used in any expression within a reference.<br> The new notation is:<br> &lt;dll-name&gt;:&lt;dll-routine-name&gt;(param,param,param)<br> Simple Example: Calling a dll function called "sqrt" in a dll called "tools" in a routine line:<br> p.result = tools:sqrt(p.attribute)<br> Advanced Example: Creating a custom distribution (using the distribution "Expression" mode co-incidentally added in this release)<br> In the distribution dialog, select "Expression" then open the editor with the "&gt;" button. Assuming you have a PL DLL called "beta" which implements the inverse Beta CDF function as ibeta(x,alpha,beta)<br> You could then use:<br> beta:ibeta(s.rnd01,p.alpha,p.beta)<br> The routine needs to accept only numeric parameters and have a single numeric output (separate to the return value, which is ignored).<br><br />
<br />
=== 5.34f ===<br />
<br />
*'''CHANGE''' Model palette now has tips for assigned buttons. These are automatically generated based on the button's action.<br><br />
<br />
*'''SPEED''' Sped up table copy (t.table2[] = t.table1[]) in case where table2 is empty (no rows/columns) Was doing a redundant copy in that case<br><br />
<br />
*'''FIX''' Log/Train/Gantt/Column graph sizing when there is no time scroller or x scale but there is a y scale would cause the y scale to go off the bottom of the graph.<br><br />
<br />
*'''FIX''' A PL PBA now continues even if it cannot create application data directory on startup.<br><br />
<br />
*'''FIX''' Reworked message handling to fix a subtle menory corruption when windows were closed as a result of a message sent to them vs. external reasons (eg: user change panel)<br> This was only noticed under the debugger<br><br />
<br />
=== 5.34e (new MDL version) ===<br />
<br />
*'''NEW''' Item class context menu option "Add Attributes For Broadcast" This will add all the item attributes that a particular system broadcast kind will set.<br> At this stage it leaves them formatted as values, it might be useful to reformat object labels etc. to their label list.<br><br />
<br />
*'''NEW''' Panel option (Engine) "Broadcast Item Clicks". When set, any items clicked on the panel will send the new "_Item Click" broadcast.<br> This will copy all matching item attributes to the broadcast item then set:<br />
<br />
"_id" &nbsp;: The item clicked<br />
"_x","_y" &nbsp;: The panel co-ordinate clicked<br />
"_location": The nearest owning portal index of the panel the item is on<br />
"_object" &nbsp;: The object index of the object the item is in<br />
"_buttons"&nbsp;: Which mouse button 1 = Select, 2 = Context<br />
In a non PBA, ctrl-clicking an item will show the inbuilt item info popup.<br />
<br />
<br />
*'''NEW''' Palette "Model Palette" contains 12 buttons which can be assigned click-actions by right clicking on them. Modellers can use this to store common panel jumps, broadcasts etc. for model development/debugging.<br><br />
<br />
*'''CHANGE''' The Change Folder buttons in the icon mover now use the system change folder dialog. To select a DB, select its folder first then pick the DB from the palette/combo list.<br><br />
<br />
*'''FIX''' Redraw of tracks/links/pipes whem their object is repositioned on the fly, introduced 5.34d<br><br />
<br />
=== 5.34d (new MDL version) ===<br />
<br />
*'''NEW''' Object property "ObjectHideName" enables the names of individual objects to be hidden/shown<br><br />
<br />
*'''NEW''' Object property "ObjectNameScale" enables scaling the name of an object. The default value of 100 means no scaling. The scaling is applied to the Object Name Font as set in the Font settings.<br><br />
<br />
*'''NEW''' When dragging an object the co-ordinates are shown in the titlebar.<br><br />
<br />
*'''TIP''' Pressing keypad arrow keys enables keyboard positioning Keypad + toggles smooth mode Keypad - enables numeric entry<br><br />
<br />
*'''FIX''' Empty paths left by flow editor no longer cause PL to close on model start<br><br />
<br />
*'''FIX''' When using the dynamic add object table, the _new_name column now supports using text as well as a label list.<br><br />
<br />
*'''FIX''' Setting the filename of a paint map or paint image now protects against names containing newlines, tabs or double quotes which would cause problems when the model was reloaded.<br><br />
<br />
*'''FIX''' Selecting "Show Routine" in a breakpoint immediately after a routine operation to copy portals would close PL. This was caused by the debug code not properly handling that some run context is cleared by the process of adding the new portals to the running model.<br><br />
<br />
=== 5.34c (new MDL version) ===<br />
<br />
*'''NEW''' Calendar Time format: "YYYY-MM-DD-HH:MM:SS"<br><br />
<br />
*'''FIX''' Non black vertical bars in graphs<br><br />
<br />
*'''FIX''' Missing updates for train graph and gantt if data changed during no-update interval<br><br />
<br />
=== 5.34b (new MDL version) ===<br />
<br />
*'''NEW''' Dialog fields now have separate specification of Display Width and Editing Width. Editing Width detertmines how many characters can be typed and enables longer input that the window area allows (the field horizontally scrolls). Default of 0 uses the display width, as previous.<br><br />
<br />
*'''CHANGE''' Road section type changes in track table are now properly updated in the track at runtime when a GenerateTrackTable() operation is performed.<br><br />
<br />
*'''FIX''' A free text cell containing "%" would be incorrectly processed when written to the clipboard<br><br />
<br />
*'''CHANGE''' Made the flow hover line blue instead of white so it appears on white backgrounds<br><br />
<br />
*'''FIX''' Unchecked item attribute reference would cause PL to fail after reporting an error on a missing item attribute.<br><br />
<br />
*'''FIX''' Cancelling selecting a "Runtime Resources File" then selecting cancel again in the dialog that follows will now properly remove the reference to the file.<br><br />
<br />
*'''FIX''' Dialog() is now compatible with "Text" attributes/cells<br><br />
<br />
*'''FIX''' Paint objects were re-registering tool tips in animation layer updates. This is now prevented; tool tips cannot track an object during animation layer update and require a repaint to update.<br><br />
<br />
=== 5.34a ===<br />
<br />
*'''NEW''' Path context menu enables selection of all items on the active path and and selections are now shown in Flow Edit mode. This is useful for selecting a path then using the align feature of the selection menu.<br><br />
<br />
*'''FIX''' Fix flow edit handling of non rectangular objects for arrow hotspot/tool tip<br><br />
<br />
*'''fIX''' Arrow head direction for vertical lines<br><br />
<br />
=== 5.34 ===<br />
<br />
*'''NEW''' Flow Editor has been reworked<br> Drawing in flow edit mode no longer uses "XOR" type drawing which increases clarity, enables more styled lines and prevents overlapping lines obscuring each other<br> New Drag Behaviour: If an object is dragged and dropped over an arrow of a selected path in flow edit mode, it gets inserted into the flow at that point<br> Active Flow context menu has options to select previous/next objects<br> Deleting an object which is one or more flow paths used to delete the whole path. It now removes it from the paths its in.<br> A new algorithm is used to position path numbers<br> The font used for path numbers can be customised in the Font settings.<br><br />
<br />
=== 5.33o (not released) ===<br />
<br />
*'''NEW''' Item "following"<br> A mechanism has been added enabling an item's position on a spatial link/track to be used to adjust the position of a map, the idea being to keep the item centred whilst the map moves under it.<br> This is achieved in model code, the operations added provide the basic support. This feature creates no performance impact if it is not enabled.<br> For usage details refer to the Map Demo Model (5.33o)<br><br />
<br />
*'''NEW''' System Attribute s.FollowLimit (0 by default) This acts as a "safety valve" so a model only gets a movement broadcast when it specifically asks for one.<br> When set AND an item with s.ItemFollow set takes a step on a link/track, PL will decrement this limit then send the new "_follow item" broadcast.<br> *** It also causes no subsequent periodic item animation. ***<br> The idea is that the modeller has an opportunity to shift/change the layout (eg: map) THEN force a repaint.<br> This attribute is automatically zero'd upon pause. Only set it to 1 at this stage.<br> The force repaint re-anables normal animation until another item step triggers the broadcast.<br><br />
<br />
*'''NEW''' Item System Attribute s.ItemFollow This signals to PL which item "follow".<br> It can be set in code or by clicking the "Follow" line in the popup which appears when the item is clicked in edit mode.<br> See s.FollowLimit on the effect of setting this.<br><br />
<br />
*'''NEW''' Broadcast "_Follow Item"<br> This is sent when an item with s.ItemFollow set takes a step as described above. It includes attributes:<br />
<br />
_panel&nbsp;&nbsp;&nbsp;: Panel ID of panel item is on<br>_location: Object ID of link or track item is on<br>_id&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;: Item ID<br>_x,_y&nbsp;&nbsp; &nbsp;: bottom left iFlow co-ordinate of item<br />
<br />
To follow an item with a map:<br>- use map to determine (longitude/latitude) of the x/y point<br>- set the map's centre to (longitude/latitude)<br>- update the map and let map update object/bendpoint positions<br>- forcerepaintpanel containing the map<br>- Set s.FollowLimit to 1 again so the next step will be<br>broadcast to you<br> After doing this, the repaint will show the item in the centre with the map having moved under it.<br><br />
<br />
*<br />
<br />
'''NEW''' Viewport option&nbsp;: "Keep Client Size Even" This should be turned on for viewports containing a map on a panel with "Auto Fit Panel To Window" turned on.<br> This eliminates one pixel jitter of a followed item, which was caused by the map panel having an odd width and/or height.<br />
<br />
<br><br />
<br />
*'''FIX''' To prevent co-ordinate errors the Map Paint Object always works in an even number of screen pixels. If you set it up on a panel which has even width/height at the time of edit, make the paint object have even width/height then look at it through a viewport with the "Keep Client Size Even" then you will not get the unused row/column of pixels that will appear on the right/bottom of the map display if its size is not even.<br> TIP pressing keypad minus when resizing shows a dialog of the co-ords<br><br />
<br />
*'''FIX''' Memory leak when retrieving users of a label list<br><br><br />
<br />
*'''SPEED''' Cleanup (further) windows message processing by using MSG structs<br><br />
<br />
=== 5.33n ===<br />
<br />
*'''The''' following changes enhance the performance of the Map Paint Object<br><br />
<br />
*'''A''' new version of the MapDemo model (the reference model on using the<br />
<br />
*'''Map''' Paint Object) will be available in the idBase Developers Tools<br />
<br />
*'''region.''' It includes use of a tile DB file, easier configuration<br />
<br />
*'''and''' support for zoom to mouse cursor.<br><br />
<br />
*'''Documentation''' for this model is on the wiki:<br />
<br />
*'''http://wiki.planimate.com/Map_Module''' <br><br />
<br />
*'''Existing''' models should be compatible with this version but 2 changes<br />
<br />
*'''are''' recommended in existing map code:<br><br />
<br />
1) Replace the 4 lines which set properties ObjectXPosition, ObjectYPosition,<br />
<br />
ObjectXScale and ObjectYScale with one call to SetObjectPos() which is far more efficient.<br><br />
<br />
2) Use the _panel_visible broadcast to update the map's position<br />
<br />
(remove _panel_opened or other catches of this broadcast if present)<br><br><br />
<br />
*'''NEW''' System broadcast '_Panel Visible" is sent to a panel when it becomes visible, whether because it has been selected to the main window, displayed in a popup or is now appearing in a viewport.<br> It is not sent to a panel at run start if it is already visible.<br> A panel will receive this broadcast before any previous panel receives the "_Panel Closed" broadcast and before the newly received panel receives the "_Panel Opened" broadcast.<br> Process this broadcast as quickly as possible and do not attempt to close the panel that is just appearing within the broadcast.<br><br />
<br />
*'''NEW''' The map "SetLongLatXY" operation now takes into account any changes to the map zoom property without needing a repaint. This enables smoother updates when using this operation to keep the map centred on the mouse when zooming.<br><br />
<br />
*'''NEW''' Map operations "SetLongLatXY", "LongLatToXY" and "XYToLongLat" now quietly do nothing if the map is not on a panel which is visible. Without a window they dont have a co-ordinate space to operate over.<br><br />
<br />
*'''NEW''' Added and renamed mouse co-ordinate access system attributes. They are now:<br> MouseX,MouseY: The mouse co-ordinates in Planimate's cartesian co-ordinates where (0,0) is the bottom left pixel of the panel in the main window.<br> MouseXWindow,MouseYWindow (used to be MouseXPanel/MouseYPanel): The mouse co-ordinate in Windows' co-ordinates where (0,0) is the top left pixel of the panel in the main window.<br> MouseXOwner,MouseYOwner: The mouse co-ordinates in Planimate co-ordinates where (0,0) is the bottom left pixel of the first visible panel above the location where the reference is made.<br> This is useful for determining the co-ordinates on a panel which is in a viewport. In this case the code needs to be in a portal under the panel.<br><br />
<br />
*'''NEW''' Routine operation SetObjectPos(obj,x,y,xscale,yscale) enables an object to be positioned and scaled in one efficient operation.<br> x/y specify the objects centre xscale/yscale set the scaling as a percentage with 100 = no scaling<br><br />
<br />
*'''FIX''' Map Paint objects will now work in a popup which has been scaled.<br><br />
<br />
*'''NEW''' The graph horizontal time scroller has a tip over the "resize" area<br><br />
<br />
=== 5.33m ===<br />
<br />
*'''FIX''' PBA's built with 5.33l would not "advance to time" properly and would likely have other issues due to the FEC being left in background event processing mode.<br><br />
<br />
*'''NEW''' Deferred Drawing option added to train, gantt and column graphs. This causes changes to the graph to be rendered behind to scenes (quicker) and then the graph to updated all at once.<br> Future versions will auto-cache the rendered data when the graph is redrawn without the data having changed.<br> Tip: for faster graph updating, set a non zero update interval as it prevents repeated updates as data in the table is changed.<br><br />
<br />
*'''CHANGE''' Graph views changed to avoid recalculating internal graph data if the table driving them hasn't changed and they haven't been moved.<br><br />
<br />
*'''SPEED''' Optimisation to graph view line/bar drawing<br><br />
<br />
*'''CHANGE''' The "Restart When Model Stops" option does not take effect when the system is in editing mode. This prevents models auto restarting when editing.<br><br />
<br />
*'''FIX''' Reworked low level event handling to fix issue with listview controls and Window 8 Consumer Preview.<br> PL now works in Windows 8, previous versions would have problems with model editing, which uses the listview in various dialogs.<br><br />
<br />
*'''FIX''' Train Graph and Gantt Graphs no longer cause fault if their table has columns removed while they are visible. Streamlined redraw code for transparency case.<br><br />
<br />
*'''FIX''' Made Auto X Scale "on" by default for newly added gantt and train graphs.<br><br />
<br />
*'''FIX''' Some printer drivers not handling transparent background attribute views<br><br />
<br />
=== 5.33l ===<br />
<br />
*'''FIX''' On some systems with multiple nested viewports, fit to panel and resize broadcasts enabled, nested resize broadcasts would generate system error 1134 which indicated a pause with a background-process event still pending.<br> The engine now checks for this and processes to completion all such events.<br> This may also clear up some cases of a missing panel resize/update that gets cleared up when continuing the run.<br> In addition to the fix, the diagnostic message is no longer reported in a PBA.<br><br />
<br />
*'''FIX''' The label list combo in the attribute editor was not getting its length initialised properly causing it to pick the wrong initial label for longer labels that differed beyond the 10th character.<br><br />
<br />
*'''CHANGE''' Engine: events posted in "Background" mode such as resize, page printed etc are not interruptable in PBAs.<br><br />
<br />
*'''CHANGE''' engine: streamlined the main event processing loop by combining a few termination tests<br><br><br />
<br />
=== 5.33k ===<br />
<br />
*'''NEW''' Implemented setting the x scale range for gantt and train graph views. The Auto X scale option is now enabled for these graphs and it is on by default. It must be turned off to make setting the x scale effective.<br><br />
<br />
*'''NEW''' Table View properties MinYValueRHS and MaxYValueRHS, can set the RHS Y axis range for log driven graphs with the secondary RHS axis enabled and Auto Y Scale disabled.<br><br />
<br />
*'''CHANGE''' Reworked how object rectangles are managed to make it easier to manage the special cases (queue/dispatcher) which dont have the bottom left as their internal origin.<br><br />
<br />
*'''FIX''' Edit time Ctrl-click/drag on a map (to drag the objects in the view) now updates the co-ordinates of the objects in a different way which hopefully achieves the goals of putting the centre of the object at the right position, keeping any object views in sync with the object and correcting any corrupted object bounding box which made it impossible to click or select the object even though it was visible.<br><br><br />
<br />
=== 5.33j ===<br />
<br />
*'''NEW''' Scale Parameter: X Scale Label Margin<br> This sets the minimum padding (in pixels) between adjacent x-scale labels.<br> PL omits scale labels if they are within this margin (too close).<br> Reducing this value enables scales with labels which are closer together<br><br />
<br />
*'''FIX''' The sub label list editor will now remove all members from a sub label list which are not in the "selected" list - including labels which no longer exist in the parent label list.<br> Previously it would leave such labels even though they did not appear in the sub label list dialog.<br><br />
<br />
*'''NEW''' Improve Column Overlay editing including detail display, Swap To Line and Duplicate of overlay items. Scale display cleaned up to not show unsupported RHS parameters for this graph type.<br><br />
<br />
*'''NEW''' Column Overlay graphs in "Vertical Bar" mode have a new option: "Arrange Overlays Side By Side".<br> This distributes overlays horizontally (based on their width) centred on their bin value. It is very useful for multi-column histograms.<br> You can use the X Scale margin to add space for the bins at the edges of the graph, typically about 10% margin is enough.<br><br />
<br />
*'''NEW''' Column Overlay graph option "Allow Negative X After Margin"<br> This enables the X scale to extend before 0 and is useful when using the "Arrange Overlays Side By Side" option where the first bin is at 0.<br><br />
<br />
*'''NEW''' Graph view properties: MinXValue,MaxXValue,MinYValue,MaxYValue<br> This enable querying and setting the x and y data range for graphs with manual X/Y scales (the setting is ineffective if auto x/y scale is enabled).<br> Reading is supported for Column Overlay, Log Driven, Train and Gantt graphs.<br> Setting is only supported for Column Overlay and Log Driven graphs as Gantt and Train Graphs do their own management of the underlying graph object.<br><br />
<br />
*'''FIX''' Column Overlay graph scales update to source changes on a redraw<br><br />
<br />
*'''FIX''' Made line style names consistent between labels and selector<br><br><br />
<br />
=== 5.33i ===<br />
<br />
*'''NEW''' Clicking on an entry in Message Entry mode now displays the time and sender of the last message received from the entry.<br> A new option enables an item to be created at the entry which<br />
<br />
triggers the code (as for clicking ona broadcast entry). This<br />
is useful for development/debugging.<br />
<br />
<br />
*'''NEW''' Pipe behaviour with broadcasts has changed.<br> Previous versions would continually resend a broadcast every pipe update when an enabled trigger such as Target At Target Upper Limit occurred. If the modeller didn't stop the pipe or change the target, a broadcast storm would result.<br> From this version, a broadcast for an ongoing condition is only sent once whilst that condition is maintained, For the target upper limit case, if the target drops below the upper limit then goes above it again, then another broadcast is sent (see below about this).<br> If the pipe is stopped and restarted (using the pipe control attribute) then another broadcast is sent if there are any active conditions.<br> if the new Pipe option "Only Pipe Stop/Start Resets Broadcasts" is set, then the pipe wont rebroadcast when the target drops below the upper limit and goes above it again - a stop/restart is needed to reset the broadcast sending.<br> This change enables a modeller to be notified of a condition (such as the target reaching a threshold) but for the pipe to continue operating because the model is waiting upon other conditions to be met before taking action.<br><br />
<br />
*'''CHANGE''' Improved multi-monitor support<br> Changed the window creation code to remove clamping the window width/height against the primary monitor, instead it now clamps against the virtual desktop area.<br> This prevents viewports from being restricted when a window is stretched across multiple monitors or onto a monitor which is larger than the primary display monitor.<br><br />
<br />
*'''FIX''' The browse folder dialog now supports a default (currently used when selecting a DB for importing icons)<br><br />
<br />
=== 5.33h ===<br />
<br />
*'''NEW''' Managing Pipes with s.PipeTableRow and the "ObjID Column" setting<br> Pipes can now automatically find which row of a pipe table to use for storing their control, rate, limiting and other properties. This avoids the use of Matched Cell lookups in the pipes, which is very, very bad for performance.<br> The pipe needs to be associated with a configuration table that the modeller builds and maintains. This is done by setting the "ObjID Column" pipe object setting to a column refernce of a table. This column needs to be populated with the Object IDs of all the pipes that refer to it.<br> WIth this set, a pipe can then use the new system attribute s.PipeTableRow as a row index to the SAME table. This will be calculated at model start to point to the correct row for the pipe.<br> s.PipeTableRow is evaluated very quickly (as quickly as a constant).<br> The pipe table must NOT have rows added or removed at or above any rows that pipes are using. Appending is OK.<br> A dynamically added pipe (created based on a template which references a config table) will look for itself in the table, so the entry for it needs to be added there before creating the pipe.<br> You are not limited to one pipe configuration table but you MUST make sure that your pipe's settings use the table which matches the ObjID Column table.<br> Clicking on a pipe in edit mode will display the table and row index that the pipe is using.<br> Example:<br> The modeller has a table called PipeTable with columns<br />
<br />
PipeID &nbsp;: contains pipe object IDs<br />
Control&nbsp;: pipe control values (0, 1)<br />
For each pipe, setting this will put it under control of the table:<br />
ObjID Column&nbsp;: t.PipeTable.Column(c.PipeID)<br />
Run Control &nbsp;: t.PipeTable[s.PipeTableRow][c.Control]<br />
<br />
<br />
<br />
*'''SPEED''' References to s.Clock will be faster<br><br />
<br />
*'''FIX''' Fixed a typo in the table column editor<br><br />
<br />
=== 5.33g ===<br />
<br />
*'''NEW''' It is now possible to work with tiled maps without having to install a folder with thousands (or hundreds of thousands) of small files.<br> Planimate's DB Admin Tool enables packaging of a tile folder into a DB file. The Map View can then be configured to fetch tiles from that DB instead of looking in folders. More details below.<br><br><br />
<br />
*'''NEW''' DB Admin tool has new option to import a tileset into a DB file. The DB file must be initially empty. You can create an empty DB by typing a new name when the DB Admin Tool offers to select a DB.<br> You need to select the top level folder of the tileset (the one containing folders for each zoom level).<br> Only one tileset can be in a given DB file. DO NOT name it with a preceeding underscore, you must specify it explicitly in the Map View object. If it has a preceeding underscore, PL will waste a lot of time scanning it for regular icons.<br> A tile DB file must not be the model DB and cannot be merged into a standalone EXE, it gets shipped as a separate file which resides in the same place that the tile folder was.<br> Avoid using the icon mover or DB Admin Tool on a tile DB, it will be *very* slow when there is a large number of tiles.<br> Be aware that DB files are limited to 2GB in size at this time. The tiles are efficient, 120,000 tiles result in about a 150MB DB file.<br> Keep a backup of your tile folder (best done in a zip or 7z) in case you plan to alter it. There is no tool to extract the tile folder from the tile DB at this stage.<br><br />
<br />
*'''NEW''' The Map View Paint Object has a new option "Fetch TIles From DB File". This causes it to treat the tileset name as the name of a DB file instead of a folder name.<br> The DB Admin tool can be used to import a tileset into a DB file.<br> NOTE 1: Multiple map view objects using the SAME tile DB will all load a separate copy of the DB index. With 150000 tiles this will use 15MB of RAM per view, not a great problem but it does allocate many memory objects.<br> Viewports of the one paint map object are not affected.<br> NOTE 2: Multiple map views with the "Cache Tiles In Memory" option and DIFFERENT tile DBs is not supported. The tile cache only supports one DB, so you will need to turn the cache option off on Map Paint objects which use a second, third etc. tile DB.<br> Generally a model will only need one tile database.<br><br />
<br />
*'''CHANGE''' You can now type a name into the file dialog when opening the DB Admin tool, this will create a new DB file.<br><br />
<br />
*'''FIX''' FillSteps option for AddStaticRoute<br><br />
<br />
=== 5.33f ===<br />
<br />
*'''NEW''' Routine operations AddStaticRoute and RemoveStaticRoute enable adding and removing routes (as edited under the Track-Routes menu) under model control.<br> AddStaticRoute(route_name, route_id, starting_cell, step_count, fill_steps) RemoveStaticRoute(route_id)<br> Both use route_id to identify which route. Adding using an existing route_id replaces that route, otherwise a new route is added. If route_id is 0, a new id gets allocated. The route_id used or allocated is returned.<br> Deleting a non existent route is silently ignored.<br> For AddStaticRoute:<br> Starting_cell references a cell in the table. This points to the top of a column of portal object labels. 'step_count' specifies how many rows will be put into the route.<br> The fill_steps option allows PL to auto complete route steps when it is instantiated. Note the route steps added remain as specified.<br> It is imperative that any route modified or removed not have any items using it at the time. This is not supported and will likely result in Planimate seg-faulting.<br> If the objects are not all portals and all on the same panel, a model stop occurs.<br><br><br />
<br />
*'''CHANGE''' Renamed the Change object File option "Write Free Text As Cell" to "Dont Binary Quote Text Cells"<br><br />
<br />
*'''NEW''' Change object File Read (DAT files) now supports reading raw data into a free text column (not quoted binary data) when the option "Dont Binary Quote Text Cells" is enabled.<br><br />
<br />
*'''CHANGE''' These routine operations can now set a text string instead of only working with label lists, depending on whether their target attribute is formatted to a label list or as text.<br> AppendToLabel RenameLabel ExtractFileName ExtractFileExtention ExtractPathName<br><br><br> FilesInFolder FilesInHierarchy<br><br><br />
<br />
*'''FIX''' Reporting of out-of-range column in Change object File Read/Write<br><br />
<br />
*'''SPEED''' Optimised route step management, reducing memory usage and model file size by removing obsolete unreferenced data and taking advantage of route steps always being portals.<br><br />
<br />
=== 5.33e ===<br />
<br />
*'''NEW''' Gantt views now support an optional new column "_layer"<br> This enables blocks to be positioned behind/in front other blocks.<br> By default all blocks are drawn on layer 0. Adding the _layer column enables say layer 1 and 2 to be used. Layer 1 blocks will be drawn in front of layer 0 and layer 2 to be drawn in front of layer 1.<br> Its important that layer numbers start from 0 and increment by 1. (each layer increment step involves another pass through the data).<br><br />
<br />
*'''NEW''' System attribute s.LastRunStopTime<br> This gives the simulation clock that the previous run stopped at. It is set at the same time as s.LastRunStopReason.<br><br />
<br />
*'''NEW''' Gantt Views now support an optional column "_yoffset" enabling individual bars to be offset relative to each other on a row.<br> The value is specified as a percentage of the maximum possible bar size after taking into account the global gantt bar width.<br> For _yoffset To be useful, the _width of the bar must be less than 100, otherwise it has no space to move in. This is set using the existing _width column capability.<br><br> Examples:<br />
<br />
Column Column Result:<br />
_width _yoffset<br />
100 0 The bar fills as much as of the row as the<br />
global gantt view _width determines. This is<br />
subsequently called its "maximum height".<br />
<br />
50 0 The bar is half its maximum height, and centred<br />
50 100 The bar is half its maximum hieght and top-aligned<br />
33 -100 The bar is 1/3 its maximum height and bottom aligned<br />
Bar labels are offset accordingly.<br />
Used in conjunction with the _layer capability, very complex data can now be overlaid in the one Gantt View.<br />
<br />
<br />
=== 5.33d ===<br />
<br />
*'''NEW''' Ctrl-X is now supported in the table editor/views.<br> If the selection is all columns, the selection is copied then cut. Otherwise PL just beeps.<br><br />
<br />
*'''FIX''' The in-place editing field for routine editing could extend off the edge of the window if the routine step edit window had a scrollbar. This made it difficult to inspect and edit long statements.<br><br />
<br />
*'''FIX''' Planimate was not responding to loop break requests when the advance to time dialog was active (advance dialog was receiving notification but its state wasn't being tested in one instance).<br><br />
<br />
*'''FIX''' Remove some obsolete testing from route fill finalisation code<br><br />
<br />
*'''FIX''' Inner about box credits updated<br><br />
<br />
*'''CHANGE''' Renamed routine editor "Expand Collapsed Blocks" to "Expand Collapsed Blocks In Selection", reflects better what it does.<br><br />
<br />
*'''NOTE''' For a recap of development last year, Planimate's 2011 Feature Summary is at:<br> http://wiki.planimate.com/ReleaseNotes:Feature_Review_December_2011<br><br />
<br />
=== 5.33c ===<br />
<br />
*'''NEW''' Standalone EXE version information<br> This is only available to Planimate users with a PBA Compiler key (level 4 license).<br> The "version" information that Windows displays when hovering over an application or checking Property/Version of an application in Explorer has can now be set for a Planimate Based Application (PBA).<br> The "Standalone EXE Creation" dialog has a Versioning button to configure the settings (which are saved with the model for next time).<br> The versioning is actually performed by a separate standalone executable called "VerPatch.EXE" which Planimate calls when making the PBA. Licensed users can access this on idBase in the Planimate Development Tools region. The EXE must be placed in the same directory as Planimate's executable. It will work for both 32 and 64 bit builds.<br> The way the EXE is called is specified in an INI setting [PBA] VersionCall= ...<br> You should not need to modify this as the PBA builder subsitites the values entered in the UI.<br><br />
<br />
*'''CHANGE''' PBA Compiler options/settings for "App Icon", "Windows Icon", and "PL EXE To Use" are only available to users with a PBA compiler key license (level 4 license).<br><br />
<br />
*'''NEW''' Multiserver option 'Low Priority 0 Delay" This configures the multiserver so it is a zero delay but the event is posted with a low priority so other FEC events at the same time will be processed first.<br> This is useful where a large number of updates are happening at a time and you want to perform some final processing after everything else is completed.<br> Typically flow order, messages and broadcast-wait dispatchers can help order activity but in some cases the system is too parallel and this option can help.<br> This delay mode is not pauseable and is mutually exclusive to the "pauseable 0 delay" multiserver mode.<br><br />
<br />
*'''NEW''' Can "Find" multiservers with "Pauseable 0 Delay" and the new "Low Priority 0 Delay" options.<br><br />
<br />
*'''NEW''' The 64 bit version of Planimate has new behaviour when loading DLLs which will make it easier to manage both 32 and 64 bit versions.<br> If loading a DLL which doesn't contain "64", the 64 bit version will change the name to include "64". If the load fails, it will fall back to using the name as selected.<br> Hence in a model that loads "MyDll.DLL".<br> A 32 bit version of Planimate will only load "MyDll.DLL".<br> A 64 bit version of Planimate will try load "MyDll64.DLL" first then if that isn't found, it will try "MyDll.DLL" (which then must be a 64 bit DLL for it to work).<br> When using this feature and editing your model's DLL call, you will need to have both 32 and 64 bit DLLs and select the version without the "64". For example, select "MyDll.DLL". PL will load "MyDll64.DLL" automatically.<br><br />
<br />
*'''NEW''' Routine operation "ShowAboutBox"<br><br />
<br />
=== 5.33b ===<br />
<br />
*'''NEW''' The Advance To Time / Advance For Interval dialog has a new checkbox "Ignore Breakpoints" which will cause breakpoints during advance to be ignored. NOTE:This gets reset when the model engine restarts.<br><br />
<br />
*'''NEW''' Can select "Clear on save" option from table creation dialog<br><br />
<br />
*'''FIX''' Pipes no longer update bin areas when hidden<br><br />
<br />
*'''FIX''' The "Replace" reference dialog now accepts a To Line &gt; than the line count in the routine (clamping to the last actual line).<br><br />
<br />
*'''FIX''' Sidebar reset after building PBA. Change in 5.33a caused hierarchy to disappear.<br><br><br />
<br />
=== 5.33a ===<br />
<br />
*'''NEW''' SetPanelProperty and GetPanelProperty routine operations, work with the new _panel_properties label list.<br> Initially a few panel options are available as run-time settable properties, more will be added as requested.<br><br />
<br />
*'''NEW''' Engine option "Realtime BCast Within Events". This facilitates lockup/detection handling by enabling a real time broadcast to be sent while another event is still being processed.<br> s.RealTimeBCInEvent enables reading and changing this in code.<br> It should be left OFF for normal interactive models.<br><br />
<br />
*'''CHANGE''' Reworked pause timer handling so it can be used in /BATCH mode. Some of the changes in 5.33 have been reversed to enable this.<br><br />
<br />
*'''CHANGE''' Rework pause handling for case of item moving between objects indefinitely. It now uses the timer thread instead of just counting.<br><br />
<br />
*'''CHANGE''' Full background debugging menu is now shown in User Mode to prevent getting stuck in a model. PBAs and end user only keys will not show the debug items.<br><br />
<br />
*'''FIX''' Editing border radius for multiple selected objects now works<br><br />
<br />
*'''FIX''' Sidebar hierarchy was not being hidden when loading a model which starts in usermode. This issue was introduced in 5.32p.<br><br />
<br />
=== 5.33 ===<br />
<br />
*'''This''' version has an enhanced routine DLL calling architecture<br><br />
<br />
*'''The''' PLDLL API is now at version 9 and adds new functionality,<br />
<br />
*'''makes''' it easier to document parameters / columns and streamlines the<br />
<br />
*'''creation''' of DLLs for developers.<br><br />
<br />
*'''PL''' remains compatible with DLLs supported by 5.32r. The new API is<br />
<br />
*'''recommended''' but to get the most out of it you will want to rework<br />
<br />
*'''your''' code.<br><br />
<br />
*'''Licensed''' Planimate users can contact InterDynamics for the DLL API.<br><br />
<br />
*'''NEW''' The way the routines in a DLL are specified has been streamlined removing the use of many small tables which made the code hard to work with.<br> The definition is mostly set up in two multi-column tables, one defining the routine operations and the other defining all the parameters.<br> The framework includes many new DLL-side integrity checks:<br><br />
<br />
- initialisation time testing of DLL parameters being<br />
defined consistently in the 2 configuration tables.<br />
- the option to provide parameter enums in the parameter<br />
configuration table, which ensures the enum refers<br />
to the parameter that the DLL coder expects<br />
- testing within the Inline functions which access the various<br />
parameter types to ensure that the data type of the parameter<br />
matches the function being invoked on it<br />
(enabled in _DEBUG builds only)<br />
- range checking and error popup services for the coder<br />
to use (see below)<br />
This is on top of the PL side validation that is performed on the DLL before it is called.<br />
<br />
<br />
*'''NEW''' New callbacks enable a DLL to access PL's value formatting/parsing services, read table and read column titles and Get/Set table cells using formatted text (including "Free Text" columns).<br> http://wiki.planimate.com/DLL_Callback_Functions<br><br />
<br />
*'''NEW''' DLLs can now provide comments/notes on routine parameters to PL. They can also provide expected columns names and descriptions for columns.<br> Note that the PL side UI is yet to be enhanced to make the most of the new information available.<br><br />
<br />
*'''NEW''' DLL Table Direct mode parameters can be specified as input or output. This doesn't affect what they do but it helps indicate to the user of the DLL what the parameter affects.<br><br />
<br />
*'''NEW''' DLL support for "optional" parametes which can use s.NullAttribute as a placeholder instead of actual data. This helps consolidate multiple calls in cases where some variants use additional tables (eg; for logging).<br><br />
<br />
*'''NEW''' A DLL can check if PL is running as a model or a compiled PBA. This can be used to enable/disable detailed debugging messages.<br><br />
<br />
*'''NEW''' Range checking services for Table Direct columns, rows allocated and rows in use, with option to display a diagnostic message on failure. The message will include the name of the DLL parameter and the name of the corresponding Planimate table that it is associated with (in the DLL call).<br><br />
<br />
*'''NEW''' PL's DLL configuration menu "Save Mappings" and "Load Mappings" can be used to save/reload the DLL parameter / attribute reference associations. This is useful if the DLL changes but the parameter names are (largely) the same. It helps reestablish associations when an input parameter becomes an output.<br><br />
<br />
*'''Other''' features:<br><br />
<br />
*'''NEW''' The Purge Attributes menu option now offers to purge unused label lists and broadcasts as well after it has purged the attributes.<br><br />
<br />
*'''NEW''' New system attribute s.Planimate64 will be true if the Planimate executable running is a 64 bit version.<br><br />
<br />
*'''FIX''' Better support for multiple monitors Table list etc. appear on monitor with PL window.<br><br />
<br />
*'''FIX''' Reference List for SubLabel and MultiLabel lists now use same handler as for regular label lists, the references window is bigger and enables browsing<br><br />
<br />
*'''FIX''' The simulation clock used to not update on the first item animating on a flow (ie: zero time) after an advance to time when the continue/pause dialog was disabled.<br> The clock is now updated not only for this case but during advance to time.<br><br />
<br />
*'''CHANGE''' A model error for a model running in user mode in a regular Planimate (not a compiled PBA) with an editor key will present full debugging options.<br><br />
<br />
*'''CHANGE''' For an editor, PL will always enable pausing of a model when processing a broadcast regardless of the "Check For Pauses During BCasts" option, even in "User Mode". This will assist when a model being deeloped gets into a loop.<br> If the user has a "run only" key or is running a compiled application, the plaform will act as previously.<br><br />
<br />
*'''CHANGE''' The "Recently loaded" models list now removes entries which fail to load. It will remember all loads including models set to load in user mode. As previously, the recent list plays no role for a compiled PBA.<br><br />
<br />
*'''CHANGE''' The "Run For System Close BCast" option now only applies if the model is in User Mode or a compiled application. If closing a model in edit mode, PL wont start the engine to send the close broadcast. If the model is already running, the close broadcast will get sent.<br><br />
<br />
*'''CHANGE''' A "Show Lock" set by loading a model with the "Defer Display Until Model Loaded BC" option is reset when switching to edit mode.<br><br />
<br />
*'''SPEED''' Handling of the advance-to-time dialog improved to reduce its load on the model. Was performing unnecessary testing every new-time event. Now uses the timer thread to rate control itself.<br><br />
<br />
=== 5.32r ===<br />
<br />
*'''CHANGE''' Handling of reading dates into columns NOT formatted as dates is now different for clipboard import, edit file import and DAT file reads into Tables. DataSet2 operation is not affected.<br> If the column isn't formatted for a date and the "Auto Column Type" option is not on (for clipboard or edit mode file read) then dates are not read and "-" is treated as a zero.<br> Previous versions would read dates and "-" into columns formatted for Units (for example) resulting in large numbers as the date was translated into the number of seconds since the reference date. It meant that "-" in numeric spreadsheet data was incorrectly handled.<br><br />
<br />
*'''CHANGE''' ImportIntoView now uses a more forgiving parser so formatted values are handled when going into cells that dont expect any formatting. This makes its behaviour consistent with importing the entire table from the clipboard.<br><br />
<br />
*'''FIX''' LockDrawing now supported for table views. Important: if you lock drawing and change structure of a table (insert/delete rows/columns) then the view will become inactive even when you unlock drawing until the next panel repaint (whether forced by modeller or a panel change).<br><br />
<br />
*'''FIX''' Table Editor "Paste Over" now handles cancel properly<br><br />
<br />
*'''FIX''' RTF note window follows anchor rules of its parent link<br><br />
<br />
*'''FIX''' Impose minimum size on creating an RTF note to avoid creating an unclickable note (it was still editabler through link context menu)<br><br />
<br />
*'''FIX''' Scoped classes causing problems when deleting panels<br><br />
<br />
*'''FIX''' File name handling (extention) could cause first save to report error loading just-saved model.<br><br />
<br />
*'''FIX''' Setting the graphics properties for multiple selected button paint objects now sticks to the states rather than being lost upon a state change<br><br />
<br />
=== 5.32q ===<br />
<br />
*'''NEW''' Value formatting mode "hhh:mm"<br> This shows hours and minutes for the value but hours are not limited to 23, they can extend as required.<br><br><br />
<br />
=== 5.32p ===<br />
<br />
*'''NEW''' Portal option "Show Above Items On Links"<br> This puts the portal in a layer above items that are moving on spatial links/tracks, so it will obscure the items as they approach it. Partial transparency of the portal is handled.<br><br />
<br />
*'''NEW''' End User Option "Spacebar Continues Run" causes spacebar to continue the run, like Ctrl-G but only in paused mode.<br><br />
<br />
*'''FIX''' Changing a portal's using SetPortalIcon no longer hides the previous icons.<br> NOTE You must repaint using at least RepaintObjectLayer after setting portal icon(s) with SetPortalIcon.<br><br />
<br />
*'''NOTE''' If you are using RepaintObjectLayer, ensure that the portal option "Monitor Occupancy" is turned OFF and dont use custom portal states.<br> SetPortalIcon() is not compatible with these and if used, it will result in flickering and (potentially) the portal crawling off the panel due to a difference in co-ordinate systems.<br><br />
<br />
*'''FIX''' Dragged object clip only applied if object is in object label list<br><br />
<br />
*'''FIX''' Image mover would display errors if "thumbs.db" was present. This is a file created by Windows. The image mover now ignores this filename. Dont call a model "thumbs".<br><br />
<br />
*'''FIX''' On "New Model" or "Load Model", the internal icon cache is cleared. This removes any failed icons (red boxes) due to missing files. Previously these remained even if the icon file became available.<br><br><br />
<br />
=== 5.32o ===<br />
<br />
*'''NEW''' Object property "ObjectPipeEmptyColor" enables the empty colour of a pipe to be changed on the fly.<br><br />
<br />
*'''FIX''' Reworked the way that table size changes are updated to views and the table editor. There were cases where an error during an import was causing the editors to receive hover messages at a time before the load had completed and they had been given an opportunity to adjust to the new table size.<br> Look out for cases where: a table size change is not reflected in a view/table editor a table size change causes slowdown in a view/table editor<br><br />
<br />
*'''FIX''' WrapExtraIndent showed junk at beginning of line<br><br />
<br />
*'''FIX''' Map positioning of objects in edit mode<br><br />
<br />
*'''CHANGE''' Clipping of dragged portals on panels with a map is disabled. This helps position map nodes with very large icons.<br><br />
<br />
*'''SPEED''' Sped up Message and Broadcast item creation by optimising the transfer of item icon and icon properties between the original and message/broadcast items.<br><br />
<br />
*'''SPEED''' Tables with many columns handled quicker when clearing<br><br />
<br />
=== 5.32n ===<br />
<br />
*'''NEW''' System attribute ItemClassInfoHide (also set by item class option "Hide Info Panels For Class" enables item info panels to be globally hidden for an item class.<br><br />
<br />
*'''NEW''' Portals have option "Transparent To Clicks In Run"<br> This makes them invisible to mouse clicks when the engine is running (in edit or user mode).<br><br />
<br />
*'''NEW''' GetViewProperty and SetViewProperty have a new parameter, "Index" This enables the selection of a particular view when a number of views of the same type exist on a panel.<br> A value of 1 selects the matching view closest to the back of the z-order, 2 selects the second-backmost etc.<br><br />
<br />
*'''FIX''' SetPortalIocn now preserves the objects centre rather than anchoring to the lower left corner.<br><br />
<br />
*'''FIX''' Hide spatial links panel option does not apply in edit mode, only when tools hidden/run modes.<br><br />
<br />
*'''FIX''' When dataset2 loads a table, any open table editor for a table being read is closed so the loader can process the table without the editor updating (causing slow down).<br><br />
<br />
*'''FIX''' Ctrl-paste over a selected object used to cause PL to close.<br><br />
<br />
*'''FIX''' Can select "None" for shadow colour<br><br />
<br />
=== 5.32m ===<br />
<br />
*'''NEW''' The routine editor context menu has an option "Wrap Long Lines" which acts as a master control on line wrapping. It acts in addition to individual line wrapping control.<br> The initial setting is set from INI option [Routine] WrapLines.<br><br />
<br />
*'''NEW''' INI option [Routine] WrapExtraIndent<br> This enables additional indenting of wrapped lines to be specified.<br><br />
<br />
*'''NEW''' Routine list background colours can be separately set for routine lines, wrapped lines and "folded" code block lines.<br> These are set in the [RoutineEditColors] section in the INI options editor.<br><br />
<br />
*'''NEW''' Paint properties:<br />
<br />
TextShadow &nbsp;: sets shadow colour for text<br />
BorderRadius&nbsp;: sets radius for rounded borders<br />
<br />
<br />
*'''FIX''' Mapper handles 0 row table<br><br />
<br />
*'''FIX''' Tracks support hiding at runtime (when end points hidden)<br><br />
<br />
=== 5.32l ===<br />
<br />
*'''FIX''' This release fixes an error with the "Bell Curve" and "Log Normal" distributions when the new random number generator (see 5.22m) is being used.<br> The new generator had too much variation for these distributions.<br> For example, an StdDev of 0.5 was acting as an StdDev of 0.7.<br> The model option Engine - Use Old Random Number Generator determines if the old or new generator is in use.<br><br />
<br />
*'''NEW''' Routine line "Folding"<br> left/right arrows in routine list can collapse/expand wrapped lines and code blocks like ITERATE, IF and SELECT.<br> collapsed lines are indicated with ah + after the number.<br> Editor operations like "Duplicate", and copy are aware of collapsed lines and will operate on all the lines inside them.<br><br />
<br />
*'''FIX''' Adding routine line at end of routine now auto-advances to Add New line, as it used to.<br><br />
<br />
*'''FIX''' Made Rounded Edge border thicker to avoid stray pixels<br><br />
<br />
=== 5.32k [new model file version] ===<br />
<br />
*'''NEW''' Routine List Line Wrapping Long routine lines now wrap over multiple lines in the routine list. The wrapping updates when column widths are changed.<br> The routine editor has been extensively reworked internally.<br> Wrapping occurs on the internal "font change" messages which means attributes names/labels wont get broken up across lines, the breaks only occur where a change in font/colour occurs. The rules of breaking lines may be refined later.<br> Lines containing wrapped content are slightly indented to the start line. This will be made adjustable later.<br> The line number (which doesn't increment for wrapped lines) is only shown on the first line of a wrapped group of lines. This makes it clear which lines are wrapped.<br> At this stage you can select the individual lines in a wrapped block of lines, they all are equivalent and act on the entire routine operation, not just the section of text they contain.<br> Moving between lines with the up and down arrows will be enhanced to (optionally) move to the start lines, skipping the wrapped lines. The block Start/Block End commands do this already.<br> Collapsing wrapped lines (and code blocks) will be implemented at some stage, the design now supports it.<br> There is a limit to the length of one routine line, 64KB which corresponds to one routine line wrapping over hundreds of lines.<br> The INI RoutineFormatW parameter is now obsolete but left in so previous versions of PL can still use it.<br><br />
<br />
*'''NEW''' More border styles supported for rounded objects<br><br />
<br />
"Rounded"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (original in 5.32j) - no edge<br>"Rounded Edge"&nbsp;&nbsp; single pixel border (paint square can have thicker)<br>"Rounded Shadow"<br>"Rounded Shadow Double"<br>"Rounded Indent"<br>"Rounded Indent Double"<br> The "Graphics" dialog enables the rounding radius to be set for these modes. Dont overdo the rounding.<br> Rounded shadow buttons show an indent border on mouse down as well as offsetting their contents. The other rounded types only offset text (and image for paint button objects).<br><br />
<br />
*<br><br />
<br />
'''NEW''' Graphics dialog has a new text shadow button (next to text button). This sets colour for "shadow" text drawn under and offset to the text. A lighter or darker grey colour can make text look smoother.<br> Currently only implemented for paint objects and view box titles.<br />
<br />
<br><br />
<br />
*'''NEW''' Paint button state option "Offset Content" This will shift text and images in the button 2 pixels right/down, as used when a button is clicked.<br> This is useful for "pressed" button states. If this option is not used, the square border indent styles offset text by one pixel but this get overridden by the "Offset Content" option.<br><br />
<br />
*'''NEW''' "Add To Object List" on multiple selected objects adds them all to object list (non objects ignored).<br><br />
<br />
*'''NEW''' Paint buttons with align-top text mode now wrap long text ie: multi-line text buttons. Be sure to leave some space in buttons as different systems with different font scaling will result in different wrapping.<br><br />
<br />
*'''CHANGE''' The settings under Settings - System Parameters in the menubar have been moved into the Settings Editor<br> "Maximum Track Fill Search" and "Item Cache" are under Model-Engine "Number Separator" is under Model-End User.<br><br />
<br />
*'''CHANGE''' Removed forced text cropping from routine step editor. Given the routine list shows entire lines, it shouldn't be necessary.<br><br />
<br />
*'''FIX''' Reworked regular shadow buttons to make them cleaner when pressed.<br> A lot of the button graphics was rewritten, check for side effects.<br><br />
<br />
*'''FIX''' DragHideMouse option now works for bend points<br><br />
<br />
*'''FIX''' Prevent "Stay paused for debugging" and other debugging options except Show Location for errors during engine initialisation. PL could get unstable if staying paused during an engine initialisation error.<br><br><br />
<br />
=== 5.32j ===<br />
<br />
*'''NEW''' Show tip over path arrow heads in flow and object edit mode<br> The INI option [Edit] PathArrowTips controls whether the tips appear in object/edit mode.<br> Note: If multiple classes overlap, only one is shown in the tip, (clicking on the arrowhead will indicate others).<br><br />
<br />
*'''NEW''' Basic undo in Flow Edit mode (context menu or ctrl-Z).<br><br />
<br />
*'''NEW''' In Flow Edit Mode, Home and End keys go to start/end of current path<br><br />
<br />
*'''NEW''' Rounded border style for paint buttons, rectangles, views. This is experimental.<br><br />
<br />
*'''FIX''' Clear SlippyMap bitmap cache on exit as well as on new model<br><br />
<br />
*'''FIX''' The file browse dialog misinterpreted a "dot" in a directory name as the beginning of the extention even if it was followed by a slash.<br><br />
<br />
*'''FIX''' Planimate handling of model names with "." in them improved. in cases where the model contained ".' but no MDL extention.<br><br />
<br />
*'''CHANGE''' Removed ALT key modifier for opening palettes undocked.<br><br />
<br />
*'''SPEED''' Optimised spatial link shortest path search:<br>prune recursion for conditions where the target cannot be "better" than the current "best" or its an unwanted leaf node<br>keep track of circular loops without using a list/search<br>reduce use of intermediate tables<br>use a cache of recursion depth tables<br> <br>Has reduced memory churn significantly.<br><br />
<br />
*'''SPEED''' Optimised track route intermediate step finding using similar techniques to spatial links.<br><br />
<br />
*'''SPEED''' Clean up file token lookup/matching which helps with saving.<br><br />
<br />
=== 5.32i ===<br />
<br />
*'''FIX''' Fix the way icons loaded using SetIconRemote() and SetPortalIcon() are managed.<br> The previous method could cause a segfault because there was the potential for the icon cache to purge icons loaded by these operations.<br><br />
<br />
*'''FIX''' The Map Tile Cache option has been rewritten and now supports a limit on how many tiles will be kept in memory. (512 tiles).<br> It is strongly recommended that the tile cache option be turned on for map views.<br><br />
<br />
*'''NOTE''' Map View - Ensure the "Log" options are turned off as they cause unnecessary processing even if the log file isn't being written.<br><br />
<br />
*'''CLEAN''' Cleaned up file loader, removed obsolete code and moved some specific code to the "user login" password file handler.<br><br />
<br />
=== 5.32h ===<br />
<br />
*'''NEW''' Planimate now saves a CRC/check count at the end of MDL files. After a model is saved, it is quickly re-read to verify the CRC is OK. If an error is detected, PL will report a message during the save.<br> Any message during a save indicates a problem that must be investigated.<br> NOTE: Due to operating system caching, this test only guarantees that the model file was written out to the operating system, not that it was actually stored/transmitted correctly.<br> NOTE: CRC is not checked on load at this time but you can manually trigger a check - see next item.<br><br />
<br />
*'''NEW''' You can test the CRC integrity of an MDL file using the Tools-&gt;Model FIle Info option. This has been enhanved to include details on the CRC for the file (No CRC if its older, CRC OK or details of an error).<br><br />
<br />
*'''NEW''' Added filter tool tip option to table views. Hovering over the filter area shows a tooltip indicating its a filter and the complete filter text.<br><br />
<br />
*'''SPEED''' Have streamlined the way files are read. This improves performance for loading models and text data files. PBAs also get more memory as some buffers were not being released after load.<br><br><br />
<br />
=== 5.32g ===<br />
<br />
*'''NEW''' INI option [Edit] DragHideMouse<br> Hides mouse cursor when dragging existing objects/paint objects<br><br />
<br />
*'''FIX''' Fix DropOff, it was ignoring drop limit after change in 5.32f<br><br><br />
<br />
*'''CHANGE''' Object context menus now include a line with their type and name, Selecting the option edits the name, making it easier to identify and rename objects in dense networks.<br><br />
<br />
*'''CHANGE''' View context menus now include view type/owning portal/data name The graph views no longer change the titlebar<br><br />
<br />
*'''CLEAN''' Clean up some mouse related code<br><br />
<br />
=== 5.32f ===<br />
<br />
*'''NEW''' Paint Map has a new field in the edit dialog, "WGET URL"<br> Using this and the WGET.EXE command line utility, you can make Planimate populate a local map tileset from an OSM compatible web server as you navigate the map.<br> This setting is for editing only, it does not get saved.<br> Refer to the Map (Paint Object) wiki page for details.<br><br />
<br />
*'''NEW''' Table views have option "Can Edit During Simulation"<br> As for attribute views, this enables the table to be clicked while a simulation is running (model option "Mouse Clicks While Running" needs to be on).<br> Warning:<br> Dont use this option if the table has rows deleted/added at the time the user can click on it (including by any resulting broadcast).<br> Use of this option with "Dont Defer BC on FEC" might cause problems if the broadcast changes panels etc.<br><br />
<br />
*'''NEW''' DropOff has option to drop items in reverse order.<br><br />
<br />
*'''CHANGE''' Planimate is more flexible with the use of multiple portal entries.<br> If there are multiple portal entries and they are NOT specifically associated with an object, then Planimate will now check them for a flow matching the incoming item class instead of only checking the first portal entry.<br> The test is for existence of flow, not whether its blocked.<br> This change should not affect existing models since the order of testing hasn't changed and older models would stop if the first portal entry didn't have a flow of the correct class.<br><br />
<br />
*'''CHANGE''' Internal code renames (PickUp/DropOff objects)<br />
*'''FIX''' Fix this situation:<br>user changing panel to one with dynamic sizing and a resize broadcast<br>panel starts setting up and doing a size update, sends itself a resize broadcast<br>the resize broadcast triggered a routine which forced a repaint<br>the repaint used a service that the original panel change hadn't got around to preparing yet, causing PL to close.<br><br />
<br />
*'''FIX''' Log Driven graph horizontal bar / labelled bar was broken If the bar colour was not black, it would be misinterpreted and usually no bar would display.<br><br />
<br />
*'''FIX''' Column overlay graph's legend stays with anchored graph during panel resize.<br> NOTE: be careful of clipping/minimum size, this will cause the legend to lose its relative position to the graph.<br><br />
<br />
*'''SPEED''' Was able to clean up portal testenter code (unused track test status info)<br><br />
<br />
=== 5.32e ===<br />
<br />
*'''NEW''' CTRL-C/CTRL-V work in the table editor.<br> CTRL-V is equivalent to "Paste Over"<br><br />
<br />
*'''NEW''' Added a preview to the icon mover which shows the selected icon in a larger area so the icon doesn't need scaling.<br> Hovering over the icon shows a tip with its name, type and dimensions.<br><br />
<br />
*'''NEW''' Portals have "Horizontally Flip Icon" option which causes their icons to be flipped, useful when the portal should face the other way.<br><br />
<br />
*'''NEW''' Object property "ObjectFlipIcon" gives access to the portal "Horizontally Flip Icon" option. This property only exists for portals.<br><br />
<br />
*'''NEW''' When deleting an item class, PL will report # of steps / panels using that item class in the confirm dialog. It will also name the first panel that uses the class.<br><br />
<br />
*'''NEW''' The Show References dialog now gives more information on references inside views and paint objects.<br> Where previously it showed "&lt;none&gt;", just indicating panel, it will now show:<br> ViewAction:attributename ViewControl:tablename PaintButton:State PaintAction:Rectangle PaintControl:Button<br><br />
<br />
*'''NEW''' Tree selector supports doubleclicking node to select<br><br />
<br />
*'''NEW''' Tree-view based selector for Message Entries, Wormhole Entries and Wormhole Exits<br><br />
<br />
*'''NEW''' In object mode, objects will show a tooltip with their name and type.<br> This can be enabled/disabled using the INI option [Edit] ObjectTips<br><br />
<br />
*'''NEW''' Calendar date format "DD.MM.YYYY"<br><br />
<br />
*'''CHANGE''' The model tree view and options tree views now by default no longer expands a node when you single click on it.<br> Clicking on the [+] or navigating in the model area still does expand nodes.<br> This makes double clicks work as they should.<br> If you prefer single clicks to expand tree nodes in these dialogs, set the "[Edit] SingleClickTree" INI option to true.<br><br />
<br />
*'''CHANGE''' Internal and menu renames, changing "Stats" to "Views"<br><br />
<br />
=== 5.32d ===<br />
<br />
*'''FIX''' Display of Pipes and spatial links on update of bend points<br><br />
<br />
*'''FIX''' If one of the system label lists (like object label list) had a label for an object starting with an "-" then the attribute editor would select that label if the value was 0 (which formats as "-") causing an unexpected change in data.<br> The combo lists for such lists now include an explicit "-" to match the "0 case" and prevent this happening.<br><br />
<br />
*'''CHANGE''' Internal renaming of all Planimate/Toolkit source code modules as many names were very old and obsolete given some have been in existence over 20 years.<br> Its not expected for this to impact the EXE in any way.<br><br />
<br />
=== 5.32c ===<br />
<br />
*'''CHANGE''' Objects in the model hierarchy are now sorted in "natural order"<br> This improves the ordering for portals with the same name and a number on the end<br><br />
<br />
*'''fIX''' If a combo box had an unsorted list of items and one of the earlier items was a superset of the entered text, it would be chosen in preference to an exact matching item that was further down the list.<br> This appeared in the old style reference dialog when the INI option TableColumnNoSort was set.<br><br />
<br />
=== 5.32b ===<br />
<br />
*'''NEW''' SetPortalIcon() operation<br> Changes the current icon for a portal's current state to a named icon. The portal is hidden but not redrawn, the modeller should RepaintObjects() or ForceRepaint() once all the portal's are updated.<br><br />
<br />
*'''NEW''' SetIconRemote() operation will set the current item if its ID matches the id passed<br><br />
<br />
*'''NEW''' INI settings [Edit] NewObjectX, NewObjectY set position of automatically added objects<br />
<br />
NewViewX, NewViewY set position of automatically added views<br />
The y position counts from the top and the object/view's point being its lower left corner.<br />
<br />
<br />
*'''FIX''' Text formatted attributes display their text in the routine attribute popup in the debug/breakpoint dialog.<br><br />
<br />
=== 5.32a ===<br />
<br />
*'''NEW''' Routine operation "GetNextLinkObject(from,to)"<br> Returns the next portal object index that an item will travel to on a spatial link given the from location and the final target being 'to'.<br> Returns 0 if none.<br><br />
<br />
*'''NEW''' Image Mover has an "All" button that will copy ALL images from the source to destination palettes. Note that any existing images with the same name are overwritten.<br><br />
<br />
*'''NEW''' Typing a name of a DB in the file browser in the Image Mover will create an empty DB if it does not already exist. You need to include ".DB" in the typed name.<br><br />
<br />
*'''CHANGE''' Changed Replace Dialog behaviour, it now stays on current from/to button after an edit, press TAB to advance to next button.<br><br />
<br />
*'''CHANGE''' TAB/Shift-TAB work in routine step editor<br><br />
<br />
*'''CHANGE''' TAB/Shift TAB in routine list will now step forward/back through lines<br><br />
<br />
*'''FIX''' Image Mover file browser dialog now lists all supported image types<br><br />
<br />
*'''FIX''' Fixed a bug with file extention handling in the case that a name is typed with no extention for dialogs supported multiple extention types.<br><br />
<br />
=== 5.32 ===<br />
<br />
*'''NEW''' This version of Planimate now uses a newer DB file format which supports names up to 63 characters instead of 19.<br> Any DB files you modify or create with this version will be unreadable with older Planimate versions.<br><br />
<br />
*'''NEW''' Tracks, Spatial Links and Pipes now have the "Update Map Co-ordinates" option on their context menu if they are on a panel with a PaintMap which updates objects during edit.<br> This is useful for updating bend points which are "far" from the end point portals. Refer to Map Paint Object documentation.<br><br />
<br />
*'''CHANGE''' Removed forced upper-casing of icon names<br><br />
<br />
*'''CHANGE''' "Put Into Portal" now puts the portal at the top left of the panel.<br><br />
<br />
*'''FIX''' Attribute views linked to portals will now update properly.<br><br />
*'''FIX '''Track/Pipe bend handling with paint maps now works properly.<br><br><br />
<br />
=== 5.31m ===<br />
<br />
*'''NEW''' Portals used on panels with Map Paint Objects have a new edit menu option "Update Map Co-ordinates".<br> 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.<br> Documentation updated: http://wiki.planimate.com/Map_(Paint_Object)<br><br />
<br />
*'''NEW''' Map Paint object edit menu option "Clean Node/Bend Tables".<br> This option should be used when portals are deleted from a panel with a map.<br><br />
<br />
*'''CHANGE''' Planimate will now delete portals even if they are linked into tracks/ pipes/spatial links. Any such links are also deleted.<br><br />
<br />
*'''FIX''' Replace dialog from/to lines now follow selection. From/To/OK ordering when working through the sub-dialogs.<br><br />
<br />
=== 5.31l ===<br />
<br />
*'''NEW''' Paint map has option "Handle Drag During Object Edit"<br> 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.<br> The Map responds to drags only when the CTRL key is pressed. To zoom, give the map focus with a ctrl-click first.<br> This reduces impact on object editing and drag selections.<br> Detailed notes on this are on the wiki.<br><br />
<br />
*'''FIX''' Cell view with out of range column no longer closes PL when a row is added to the table.<br><br />
<br />
*'''FIX''' Preallocate route step instance table when initialising routes<br><br />
<br />
*'''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.<br><br />
<br />
=== 5.31k ===<br />
<br />
*'''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.<br> Clicking on the source takes you to that object.<br> NOTE: only object sources are tracked at this time.<br> The menu also contains a "Create One Now" option which used to be the default action when clicking on a broadcast entry.<br><br />
<br />
*'''NEW''' Menu bar option Menubar/Tools/Show Recent Broadcasts<br> This pops up a list showing the most recent broadcasts, and (where available) which modelling object generated them.<br><br />
<br />
*'''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.<br><br />
<br />
*'''CHANGE''' New views appear at the top left of a panel.<br><br />
<br />
*'''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.<br> This only appears once in a Planimate session.<br><br />
<br />
*'''FIX''' Changed the way map tiles are faded when the "Progressively Fade Upscaled Tiles" and "Anti Alias Upscaled Tiles" options are used together.<br> Instead of becoming more transparent, the tiles are darkened.<br> This works around a graphics bug in Windows 7 64 bit (GDI+).<br><br />
<br />
=== 5.31j ===<br />
<br />
*'''FIX''' "Dont Show Zero" column option now prevents 0 appearing in the label list dropdown combo's field.<br><br />
<br />
*'''FIX''' Mouse scroll broadcast should now sense continuous scroll wheels better<br><br />
<br />
*'''FIX''' A repaint occuring in a drag now works again during simulate mode (was being locked out by redraw handling code)<br><br />
<br />
*'''FIX''' Changed alpha/offset for shadow (eventually will be settable by modeller).<br><br><br />
<br />
=== 5.31i ===<br />
<br />
*'''FIX''' Fix routine editor issue causing random PL close<br> 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.<br> Most of the time the variable would be NULL; PL would fail in the rare cases that it wasn't.<br><br />
<br />
=== 5.31h ===<br />
<br />
*'''NEW''' Object property "ObjectHide"<br> This sets a runtime property on objects which defaults to off. When set:<br> ** 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<br> Currently implemented for Portals, Tracks, Links, Pipes<br><br />
<br />
*'''NEW''' Item Class System Attribute s.ItemClassScale<br> This sets a master scale factor (as an integer percentage) for ALL items of the class of the current item.<br> Changes to this will apply to all items of the class upon the next display update or redraw.<br> 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.<br><br />
<br />
*'''NEW''' Have rewritten how Planimate Based Applications (PBAs) are compiled.<br> The codebase that compresses &amp; encrypts DataSet2 files is now used when compiling PBAs, making them significantly smaller when a large model was part of the application.<br><br />
<br />
*'''NEW''' Added more buffer checking to catch string issues particularly in the routine editor and in formatting references.<br> Please report *any* "system error" type messages as they indicate an unexpected situation in the platform.<br><br />
<br />
=== 5.31g ===<br />
<br />
*'''NEW''' Planimate Map paint object rewrite &amp; enhancements:<br> Key new features: Map can dragged with the mouse and zoomed with the scroll wheel (with some simple model support).<br> Summary Of New Features:<br> 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.<br> New Properties: "Longitude", "Latitude" (retrieves centre position) "FixedMapZoom" (control of the fixed zoom option)<br> 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.<br> Refer to wiki page for details. http://wiki.planimate.com/Map_(Paint_Object)<br> Useful information on map tile formats: http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/<br> Thanks to all who have contributed to progressing this capability.<br><br />
<br />
*'''NEW''' Modeller can now receive a broadcast when the scroll wheel is turned. This is enabled using the "Broadcast Scroll Wheel Events" Panel-&gt;Engine option.<br> The broadcast is sent is "_Panel Scroll" and it includes attributes "_panel" and "_scroll".<br> "_scroll" is negative when the wheel is rolled up and +ve when rolled down.<br> If a viewport or popup has focus, the broadcast is sent to its subsystem.<br><br />
<br />
*'''NEW''' Label list "_paneldrag_commands" has names/values of commands sent by the _panel_drag broadcast<br><br />
<br />
*'''CHANGE''' Panel drag broadcasts are now also sent during simulate/run mode if the "Mouse Clicks While Running" option is selected.<br><br />
<br />
*'''CHANGE''' GetBendPoints() and SetBendPoints() operations will now also match columns named "_x" and "_y" if "X" / "Y" are not present<br><br />
<br />
*'''FIX''' Cutting a portal with a visible subsystem (eg: from the hierarchy) would close PL<br><br />
<br />
*'''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).<br><br />
<br />
=== 5.31f ===<br />
<br />
*'''NEW''' Paint properties for paint buttons with images:<br> ImageFrameCount Gets the number of frames of a multiframe image/animated GIF<br> ImageFrame Gets/sets current frame of a multiframe image/animated GIF. Frames are numbered from 0.<br> 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.<br><br />
<br />
*'''NEW''' Routine operation "RepaintPaintObject"<br> This repaints a single paint object plus all the objects/items in the animation layer.<br> 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.<br> Using this can avoid ForceRepaint, leading to smoother updating when paint objects like the map view are used.<br><br />
<br />
*'''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.<br> 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.<br> This issue was introduced back in 5.24m and was caused by a cache not being rebuilt after the reindex.<br><br />
<br />
*'''REMOVE''' "Select License Key File" option removed from user mode menu bar.<br> Modern models shipped as EXEs do not use this.<br><br />
<br />
*'''REMOVE''' The Load and Save DataSet options have been removed from the menubar.<br> These were used by DataSet1 which is now obsolete.<br> The button actions supporting dataset1 are retained for now but anticipate them being removed.<br><br />
<br />
*'''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.<br> 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.<br><br />
<br />
*'''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.<br> NOTE: For a PBA you can omit the /SCENARIO= and just provide a filename to achieve the same effect.<br><br />
<br />
*'''CHANGE''' Command line options descriptions updated, "Planimate /?" for a listing.<br><br />
<br />
=== 5.31e ===<br />
<br />
*'''NEW''' Enhancement to text expression matching as used in column filters.<br> '!' now has special meaning if it is the first character of a match term, it makes the match term a "NOT" term.<br> A single term such as "!foo" will match everything except "foo". Likewise "!c*" will match everything that doesn't start with the letter "c".<br> 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.<br> 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 "!".<br><br />
<br />
*'''NEW''' Options added to Paint Map<br> "Disable Anti-Alias For Downscaled Tiles" (default on) etc. Fixed zoom mode now supported.<br><br />
<br />
*'''NEW''' Track speed restriction now supports running trains faster than the nominal speed of the track (restriction level 100).<br> 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".<br><br />
<br />
*'''FIX''' A table with "ClearOnSave" option could cause views to generate an error when saving.<br> This should no longer occur.<br><br />
<br />
*'''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.<br><br><br />
<br />
*'''CHANGE''' The "Directly Handle Clicks" option on a viewport now only applies 1) when running model 2) when in user mode<br>This makes it easier to edit viewports. It also reduce inadvertent<br>editing through a viewport which is beyond their intent.<br><br />
<br />
*'''CHANGE''' Updated internal compression libraries used for DataSet2<br><br />
<br />
=== 5.31d ===<br />
<br />
*'''NEW''' In another significant leap in capability, Planimate now supports displaying maps stored as multiple segmented tiles and at various zoom levels.<br> The format supported is known as "Slippy" as used in Open Street Maps and is described here:<br> http://wiki.openstreetmap.org/wiki/Slippy_Map<br> 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.<br> You can use new paint properties to set the view dynamically. "LongitudeFrom", "LatitudeFrom" (top left (NW) corner "LongitudeTo", "LatitudeTo" (bottom right (SE) corner<br> 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.<br> 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.<br> 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.<br> Further details here: http://wiki.planimate.com/Map_(Paint_Object)<br><br />
<br />
*'''NEW''' Routine operations MinIndexIFMatch and MaxIndexIFMatch<br> MinIndexIFMatch(Match Column, Match Key, Data Column) returns the first row with minimum Data Column value for rows where Match Column matches Match Key.<br> Returns 0 if no rows match.<br> MaxIndexIFMatch does the same except finding the maximum.<br><br />
<br />
*'''FIX''' Prevent viewports without click-through being draggable during a run.<br><br />
<br />
=== 5.31c ===<br />
<br />
*'''NEW''' Change object -&gt; File mode "SaveWindowImageMemory"<br> 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).<br> The first data target should be the portal index of the subsystem image to capture.<br> This is useful for creating dynamic buttons which display the contents of other panels in the model.<br><br />
<br />
*'''NEW''' Dial has option to "Edit Owner" which is useful when its hidden.<br><br />
<br />
*'''FIX''' Saving image of a panel no longer flickers its contents<br><br />
<br />
*'''FIX''' Standalone EXE no longer supports ctrl-alt-shift to open panel in a popup.<br><br />
<br />
*'''FIX''' Shadows shown for objects in object mode<br><br />
<br />
*'''FIX''' Better defaults for distributions when original is constant 0<br><br />
<br />
*'''FIX''' Missing redraw for advance time dialog and distribution graph<br><br />
<br />
*'''FIX''' Dials now follow anchor rules of parent views (note unlike attribute views they will stretch/sink if both ends are anchored).<br><br />
<br />
*'''FIX''' Drawing issues of log driven graph with "Defer Updates" on causing missing updates.<br><br />
<br />
*'''FIX''' Viewport "invalid handle" error message, situation as follows:<br><br />
<br />
- Model contains a viewport inside a viewport<br>- Viewports configured to directly handle clicks<br>- Inner viewport has the keyboard focus because it was clicked<br>- Model is running and user presses Ctrl-T<br> Normally this stops the engine and viewports hide/reinitialise.<br> 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.<br> 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.<br> Was able to intercept a message to inform the management structure of its window being forcibly deleted.<br><br />
<br />
*'''FIX''' Showing references for an attribute view clicked within a viewport within another viewport.<br> Note that viewports were not designed for editing nor nesting so take care with backups if you use them for this.<br><br />
<br />
*'''SPEED''' Further speed up to panel draw/redraw and switching panels. Fixed inefficient handling of queue/dispatcher overflow counter icon (forcing redraw/memory reallocation)<br><br />
<br />
*'''NOTE''' The following Dial modes are being reviewd. Some or all may be removed:<br> Lamp CheckBox Value Label Image<br> The intention is improve the remaining modes with supporting bitmaps etc.<br> Paint buttons and attribute views can replace these capabilities.<br><br><br />
<br />
=== 5,31b ===<br />
<br />
*'''NEW''' Paint button state options<br />
<br />
"Flip Image" - flips the image left/right "Image Shadow" - draws image shadow (PNG/GIF)<br><br />
<br />
*'''NEW''' Portal option for Shadow (PNG/GIF images only) (note: shadow only shown during run)<br><br />
<br />
*'''NEW''' Item class option for shadow (PNG/GIF images only)<br><br />
<br />
*'''FIX''' Status line redrawing when setting activity string now uses correct font<br><br />
<br />
*'''FIX''' Changing model animation update interval now works when triggered from a broadcast.<br><br />
<br />
*'''FIX''' Reduce repeated data when clicking on dials<br><br />
<br />
*'''FIX''' Drawing PNG/GIF images with image offsets set beyond the source image range<br><br />
<br />
*'''FIX''' Paint-Image objects now also work with PNGs<br> 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.<br><br />
<br />
*'''FIX''' Glitches with rotated icons introduced 5.31<br><br />
<br />
=== 5.31a ===<br />
<br />
*'''FIX''' Fix tooltip/hand cursor registration - was causing problems for buttons in the animation layer<br><br />
<br />
=== 5.31 ===<br />
<br />
*'''NEW''' The Planimate Animation Engine has been significantly revamped. Code consolidation, refactoring and new graphics APIs have boosted performance and enabled new capabilities.<br> Please look out for any animation issues while the new framework settles in.<br><br />
<br />
*'''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.<br> PNG images which are not rotated draw faster (flipping is OK). BMP is fastest unless using transparency, then BMP is same as unrotated PNG.<br><br />
<br />
*'''NEW''' Planimate now supports animated GIFs in the same way it supports multi-frame BMPs using the IMAGE@01 IMAGE@02 etc naming notation.<br> Animated PNGs are not supported (not standardised) but using the IMAGE@01 naming convention should work for PNGs.<br><br />
<br />
*'''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.<br> With this option on, the paint object will be repainted every animation update (when all the other icons get updated).<br> 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".<br> Paint objects with this option on appear behind object icons but in front of views and regular paint objects.<br> All the objects with the option "on" retain their relative paint z-order.<br> 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.<br> 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.<br><br />
<br />
*'''NEW''' Paint buttons support multi-frame/animaged GIFs for their state images. This looks nice for hover states.<br> Paint objects default to an update interval of 100ms. This can be set using the ImageTimeStep paint object property.<br> When using a multi-frame image with a paint object, the ShowInAnimateLayer option should be turned on.<br> Reminder:<br> For items, the systme attributes: "ItemImageXStep", "ItemImageYStep" and "ItemImageTimeStepMS" are used to control how frames are chosen.<br> For objects, the object properties are: "ObjectImageXStep", "ObjectImageYStep" and "ObjectImageTimeStepMS"<br><br />
<br />
*'''NEW''' Paint objects have new properties "Transparency" (0 = translucent, 255 = opaque) "ImageRotation" (angle in degrees) "ImageTimeStep" (interval between images in milliseconds)<br> They are defined in the _paint_properties label list and can be set/read using the SetPaintProperty() and GetPaintProperty() routine operations.<br> Currently they are implemented for paint buttons with an image and no frame/text/background colour.<br> Currently this parameter is not saved nor editable This will be reviewed as performance is evaluated.<br> The intention is to add transparency for paint button frames and text. Initially you can use images for these effect.<br> Theseertise are stored per paint button state, so changing a button's state can change its appearance/behaviour<br> ImageTimeStep is useful with images with multiple images such as GIFs.<br> NOTE: Using rotation slows down drawing, if you have a fixed rotation and many icons, you might want to use pre-rotated images.<br> NOTE: This transparency is in addition to the per-pixel transparency that PNG images support.<br><br />
<br />
*'''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.<br><br />
<br />
*'''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.<br><br />
<br />
*'''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.<br><br />
<br />
*'''NEW''' Can edit the view order for Portals. This is useful when animating then. The order can also be set numerically.<br><br />
<br />
*'''NEW''' Paint object view order can now also be set numerically.<br><br />
<br />
*'''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.<br><br />
<br />
*'''CHANGE''' Planimate now makes use of the "GDI+" graphics framework in Windows. This library has been standard since Windows XP.<br> Be aware that Windows 2000 did not include GDI+ but if dotNET is installed then it will be there.<br> It may be necessary to consider this if clients are using old (and now obsolete) versions of Windows. GDI+ can be downloaded here:<br> http://go.microsoft.com/fwlink/?LinkID=20993<br><br />
<br />
*'''SPEED''' Portal Animation performance significantly boosted. Smoothly animating 2000 portals (BMP images) is now viable. Use s.CurrentPortalX and s.CurrentPortalY to position them.<br> If your model is animating over time, you dont need to ForceRepaint() or RepaintObjects() as long as an animation update interval is set.<br> If you are animating in a loop, use RepaintObjects(). This now also works with paint objects with the new Animate Layer option described above.<br><br />
<br />
*'''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.<br><br />
<br />
*'''FIX''' Fix leak in "Fit To Size" menu option for paint buttons<br><br />
*'''FIX '''Fit To Size on paint objects now supports having a single border.<br> Previously border was not taken into account.<br><br><br />
<br />
=== 5.30q ===<br />
<br />
*'''NEW''' Routine editor lines are coloured at a finer grain. Table cell references in particular will have their row and column indicies correctly coloured<br> The colour for Routine, System and Item attribute references can now be explicitly set in the INI editor RoutineEditColors section.<br><br />
<br />
*'''NEW''' Options editor shows colours and RGB values for palette entries, making it easier to tweak the routine colours.<br><br />
<br />
*'''FIX''' Custom colours being specified as #RRGGBB were being incorrectly parsed. Any INI #RRGGBB colours set up in 530n will need to be checked.<br><br />
<br />
*'''FIX''' Route list is better about retaining selection after a cancelled edit<br><br />
<br />
*'''FIX''' Model tree correctly shows object name when a pasted object is also added to the model object list<br><br />
<br />
*'''FIX''' Paint buttons were being sized one pixel too wide/high if an image was determining their size for a state.<br><br />
<br />
*'''FIX''' Planimate should no longer create PL_Media folders unless it has something to put in there.<br><br />
<br />
=== 5.30p ===<br />
<br />
*'''NEW''' Pipe option "Clear 0-Time Display When Stopped"<br> When enabled, the pipe will clear itself when the run control attribute becomes 0. This can be useful in some cases where you want to clearly show that the pipe is inactive.<br> This option only impacts "0 time" pipes since they effectively dont have capacity/values in them.<br><br />
<br />
*'''NEW''' Can browse views of a table<br> Table Editor -&gt; Table -&gt; Show Views, also in the context menu when you right click on a table in the table list.<br><br />
<br />
*'''FIX''' Pipes were mismanaging FEC events if a bin update triggered a control attribute change (eg: endpoint and control same attribute). This generated a linkedlist error<br><br><br />
<br />
=== 5.30o ===<br />
<br />
*'''NEW''' You can set the page orientation and paper size defaults for a print job.<br> Two new system attributes (and label lists) enable this:<br><br />
<br />
s.PrintOrientation (_print_orientation label list)<br />
s.PrintPaperSize (_print_papersize label list)<br />
<br />
If the values are 0, the default or previous value used in the current session of Planimate will be used.<br />
After a print, these values will be set to the actual selections made in the print dialog.<br />
s.PrintPaperSize can have many other values apart from the few included in the label list. If you need to preselect a specific size not offered in the default list, check the value after printing a page.<br />
NOTE: Don't add to the _print_papersize list as Planimate controls it<br />
NOTE: These attributes must be set before the first page is queued for printing.<br />
<br />
*'''NEW''' Column option "Dont Show Clear Value" (and property "DontShowClearValue"<br> This is like "Dont Show Zeros" except it tests against the column clear value instead. This enables a custom value to be hidden from a table view display.<br> This option can be used along with Dont Show Zero.<br><br />
<br />
*'''NEW''' Paint lines now have visibility control, click action and action control. They also have the option for tip text but this uses the area the line covers.<br><br />
<br />
*'''FIX''' Added an explicit "None" button to the icon selection palette<br><br />
<br />
*'''FIX''' Routine reference editor now corrects case for any attributes/ table names typed in to match the case of the actual attribute/ table.<br><br />
<br />
*'''FIX''' Row line height for copied table is now copied<br><br />
<br />
*'''FIX''' Can change "Advance For" time from within the breakpoint dialog menu. This is useful if an error occurs while advancing-to-time and you want to watch the animation.<br><br />
<br />
*'''FIX''' Closing routine editor with the window minimised no longer saves the window position as a minimally sized (but not minimised) window.<br><br />
<br />
=== 5.30n ===<br />
<br />
*'''NEW''' Default colours used in the routine editor can be edited using the Model Options editor / Platform INI / RoutineEditColors section<br> The colours with "Inv" at the end of their name are used when the system is running a colour scheme where window text is lighter than the window background colour.<br> Colours are either decimal palette indexes (0 = black) or #RRGGBB format<br><br />
<br />
*'''NEW''' "Natural order" sorting is now default and used in:<br><br />
**label list editor<br />
**table column filters (drop down combo)<br />
**label select dialog (old style pop up)<br />
**dropdown combo but ONLY if "Dynamic Combo List" is selected for the table column or attribute view.<br />
<br />
This means labels with numbers are sorted like this: 1,2,3,10 instead of 1,10,2,3<br />
<br />
*'''NEW''' Routine operation&nbsp;: UpdateLoopEntryDelay<br> Sets the loop entry delay to a new value. This can be performed when a train enters a location. The delay is measured from when the original loop delay started. If no loop delay is active, the operation does nothing.<br> If the new delay has expired, the loop entry end will occur at the current time.<br><br><br />
<br />
*'''FIX''' PL now gives a helpful error message if an attempt is made to call a DLL which is not compatible with the architecture. (ie: 32 bit versions can only call 32 bit DLLs and same for 64 bit).<br><br />
<br />
*'''FIX''' Memory leak in string management for filter list generation<br><br />
<br />
=== 5.30m2 ===<br />
<br />
*'''CHANGE''' Re-issue changing comment split character to "//" The release notes below have been updated.<br><br />
<br />
=== 5.30m ===<br />
<br />
*'''NEW''' Time Unit mode "Calendar D Mmm Y hh:mm"<br><br />
<br />
*'''NEW''' Broadcast Entry can show/browse indirect sources (eg: in routines) of broadcasts.<br><br />
<br />
*'''NEW''' Routine operation CountIfMatch This returns the number of times a column in a table contains a value<br><br />
<br />
*'''NEW''' Routine editor shortcut '{' and '}' take you to the previous/next "CASE" line in the routine.<br><br />
<br />
*'''NEW''' Menubar option Panel-&gt;Replace Reference<br> Enables replacement of a reference by another reference, scoped to the current panel and its contents/subsystems.<br><br />
<br />
*'''NEW''' Option on Cell Views "Don't Follow Table Colours"<br> By default cell views will follow the colour set for columns text/background in the table. Turning on this option prevents this, enabling the Graphics settings for the cell view to be effective.<br><br />
<br />
*'''NEW''' You can now "Move" and "Copy" attributes to any portal in the hierarchy (menu options via the Attribute button in the editor, replacing the Migrate To Owner option).<br> NOTE: Views will remain associated with the original attribute if it goes out of scope.<br> NOTE: A copied attribute could "cover" up access to the original or another attribute with the same name as it. Take care with this.<br><br />
<br />
*'''NEW''' Enhancement to routine line comments in the routine list<br> If a comment line contains the text "//" (2 slashes) then that acts as a separator, controlling what displays in the routine description and comment area.<br> eg:<br><br />
<br />
text &nbsp;: displays in both areas, as usual<br />
//text &nbsp;: displays on the right only, leaving the routine area blank<br />
text// &nbsp;: displays on the left only, leaving the comment area blank<br />
one//two &nbsp;: displays "one" on the left and "two" on the right.<br />
<br />
*'''FIX''' Changes in 5.30d caused inter-object references to not be properly managed when objects moved between models and deleted. This could cause a problem with a Message Dispatcher in a portal that is moved to a different model without the Message Entry which it is pointing to being also moved.<br><br />
<br />
*'''FIX''' FormatForList() error reporting had a bug when the label list was not found.<br><br />
<br />
*'''FIX''' Double clicking change object with a minimised routine edit window restores the editor window.<br><br />
<br />
*'''FIX''' Condition Table (multi condition switch) is resizeable<br><br />
<br />
*'''FIX''' Combo boxes update their list with the current selection matching the initial text in their window. This makes using the arrow keys to change the setting (without the list dropped) more consistent.<br><br />
<br />
*'''FIX''' A new 'control' column inserted by the track network build has its cells set to '100.0' (full availability)<br><br />
<br />
*'''FIX''' Copying attributes did not update internal label scope<br><br />
<br />
=== 5.30l ===<br />
<br />
*'''NEW''' Expressions can use these functions to perform bitwise operations<br> BitAnd(a,b), BitOr(a,b) and BitXOR(a,b)<br> Treat a,b as nearest integer and perform the binary bit operation equivalent to C's "&amp;", "|" and "^" operations.<br> This can be useful when a number of states has been stored into a single number using the combination of powers of 2.<br> eg: BitOr(32,64) = 96<br><br />
<br />
*'''NEW''' Pipe Broadcasts have been enhanced. 3 pipe options control what events get broadcast:<br><br> "Broadcast: Target at Target Upper Limit" (previous PL versions had this as the pipe broadcast limits option)<br> This can be used when "Source/Target Limits" is also enabled which enables the "Target Upper Limit" attribute.<br> The pipe will send broadcasts when its target is at or above the target upepr limit value.<br><br> "Broadcast: Source at Source Lower Limit"<br> This can be used when "Source/Target Limits" is also enabled which enables the "Source Lower Limit" attribute.<br> The pipe will send broadcasts when its source is at or below the source lower limit value.<br><br> "Broadcast: Load Limit at 0"<br> This can be used when "Load Limiting" is also enabled. The pipe will send broadcasts when the "Load Limit" attribute is depleted to 0.<br> This is useful when a pipe is to stop after transferring a given amount of material.<br />
<br />
The broadcasts set these item attributes:<br />
<br />
_pipeid &nbsp;: the pipe object index (or 0 if no index set)<br />
_pipeflags &nbsp;: reason for the broadcast.<br />
<br />
The "_pipeflags" value is a bitwise combination of values depending on what broadcast options are enabled and on the condition the pipe is in.<br />
The values are in the "_pipe_bc_flags" label list and are:<br />
"TargetAtUpperLimit" (value 1): The target is at or above the target upper limit<br />
"SourceAtLowerLimit" (value 2) The source is at or below the source lower limit<br />
"LoadLimitAtZero" (value 4)<br />
The load limiting attribute has reached 0<br />
eg:a vlaue of 7 would indicate all 3 conditions have occured.<br />
<br />
NOTE: If the pipe direction is reversed (control attribute -1) then source and target are reversed and the "Target Lower Limit" and "Source Upper Limit" attributes are used for limit testing.<br />
NOTE: Broadcasts will be repeatedly sent once a limit condition is reached. You must reset the pipe's parameters or use the control attribute to stop the pipe until it is needed again.<br />
<br />
*'''NEW''' Label list selection popup has a checkbox to hide/show system label lists (names start with an underscore).<br><br><br />
<br />
=== 5.30k ===<br />
<br />
*'''NEW''' Switch displays extra "Target Cache" info in its runtime click menu (this should normally never appear)<br><br />
<br />
*'''NEW''' Dispatcher runtime click menu has new "Unblock" option to assist in debugging stuck trains<br><br />
<br />
*'''NEW''' Routine operation "SetIconRemote"<br> SetIconRemote(ItemID,Location,IconName)<br> This enables setting an icon for an item somewhere else in the model. ie: you pass the item ID rather than it working on the item at the change object.<br> ItemID:<br> You might have read this by querying a spatial link for its contents, or you are tracking it in a table as an item moves through the model.<br> TIP: if you pass the item ID of the item at the change object (s.ItemID) then the icon of that item will be changed, no searching is needed in this case and the location can be 0.<br> Location:<br> Location can be a portal or object id containing the item. If its 0 the entire model is searched - this is potentially very slow (see the exception above).<br> Planimate only searches spatial links, tracks, multiservers, queues and dispatchers. It searches hierarchically if a portal or 0 is specified as the location.<br> IconName:<br> The icon name should be text or a label. PL will search its usual DBs for it. Dont include an extention.<br> *** IMPORTANT NOTE ***<br> Since PL cannot know what icons you may load, it has no way to make sure the icon is included in a compiled PBA.<br> You have two options to deal with this:<br> option 1: Include any dynamically assigned icons in the (modelname).DB file<br> option 2: (preferred) Have a private panel in your model with an object like an exit (low overhead) configured to use the icon you will be using with SetIconRemote().<br> This will ensure the icons get packaged in the PBA and has the added benefit of the icons being pre-cached by Planimate since the platform knows they are used when the model/PBA loads.<br> TIP: you can copy the icon name from the combo at the bottom of the icon browser / image mover palettes.<br> Note that no screen update is done by this operation. Icons will update when they next move.<br> Icons in links will update on the next movement update. Items waiting in queues and dispatchers can be updated using RepaintObjects(), which is faster than using ForceRepaint()<br><br />
<br />
*'''FIX''' Fixed an issue in the expression handling that caused operations strlen(), strcompare(), strfind() and strchar() to stop with an error if their input string was a Column reference (which is valid as it resolves to the column's tuple name when treated as text).<br> In previous versions this was worked around by using a temporary text attribute. This should not be necessary anymore.<br><br />
<br />
*'''FIX''' Button action with menu bar option "Advance" (time or interval) would not perform the advance if the button was clicked whilst the simulation was running (clicks during simulation enabled)<br><br />
<br />
*'''FIX''' References format more consistently in routine editor<br><br />
<br />
*'''FIX''' Dispatcher edit dialog renamed "Max Length" to "Max Capacity" for clarity<br><br />
<br />
*'''FIX''' DLL call TableDirect was passing reduced total row/column count if a cell reference was passed instead of an entire reference. The proper counts are now passed to the DLL. Note this is an unusual case as the norm is to pass an entire table refefence.<br><br><br />
<br />
=== 5.30j ===<br />
<br />
*'''NEW''' Routine operations QuerySpatialLink and UpdateSpatialLink<br> These enable items on the link to be read into a table and changes made to items already on a link.<br> They both expect a table with columns:<br> "ItemID": set to id of item use "-1" for UpdateSpatialLink to skip row<br><br />
"Ratio": position on link (based on its nominal direction)<br />
0.0 = start object, 1.0 = at end object<br />
use "-1" for UpdateSpatialLink to retain current position<br />
"TotalTime": total time to spend on link, use "-1" for UpdateSpatialLink to retain current total time<br />
"Direction": 0 = forward, 1 = reverse<br />
<br />
"Stopped" &nbsp;: 0 = normal, 1 = item is suspended at its current position<br />
<br />
*'''TIP:''' Spatial Link Times The time an item would have spent on the link had it started at its current totaltime, given its current offset, can be calculated as follows:<br />
<br />
<br />
time_elapsed = totaltime * ratio (direction forward)<br />
time_elapsed = totaltime * (1.0 - ratio) (direction reverse)<br />
<br />
The time an item has remaining is hence:<br />
time_remaining = totaltime * (1.0 - ratio) (direction forward)<br />
time_remaining = totaltime * ratio (direction reverse)<br />
<br />
*'''NEW''' Can now stop an item on a spatial link.<br> This is achieved using the "Stopped" column in tables passed to UpdateSpatialLink().<br> Unlike using the control attribute which stops the entire spatial link. stopping a single item does not prevent others from entering the link.<br><br />
<br />
*'''NEW''' Table column list editor now has editing of column properties when multiple columns in the list are selected, and multiple selected rows are retained for the next edit.<br> This means properties including format, width, colours, font and alignment can be edited for many columns at the same time.<br><br />
<br />
*'''NEW''' Numeric operation fmod() is a floating point modulus operation<br><br />
<br />
*'''FIX''' Handling of 0 row tables in column editing<br><br />
<br />
=== 5.30i ===<br />
<br />
*'''NEW''' Table columns can now be editied and reviewed using a list. This is reached from within the table edit window, under the "Column" menu item "Column Editor".<br> Right clicking on a single row is like right clicking on a column in the table editor, properties can be changed and columns inserted/dusplicated/deleted.<br> If the table has no columns, a right click in the list enables one to be added.<br> Multiple rows in the list can be selected, right clicking on these enables delete or "Paste Over" (see below)<br> The "Options" column in the list summarises a few of the column option settings, using single letters, as follows:<br> C: Zero at start R: Round display P: Protect from edits Z: Dont show zeros H: Hide repeated values V: Precise value edits F: Disable column filter<br> The dialog is resizeable and remembers its last position within a Planimate session.<br><br />
<br />
*'''NEW''' "Copy" and "Paste Over" column edit options.<br> "Copy" makes a copy of just that column in the table copy/paste buffer. Its useful with the "Paste Over" option which requires that a single column is in the copy buffer.<br> "Paste Over" enables one or many columns (using the new Table Column List dialog) to have particular properties replaced with properties of the column in the copy buffer.<br> You can select which properties will be replaced, others will be left alone, including Format, Width, Alignment, fonts and colours.<br> Replacing Data and Cell Properites is also an option but it is off by default. Note with these - if the copied column has more rows than the column(s) it is pasting over, only the available rows in the destination table are filled in.<br><br />
<br />
*'''NEW''' Right clicking on a table in the Table List dialog now shows a context menu with options including to edit, use the new column list dialog, rename and resize and delete the table all without having to go via the table editor.<br> Note that selecting the column list dialog from this context menu will also show the table editor in the background whilst columns are being edited as the editor's services are needed by the column list dialog.<br><br />
<br />
*'''REMOVE''' Removed column property copy, its superceeded by the new "Table Column List" dialog.<br><br><br />
<br />
*'''FIX''' Showing system attributes in a model error that occured at the start of a run could cause PL to close if the portal being viewed had not been initialised yet at the time of the error.<br><br />
<br />
=== 5.30h3 ===<br />
<br />
*'''FIX''' Found and fixed issue with VS2008 builds of 32 bit Planimate.<br> An inconsistent setting in the build projects was the cause of the problem.<br> This release is again built with VS2008 and has better performance than the VC98 build (5.30h2).<br> (the 64 bit version is unaffected; 5.30h remains current for it).<br><br />
<br />
=== 5.30h2 ===<br />
<br />
*'''FIX''' 32 bit version rebuilt with VS98 as VS2k8 compiler still has issues even without SSE2 enabled. This will be identified in due course but from now VS98 will be used for the 32 bit builds<br><br />
<br />
=== 5.30h ===<br />
<br />
*'''FIX''' Fix a special case where a dispatcher with the "Look Through In Lookahead" option on was not propagating unblocks behind it if it contained an item.<br><br />
<br />
=== 5.30g ===<br />
<br />
*'''NEW''' The "Advance Time" dialog which appears when PL is fast forwarding a run has been reworked.<br> It now uses Windows system colours and includes:<br />
<br />
**model name if its not a standalone application<br />
**last loaded dataset name (if its been set by PL or the modeller)<br />
**an approximate ETA estimate<br />
**model time updated more regularly<br />
<br />
*'''NEW''' Planimate option (Run): "Advance Time Dialog In Main WIndow"<br> If this is set then the advance time dialog will not be a floating popup window but instead fixed in the model's main window.<br> This can be useful when many models are running on one system and the association between advance time dialogs and PL instances gets confusing.<br><br />
<br />
*'''NEW''' Planimate option (Modeller): "Disable Paint Inheritance Update"<br> This prevents paint object changes from being propagated to inherited objects. It may be useful in cases where dynamic panel sizes are used along with paint inheritance.<br><br />
<br />
*'''NEW''' Added "Purge Attributes" in routine editor menu<br><br />
<br />
*'''FIX''' The calendar code now handles centuries which are not a multiple of 400 years (eg: 2100AD) as non leap years.<br><br><br />
<br />
=== 5.30f ===<br />
<br />
*'''FIX''' This is a rerelease of 5.30e, compiled with the original 32 bit compiler (VS 98). It seems the new compiler configuration for the 32 bit build 5.30e has problems with combos, no further details available yet.<br> The 64 bit release of 5.30e seems OK.<br><br><br />
<br />
=== 5.30e ===<br />
<br />
*'''NOTE''' Due to significant rewrites, verification of run consistency with a previous stable version (5.30c) is recommended.<br><br />
<br />
*'''NOTE''' The oldest computer spec that can run PL has been increased. PL requires processors at or newer than 2003 generation CPUs which have "SSE2" instruction capabilities (which boost math performance).<br> This means at least a Pentium 4 or an Athlon 64. Recent Intel Core, Intel "i" series, Atom and AMDs are fine.<br> This does not affect 64 bit versions of Planimate.<br> This looks like a useful guide but should not be taken as official. http://www.tortall.net/projects/yasm/manual/html/arch-x86-modes.html<br><br />
<br />
*'''NOTE''' The 32 bit version of PL is now built with Visual Studio 2008, improving performance.<br><br />
<br />
*'''NEW''' Planimate calling DLL API has been enhanced<br />
<br />
- DLL can now query PL clock time and engine state<br />
- DLL can post a real time tick broadcast<br />
<br />
<br />
*'''FIX''' If an error occurs during model initialisation, any defer draw is cancelled (if its not a standalone EXE).<br><br />
<br />
*'''FIX''' Can now break out of "fill intermediate route steps" during model initialisation, and it displays the state in the titlebar so you know thats what its doing.<br><br />
<br />
*'''FIX''' Made routine step editor resizeable and retain its position throughout an edit session<br><br />
<br />
*'''FIX''' Made more popups resizeable (like the references browser).<br><br />
<br />
*'''FIX''' Increased formatting width for references to reduce instances of cropping away of details in longer references.<br><br />
<br />
*'''FIX''' An attribute, cell or table view in very close proximity to a model object could display garbled content after an edit until the model was continued.<br> This was a graphical issue and the platform now ensures such cells are redrawn cleanly.<br> Previous version models might be forcing a repaint to get around this. This will still work but should be unnecessary now.<br><br />
<br />
*'''SPEED''' Significant amount of code was refactored for performance ** handling of table index validation (and clearer out of range message) ** track code (train direction check) is now lookup based ** rewrote how attribute references read and write to tables and attributes ** matched row operations reworked to improve performance particularly with column lookups. ** internal renames of code that should not affect anything.<br><br />
<br />
=== 5.30d ===<br />
<br />
This release marks a milestone in Planimate's network modelling abilities.<br />
<br />
It's now possible for models to add Portal copies and Tracks to themselves "on the fly" without having to stop/restart.<br />
<br />
It is a major step towards network models that build and update themselves from live databases (continuing to run as they do so). It capitalises on Planimate's executable data structure design and comes with a performance boost due to refactoring and cleanup.<br />
<br />
*'''NEW''' Routine Operation: CopyPortal(original,panel,x,y,name)<br> This enables a portal to be copied and placed on a panel WITHOUT stop/restarting the simulation engine.<br> The new portal's sub-systems are initialised and connected to the currently running simulation.<br> The model can immediately connect the Portal with tracks/links and start using it.<br><br />
<br />
*'''NEW''' Routine Operation: AddTrack(from,to,section-type)<br> This enables a track to dynamically added or a track's type to be changed on the fly.<br> The track is added to the object list and the index is returned.<br> The section running table is updated.<br> IF the track is configured to have less roads then it used to and there was a train on one of the extra roads, the train will disappear from the model.<br> Track code will be faster and less memory intensive as some cleanup and consolidation was performed.<br><br />
<br />
*'''NEW''' Routine operation: AddPipe(from,to,copy_pipe)<br> Adds a new pipe. If copy pipe is none zero, its properties are copied.<br> Returns the object index for the new pipe<br><br />
<br />
*'''NEW''' Routine operation: RemoveTrack(From,To)<br> Removes any track starting at portal From and ending at portal To.<br> If From is a track object index, it is used directly<br><br />
<br />
*'''NEW''' Routine operation: RemovePipe(From,To)<br> Removes any pipe starting at portal From and ending at portal To.<br> If From is a pipe object index, it is used directly<br><br />
<br />
*'''NEW''' Routine operation: GenerateTrackTable(panel)<br> This generates/updates the track section running table for a panel.<br> The panel should contain a track network. If a section running table doesn't exist, it is created scoped to the panel, otherwise any table that matches the configured section running table name up the hierarchy is used.<br><br />
<br />
*'''NEW''' Routine operation: QueryNetwork(Table,Panel)<br> This expects a table with columns "From","To","Type","ID"<br> It appends to the table a row for every track, pipe or spatial link on that panel.<br> "From" is the object index of the start portal (_Model_Objects labels)<br />
<br />
"To" is the object index of the end portal (_Model_Objects labels)<br />
"Type" is the object type of the link (_object_types labels)<br />
it will be "Track","Pipe" or "Link" (spatial link)<br />
"ID" is the object id of the link (_Model_Objects labels)<br />
<br />
<br />
<br />
*'''NEW''' Routine operation: SumIFMatch(match_column,match_key,data_column)<br> Sums values in "data_column" for rows where the corresponding cell in "match_column" matches the value "match_key".<br> The columns can be from different tables and of different lengths.<br><br />
<br />
*'''NEW''' Portal context menu option "Cut".<br> This enables a portal to be put into the copy paste buffer without being copied, meaning that object references etc. stay intact.<br> It is useful for moving portals between models and is a shortcut to the equivalent procedure of making the portal a module then importing it.<br><br />
<br />
*'''NEW''' Background menu option "Paste Once" (appears only if a portal is in the copy/paste buffer)<br> This performs a paste of the copy/paste portal without making a further copy for subsequent pastes.<br> Its very useful when large portals are being moved about as it avoids unnecessary waiting for the second copy to be made.<br><br />
<br />
*'''CHANGE''' AddSpatialLink(), AddDirectionalLink() and CopySpatialLink() now all add the new link to the object label list and return its new index.<br> Existing models which dont expect a result will use s.NullAttribute so they remain functional.<br><br><br />
<br />
*'''CHANGE''' Reduced the amount of prompting that PL makes when building/updating the network details table automatically at the start of a run.<br> If the network details table needs updating, PL will give a single prompt. Selecting OK will allow PL to create needed columns, add objects to the model object list and insert rows in the network details table without any further questions.<br> Note that the routine operation GenerateTrackTable proceeds without any user prompting.<br><br />
<br />
*'''FIX''' Pipe parameters optimisation for constant times:<br> If a quoted value (eg time) is entered into the pipe "Total Time" for example, it would remain quoted and converted at runtime, which is not optimal<br> Quoted values now get interpreted to formatted numbers at edit time.<br> If you see quoted values in the pipe edit menu, then edit/OK them and they will be converted to formatted values.<br><br />
<br />
*'''FIX''' Description for 'ceil()' expression operation<br><br />
<br />
*'''SPEED''' Cleaned up internal implementation of tracks, simplifying how they are represented during edit and runtime.<br><br />
<br />
*'''SPEED''' A number of significant rewrites and speed ups on how PL represents dynamic panels.<br><br />
<br />
**rewrote the way Planimate represents the model hierarchy<br>(avoid maintenance of a flattened hierarchy list except on load)<br />
**sped up loading models with better panel management<br>(panel reference handling)<br />
**added more hierarchy integrity checks on load<br />
**sped up closing Planimate (remove unnecessary DeleteObject dependency checking).<br />
<br />
=== 5.30c ===<br />
<br />
*'''NEW''' Pipe context menu enables copy/pasting of all pipe properties, references and settings between pipes.<br><br />
<br />
*'''FIX''' The selected cell in the table editor was being incorrectly redrawn. Table Views were OK<br><br />
<br />
*'''FIX''' Maximising a popup panel with the auto fit option on would restore its position instead of leaving it maximised.<br><br />
<br />
=== 5.30b ===<br />
<br />
*'''NEW''' Printing a panel that is open in a popup now works<br><br />
<br />
=== 5.30a ===<br />
<br />
*'''NEW''' Table View Properties, usable with GetViewProperty and SetViewProperty routine operations.<br> "SelectLeft","SelectRight","SelectTop","SelectBottom"<br> These enable access and setting of the bounds of a current selection in the view.<br> Cells are specified in terms of cells in the view not source table cells. Cells are numbered from 1. Setting any one of these to 0 will clear the current selection.<br><br />
<br />
*'''NEW''' Table column property "RoundValues" enables access to the table column option "Round Values In Views"<br><br />
<br />
*'''NEW''' Table column property "RoundWidth" enables access to the table column setting "Rounding Width"<br><br />
<br />
*'''NEW''' Label List "_export_options" names the option bits usable with CopyToClipboard<br><br />
<br />
*'''NEW''' Routine operation ShowHelp gives access to help files in the same way that buttons can be configured to show a section from a help file.<br> The names can be provided as quoted strings, labels or text formatted cells/attributes.<br><br />
<br />
=== 5.30 ===<br />
<br />
'''All''' older model compatibility code has been removed. This means PL will only load models which have file formats later than 604. You should use Planimate 5.25z4 to upgrade older models.<br />
<br />
=== 5.25z5 ===<br />
<br />
*'''NOTE''' This is a maintenance release of Planimate 5.25. At this time the current version to license holders is 5.32m<br><br />
<br />
*'''FIX''' This release fixes an error with the "Bell Curve" and "Log Normal" distributions when the new random number generator (see 5.22m) is being used.<br> The new generator had too much variation for these distributions.<br> For example, an StdDev of 0.5 was acting as an StdDev of 0.7.<br> The model option Engine - Use Old Random Number Generator determines if the old or new generator is in use.<br><br />
<br />
*'''FIX''' Mapper handles 0 row table<br><br />
<br />
*'''FIX''' Ctrl-paste over a selected object used to cause PL to close.<br><br />
<br />
*'''FIX''' Prevent "Stay paused for debugging" and other debugging options except Show Location for errors during engine initialisation. PL could get unstable if staying paused during an engine initialisation error.<br><br />
<br />
*'''FIX''' Log Driven graph horizontal bar / labelled bar was broken If the bar colour was not black, it would be misinterpreted and usually no bar would display.<br><br />
<br />
*'''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.<br> 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.<br> This issue was introduced back in 5.24m and was caused by a cache not being rebuilt after the reindex.<br><br />
<br />
*'''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.<br><br />
<br />
*'''FIX''' Status line redrawing when setting activity string now uses correct font<br><br />
<br />
=== 5.25z4 ===<br />
<br />
*'''FIX''' FormatForList() error reporting had a bug when the label list was not found.<br><br />
<br />
*'''FIX''' Handling of tables with zero rows when editing columns<br><br />
<br />
=== 5.25z3 ===<br />
<br />
*'''FIX''' The selected cell in the table editor was being incorrectly redrawn. Table Views were OK<br><br />
<br />
*'''FIX''' Maximising a popup panel with the auto fit option on would restore its position instead of leaving it maximised.<br><br />
<br />
*'''FIX''' Pipe parameters optimisation for constant times:<br> If a quoted value (eg time) is entered into the pipe "Total Time" for example, it would remain quoted and converted at runtime, which is not optimal<br> Quoted values now get interpreted to formatted numbers at edit time.<br> If you see quoted values in the pipe edit menu, then edit/OK them and they will be converted to formatted values.<br><br />
<br />
*'''FIX''' Description for 'ceil()' expression operation<br><br />
<br />
*'''FIX''' Fixed garbled attribute, cell and table view displays when they were changed in close proximity to an object while paused.<br><br />
<br />
<br><br />
<br />
=== 5.25z2 ===<br />
<br />
*'''FIX''' The Options edit dialog could get lost behind other dialogs particularly when editing options for fields in PL user dialogs.<br><br />
<br />
*'''FIX''' A user provided data file with an inordinate number (&gt; 65000) of spaces at the end was overflowing a buffer.<br><br />
<br />
=== 5.25z ===<br />
<br />
*'''FIX''' Table Driven (Indexed) mode Entry was not tupling the correct row's attributes to the created item.<br><br />
<br />
*'''FIX''' Table hover tracking is now more keyboard friendly. If you use the keyboard to move the selection and the mouse stays still, the hover highlighting will follow the selection.<br><br />
<br />
*'''FIX''' Table hover tracking now works with multiple table views with hover. The focus will automatically switch to table views configured to respond to hover, meaning that any keys will be handled by the correct table view.<br><br />
<br />
*'''FIX''' When dataset2 loads table columns, it no longer resets their width to the default width for that unit type.<br><br><br><br />
<br />
=== 5.25y1 ===<br />
<br />
*'''FIX''' Dataset2 would mishandle loading dates in a model that differed in run date by more than 30 years to the date when the data was saved.<br> This affected the loader. Any saved datasets with correct dates are OK.<br> This problem was due to a 32 bit value overflow and has been present since dataset2 was implemented.<br><br />
<br />
=== 5.25y ===<br />
<br />
This version addresses a number of interrelated issues. If your model uses run restarts or datasets COMBINED with changing the run start date, then you should investigate this version.<br><br />
<br />
In particular, clear values for columns formatted as dates and "null dates" lead to potential problems if a dataset2 was loaded which had been saved with a different run start date to the one currently in effect.<br><br />
<br />
*'''FIX''' There were numerous issues caused by the combination of attribute or table column "clear values" when used in conjunction with calendar times in models that change their run start dates.<br> From this version, "clear values" are always ZERO for calendar time formatted data. This means a "clear" (whether explicit or as a result of inserting a new row) will always appear to clear to the current "Run Start Date" since that is what corresponds to a value of "0" at simulation time.<br> Previous models AND datasets with non zero clear values on data formatted for calendar time will have the clear value silently set to zero. A message will be logged to the debug file "planimat.dbg" but this is not normally written.<br> You can enable it by running Planimate with the /DEBUGFILE command line option and then inspecting the "planimat.dbg" file. YOu can include the "/DEBUGFILE" option in the shortcut that you use to launch Planimate if you like.<br> Note this issue did not directly corrupt data but could have caused unexpected or invalid dates to slip into tables, eg:<br><br />
<br />
**A dataset2 is saved containing date formatted columns<br />
**The model run start date is changed (s.RunStartTimeReference)<br />
**the dataset is reloaded (PL translates the data OK)<br />
**a row append is performed on the table<br />
**the newly added date cell is left unedited or unassigned (typically unlikely in an editing UI where a user wants to set the date).<br> Note this issue triggered another unexpected behaviour in the date/time picker field in cases where only the date is shown for edit. This is separately addressed in this release.<br><br />
<br />
*'''FIX''' If a dataset2 contained a date value set to the "null" date value (as occurs when you type "-" in the datetime field) and the dataset was loaded into a model with a different run start date to that used when the dataset was saved, the null time would be offset and possibly not detected as the null date anymore.<br><br />
<br />
*'''FIX''' Added a workaround to avoid PL's window being forcibly scrolled by trackpad and mouse drivers which rudely send WM_HSCROLL and WM_VSCROLL messages to applications after having corrupted the application's SCROLLINFO state structure, instead of sending MOUSEWHEEL events.<br> This should stop PL's window's being scrolled by scroll wheels atc when a scroll is not necesary.<br><br />
<br />
*'''FIX''' The date time control had the behaviour of introducing hours/ minutes/seconds into a date even though it was configured to only edit years/months/days. This occured because the control substitutes the current date AND time into a field if the field is currently not a date.<br> The date-time control will now strip times when editing dates without times (or seconds when editing dates which dont show seconds).<br> NOTE that the platform does not take any other steps to protect a "date only" field from having hours/minutes components in it when data is put into a date cell using code, datasets, data import or standard edit controls to input data.<br><br />
<br />
*'''FIX''' Double clicking a splitter with multiple incoming item classes now enables the selection of an incoming item class, previously it was only possible to edit the first item class that used the splitter via double clicks on them,<br><br />
<br />
*'''FIX''' Indexing across/down handling of months/days on calendar dates has been rewritten to use newly available support code. It now handles incrementing dates by combinations of years, months, days etc. just like "advance run for interval" does.<br><br />
<br />
*'''FIX''' The model-initiated engine restart code was missing a redraw which left views dysfunctional if the panel didn't change. Moreover it exposed some ways to bring down PL which have been fixed.<br><br />
<br />
*'''FIX''' Keystrokes and mouse scroll events sent to a table view which was not properly drawn (eg: due to the engine restart issue - it should never occur normally) would cause a fault and close PL.<br><br />
<br />
*'''FIX''' Attribute editor no longer displays an error when selecting a calendar time mode which cannot be used for data entry, such as<br />
<br />
"Calendar DD Mmm (no year)"<br><br />
<br />
*'''FIX''' Viewport zoom display in context menu now a percentage<br><br />
<br />
*'''FIX''' Rate formatted values were giving errors when parsed<br><br />
<br />
*'''NOTE''' The value formatting and parsing code was rewritten to manage the various formats in a table to assist in enhancement and review.<br><br><br />
<br />
=== 5.25x4 ===<br />
<br />
*'''NEW''' Advanced-Find can find tables that are cleared on save of the model.<br><br />
<br />
*'''FIX''' Fixed an issue where if PL happened to be loading the font table of a model when it polls windows for events (so PL appears alive while loading a model), the status bar redrawing itself would reference an invalid font and bring down PL. Added an interlock to cover this.<br><br />
<br />
*'''SPEED''' Loader optimised to poll events less often; models should load faster<br><br><br />
<br />
=== 5.25x3 ===<br />
<br />
*'''NEW''' Added a "Delete Unused" option to the broadcast list to assist in cleaning out large quantities of broadcasts which are no longer in use in a model<br><br />
<br />
*'''FIX''' Default initialisation for calendar times led to superfluous warnings when merging models in relative time mode.<br><br />
<br />
*'''FIX''' Sorting of columns in alpha mode more efficient<br><br />
<br />
*'''FIX''' Sorting of Text formatted columns now works. The 'alpha' flag is ignored for text formatted columns and they are automatically sorted in alpha mode.<br><br />
<br />
*'''FIX''' Yes/No confirm dialog has buttons swapped (Yes on left) for consistency with Windows UI standards<br><br />
<br />
=== 5.25x2 ===<br />
<br />
*'''FIX''' Matched cells were not working properly for: SetFormat(), GetFormat(), GetFont() and SetFont() routine operations<br><br />
<br />
*'''FIX''' Dont show "hand" over click entry in model edit stopped mode<br><br />
<br />
*'''FIX''' Dial context menu includes mode and other value indication. New defaults for size<br><br />
<br />
*'''FIX''' Copy/paste attribute view now places any copied dial at same relative position to it was to the original<br><br />
<br />
*'''FIX''' Expression documentation for MatchedCell() was wrong.<br> To reference a matched cell use: t.table[].MatchedCell(keyc,key,c)<br> keyc -&gt; column to look up key in<br />
<br />
key -&gt; a value you want to find in keyc c -&gt; column to get data from after row has been found<br><br><br />
<br />
=== 5.25x ===<br />
<br />
This version is a release candidate for the next full release of Planimate<br />
<br />
*'''which''' will include new demo models and wiki based documentation. A number<br />
<br />
*'''of''' changes and fixes have been made to improve working with the platform.<br><br />
<br />
*'''NEW''' Change object has new icons for Message and Message/Broadcast operations. A new _!system.db is included which contains the new icons.<br><br />
<br />
*'''NEW''' "Click" entries can now be clicked in user mode. If the engine is stopped, it will be be started and the item generated.<br> These entries will also show a "hand" cursor when the mouse is hovered over them during run or when stopped but in user mode.<br> This makes click entries more useful in training models.<br> If older models exposed a user to "debugging" entries that they were not supposed to be able to click, these need to be put on a panel which the user cannot access.<br><br />
<br />
*'''NEW''' Multiservers have an option "Animate Item To Road Start" which enables the item to 0-time animate to the start of a road. By default this is off.<br><br />
<br />
*'''NEW''' Rewrote the distribution pattern dialog editor<br><br />
<br />
- layout gives ready review/access to rounding and scaling - preview plot cleaned up; properly sized, redraws cleanly - the input fields for the different modes are correctly labelled - fields that are numeric (eg: shape) dont format as time - internal code rewrite/cleanup/renames - distribution in routine follows the "units" of the target of the operation in editing as time or as a number - preview plot x scale reflects time/numeric mode - default management fixed - tab order and default field fixed (shift tab upon opening puts focus on the selection list). - title indicates item class when editing an interaction - PL now appears in task switcher when distribution dialog open<br><br />
<br />
*'''NEW''' New distribution "Equally Likely (Min/Max)" This accepts a min and max value, making it easier to specify uniform distributions where a range is known. Also useful where it will be rounded to integers.<br> The value generated will be &gt;= min and &lt; max so (min:1 max:10) will give between 1 and (10 - precision) where precision will be 1/32768 for the old random generator and 1/4billion when the new random generator is in use.<br> To generate a uniform integer, say 1 to 10 you can now use<br />
<br />
min: 0.5 max: 10.5 Round/Units<br><br />
<br />
*'''NEW''' Debugging option "Log Random numbers to debug file". This will log all random numbers drawn during a run to the planimate debug file (run PL using the /DEBUGFILE command line option to enable it).<br> It logs (time,value,stream) in tab delimited 15 digit precision raw number format.<br><br />
<br />
*'''NEW''' Entry mode "Table Driven Index". This is a table driven entry mode that does not remove rows from the source table, instead the entry keeps an index of the rows it has processed. This enables table driven entries to work directly off tables without copies having to be made of the schedule data and is also much more efficient when there are many rows driving the entry.<br> Note the index is reset when the run is restarted.<br> The existing "Table Driven" mode has been renamed to "Table Driven Remove Row" which helps clarify the difference between the existing and the new mode of operation.<br> A new icon for this state is included in the new _!system.db<br><br />
<br />
*'''NEW''' The icon mover and icon palette selectors now have new combo-boxes which list the icons sorted by name and enabling the highlight to be moved using the list. This makes finding icons/DBs by name much easier.<br><br />
<br />
*'''CHANGE''' "Friendly" error messages, when selected via model option, are now only displayed for standalone application EXEs. This helps with testing and debugging of models in "user mode" without having to remember to turn the option on and off when creating a standalone application.<br><br />
<br />
*'''CHANGE''' Previous versions of PL turned off the debugging options when toggling to user mode from edit mode. This helped prevent releases with debugging (eg: breakpoints) left on but made debugging more difficult.<br> Now the debug options are left on to assist in debugging apps.<br> Standalone applications will always see the debugging options as OFF, no matter on what state they are in when a standalone application is created.<br><br />
<br />
*'''CHANGE''' A change in seeding makes runs with the new random number generator different.<br> This will NOT affect runs if models are using the old generator (option "Use Old Random Number Generator" is YES).<br><br />
<br />
*'''CHANGE''' Renamed time units to indicate fields which are hidden if all 0 eg: "Time [#w #d] hh:mm ss.ss" "Time [#w #d] hh:mm:ss" "Time [#w #d] hh:mm" "Time [#d] hh:mm" "Time [#d] 0h:mm (hour always 2 digits)"<br> The parts in square brackets are only shown if the value or those to the left of them are non zero.<br><br />
<br />
*'''NEW''' Added the following format:<br> "Time #w #d hh:mm:ss.ss Minimal"<br> This shows fields in between the smallest and largest time unit only, enabling compact time duration notations eg:<br> "5d", "1d 12:23", "12:34", "00:12:34", "2w 3d", "1.50", "1w 0d 00:00:00.01"<br> This format is being used for times in the distribution pattern dialog and was implemented to reduce clutter in the editor.<br><br />
<br />
*'''FIX''' Switch multiple condition editor was broken, most likely in 5.25q when changes to the multiple condition editor occured.<br><br />
<br />
*'''FIX''' Removing columns from a table driving a visible log driven graph would cause PL to fail.<br><br />
<br />
*'''FIX''' Properties list in reference editor now includes object properties<br><br />
<br />
*'''FIX''' Fixed possible font table corruption if saving with an inverted colour scheme<br><br />
<br />
*'''FIX''' Cleanup to schedule/single Entry to increase memory and file efficiency<br><br />
<br />
*'''FIX''' cleanup of change object - removed large memory and file overheads in change objects that were not doing file operations<br><br />
<br />
*'''FIX''' Expression editor avoids quoting constants stored in time formatted values if those numbers dont need quotes (eg: seconds)<br><br />
<br />
*'''FIX''' Table row operations were not being properly updated in views (eg: when the table driven entry insertede a row into the log table)<br><br />
<br />
=== 5.25w ===<br />
<br />
*'''NEW''' Attribute views have new options enabling them to support label editing in the same way that table columns support. These options are:<br> "Edit Labels With Field"<br> If selected a non combo field is used to type in labels/text instead of a pop-up dialog.<br> "Edit Labels With Combo"<br> A "combo" style field is used to select or type in labels<br> " Rename Instead of Adding Labels"<br> If selected and a new label name is typed over an existing label, the existing label is renamed instead of a new label being created.<br> " Only Select Existing Labels"<br> New labels cannot be created, only existing ones selected.<br> " Dynamic combo list"<br> The dropdown list is updated to match what is typed into the field.<br> " No combo if only one element"<br> List isn't displayed if there is only one option and its already chosen<br> " Confirm Before Adding Labels"<br> Confirmation dialog before any new label is added.<br><br />
<br />
=== 5.25v ===<br />
<br />
*'''FIX''' Dataset1 loads were not handling label lists with names which had been translated to remove spaces by the platform. They were recreating the old lists (with spaces in name) even though the tables continued to reference the new data (with fixed names)<br> Fixed by forcing name translation on all label and sublabel list names loaded in dataset1 files. This means the model must be following the new naming convention for affected lists.<br><br />
<br />
*'''NOTE''' Dataset1 is obsolete and is being phased out. It will will be supported in 5.26 versions but phased out progressively over the next year. Saving will be removed first, loading later.<br><br />
<br />
*'''NOTE''' A reminder that it is a long term goal to clean up the naming of attributes, tables, columns and label lists.<br> This is the internal name, not the title or label text.<br> This is important for code readability, verification and also in enabling a reliable routine editor. Spaces in names can be very confusing.<br> There is no current plan to enforce this - it was done for label lists because the predefined lists needed to be renamed. However modellers should keep this in mind when migrating and updating older models.<br> The conventions are described here:<br> http://wiki.planimate.com/Naming_Conventions<br><br><br />
<br />
=== 5.25u ===<br />
<br />
*'''NEW''' Routine operation "RemapName"<br> This enables text to be processed through PL's file name remapping which occurs for change-&gt;file operations. This enables substitution of matching text with entries provided at runtime in an INI file.<br> Result can be a text formatted attribute or a label list formatted attribute (new label created as required).<br> See http://wiki.planimate.com/Model_INI_File for details on file name remapping.<br><br />
<br />
*'''NEW''' Added new APIs to "Planimate as DLL" interface. Now supports both regular broadcasts and "background" broadcasts which are processed silently and without UI change by the platform.<br> Fixed broadcast handling to ensure side-effects completely applied<br><br />
<br />
=== 5.25t ===<br />
<br />
*'''NEW''' Clipboard Export option "Use Dont Show Zero"<br> (mask is 16 for clipboard routine operation)<br> This causes PL to use the "Dont Show Zero" column option when putting data in the clipboard. Cells which are empty will be empty instead of their 0 value when pasted in the clipboard.<br><br />
<br />
*'''NEW''' The table editor -&gt; Advanced option "Expected Row Limit" now shows in brackets the number of rows the table is currently preallocated for (which is different to the number of rows the table contains).<br> This assisted in an important FIX: Tables with an "Expected Row Limit" set were not holding on to the preallocated memory; it was being released during the model load, rendering it ineffective.<br> NOTE that this fix may push some models into using more memory since the preallocations now actually apply. To assist in this I've enhanced the Model Properties (see below) to help in reviewing allocations.<br><br />
<br />
*'''NEW''' Reformatted File-&gt;Model Properties for table displays.<br> When you select "Table" it will now include current memory allocation after the table size.<br> I've found it useful to paste the report into a spreadsheet and sort by the size column to identify the biggest tables.<br><br />
<br />
*'''FIX''' The routine "Replace Reference" routine editing context menu operation was not working with the new reference editing. (was using wrong class for the temporary references).<br><br />
<br />
*'''FIX''' There was a small memory leak loading column hover tips.<br><br />
<br />
*'''FIX''' Font leak in settings editor<br><br />
<br />
*'''FIX''' Prevent the sidebar context menu from editing while paused which would generally cause disappointment<br><br><br />
<br />
*'''FIX''' Table grow Memory allocation thresholds have been tweaked, again There was too much "jump" in table sizes.<br><br />
<br />
*'''SPEED''' optimise the storage of empty strings, eg: unused hover tips. These were being allocated as one byte memory chunks creating huge overhead on the memory manager. They are now treated as a special case by the memory allocation routines<br><br />
<br />
*'''SPEED''' Reworked table memory management to reduce large preallocations for temporary undo/copy tables. These do not grow so they dont need any extra space to grow into.<br><br />
<br />
*'''SPEED''' Removed use of 2 byte int table class, now use 4 byte for all tables. Generally this will improve speed a little.<br><br />
<br />
*'''SPEED''' Reworked how portal entries/exits are tracked by portals during run, reducing memory allocations and increasing speed of the engine.<br><br><br />
<br />
=== 5.25s ===<br />
<br />
*'''FIX''' Datasets now support millions of labels and free text cells without<br />
<br />
LinkedList warnings. String handling more efficient.<br><br />
<br />
*'''FIX''' The expression editor was broken in the 64 bit version due to a different behaviour in the VS2k8 compiler compared to the VC6 used for regular 32 bit releases<br> (link time optimisation and identically named global inline functions defined in multiple modules).<br><br />
<br />
*'''SPEED''' 64 bit version has had some STL debugging checks disabled. Label list management should be faster.<br><br />
<br />
=== 5.25r ===<br />
<br />
*'''NEW''' The way attribute references are edited outside of a routine (eg: when referenced to set object properties like Multi-server Capacity) has been enhnanced.<br> A new dialog appears which enables expressions to be typed, as in the routine editor.<br> F2 now enables a reference to brwosed and inserted using the older UI method, rather than attempting to edit the current reference with the UI.<br> Having access to references at objects and views will make it possible to do quick calculations and offsets "as-needed" rather than having to use a lot of temporary attributes (set at a routine) to achieve the same effect.<br><br><br />
<br />
*'''NEW''' Planimate references now automatically convert strings to numbers using the automatic format parser.<br> This is most useful in allowing dates and times to be included in expressions.<br> This means expressions like:<br> p,attribute + "1d" or i.hour - "0:30" or "1jan2010 12:34:55" + "1w"<br> are acceptable in references alongside numbers and attributes.<br> It will also work with strings generated on-the-fly so if you have set<br><br />
<br />
p.day = 12 p.month = "Jan" (a string or label) p.year = 2010<br> then this routine line:<br> p.mytime = p.day &amp; p.month &amp; p.year<br> will give the string "12Jan2010" which will then be converted to seconds in Planimate's usual way of handling dates.<br><br />
<br />
*'''REMOVE''' Distribution dialog used to have options to truncate or round values to Months/Years. These assumed 30 day months and have been removed. Previous models using these will revert to no truncation and give a warning on load.<br><br />
<br />
=== 5.25q ===<br />
<br />
*'''NEW''' Item table notation has been improved.<br> Where previously one used:<br> s.item.tablerefname[1][2] you can now use i.tablerefname[1][2]<br> For an entire table reference, i.tablename[] is used.<br> The [] tells the interpreter that its an item table not an item attribute.<br> This notation has been extended to regular table references as well. Non-cell references now display as:<br><br />
<br />
t.tablename[] (entire table) or t.tablename[].RowCount (property of table) or t.tablename[].Row(2) (entire row)<br> These changes highlights table references in code and also enables item table names to be included in the hint list when you type "i."<br> the [] is optional when you are typing a t. reference.<br><br />
<br />
*'''NEW''' Added a popup to assist in building expressions in the routine editor.<br> Pressing CTRL-F while editing an expression will pop up a list of functions that can be used in expressions, avoiding having to use separate routine operation lines for a number of math and string operations.<br> If the cursor is after a "." then properties are listed instead, for example: t.locations[].RowCount<br> The list includes some hints on the parameters; these wont get pasted in when a selection is made.<br><br />
<br />
*'''NEW''' The Planimate DLL call mechanism (Planimate calling a DLL) has been enhanced to support callbacks into Planimate from DLL code.<br> Currently these support:<br><br />
<br />
- getting PL to grow the memory allocated in a "table direct" table - popping up a message box (useful for diagnostics) - triggering a breakpoint<br> Note that very old DLLs (typically &gt; 5 years) that were not compiled to use "column order" are no longer supported.<br> They will be easily recompilable with a more recent DLL API.<br> Licensed Planimate users can contact InterDynamics for an updated API.<br><br />
<br />
*'''NEW''' Change-&gt;File operation: "TestFileLines"<br> This gives the number of newlines in the file. It will generally return one plus the actual number of lines in the file unless the file doesn't end in a newline, in which case it will be the actual number of lines of data.<br> This is intended to give an upper bound on the number of lines in a file which can be used to preallocate table memory just before large data files are read into them.<br> Preallocating memory prevents memory fragmentation and will be beneficial when reading files which could contain &gt; 30000 rows.<br><br />
<br />
*'''FIX''' Moving a portal did not update the panel to reflect the change<br><br />
<br />
*'''FIX''' Moving a portal could create multiple portals on a panel with the same name. The moved portal will be renamed to prevent this. Existing models should be edited to avoid objects of the same type with the same name on the same panel as its not supported by the editor.<br><br />
<br />
*'''FIX''' The description in the settings editor did not update correctly if the selection was changed using the arrow keys.<br><br />
<br />
*'''CHANGE''' The boundaries at which internal tables (including model table columns) "grow" in size have been revised to try reduce fragmentation, at the cost of potentially more memory usage in some cases.<br> If you are preallocating the rows in your tables, this does not impact you.<br><br />
<br />
*'''CHANGE''' The name hint list that appears as you type routine attributes now appears aligned to the input field rather than the text edit cursor, to prevent it appearing way to the right on long expressions.<br><br />
<br />
*'''CHANGE''' PL defaults (new install) to using the wiki for context help Minor updates to fix inconsistencies and some major new content has been added to the wiki.<br><br />
<br />
*'''CHANGE''' PL defaults (new install) to uses the textual routine editor (F2 opens the dialog based editor, can edit Platform INI -&gt; Routine -&gt; UseDialogReferenceEdit and set to 1 (this was renamed as previous name was confusing)<br><br />
<br />
*'''SPEED''' Optimise object attributes by inlining the most common code paths<br><br />
<br />
*'''SPEED''' sacrifice memory for speed by using 4 byte int for internal object variables that were stored in 2 byte shorts. Also improved structure alignment for item class step information<br><br />
<br />
*'''SPEED''' Inlined some of the base item moving code<br><br />
<br />
=== 5.25p ===<br />
<br />
*'''NEW''' Units "Data W# D# (Week/Day from 1)"<br> This interprets an interval (or time since run start) as weeks and days, with weeks starting at 1 and days counting from 1..7<br><br />
<br />
*'''NEW''' Units "Date D# (Day from 1)"<br> This interprets an interval (or time since run starT) as days, starting at day 1.<br><br />
<br />
*'''NEW''' Units "Calendar YYYYMMDDhhmmss"<br><br />
<br />
*'''CHANGE''' Renamed unit formats for more consistency, particularly where PL is providing a letter in the format like "3d" or "D3", in these instances a "#" represents where the number will be.<br> # is also the placeholder for number, replacing "x".<br><br />
<br />
*'''CHANGE''' Units change:<br> The "Time D HHMM (Day From 1)" and "Time D HH:MM (Day From 1)" units have been renamed and reformatted to be consistent with the other "Day From 1" unit modes.<br> They are now called "Date D# HHMM (Day From 1)" and "Date D# HH:MM (Day From 1)" respectively, and will format "0" as "D1 0000" and "D1 00:00", with the capital prefix D serving to distinguish them from the relative time "1d 0000" which is actually a value of 86400.<br><br />
<br />
=== 5.25o ===<br />
<br />
*'''FIX''' Fixes font load handling issue introduced in 5.25n<br><br />
<br />
=== 5.25n ===<br />
<br />
*'''NEW''' If a model sets a custom menubar and you switch to edit mode and back to user mode (ctrl-shift-h), the custom menu bar is now restored instead of lost.<br> This is useful for debugging.<br> If the custom menu bar has been cleared and is empty, PL will switch back to the default planimate run menubar when going to user mode.<br><br />
<br />
*'''NEW''' API additions to dotNET interface to support portal attributes<br><br />
<br />
*'''NEW''' Tools menu -&gt; Show System Attributes gives access to the system attribute list available in the breakpoint dialog. This wont include any item specific system attributes.<br><br />
<br />
*'''NEW''' About box includes the source revision in the version number area which will assist in source code management<br><br />
<br />
*'''NEW''' Option for train graph displays "No Times In Click Popups" If enabled, it prevents times being displayed in the default info popup when a train graph line is clicked.<br><br />
<br />
*'''FIX''' System attribute window is wider<br><br />
<br />
*'''FIX''' Routine font colour management improved to avoid saving models with inverted colour schemes. Routine fonts are no longer editable.<br><br><br />
<br />
=== 5.25m ===<br />
<br />
*'''NEW''' Change object-&gt;File<br> Added new option<br> "Write Free Text As Cell"<br> This causes free text formatted data to be written and read as text (removing line feeds, tabs and CRs if any) instead of the default which is to write it as a data blob in order to maintain any formatting in multi-line free text cells.<br> This is useful where only single line text is being used.<br> (text formatted cells are already transferred in this format to/from the clipboard)<br><br><br />
<br />
*'''FIX''' Fixed situation where an item's route is removed in lookahead (not supported); PL reported the error but then faulted due to some code assuming the route would be there.<br><br />
<br />
*'''FIX''' Fixed a corruption of tables passed to the dotNET PL DLL function SendBroadcastTuple() which manifested itself as a crash under Win7.<br> The complete DLL API has now been implemented in the dotNET wrapper.<br><br />
<br />
*'''FIX''' Fixed the following "Platform error" report situation:<br><br />
<br />
**there is a table view with hover updates enabled<br />
**the table has has a filter active and a rowset selected<br />
**in code, rows are removed from the table and some code that takes a while executes<br />
**the long routine code executes for so long that PL pumps some Windows events so PL doesn't appear dead to the world<br />
**A mouse hover is picked up (windows event) and is passed on to a table view which is in a half baked state because table rows have been deleted but it has not got around to regenerating a valid filter rowset<br />
**this is picked up by validation and presents a "Platform error" stop dialog reporting an out of range row index in a view filter.<br> This means table hovers will not track whilst PL is processing routine code.<br><br />
<br />
*'''FIX''' Fixed the SetFilteredRows operation. If a view of the table was visible, it was not being properly informed of the row filter setting. This was not a problem unless in the one routine:<br><br />
<br />
**you put some rows in a table<br />
**you set a filter rowset viewing those rows<br />
**you remove some rows from the table<br />
**the table is now back to the original number of rows<br> In this case PL didn't realise the filter rowset was invalid and would generate a Platform Error stop dialog reporting an out of range table row in a view.<br><br />
<br />
*'''FIX''' When saving a model PL sets working directory back to the directory it expects the model to be in, to handle cases where model code changed the directory during run. This prevents model saves from dropping models everywhere that data was loaded from.<br><br><br />
<br />
=== 5.25l ===<br />
<br />
*'''FIX''' Planimate-as-dll broadcast callback now works in cases where the broadcast has no attributes<br><br />
<br />
=== 5.25k ===<br />
<br />
*'''NOTE''' New MDL version<br><br />
<br />
*'''NEW''' You can now specify tip text on a cell, in the "Cell Specific" context menu item. Note that there is overhead in having many cells with tip text.<br><br />
<br />
*'''CHANGE''' The "Only Modellers Can Add" option for label lists is now imposed for importing data into the table from a file. This prevents a user from getting invalid data into a list in a roundabout way.<br> When an unknown label is encountered, a message is given showing the label and the load continues with a zero index being used for that cell and any others with bad labels from thereon (without further messages reported).<br> If you want a file read to be able to add labels to a list which is otherwise "read only" to an end user, you can<br />
<br />
Use the column options to prevent adding labels in table views - use SetListProperty routine option to turn the OnlyModellersAdd property as required.<br><br />
<br />
*'''CHANGE''' The "Extra X Scale Margin" and "Extra Y Scale Margin" graph scale options enable an extra margin on graph scales which makes the graph look neater and helps create space for the graph labels to display in.<br> Previously this was a fixed value of 2% of the data range. This can now be set per graph using the Scale Parameters -&gt; X Margin Extra&nbsp;% and Y Margin Extra&nbsp;% values.<br> The default for new graphs is now 3% which helps allow space for the top scale value to display in.<br><br />
<br />
*'''FIX''' Fixed situation where cancelling the resize of a view with ESC caused the hierarchy window to receive the keystroke, which then went "back" to the last panel in the middle of the resize.<br> (this was due to the hierarchy giving focus to its child window when its parent window is disabled, perplexing behaviour).<br><br />
<br />
*'''CHANGE''' The term "Units" has been replaced by "Format" in editing UIs to more clearly reflect its function and also match the names of routine operations and properties related to value formatting.<br><br />
<br />
*'''FIX''' Rewrote Tool Tip handling. Column tips in tables now track a column as it moves without leaving a trail of tip regions<br> This was previously worked around by forcing repaints or using a transparent table which forced repaints, not necessary now.<br><br />
<br />
*'''FIX''' Pasting if nothing copied would cause a fault<br><br />
<br />
*'''FIX''' Model Explorer (tree view) fixes<br />
<br />
**was locking itself out from updates if a model loaded as PL loaded<br />
**could crash on a "New model" due to attempt to regenerate itself in the middle of the model being reinitialised<br />
**double update upon load due to an extraneous Update() post load which was no longer necessary.<br><br />
<br />
=== 5.25j ===<br />
<br />
*'''NEW''' In edit mode CTRL-C and CTRL-V now work. CTRL-C will copy one or more selected objects. CTRL-V pastes the copy buffer at the top left corner of the panel.<br><br />
<br />
*'''FIX''' Fixed a table view error which occured if modeller defined row filters were set then the table shrunk whilst it did not have a view visible (eg: advance to time). This prevented the view updating properly and it would access invalid rows in the table.<br><br />
<br />
*'''FIX''' The ClearFilter operation now clears modeller specified column filter data even if the view is not visible.<br><br />
<br />
*'''FIX''' If an "Advance To Time" has been set and the model then paused, the advance to time dialog will not be shown in cases where PL is pausing broadcasts (eg: table cell clicks). It will appear again when the model run is continued.<br> This allows user UI processing to coexist with the simulation in advance-to-time mode without distraction.<br><br />
<br />
*'''FIX''' Disable the editing palettes during model load to prevent modellers building models during a long model load.<br><br />
<br />
*'''FIX''' Fixed expression parser - it would fail with a badly formed function like<br> strlen(/)<br><br />
<br />
*'''FIX''' The following reutine operations have been updated to "clean up" any text they are passed before creating labels from that text. That includes<br />
<br />
**removing linefeed and CR characters<br />
**removing TAB characters<br />
**removing enclosing pairs of double quotes<br />
**converting individual double quote to single quote<br> This is necessary to prevent unsupported characters getting into regular label lists. If you need special characters like " and CR then you should use the text string capabilities.<br> This affects:<br> FormatIntoLabel FindFormattedLabel FormatLabelIndex RenameLabel LabelRename ExtractFileName ExtractPathName ExtractFileExtention<br> These all work by creating labels for their result and hence need to protect against unexpected characters in the label.<br><br />
<br />
*'''FIX''' The model hierarchy now scrolls to show the current selection after it gets regenerated, as occurs when a group of objects is pasted. In previous versions you had to scroll to find the selection.<br><br />
<br />
=== 5.25i ===<br />
<br />
*'''NEW''' The BrowseFile operation can now have a description associated with one or more file extentions.<br> The extention information follows the filename, separated with a vertical bar "|". This allows:<br> "name.foo|FOO format files|*.foo|Older format|*.bar"<br> (note the All files is added automatically).<br><br />
<br />
*'''FIX''' Fixed extention support in file browser to support &gt; 3 letters<br><br />
<br />
*'''FIX''' Value formatting was ugly for Minutes/Hours/Days/Weeks formats when they were copied to the clipboard.<br><br />
<br />
*'''FIX''' Implemented a handler to prevent flickering when panel autofit is on and a popup is being drag-resized smaller than its preset minimum size.<br><br />
<br />
*'''FIX''' fixed autofit and resize of a popup when that popup has a scale factor that isn't unity.<br><br />
<br />
*'''FIX''' Added an event pump to clear events before a popup list was displayed (eg: the label select popup) which was closing unexpectedly onder Linux.<br><br />
<br />
=== 5.25h ===<br />
<br />
*'''NEW''' Operation "CopyAllFromView" enables all the rows/columns of a table view to be copied (including any effect of customised view columns and view filters).<br><br />
<br />
*'''NEW''' New view properties for Gantt Views (in the _tableview_properties label list)<br> "GanttBarOffset" "GanttTextOffset" "TimeLabelColor" "TextLabelColor"<br> These give access to items set in the Gantt View Context Menu and enable the gantt to be customised on the fly.<br><br />
<br />
*'''NEW''' Gantt graph bar font can be set for each graph view. (if not set the default is to use the "Graph Labels" font as before)<br><br />
<br />
*'''FIX''' When an error in a calendar datetime occured during data import PL would not always break out after giving warning messages, depending on whether the error occured in the date or time part of the datetime.<br><br />
<br />
*'''FIX''' Previous versions of PL's file reading (eg: reading into table) would not read data followed immediately by EOF. This has been changed so data that ends with EOF will be read.<br><br />
<br />
*'''FIX''' Auto advance renabled for table editor<br><br />
<br />
=== 5.25g ===<br />
<br />
*'''NEW''' New table view option "Double Click Check For BCs"<br> Previous versions of PL would check if a cell click was a double click when sending a "before edit" broadcast. This was useful in some UI situations.<br> Due to the slowdown in the UI this causes (waiting for the double click timeout) this is now an explicit option and is off by default.<br><br><br />
<br />
*'''FIX''' Copying of portals containing "local" item classes between models was dysfunctional. It now works.<br><br />
<br />
*'''FIX''' The combination of:<br />
<br />
**a table view cell click "before edit" broadcast<br />
**that view's "after edit" broadcast<br />
**s.EnableTableCellEdit being set<br />
**the table view having the "Dont Defer BC on FEC" option on<br> caused PL to "continue" the run after the broadcasts were processed when in fact this was not desired. This was due to the "before edit" broadcast's interaction with the engine.<br> This has been fixed but note:<br> If the view's "Dont Defer BC On FEC" option is selected, then the "Before Edit" broadcast must only be used to decide whether the cell edit should occur.<br> You can do pre-processing within the "before edit" broadcast (including messages from a change object) but do not depend on sending other broadcasts or unblocking. These events will be put on the FEC but not processed until a continue occurs.<br><br><br />
<br />
=== 5.25f ===<br />
<br />
*'''NEW''' Paint button option "Pre-Load Images On Model Load"<br> This causes the button's states to pre-cache any images as the model is loaded rather than when the panel containing the paint button is first displayed.<br> This is useful for large images which take a while to load, its better to have the delay at the start rather than when the user first visits the panel containing the image.<br><br />
<br />
*'''NEW''' Time mode "Time D HH:MM (Day from 1)<br> Displays a relative time counting the first day as day 1<br><br />
<br />
*'''CHANGE''' Time formatting modes have been renamed to improve clarify<br><br />
<br />
*'''CHANGE''' SetViewFilterRows now does not reset the filter if 0 rows are present in the filter specification column. This enables a modeller to set a filter of 0 rows.<br> Use ClearFilter to reset the filter to none.<br><br><br />
<br />
*'''CHANGE''' Renaming a table column with the same name with different case is now recognised and handled as if a different name was entered so references can be updated<br><br />
<br />
*'''CHANGE''' In previous versions, a table view would auto-advance to the next cell after an edit unless an after-edit broadcast had been selected.<br> This has now been made an explicit table view option, "Advance Cell After Edit". This option will be turned on automatically for older models without an after edit broadcast.<br> It also defaults to on for new table views.<br> This enables cell advance to be selected even if an after edit broadcast is in use.<br><br />
<br />
*'''FIX''' The FitPanelToUsedArea routine operation had a bad reference for the "margin" parameter which could cause inconsistent sizing at best or a fault.<br><br />
<br />
*'''FIX''' Fixed paint button state image handling. They were not properly registering their use of an image, preventing it being pulled into a standalone EXE unless the image was either included in the model's DB file (always included) or somehow displayed first.<br><br />
<br />
=== 5.25e ===<br />
<br />
*'''NEW''' Routine operations "GetColumnFilter" and "SetColumnFilter"<br> These enable the *filter text* for a table view on a given panel to be explicitly read and set.<br> The column is specified as a table column reference. PL will locate where that column is in the view automatically, so rearranged views are supported.<br> GetColumnFilter can return a result either by creating a new label (if you use a label list formatted attribute) or directly as text if you use a text formatted attribute.<br> Note that filters need to be enabled for the view in advance.<br> An "unset" filter is returned and set as an empty string.<br><br />
<br />
*'''NEW''' Routine operation GetDate returns the date at the start of a day for a calendar date/time - ie: it removes the hours/minutes/seconds component.<br><br />
<br />
*'''NEW''' Routine operation SetColumnTip enables setting of a table column's tip text. Tip text is stored separately to the column's title text and will be used instead of the title text if its not empty. Column tips need to be enabled for the tip text to be displayed.<br><br />
<br />
*'''CHANGE''' The following routine operations can now return their text either as a label index (if a label formatted attribute is passed) or as text in a text formatted attribute:<br> FormatTitleIntoLabel FormatNameIntoLabel GetColumnSecondTite<br><br><br />
<br />
*'''CHANGE''' BrowseFile has been enhanced.<br> The "Save Mode" parameter is now called "Options"<br> A value of 1 enables "Save" style dialog instead of open (as previously). A value of 2 causes the browse to leave the default directory in the location where the last file was selected.<br> The options can be both used by adding the values.<br><br />
<br />
*'''FIX''' Fix module configuration editing (runtime)<br><br />
<br />
*'''FIX''' If a cell was updated for a table with a visible view and the view had an active column filter and the change in data caused the filter to show less rows then PL would crash because the redraw of a single cell due to data update was not properly translating the data row into the view row when the filter was active.<br> Report any performance changes that this version may exhibit against version 5.25d as the implementation of this fix could be a contributing factor.<br><br />
<br />
*'''CHANGE''' A 0 in place of a panel reference will return the top level panel<br><br><br />
<br />
=== 5.25d ===<br />
<br />
*'''CHANGE''' Paint edit popups now show the tool tip text. The Add/Select state popup will show the tip text for each state as well.<br><br />
<br />
*'''CHANGE''' When a panel with a viewport which is dynamically sized was being resized by using the titlebar WHILE a single item was animating AND the resize broadcast was being processed in the event pump during the item's animation....<br> it would cause the viewport to hide/reshow its window (to apply new backing store dimensions and reposition itself) destroying the (currently busy) animation manager.<br> Fixed by ignoring the resize event and polling for a change in parent window size every animation update.<br><br />
<br />
*'''CHANGE''' The pause/stop menu was overly sensitive (eg: clicks on the title bar would activate it). An event based way of detecting mouse downs in the main window is now used.<br><br />
<br />
*'''FIX''' An uninitialised variable could cause viewports to respond to clicks when they were not supposed to.<br><br />
<br />
*'''FIX''' Fixed loading of very old track models; was not initialising some names properly leading to a crash on network build<br><br />
<br />
*'''FIX''' Fix error testing; if a track network build fails it does not continue building networks on other track panels.<br><br />
<br />
*'''FIX''' Creating an object label now gives opportunity to correct an object name if it is already used rather than just bailing out.<br><br />
<br />
*'''FIX''' When suggesting an object label name, PL now defaults to a name which can actually be used, it wont suggest a default which is already taken by another object.<br><br />
<br />
*'''FIX''' The hover button state (code = 8) wasnt being set since 5.25b for hover broadcasts<br><br><br />
<br />
=== 5.25c ===<br />
<br />
*'''NEW''' Routine Operation "GetBendPoints"<br> This reads bend points into a table for all links on a panel. The type of link can be specified using the _link_types label list and can be spatial links, tracks or pipes.<br> The table must have 4 columns: "From","To","X" and "Y".<br> Only locations with object labels will be included in the table. Any existing rows in the table are cleared.<br><br />
<br />
*'''NEW''' Routine operation "SetBendPoints"<br> This is like GetBendPoints except it creates bend points where a direct link exists between "from" and "To", at co-ordinate x,y on the panel.<br> All existing bend points (for the given link type) are deleted before the table is processed to create new bend points.<br><br />
<br />
*'''NEW''' Routine operation "SetViewFilterRows"<br> This enables the modeller to directly specify the rows that a table view will display. These are specified using a column listing the row numbers to display.<br> NOTE CHANGED "Use an empty column to reset the row filter" see 5.25f<br> This option uses the same mechanism as row filters, the two have not been tested together and may confuse the user.<br> You will need to force a repaint after changing the row filter.<br> If the table is having rows removed, the row filter must be removed first. Invalid row indicies will be removed when the row list is first applied but subsequent modification to the table could cause a crash if it does not have the rows that the modeller provided filter is pointing to.<br><br><br />
<br />
=== 5.25b ===<br />
<br />
*'''NOTE''' Optimisations in this version in addition to those in 5.25 enable a PL model to dynamically create 50000 portals in 10 seconds.<br><br />
<br />
*'''NOTE''' New file format, please save and reload your model to ensure it translates Ok.<br><br />
<br />
*'''NEW''' Model option (Engine) "DataSet2 Loads Object Labels By Index" and corresponding system attribute: s.DS2LoadObjectLabelByIndex<br> If set, these will cause object labels referenced in tables loaded by a dataset2 load to be loaded by index rather than attempting to match name with existing objects.<br> This is useful if objects have been renamed but their ordinal index remains the same (or the modeller has a mapping table they will use after the load).<br><br />
<br />
*'''NEW''' Portal click/drag/hover and panel drag broadcasts will now set an additional item attribute: "_location".<br> This is set to the Object Index of the owning portal of the panel, if any.<br> This can be useful in avoiding the need to have panels in the Panel Label List, using Object Labels (typically present for network nodes) instead. Its particularly useful now that portal click/drag broadcasts can be sent to parents.<br><br />
<br />
*'''NEW''' Portal option "Check Parents For Broadcast" This enables portal click/drag/hover broadcasts to be handled by its parent. Normally they are only handled by handlers within the portal involved.<br> With this option enabled, PL will look for a handler using a scoped search, progressively working up the hierarchy. It starts by looking within the portal itself but if that doesnt contain a broadcast listener, it will look one level up in the hierarchy, and so on.<br> This enables the handler to be in a subsystem outside a network map panel, as well as in a "handler" portal on the same panel as the network.<br> The new "_location" attribute that these broadcasts set is useful for determining the portal where the interaction actually occured.<br><br />
<br />
*'''NEW''' System attribute s.UseLocale<br> This enables a model to turn on/off the Support Locale For Strings end user option. This is useful when a model is doing a lot of internal processing where user labels are not involved (eg: creating objects).<br> A change applies immediately.<br><br />
<br />
*'''FIX''' The window title in edit mode was being incorrectly set, resulting in "&lt;unsaved&gt;" appearing at inappropriate times. This has been an issue for a while.<br><br />
<br />
*'''FIX''' Prevent editing of attribute's scope whilst the model is paused and the attribute is being viewed using the debug option.<br><br />
<br />
*'''FIX''' Crash when showing system attribute debug list when an item was not present<br><br />
<br />
*'''FIX''' If a model has a model error when loaded and that model had the "defer display" option on, the option will be turned off if model options are edited to turn the "defer display" option off, enabling the model to be viewed and debugged.<br><br />
<br />
*'''FIX''' Position of module popup window now matches cursor<br><br />
<br />
*'''SPEED''' Sped up sorting of Model Object and other system label lists when displaying 10000s+ object labels<br><br />
<br />
*'''SPEED''' Sped up dynamic creation of portals by precaching/precalculating the transfer of user data columns in the creation table to the matching portal attributes of the created portal.<br> Also a design bug was fixed where any matching columns which didn't match a created portal's attributes could potentially match an attribute of any of the owning portals up the hierarchy. This would leave that attribute overwritten by the attributes of the last portal created in the destination portal within it.<br><br />
<br />
*'''SPEED''' Sped up dynamic creation of portals by using fast lookup structures during the creation for existing object names and model object list members.<br><br />
<br />
*'''SPEED''' Sped up treeview generation (use std::map to speed up node&lt;-&gt;tree node lookups)<br><br />
<br />
*'''SPEED''' Cleaned up dynamic panel so rarely used features class mapping and panel-scoped classes are not alocated managers unless they are required.<br><br />
<br />
*'''SPEED''' Rewrote the way objects are saved and referenced in the MDL file (save objects reference using ordinal index instead of name) Previous versions searched to determine the ordinal, its now generated and stored as part of a save. This will speed up saves as well as loads.<br><br />
<br />
=== 5.25 ===<br />
<br />
*'''NEW''' Implemented drawing for &gt; 3 roads on a track section<br><br />
<br />
*'''CHANGE''' Relative time formats no longer display intervals as years or months. Given that a month or year needs an absolute date to make sense, having an interval assume a 30 day month or 360 day year was an approximation taht is no longer needed given PL's support for calendar dates.<br> The largest a time interval will be displayed as is now in weeks.<br><br />
<br />
*'''CHANGE''' When PL is switched to calendar time mode for a new model the initial date reference will be 1-jan-2007.<br> This year was chosen as its the closest year to now which starts on a Monday, which is also day-of-week 0.<br> This will only affect new models as all existing models will load with their saved configuration.<br><br />
<br />
*'''CHANGE''' The way a column is looked up by the table ColumnIndex and MatchedCell reference types has been made more consistent.<br> It now works as follows:<br> If the column specifier is a label, column label or text string (eg: a string constant like "test" or result of a string function) then the table is searched for a column with a matching name starting from the first column. No column index cache is used.<br> This makes it easier to use ColumnIndex or MatchedCell() with tables which have their columns rearranged during a run.<br> eg:<br><br />
<br />
t.mytable.ColumnIndex("mycolumn") or t.mytable.ColumnIndex(c.mycolumn)<br> are now both useable.<br> This may be useful where a table is being recreated by a dataset load.<br> In previous versions:<br> - Using a column label would not work for column-rearranged tables.<br> eg: t.mytable.ColumnIndex(c.mycolumn) would give the index of the column at run start, not where it had moved to.<br> - Using a text string would not work at all.<br><br> This forced a modeller to create a label list for finding columns by name in a table with dynamically arranged columns.<br> NOTE 1:<br> If a table's columns are being rearranged, you cannot use c.columnname with normal Cell and Column references.<br> This is because column references are validated and cached at the start of the run for performance on the more common table operations.<br> NOTE 2:<br> A column reference will not be useful if the column does not exist at the time the model is started as PL will still try to verify/cache it. In this case, use a label list or string to name the column.<br> NOTE 3:<br> If you are creating a table with many columns, you may be better off storing column indicies in portal attributes (or another table) rather than forcing the platform to search for them on every reference, using ColumnIndex() or MatchedCell()<br><br />
<br />
*'''SPEED''' Sped up the copying of portals when creating them dynamically.<br> This was achieved in 2 ways:<br />
**If the modeller does not provide a name for the new object, PL uses a faster method to guess a name which wont be already in use (and hence need searching)<br />
**When assigning an object label to a newly copied object, PL will now use the object's name as a starting point (assuming that is already unique). Previously it used the object name of the original object as the starting point, requiring a lot of searching when dealing with many portals.<br> For optimal performance of copies:<br><br />
**dont have a number after the name of the ORIGINAL object which is being copied<br />
**more importantly, try avoid any existing object labels with the name of the portal which will be copied many times followed by a number.<br> eg: newname1 newname2 newname3<br> By avoiding name conflicts for the object and object-label name of the copied objects, it will speed up the copies as it will avoid PL having to search for unique object/object label names.<br><br />
<br />
*'''FIX''' Models saved with bad object references due to editing flows through a viewport will now load though such flows may be a mess.<br><br />
<br />
*'''FIX''' Can no longer add / modify flows in a viewport; the flow editor is only designed for editing off the main panel.<br> However interaction editing in a viewport should now work properly.<br><br />
<br />
*'''FIX''' Improper validation would cause a fault for some table routine operations if the table reference was bad (eg: out of range column).<br><br />
*'''FIX '''Fixed a very obscure bug that could occur when object references<br> were saved (eg: additional portal entry/exit links)<br><br><br />
<br />
=== 5.24r ===<br />
<br />
*'''NEW''' System attribute display popup. This is available from both the run stop/breakpoint dialog and also as the "SYSTEM" option on the item click popup menu.<br><br />
<br />
*'''FIX''' Track drawing / colours. Removed line styles<br><br><br />
<br />
=== 5.24q ===<br />
<br />
*'''NEW''' Routine operations "Convolve" and "Normalise" are useful when working with columns of statistical probabilities.<br> Normalise rescales a column so it adds to 1<br> Convolve multplies and sums two columns against each other, putting the result into another column. All columns must have the same # of rows.<br><br />
<br />
*'''NEW''' Time formats "D HH:MM" and "D 0H:MM" (they dont show weeks etc)<br><br />
<br />
*'''FIX''' Viewport of an autosized panel on an autosized panel now works properly<br><br><br><br />
<br />
=== 5.24p ===<br />
<br />
*'''CHANGE''' Dispatcher Any Orientation mode now animates items along baseline regardless of their height, making it easier to work with different icon heights. Right to left orientation now works properly<br><br />
<br />
*'''NEW''' Portal option "Hide Name" acts as if the name started with an underscore and hides the name.<br><br />
<br />
*'''NEW''' Portal option "Dont Animate To Exit" prevents flow items from animating to the portal exit position. This can be useful in flow based network models.<br> Note that in track/spatial link models the item already doean't animate to the exit<br><br />
<br />
*'''FIX''' Tables views for a table will automatically have any filters reapplied when the inbuilt sort UI is used to sort them.<br><br><br />
<br />
=== 5.24o ===<br />
<br />
*'''FIX''' The new time format in 5.24n was not properly maintaining dates between run stop/start (date bit wasn't set for that mode)<br><br />
<br />
*'''FIX''' bumped file version (should have in 5.24n)<br><br><br />
<br />
=== 5.24n ===<br />
<br />
*'''NEW''' Dispatcher has a new "Any Orientation" direction mode.<br> In this mode the dispatcher is drawn between its position and its exit (like a multiserver road) and items will queue in a neat head-to-tail configuration regardless of their width and the orientation.<br> The item class options "Rotate" and "Flip Icons" should be turned on for best effect.<br> [previous note about centering removed 5.24p]<br><br />
<br />
*'''NEW''' Calendar time format: YYYY-MM-DD HHMMSS<br><br />
<br />
*'''CHANGE''' Resizing a panel with dynamic resizing enabled will also resize the contents of any viewport which is being stretched/shrunk due to anchoring as long as the panel in the viewport also has dynamic resize enabled.<br><br />
<br />
*'''CHANGE''' YYYY-MM-DD HH:MM:SS format can import times without the&nbsp;:SS part<br><br />
<br />
*'''FIX''' Fixed a string-buffer leak that occured when table data import had had a value error on importing data into a table. This would report a systemerror 1167 on exit of the platform.<br><br />
<br />
*'''FIX''' Track road count now working properly<br><br />
<br />
*'''FIX''' Validation for bad references in SetViewProperty<br><br />
<br />
=== 5.24m ===<br />
<br />
*'''NEW''' Routine operation "ResetLoopDelayTime" (Route)<br> This resets the item's loop entry time so PL will think the item just entered when it attempts to leave. This enables an item to spend some time at a location without triggering a loop delay. Note that setting this changes the item's LoopEntryDelayStart time but does not affect any existing loop entry delay, which will complete normally unless the item leaves and cancels it.<br><br />
<br />
*'''NEW''' Routine operation "CancelLoopEntryDelay" (Route)<br> This cancels any loop entry delay active for the item. Any needed loop exit delay will still be performed when the item is abie to get onto an outgoing section.<br><br />
<br />
*'''NEW''' Track control column now supported for all 6 possible track roads<br><br />
<br />
*'''NEW''' Application save dialog has new checkbox to enable creating a callable DLL. This option is only available to Open PBA license key users.<br><br />
<br />
*'''FIX''' s.ItemRouteSectionID now returns 0 instead of stopping run for cases where the route step is beyond the end of the route or there is no route<br><br />
<br />
*'''FIX''' ViewPorts now support anchors on both sides for stretching horizontally or vertically<br><br />
<br />
*'''FIX''' Removed ability to add links/tracks from hierarchy view, these are for the object context menu.<br><br />
<br />
*'''FIX''' Module configuration panel editing now works again (was broken in 5.24k)<br><br />
<br />
*'''FIX''' fix leak / triple track issues introduced in 5.24k<br><br />
<br />
=== 5.24l ===<br />
<br />
*'''NEW''' Set "wait" cursor while exporting table data to the clipboard<br><br />
<br />
*'''SPEED''' Have sped up the creation and lookup of labels in large label lists. This was achieved by replacing linear searches with lookups using an associative map for th enames and a binary lookup for the indexes.<br> For this to work, the platform requires that labels are internally stored in index order and will verify this for older models loaded.<br><br />
<br />
*'''SPEED''' Improved sort time for large multi column lists<br><br />
<br />
*'''FIX''' If a message occurred whilst PL was initialising (eg: informing about track table missing) and there was a paint object with a control attribute on the current panel, other error messages would appear.<br><br />
<br />
*'''FIX''' Deleting portals was broken in 5.24k, could not delete from the menu<br><br />
<br />
*'''FIX''' Section road filter is now properly reset in case where a loop hold is in effect.<br> Also added a check for a missed road filter / lookahead combination<br><br />
<br />
*'''CHANGE''' SectionRoadAvail has been changed, notes below updated.<br> It no longer checks other roads for the presence of the test train<br><br><br><br />
<br />
=== 5.24k ===<br />
<br />
*'''NEW''' Added ability to Move a portal to a different owner.<br><br />
<br />
*'''NEW''' Can delete portals from the hierarchy/sidebar<br><br />
<br />
*'''TRACK''' ENHANCEMENTS:<br><br />
<br />
*'''NEW''' Basic support for new 4,5,6 track road modes. These extra roads are not supported for restriction control yet and animate over 3 visible lines.<br><br />
<br />
*'''NEW''' Routine operation "SetRoadCheckFilter"<br> This enables track models to control which road(s) on a track section a train can attempt to use.<br> This takes a cell reference which points to the first road # to check (from 1..number of roads available for the section). Planimate will work down the table column until it reaches either the last row or a 0 which terminates the testing.<br> This operation must be invoked to set the road filter just before a train tests the section: this occurs in 2 circumstanes:<br><br />
<blockquote><br />
*when checking a "next" section during track lookaheads<br />
*when flowing onto the next section (eg: from a capacity object) ie: the filter needs to be set whenever a train has the potential to test the section via any kind of lookahead. The section "forgets" the filter immediately after the test, by which time the train may have placed a hold on the road it wants. This operation does nothing during a "move" (the road would be already held and ready for the train).<br />
*<br><br />
</blockquote><br />
*'''NEW''' System attribute "ItemRouteSectionID"<br> For an item/train which is on a route, it will return the section object index that the train would take if it went through a portal exit.<br> Will return 0 if the section has no object index or if a viable section could not be found.<br> Note the section is not tested for availability.<br><br />
<br />
*'''NEW''' Routine operaion "HoldSectionRoad"<br> This enables a modeller to reserve a section for a train. It works in both lookahead and move and once the hold is set, any other attempt to set a hold will fail unless its the same train item.<br><br />
<br />
*'''NEW''' Routine operation "SectionRoadAvail". This returns nonzero if a given road in a section is available for a train to use.<br> It does not check if the train is already booked on another road. If the same train is already booked on the road, it returns 1.<br><br />
<br />
*'''REMOVE''' "SectionFillEnable" property which was used to help the auto route generator for track networks is no longer supported. Since Tracks no longer contain loops (they are now portals) they can be distinguished directly in the route specification.<br><br />
<br />
*'''CHANGE''' Track - the item's last section / last road attributes are now set during the track check lookahead, so a node can know the section/road the item would be coming off of whould the move be committed.<br><br><br />
<br />
*'''CHANGE''' Table View: If pasting or importing data into a table where the view has a filter enabled that is blocking all data from view, the filter is disabled<br><br />
<br />
*'''CHABGE''' The default table cell context menu behaviour for "Import From ClipboarD" has been changed to always send a broadcast after the paste, even if the view is empty.<br> This could occur either because no data was pasted or an active filter is filtering it all<br><br />
<br />
*'''CHANGE''' When paste insert/append or importing into a table view, if an after edit broadcast is selected and a filter is active, the broadcast will now be sent with from_row and to_row set to 0 to indicate you should validate all the rows.<br> This is because the paste could affect rows outside the fitered view and hence from_row/to_row cannot be relied upon as they denote rows within the view only.<br><br />
<br />
*'''CHANGE''' Rearranged portal/module menu so more common options between them<br><br />
<br />
*'''FIX''' Column list width was being retained by customised column views but not editable. Added an edit option for it in customised column views.<br><br />
<br />
*'''FIX''' Fixed the comment field height in the routine editor<br><br />
<br />
=== 5.24j ===<br />
<br />
*'''[new''' file version, new DLL API]<br><br />
<br />
*'''NEW''' Routine operation "RealTimeCallBack"<br> This enables a modeller to schedule a "_Real Time Tick" broadcast to occur after a REAL time intervall has elapsed. The time is specified in milliseconds.<br> This replaces the "Realtime" broadcast option and system attribute (removed in 5.24h). This approach gives more control to the modeller and reduces the chance of broadcast "storms".<br> Use as follows:<br> When you want to start receiving a regular broadcast, use this operation to schedule the first one.<br> Upon receiving the broadcast, you can schedule the next one within the handler thread for the broadcast until you no longer want the broadcast.<br><br><br />
<br />
=== 5.24i ===<br />
<br />
*'''NEW''' Table view option "Send Single Block BC For Fill/Index"<br> Selecting this causes PL to send only a single "block edit" broadcast after a fill down or across instead of a cell-by-cell broadcast.<br> This can greatly improve performance when many rows are being filled.<br><br />
<br />
=== 5.24h ===<br />
<br />
*'''CHANGE''' The clock no longer shown by default when PL opened.<br><br />
<br />
*'''REMOVE''' The "RealTime" broadcast capability where a broadcast could be set up to trigger at very short real time intervals has been removed. The old system attributes for controlling this will now give errors when the model is run.<br><br />
<br />
*'''FIX''' Behaviour of tree selectors when the right button is used to select an item.<br><br />
<br />
*'''FIX''' If a user started a run from a broadcast button and that initial broadcast item was animating and the user clicked to display the animation pause menu, an errant redraw could cause the platform to fault when the pause menu was dismissed, due to some message pumping that is performed after popup menus to work around a bug in Windows where the Async reported mouse button state gets out of sync with the actual buttons even though higher level events for mouse up have already occured.<br> In other words the workaround to a windows oddity was causing a redraw at a bad time.<br><br />
<br />
*'''FIX''' The "Format" option in the cell context menu has been removed when in "user" mode - - it contains options that end users should not be changing.<br><br />
<br />
*'''CLEAN''' Internal rewrite of how PL windows and controls (fields and buttons) are created and managed.<br> The new method reduces overheads and will enable multiple PL DLLs. (removed "superclassing" of standard Win32 controls; no longer need WndExtra bytes).<br><br />
<br />
*'''CLEAN''' Cleanup of FEC, broadcasting and main window handling code. Rewrote the way "high priority"/immediate events are handled<br><br />
<br />
*'''CLEAN''' Reorganisation of the build projects for PL<br><br />
<br />
=== 5.24g ===<br />
<br />
*'''FIX''' The new parentscope option was not working properly for broadcasts send whilst the engine is running<br><br />
<br />
=== 5.24f ===<br />
<br />
*'''FIX''' A 64 bit incompatibility in the treeview code, causing some option panels not to populate.<br><br />
<br />
*'''FIX''' The "Check Parents For Broadcast" option, implemented in 5.24 and used when converting view panels to dynamic, was missing a condition which caused it to lock up when looking for the broadcast listener.<br><br />
<br />
*'''FIX''' Portal options were not being cleared properly for newly created portals.<br> This also affected view panels converted into portals; these new portals can have silly options set. If you brought forward a model into any previous 5.24 version you should check portal options for any portals added since or any panels that converted to portals.<br> Copies of portals were not affected.<br><br />
<br />
=== 5.24e ===<br />
<br />
*'''[new''' version]<br><br />
<br />
*'''NEW''' The GetViewProperty and SetViewProperty routine operations have been enhanced.<br> They now take an extra parameter to select the view type. This enables positions and basic colours of the graphical views to be set as was possible for the table views.<br> You can use the new "_view_type" label list to select which type of view you want to find on the destination panel.<br> The new paramter defaults to "1" which corresponds to table view, this keeps older models working OK.<br><br />
<br />
=== 5.24d ===<br />
<br />
*'''[new''' model version]<br><br />
<br />
*'''NEW''' A separate title can be set for a panel, this is used as the title for popups.<br><br />
<br />
*'''NEW''' The DataSet1 configuration dialog (Data-&gt;Data Sets) has a new button to facilitate converting your model to use DataSet2.<br> This button will automate the process of determining all the data objects present for a given dataset1 configuration, creating _data_object labels for them (if they are not already) and listing the objects in a newly created table formatted to be a valid DataSet2 configuration table.<br> DEVELOPERS ARE ENCOURAGED to migrate away from DataSet1 as future versions of PL may not support it.<br><br />
<br />
*'''CHANGE''' The DataSet1 load/save options have been removed from the File menu in EDIT MODE, as dataset1 becomes obsolete.<br> They are still available for the end user menu bar so models which nee them can get to them in user mode.<br> Please ensure they are not visible if your model uses the standard end user menubar and only uses DataSet2.<br><br />
<br />
*'''FIX''' Fix treeview to also properly set text color<br><br />
<br />
*'''FIX''' Broadcast entry name only reset to broadcast name when a different broadcast is selected<br><br />
<br />
*'''FIX''' Added mechanism to set condition debug values to a clear state before every condition evaluation. This will clarify debug information in the condition dialog when clicking on a switch in pause mode<br><br />
<br />
*'''NOTE''' Internal code rework to enable PL to compile as a DLL which another program can load. This should not affect the regular PL EXEs but a few minor tweaks have been made to how things are managed internally.<br> Please report any new odd behaviour<br><br />
<br />
=== 5.24c ===<br />
<br />
*'''NEW''' Implemented paint option editing in the new editor as well as anchor option editing. These work for multiple selections<br><br />
<br />
*'''NEW''' Added an interface so most "list picker" style option edits are now performed with the new editor. These edits will show under the "Context Option" category in the editor and do not support group editing as support for this needs to be implemented case by case.<br><br />
<br />
*'''NEW''' Tree selector keeps selection visible even when it doesnt have focus<br><br />
<br />
*'''NEW''' New option dialog - bold values and values which have changed are underlined<br><br />
<br />
=== 5.24b ===<br />
<br />
*'''NEW''' Added ability to edit multiple object options to the new editing interface. Currently this is useful for portal options.<br><br />
<br />
*'''FIX''' Fix wrong panel issue when editing panel options via hierarchy<br><br />
<br />
*'''FIX''' Name of view's data owner when viewing in the label list references<br><br><br />
<br />
=== 5.24a ===<br />
<br />
*'''FIX''' Portal options editing crash introduced after I simplified some handing in the new editor<br><br />
<br />
=== 5.24 ===<br />
<br />
*'''NOTE:''' <br><br />
<br />
*'''This''' version has undergone major internal rewrite and cleanup with an objective<br />
<br />
*'''of''' providing for better editing development, cleaning up the codebase,<br />
<br />
*'''speeding''' up management of very large models and keeping the implementation<br />
<br />
*'''directed''' at how PL is currently used.<br><br />
<br />
*'''Most''' notably, view panels and application panels have been removed.<br><br />
<br />
*'''Models''' saved with this version are not backward compatible.<br><br />
<br />
*'''NEW''' Beginning to introduce a new editor for options and settings. Initially this is enabled just for INI, Panel, Model and portal object options.<br> Eventually this interface will be used wherever the 2 column "pick" interface was used, as well as for non-boolean options and it will enable properties of selection groups to be edited in parallel; this release is still in its early days.<br><br><br />
<br />
*'''NEW''' View Panels converted into Dynamic Panels<br> For any loaded model, View Panels will be converted into "dynamic" panels, (panels owned by a portal). Most functionality will be retained but there may be some graphical tidy up necessary.<br> The owning portals will be set to hide in run mode by prefixing their name with an underscore. Panel Label List IDs will be retained as will be viewport and "Change Panel" destinations.<br> New options enable "out of scope" views to be used with dynamic panels, so no functionality should be lost.<br><br />
<br />
*'''NEW''' Scope Option for attribute/table/graphical views: The view's context menu contains a new "Stay With Original Data" option.<br> This option makes it possible for a view on a dynamic panel to display data which is not "in scope" even though a different data with the same name is in scope.<br> The option makes the view "stick" to the original data object it is associated with when the view is copied and another data object would be in scope.<br> Note that in the case where both the view and its associated data object are copied, then the copy view will be scoped to the copy data regardless of this option.<br> This option will be automatically selected for views that were in view panels.<br><br />
<br />
*'''NEW''' Views from any panel can be added to a dynamic panel via the background menu. Out of Scope Views will have the "Stay With Origina Data" scope option selected automatically.<br> The panel selector now gives an indication of how many attributes/tables each panel in the hierarchy contains.<br><br />
<br />
*'''NEW''' Paint broadcast button option "Check Parents For BroadcasT"<br> This option causes scoped buttons on dynamic panels to behave like buttons on view panels. If the panel doesn't contain a broadcast handler, the parent panel is chacked, then the grandparent etc.<br> This option is automatically enabled for scoped broadcast buttons on view panels which are converted to dynamic panels in order that the buttons continue to function, otherwise they would look for a handler on themselves only (since they are now a dynamic panel) and result in an error.<br><br />
<br />
*'''CHANGE''' Application panels ("meta panels") are now just normal portal subsystems. Capabilities only available in application panels are now available in all panels.<br><br />
<br />
*'''FIX''' Table cell edit now will use ellipses (...) in cases where the text is longer than the field and its a single line cell. Its not supported for multiline as multiline text isnt drawn properly.<br><br />
<br />
*'''FIX''' Re-ordered panel code so popups are hidden at run engine restart before attributes caches are cleared.<br> This was to prevent an error when a run restart occured whilst a popup with a paint button with states controlled by a portal attribute in the scope of the popup.<br><br><br />
<br />
*'''FIX''' PL was losing track of its DB file if "Save As" was used to save the model into a different directory. This problem can be worked around in older PL versions by reloading the model after the save-as.<br><br />
<br />
*'''FIX''' External file label list mechanism, used to enable files to be provided by the end user at runtime to an application, now supports JPG file types being specified.<br><br />
<br />
*'''REMOVE''' Removed the icons in the tree view since they are all dynamic panels now<br><br />
*'''REMOVE '''Lots of internal code for editing and manipulating view panels, just<br> left minimum needed to load and convert them to dynamic panels.<br><br />
<br />
<br><br />
<br />
=== 5.23d ===<br />
<br />
*'''NEW''' Enhancement to the background drag broadcast.<br> If instead of dragging, the user clicks, a drag broadcast is sent with _command = 0.<br> This enables handling of clicks (select and context) as well as drags on the background.<br> _dx and _dy are set to the mouse co-ordinate clicked, in iFlow co-ordinate space (0,0) at bottom left in panel space co-ordinates<br><br />
<br />
*'''CHANGE''' background drag broadcast<br> The drag-begin broadcast (code 1) used to send _dx and _dy as 0 Now they are set to the mouse co-ordinate in iFlow co-ordinates (0,0) at bottom left.<br><br><br />
<br />
*'''NEW''' Enhancement to DLL code to support returning text.<br> The existing DLL API supports PL_DLLPARAM_STRING which can be used to pass a single label to/from a DLL.<br> This would also work for passing a text formated attribute.<br> Its been enhanced so if the destination of a returned DLL string is not associated with a label list, then it will attempt to assign it as text (just as if the $= assignment was made with that reference).<br><br />
<br />
*'''NEW''' New string system attributes have been added to retrieve information about the currently logged in user<br> These are mainly intended for use in corporate environments where users log in using a domain and LDAP is in use.<br> More background and a useful diagram here: http://technet.microsoft.com/en-us/library/cc977992<br> On non domain environments (ie: standalone PC) these will all return empty strings except s.UserNameNTCompatible<br><br> [1] s.UserName<br> Retrieves the name of the user, eg: "John Smith" This name is not necessarily unique. This only works in a domain environment.<br><br> [2] s.UserNameQualified<br> Retrieves a comma delimited list of attributes and values that uniquely define the user.<br> eg: "CN=John Smith, OU=sales, DC=somewhere, DC=com"<br><br> [3] s.UserNameCanonical<br> Retrieves the user identifier in an alternative format known as a canonical name.<br> eg: "somewhere.com/sales/jsmith"<br><br> [4] s.UserNameNTCompatible<br>Retrieves a users name in an older Win NT "SAM" compatible format<br>eg:<br>"IDSTAFF\Rick" (on a domain IDSTAFF is the domain controller)<br>"LISTER\Rick" (local account on a non domain PC called LISTER)<br> This is a flat way of identifying users which has been superceeded in LDAP environments which are hierarchic.<br />
<br />
<br><br />
<br />
*'''CHANGE''' Popup close broadcast is now sent just before closing the popup window so its final co-ords should be available. It was previously being send just after the popup was deallocated.<br><br />
<br />
*'''FIX''' Fix validation of SetFormat routine operation to prevent invalid format codes being assigned (which would trigger lower level system errors)<br><br />
<br />
*'''FIX''' Attempting to set a -ve scroll on a table view now reports an error instead of making the table view go strange<br><br />
<br />
*'''FIX''' "Free Text Entry" is now alias text to "Text" in the _value_formats label list. This enables previous datasets which referenced the mode by name to still load properly<br><br />
<br />
*'''FIX''' Block Move references (now cell references) were not being recognised by block move operation<br><br />
<br />
=== 5.23c ===<br />
<br />
*'''CHANGE''' Free Text is now known just as "Text" Sometimes "strings" will be used in documentation; that means text also.<br><br />
<br />
*'''NEW''' Documentation on editing references has been added to the wiki http://wiki.planimate.com/Expressions<br> This documents the various types of references and they way they can be used in expressions.<br><br />
<br />
*'''NEW''' 15 new text string functions have been added.<br> These are implemented as part of the "expression" mechanism in Planimate rather than as routine operations. This enables them to be combined in useful ways which would be awkward if they were routine operations since they are limited to one per routine line.<br> The new operations are:<br> strlen(), strleft(), strmid(), strright(), strreverse(), strupper(), strlower(), strcompare(), strfind(), strclean(), strinsert(), strdelete(), strreplace(), strchar(), strasc()<br> and are documented on the wiki: http://wiki.planimate.com/Functions<br> Note that strsub introduced in 5.23b has been replaced by strleft(), strmid() and strright() which have far clearer intent.<br><br />
<br />
*'''NEW''' Table column option to confirm adding new labels. This is useful when labels are automatically created if text typed in fields is not an existing label.<br><br />
<br />
*'''NEW''' Added an expression quick-reference to the Help menu. Note a function browser (like the routine operation browser) is also planned.<br><br />
<br />
*'''NEW''' Further enhancements to text assign ($=)<br> If the destination is not set up for text, then any test assigned to it is interpreted as the format of the attribute/cell.<br> This is useful when you want to set an attribute to a time or other formatted value in code.<br> eg: p.attribute $= "12:00"<br><br />
<br />
*'''NEW''' Dataset2 can now support saving text formatted attributes.<br><br />
<br />
*'''REMOVE''' BLOCK mode references have been removed.<br> In cases where they were used in a block move, a cell reference is substituted instead to specify the top left cell. Older models will be updated.<br> Saving of a block from a table to a file is no longer supported. If such a reference was being used, a warning about it is given when the model loads.<br><br />
<br />
*'''REMOVE''' PDF and CDF references are now just COLUMN references.<br><br />
<br />
*'''FIX''' "Open With Combo List" now does not close the combo if the user types a label not in the field<br><br><br />
<br />
=== 5.23b ===<br />
<br />
*'''NEW''' "Edit Order" is now available for Attribute views<br><br />
<br />
*'''NEW''' Text -experimental string functions:<br> substring(string,start,length) Enables parts of a string to be extracted in a flexible way.<br> reverse(string) This reverses the text of a string<br> More on these later, still to be finalised.<br><br />
<br />
*'''FIX''' Free text views update when source is changed by another view<br><br />
<br />
*'''FIX''' Text attribute views work<br><br />
<br />
*'''CHANGE''' Way expression functions are saved/loaded has been changed<br><br />
<br />
*'''CHANGE''' Internal rework of attribute reference editing for upcoming expansion<br><br />
<br />
*'''CHANGE''' Internal code cleanup (source #include tree cleanup)<br><br />
<br />
=== 5.23a ===<br />
<br />
*'''This''' is a first, largely untested release with string support added to<br />
<br />
*'''attributes.''' As a lot has been reworked, please proceed with caution.<br><br />
<br />
*'''Please''' report any strange behaviour or messages.<br><br />
<br />
*'''NEW''' Portal and Routine attributes support "Free Text", meaning attributes can store strings without needing to use a label list.<br> This is progress in improving PL's string handling capabilities and in itself should help reduce need for temporary label lists when preparing a string for eg: a filename and in the future ODBC.<br> The attribute editor and Attribute Views support free text but only single lines at this time, although the internal representation will work up to 16KB of text length.<br> To assign to text attributes (and free text cells too) use the new $= operation.<br><br />
<br />
*'''NEW''' A new operation for assigning text has been added:"$= (SetText)"<br> This operation enables assignment to a text attribute or table cell, it is not useful for labels since no numerics are involved (use the existing FormatIntoLabel for these)<br> This operations supports concatenation of references to build up strings, including numeric and label attributes and cells (which will be interpreted as their formatted text).<br> The new '&amp;' operation (not to be confused with '&amp;&amp;' enables multiple text to be appended together. Quoted strings eg "Hello" are supported. Single quoted characters are as well for example '"' inserts a double quote.<br> So if you have<br><br />
<br />
p.att1 = 1,234&nbsp;&nbsp;&nbsp; (values with comma)<br>p.att2 = "test" (label)<br>p.att3 = "test2" (free text)<br> and you use:<br> p.att4 $= p.att1 &amp; " blah " &amp; p.att2 &amp; ' ' &amp; '"' &amp; p.att3 &amp; '"'<br> and will get the text:<br> 1,234 blah test "test2"<br><br />
<br />
*'''NEW''' Attribute list now shows the Units of the attributes<br><br />
<br />
*'''CHANGE''' A lot of the code in PL where text/values/labels are formatted for presentation (including routine code, reference formatting, expression parser, file reading/saving) has been reworked to avoid using "stack based" temporary strings. Instead a string cache is used.<br> This is intended to reduce stack overflow problems in recursive and deep routines where text processing is involved.<br> A 'system error' has been added when PL closes which reports any buffer mismanagement. Please report if this error ever appears.<br><br />
<br />
=== 5.23 ===<br />
<br />
*'''NEW''' Added a "Break" button in dialogs during edit mode which will throw a breakpoint<br><br />
<br />
*'''CHANGE''' Default comparison for an IF is now "att&nbsp;!= 0" instead of "att == 1"<br><br />
<br />
*'''CHANGE''' Enabled PL's standard dialogs and Dialog() routine operation dialogs to use modern style controls (buttons, checkboxes, radio buttons, fields)<br> Note some dialogs may have overlap issues to cleanup as the modern controls are somewhat chunkier<br><br />
<br />
*'''CHANGE''' Have reworked dialogs so the button order corresponds to the way Windows arranges buttons (OK/Cancel, Yes/No/Cancel Save/Discard/Cancel etc)<br> TAB order should be as before. Please report any dialog which is inconsistent with this.<br><br />
<br />
*'''CHANGE''' Route dialog now has a close button instead of the pointless ok/cancel<br><br />
*'''FIX '''Multi-line table rows did not display the last row due to offset in the<br> font calculations. This was noticeable for 2 and 3 line table cells.<br><br><br />
<br />
<br><br />
<br />
=== 5.22r ===<br />
<br />
*'''FIX''' 5.22q had broken creation of standalone apps due to missing updating a call to a callback function. The standalone loader was being left with nothing to do.<br><br />
<br />
=== 5.22q ===<br />
<br />
*'''NEW''' Added an "Over" button in the breakpoint dialog; the routine engine now supports stepping over blocks of code/subroutine calls<br><br />
<br />
*'''CHANGE''' When an iterate or while is interrupted, PL will open a breakpoint dialog instead of the model error dialog. This enables the run to be inspected and continued.<br> If you want to stop the run, select the "terminate run" check box to force it to break out.<br><br />
<br />
*'''NEW''' Engine option "Globally Disable Panel Auto-Resize"<br> This prevents the propagation of resize updates AND broadcasts for all panels which have the "Auto Fit Panel To Window" option on and make use of PL repositioning objects dynamically using the anchor settings.<br> This makes it easier to disable this behaviour when panel sizes and layouts are being created/updated.<br> Don't toggle this option whilst on a panel which has the "Auto Fit Panel To Window" option on, having the option change whilst a potentially dynamic panel is open has not been considered.<br><br />
<br />
*'''CHANGE''' Reworked file handling during load/save model.<br> Implement a read only test:<br />
<blockquote>- If a loaded model is read only PL will give a<br>warning but continue loading<br>- If a saved model is read only, PL will give a warning<br>and put up file dialog to enable selection of another file<br> This is useful where a source code management system is being used to manage multiple modellers editing MDL files. </blockquote><br />
*'''FIX''' A leak in DLL calls where 'table direct' parameters are being passed (where the DLL directly interacts with PL's table memory).<br> Every call was leaking (sizeof(ptr) * #-of-columns)) bytes<br><br />
<br />
*'''FIX''' The model hierarchy view could be selected whilst there was a combo box open in a table filter/cell view, changing panel would crash PL<br><br />
<br />
*'''FIX''' When a table filter caused no rows to be displayed, the row edit menu contained inappropriate options selected which could cause a crash if the actual table contained no data.<br><br />
<br />
*'''FIX''' Fixed cancelling when prompted for the name of an item to add to a DB<br><br />
<br />
*'''FIX''' jump To Block Start (shortcut [) in the routine editor now works at an ELSE statement<br><br />
<br />
*'''FIX''' Adding a table to the Data Object list updates the editor<br><br />
<br />
=== 5.22p ===<br />
<br />
*'''NEW''' Routine operation CreateLabelAlias<br> This enables an alias to be added to a specified index (which must be a normal label list). The routine returns a status code:<br> 0: Alias was assigned (or already existed for that label) 1: Alias failed (it is already another label or an alias to another label)<br><br />
<br />
*'''NEW''' Command line execute option "Keep Child Process At Front" PL will bring the child processes main window to the front if PL gets focus whilst waiting for the child process to complete.<br> TIP:If possible, prevent the user minimising the child processes window<br><br />
<br />
*'''FIX''' SetViewportScroll() now works properly if the viewport has hidden scrollbars. Previously it would not update the view.<br><br />
<br />
*'''FIX''' "Wait For Process To Complete" command line execute would cause a fault if the menubar was hidden<br><br />
<br />
*'''FIX''' Enable setting the "Application Name" when building an Unkeyed Application. This field affects what is seen in the About box<br><br><br />
<br />
=== 5.22o ===<br />
<br />
*'''FIX''' Typo in column option<br><br />
<br />
*'''NEW''' Implement inline multiline free text cell edit in tables to enable this format a column for free text, set the number of row lines to &gt; 1 and enable the "edit labels with field" option.<br> Instead of popping up a window to edit free text, the text will be edited in-place<br> NOTE: no scrollbar is shown for the field as clicking it closes the edit (since it loses focus) and I have't found a way around it.<br><br />
<br />
*'''NEW''' Experimental options "Anchor Left" and "Anchor Top" These options were implicit when "Anchor Right" and "Anchor Bottom" were off respectively. They still are.<br> However, if both Anchor Left and Anchor Right are selected (for the x axis) or Anchor Top and Anchor Bottom (for the y axis) then it indicates that you want to anchor both sides of the object so they stay the same relative distance from the panel border when the panel is resized.<br> This is achieved by resizing the object as the poanel resizes.<br> This is useful in cases where a single object (eg: a map or table) should stretch to fit the available space (width, height, or both)<br><br />
<br />
Modeller code will be&nbsp; required to support multiple objects sharing<br>a space since no attempt is made to share/apportion space between<br>multiple objects.<br> WARNING: Automatic resizing of objects works by maintaining the distance between the edges and the margins. If the panel is shrunk so much that the object becomes zero width, it cant shrink anymore and the object will lose its positioning even when the panel is later grown again.<br> So ensure you set the minimum panel width/height to reasonable values which will prevent the panel being shrunk so much as to squeeze the life out of your panel objects.<br> Also reminder that inheriting off a panel with anchored objects is a bad idea since the objects on the inherited panels will lose their positions relative to that panel's borders when the parent panel repositions the objects on it.<br><br><br />
<br />
*<br><br />
<br />
'''NEW''' Command line execution in change object can now build a command line out of multiple labels and literal text. This is enabled by selecting the "Command:Set By Expression" option.<br> The same processor as used for SQL is used, so a command line like:<br> "NOTEPAD " &amp; '"' &amp; p.attribute &amp; '"'<br> will become (if p.attribute is label: test.txt<br> NOTEPAD "test.txt"<br> p.xxxxx can be used to substitute a portal attribute and<br />
<br />
i.xxxx&nbsp; can be used for an item attribute<br> A future version will enable more expression terms (eg: call references) and popup completions. The existing expression editor cannot be used directly as its set up for numerical expressions, not textual content.<br><br><br />
<br />
*'''CHANGE''' Removed end-ellipses from multiline text fields as it messed up text display when more lines existed than could be fit into the table cell.<br> (DT_END_ELLIPSES option on DrawText() causes this oddity. My bad for trusting MS to render something instead of doing it myself)<br><br><br />
<br />
=== 5.22n ===<br />
<br />
*'''FIX''' Hide Repeated Values option in tables was broke<br><br />
<br />
*'''FIX''' ResetBillboardTable option removed<br><br />
<br />
*'''FIX''' Fix customise ICO feature; the ID allocation had a bug that upset Win64<br><br />
<br />
=== 5.22m ===<br />
<br />
*'''NEW''' Change-&gt;File Execute Program now has a new option: "Wait For Process To Complete".<br> This will cause Planimate to wait until the executed process closes. PL will be non-responsive but will repaint and be repositionable while waiting.<br><br><br />
<br />
*'''NEW''' Installed a new random number generator. The new generator generates 32 bit values instead of the old 15 bit one (which had only 32768 possible values on a uniform value).<br> The way the new generator is initialised has also been improved to use a statistically better initialising generator.<br> For backward compatibiltiy, the original generator is still present and will be enabled when loading older models. This is controlled by the Engine Option "Use Old Random Number Generator".<br> With this option on, a model should exhibit the same random number draws as in previous PL versions. If backward compatibility of random numbers is not required, this option should be turned off.<br> Note that whilst models will experience the same random sequence with the old generator selected, the preview plots between current and previous PL versions will differ. This is due to the way the preview generator is seeded.<br> (During editing generators are re-initialised when the distribution dialog is opened. This does not affect runs as the generators are reseeded at run start).<br><br />
<br />
*'''CHANGE''' Enhanced File-&gt;Model properties to report on scoped label lists and their contents in the model.<br><br />
<br />
=== 5.22l ===<br />
<br />
*'''NEW''' The application compiler supports customisation of the compiled EXE. The Application icon (what you see in explorer) and the Window Icon (what you see when you alt-tab and in window corner) can be separately set.<br> The fields require windows format ICO files, not ICO libraries or DLLs.<br> A single ICO file may contains bitmaps at multiple resolutions and colour depths. These days 16 colour icons are obsolete but the different resolutions ensure the icon looks good in the different explorer views.<br> Typical resolutions include: 16x16,32x32,48x48<br><br />
<br />
Vista introduces huge&nbsp; 256x256 size icons. They are supported too.<br> For more info on creating ICOs for your app:<br> http://msdn.microsoft.com/en-us/library/aa511280.aspx<br> Note than when you select the application icon the window icon field is automatically set the same. You can subsequently set the window icon to something different if you so desire, otherwise leave it the same as the application ICO.<br />
<br />
<br><br />
<br />
*'''NEW''' The application compiler can have an alternative "base" Planimate EXE specified. This is useful if you want to compile both 32 and 64 bit versions of your application.<br> Be careful not to select a PL exe version which your model is not compatible with.<br> To use the default (running EXE) in the compilation, leave the field blank.<br> PL analyses the internal structure of the EXE you chose to compile your application with. If its a 64 bit version, the created file name has "_64" appended to it to assist in keeping track of 32 and 64 bit versions of the same application.<br><br />
<br />
*'''NEW''' Application compiler settings are now saved in the MDL file so next time you make an application, most of the settings are already set up.<br><br />
<br />
*'''NEW''' Application compiler no longer prompts to save the model before opening the compiler dialog.<br> Instead, if the model needs saving, it will be saved when you OK the configuration dialog. This is to ensure any configuration default changes in the dialog get saved (otherwise an annoying double-save would be needed). If the model is already saved and no changes are made in the fields, it wont need to be saved again.<br> If the model hasn't been saved yet (creating an application from a newly created model) then you will need to save it explicitly before invoking the application compiler.<br><br />
<br />
*'''NEW''' The application compiler now offers to open the folder containing a compiled EXE, once it has been created.<br><br />
<br />
*'''CHANGE''' Removed "Application Name" from end user model info. This is now one of the settings retained for the EXE maker.<br> Previous settings of Application Name are transferred to the defaults<br />
<br />
*'''--''' <br><br />
<br />
*'''CHANGE''' The no-mans-land area to the left of the column headings/filter headings is now background-coloured using the data area background colour instead of the column heading/filter background colours.<br><br />
<br />
=== 5.22k ===<br />
<br />
*'''FIX''' Merging classes/paths between models was causing the order of paths to be reversed since 5.22a.<br><br />
<br />
*'''FIX''' Dataset2 load change in J would cause exception if the dataset contained items that were not specified in the DS configuration table.<br><br />
<br />
=== 5.22j ===<br />
<br />
*'''NEW''' DATASET2 Enhancement&nbsp;: Include External Files<br> It is now possible to package files outside of PL into a dataset2 file.<br> This will facilitate inclusion of multiple images, databases and other content outside of the model into dataset2 files, with the content being compressed and encrypted.<br> To enable this, an optional extra column must be present in the dataset definition table: _ExternalFile This column specifies the path/filename to use and can be a label or free text.<br> For a row to reference an external file, the _DataSetComponent column must have a 0 value and the 0 value must not map to a data object, otherwise the data object will take preference.<br> The modeller is responsible for providing a filename both for saving the dataset (file is read) and loading the dataset (file is written). The modeller is responsible for:<br />
<blockquote><br />
*taking care not to overwrite user's files (DataSet2 will not prompt for overwrite)<br />
*proper use of absolute and relative paths (remember in an application, options exist enabling the user to navigate to a different default folder than the application).<br />
*Ensuring filenames provided are valid and writeable<br />
*Checking the return code and Database defintion table result code for any errors that could occur when dealing with external files and datasets<br />
</blockquote><br />
*'''NEW''' Added "Disable Filter" option to table columns. This prevents the user being able to filter using that column<br><br />
<br />
*'''FIX''' When used with free text, "Edit Labels With Field" option now also accepts text when the field is closed by clicking rather than pressing ENTER or TAB<br><br />
<br />
=== 5.22i ===<br />
<br />
*'''NEW''' The table column option "Edit Labels With Field" now works with Free Text formatted columns. This enables free text to be edited "in place" using a single line field.<br> Multiple lines and using ENTER/TAB for text within the field is not supported, ENTER/TAB act as for other cells.<br> This is useful where single lines of arbitrary text (that PL will not be processing) need to be stored in a table cell.<br><br />
<br />
*'''CHANGE''' Reworked the broadcast receiver code to optimise it<br><br />
<br />
*'''CHANGE''' Added a forced unload of model loaded DLLs when switching to flow/interact or paint modes.<br> This is useful when developing DLLs and the engine option "Keep DLLs Loaded On Engine Restarts" is on. Without this, the only way to unload DLLs was to restart PL.<br><br><br />
<br />
*'''FIX''' Broadcasts sent from an event on a view panel were not being properly received by entries on the "closest" dynamic panel. Reworked things so the events are received as expected.<br><br />
<br />
*'''FIX''' "Dont Initialise Run" option removal in 5.22g was failing when reporting the location of a button with the option on upon load<br><br />
<br />
*'''FIX''' Panel close broadcast was not being sent with the proper internal flags for popup panels; it was OK for the main window Panel Close broadcast.<br> This caused side effects of the panel close broadcast (eg: sending another broadcast that was deferred until later on the FEC) not to be properly cleared.<br><br />
<br />
*'''FIX''' When a popup window was closed by the user (instead of the platform) a Popup Close (not Panel Close) broadcast was not being sent.<br> Consolidated the popup allocation management code so the close broadcast would be send for the popup window.<br><br />
<br />
=== 5.22h ===<br />
<br />
*'''FIX''' Table views were not de-registering resize broadcasts properly which would result in a crash when merging models together that used them but did not carry across the views in the merge.<br><br />
<br />
=== 5.22g ===<br />
<br />
*'''NEW''' Column filters can now match multiple items; separate the items with&nbsp;;<br> So for example in a list of the standard colours, entering: *Green;*Blue would match "Blue", "Green", "Light Blue" and "Light Green"<br> Note that spaces immediately after the ';' are ignored<br><br />
<br />
*'''NEW''' Table editing data export/clipboard export has a new option "2nd Col Labels". If this option is enabled and the 2nd title row option for columns is enabled, the second title row will be written to clipboard copies as well as the main column titles.<br> NOTE: Importing of second title row is not supported at this time<br><br />
<br />
*'''CHANGE''' CopyToClipboard now supports the following option bits<br> 1: row labels 2: col labels 4: formatted 8: 2nd column label row<br> add together the options you want for the options value<br><br />
<br />
*'''REMOVE''' Removed the "Dont initialise run" options for broadcast buttons and portal clicks. This used to enabling handling of events without starting the run engine but it has become obsolete as most operations these days rely on the engine being properly initialised, including error handling.<br><br />
<br />
*'''FIX''' The s.AutomaticallyRestartAfterError flag now works for errors triggered from buttons sending a broadcast.<br><br><br />
<br />
=== 5.22f ===<br />
<br />
*'''NEW''' Added "Log Normal" distribution to distribution dialog<br><br />
<br />
*'''NEW''' The change-file operation "Execute Command" now allows use of double quotes (") and a longer command string. This is useful when passing parameters to commands where quotes are needed.<br><br />
<br />
*'''NEW''' System attribute "LastErrorFileNamePath"<br> This string is set to the filename where the last model stop error is written to. It is useful when s.AutomaticallyRestartAfterError is used and s.LastRunStopReason is set to 4 (error in model)<br><br />
<br />
*'''CHANGE''' The run error report file is now always written to the temporary directory. This reduces junk buildup in the work directory.<br><br />
<br />
*'''CHANGE''' The existing system attribute s.AutomaticallyRestartAfterError now has different behaviour in a compiled application.<br> With an MDL, it causes PL to automatically restart the model after showing the standard error dialog, as long as the user does not click any buttons. This is useful for developers to "break in" to a broken model.<br> With a compiled EXE, PL now automatically restarts without showing the error dialog. It is up to the modeller to test s.LastRunStopReason and if the model stopped because of an internal error, the modeller MUST warn the user that something unexpected went wrong and their in-memory data may now be a pile of steaming gibberish.<br> Failing to give some warning will lead to inexplicable errors and likely data corruption since the user may be triggering bugs in the model that the developer is not aware of.<br><br />
<br />
=== 5.22e ===<br />
<br />
*'''FIX''' Fixed an issue with item path management, introduced in 5.22a which caused crashes on saving models.<br> Some bad code caused bogus item path records to be introduced into the model's datastructure. Normally these would be ignored and purged but in the case where a portal with no flows was deleted, a bogus record-manager class (for the now non-existent subsystem) was being created. This would then write junk to the saved model which would cause the model to load OK but then crash on subsequent save if some editing action didn't trigger the autopurge first.<br> Apart from fixing the root cause (a missing test when looking up paths) a number of tests have been added to help identify bad path records upon load.<br> Please contact ID if your model reports a strange message when loading your model and it cannot correct it.<br> Thanks to Howard for identifying this and providing a repeatable procedure.<br><br />
<br />
*'''FIX''' View panels were not being correctly placed in the model hierarchy due This messed up the display of view panels in the sidebar particularly when they were arranged in hierachies. This did not damange the model but just made view panels appear in the wrong place in the list.<br><br><br />
<br />
=== 5.22d ===<br />
<br />
*'''NEW''' Using set (=) you can set an item table reference to a data object reference which is pointing at a table<br><br />
<br />
*'''NEW''' Routine operation "GetColSecondTitle" enables the second title row for a text to be read and placed in a label<br><br />
<br />
*'''NEW''' The advance to time dialog has a new checkbox "Pause after advancing".<br> This is only available when running in editing mode and is useful for advancing to a time for debugging without having to manually pause the engine.<br><br />
<br />
*'''FIX''' object co-ordinates are now represented using a 4 byte int which will prevent wrapping at +/- 32767<br> This is useful where object co-ordinates are dynamically caculated over a wide range of zoom levels<br><br />
<br />
=== 5.22c ===<br />
<br />
*'''FIX''' Pipes and Spatial Links could malfunction if they received an unblock message for their control attribute as a result of the modeller changing that attribute in the _preinit broadcasts.<br> They have been reworked so they only start receiving attribute change broadcasts once they are fully initialised.<br><br />
<br />
*'''SPEED''' Subroutine calls had an overhead due to memory allocation for "stacking" subroutine attributes between recursions of a subroutine.<br> A cache has been added so non-recursive subroutine calls will process faster.<br><br><br />
<br />
*'''SPEED''' Change objects need undo buffers for undoing lookahead changes; these were being allocated in very large chunks, wasting a LOT of memory when there are 1000s of change objects. The allocation bucket size has been reduced to a more reasonable level and all buckets are retained for the duration of the run<br><br />
<br />
*'''SPEED''' A few objects in PL need to keep track of items in a list. Where possible this list is built out of the items themselves but in some cases this isn't possible as an item needs to be in multiple lists.<br> These lists (reneg queue, dispatcher release, track loop delay trains) needed list nodes separate to the items to be allocated/deallocated.<br> A method of recycling this list nodes has been added, just as already occurs with items and FEC events.<br> This enables big runs to proceed with very little memory reallocation needed when "advancing to time".<br><br><br />
<br />
=== 5.22b ===<br />
<br />
*'''NEW''' New value formats:<br> "Fixed xxxx.xxx", "Fixed x,xxx.xxx", "Percentage x.x%"<br><br />
<br />
*'''NEW''' IF/CASE/WHILE do not show "Event Details" in routine listing as their condition is already shown after the expression rework<br><br />
<br />
*'''NEW''' End User Option "Dont Steal Focus If Not Active"<br> If this option is turned on, PL will not activate windows that appear if it is not the active application. This prevents PL popping up windows in front of other active applications.<br><br />
<br />
*'''NEW''' LabelList option: "DataSet2 Loads Labels By Index Not Label"<br> With this option off dataset2 loads label references by attempting to match the label text and adding new labels if a match fails<br> With this option on, the load is by index and no attempt is made to match the label text. This is useful when labels have been renamed but not reindexed.<br> NOTE If a label list is specifically mentioned in the dataset2 Load definition table, then it will be reloaded anyway, overriding the usefulness of this new option.<br><br><br />
<br />
*'''NEW''' Engine option "Keep DLLs Loaded On Engine Restarts"<br> This prevents DLLs being unloaded when the PL engine restarts. This is useful where a DLL is storing persistent state for a model whilst the model is loaded.<br><br />
<br />
*'''NEW''' Attribute editor "Attribute" button menu has a new option that enables the views of the attribute to be inspected and the panels they are on selected.<br><br />
<br />
*'''NEW''' INI file [edit] option PathInTitle if set, shows the entire directory path of the loaded model in the titlebar<br><br />
<br />
*'''FIX''' Error result setting handled properly for saveimage routine operation<br><br />
<br />
*'''FIX''' Last path is set for saveimage routine operation<br><br />
<br />
*'''FIX''' Attribute Reference editor dialog value field allows longer text so single field expressions (eg: row reference for a cell reference) can be edited using the dialog<br><br />
<br />
*'''CHANGE''' Increased the limits before PL nags about linkedlist size, table resize. Tables can be resized to 0 columns in the editor.<br><br><br />
<br />
*'''CHANGE''' Migrating attributes to owner in the attribute editor now requires a confirmation<br><br />
<br />
*'''FIX''' Table Views were ignoring a specific title color, always using the generic Text Color<br><br />
<br />
=== 5.22a ===<br />
<br />
*'''NEW''' *** NAME SPACE CHANGES ***<br> NOTE: this change impacts dataset2<br> As part of progressing the PL coding environment, the rules for naming things are being tightened.<br> In this release, the names of all label lists (modeller and system defined) must only contain the following characters:<br><br />
<blockquote>A..Z&nbsp; a..z&nbsp; 0..9&nbsp; and _ (underscore) Note this applies to the names of label lists NOT the labels inside the lists. Old models and datasets that were created with pre-559 file version PL EXEs will be translated on load using the following rules: Spaces and other characters no longer allowed are replaced by underscore unless its the first character - then it becomes a z.This prevents modeller label lists being prefixed with an underscore. More than one underscore in a row is replaced by a single underscore For example: _Model Objects&nbsp;&nbsp;&nbsp; becomes _Model_Objects Users &amp; Passwords becomes Users_Passwords (UI)Menu1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; becomes zUI_Menu1 NOTE: DataSet2 data saved with this version will have problems being loaded with previous versions of PL *IF* it uses label lists that were renamed as part of the translation to this version of PL. EG: If a dataset had a column formatted for "User IDs" then an older PL will end up with 2 lists when you load the data: "User_IDs" and "User IDs" which is most likely not what you want. Please read and bookmark this page for reference on the naming strategy: http://wiki.planimate.com/Naming_Conventions This namespace cleanup is important to enable better readability and editing of routine code; spaces and other symbols make code unreadable and complicate the editor. </blockquote><br />
*'''CHANGE''' Names of some of the pre-defined PL label lists have been renamed, as announced above. If you have created a label list of label list names, you will need to manually update it and also manage backward compatability with any dataset depending on this list-of-label-list-names. add duplicate check except for system list<br><br><br />
<br />
*'''SPEED''' Label list references are stored in memory more efficiently.<br><br />
<br />
*'''SPEED''' When attributes were renamed in large models, it took a long time for PL to find references, query for updates and perform the updates to references. This has been greatly sped up by:<br> Faster testing of item attribute flow usage Better management of class path data Remove obsolete tests<br> In one model search/update times have been reduced from &gt;30 seconds to 1 second which is important when many attributes are being updated/purged<br><br />
<br />
*'''SPEED''' Formatting attribute references has been greatly sped up (60x faster) This is in addition to change above.<br><br />
<br />
*'''FIX''' Fix to import into view routine operation clipboard handling (as was backported to 5.21s). This fixes issue introduced in 5.21r<br><br />
<br />
=== 5.22 ===<br />
<br />
*'''NEW''' Auto Fit Panels - a.k.a. dynamic layout<br> A number of new mechanisms have been introduced into PL which when used together enable models to have panels which automatically size to the window they are contained in.<br> Details here: http://wiki.planimate.com/index.php?title=Auto-Fit_Panels<br> Sumamry of enhancements:<br> New Panel-Engine option "Auto Fit Panel To Window" Panel-Work Area dialog has new "Minimum" fields Paint,View and ViewPort objects have a new "Anchor" option New "_Panel "_Panel Resized" broadcast<br><br />
<br />
*'''NEW''' Properties of table views can be read and set. These include co-ordinates and colours (including the advanced custom colours)<br> The routine operations are GetViewProperty and SetViewProperty.<br> This is useful in enabling a model to reposition and resize table views dynamically, ie: dynamic layout.<br> As for the similar label list properties, there is a label list you can use: "_tableview properties" to refer to the properties.<br><br />
*'''NOTE '''Further to the announcement on changing the PL random generator in<br> 5.22 on idbase, changes will be implemented in such a way to support<br> backwards compatibility.<br />
*This will occur in an upcoming release, not 5.22 as suggested.<br><br><br><br />
<br />
<br><br />
<br />
=== 5.21r ===<br />
<br />
*'''NEW''' INI file option<br> [Routine]<br>LineIndent<br> Sets how many characters code blocks get indented<br><br />
<br />
*'''CHANGE''' Copying from clipboard routines now use a temporary filename in the system TEMP folder and delete it after they are finished with it<br><br />
<br />
*'''CHANGE''' The standalone EXE packager will pull in DLL files into the DB as long as the "Always load DLLs from external files" option is not on.<br><br />
<br />
*'''CHANGE''' Column width limit increased to 255 characters<br><br />
<br />
*'''FIX''' Paint button images were not being updating when the image name was dynamically set due to the cached image not being flushed<br><br />
<br />
*'''FIX''' Removed bogus 'n' introduced into single line column titles with numbers shown<br><br />
<br />
*'''FIX''' Fixed a leak/attref scan error (thanks again Tom) in the routine editor. This one occured when a condition that was just a value was being translated into a comparison, as required for compatibility with the graphical editor<br> eg: if (p.attribute) becomes if (p.attribute&nbsp;!= 0)<br><br><br />
<br />
=== 5.21q ===<br />
<br />
*'''NEW''' No clip option for table columns (experimental)<br><br />
<br />
*'''NEW''' Transparency for icons supported<br> This is specified as a value from 0..255<br />
<br />
0 = fully transparent<br />
255 = fully opaque (default)<br />
For objects (portals etc) the object attribute ObjectTransparency can be read/set (a repaintobjects is needed to update the screen)<br />
For items System attribute s.ItemTransparency can be read/set<br />
<br />
<br />
*'''NEW''' System item attribute s.ItemRotation can be read/set to set the angle of the item's icon<br> The value is in degrees<br><br><br />
<br />
*'''CHANGE''' Removed y offset being applied to items on a multiserver showing as "road". This keeps animation of single width roads straight<br><br />
<br />
*'''FIX''' Fixed cause of "AttRef Scan Count" errors (also could cause system error 1139)<br> The field editor was not handing-off editing to the old skool condition editor dialog (eg using F2 in an IF condition), causing a leak of some undo data.<br> Another thanks to Tom who tracked down the culprit<br><br />
<br />
*'''FIX''' Fixed ongoing issue of a model in an endless loop not being pauseable. PL was not clearing enough events from the Windows[tm] queue so it never got to the keypress events as other events (eg: timer) would pre-empt them.<br> PL now clears the OS event queue upon every poll it makes. This should not affect model performance much but will make PL more responsive to redraws, moving its window etc even when it is simulating.<br><br />
<br />
=== 5.21p ===<br />
<br />
*'''This''' version has new features and changes. Please test carefully.<br><br />
<br />
*'''NEW''' Table click broadcast enhancement<br> Previous versions of PL had a "Send Broadcast AFter Edit" option which controlled how cell click broadcasts behaved.<br> This has been changed into 2 new options:<br> "Send Cell BC Before Edit" "Send Cell BC After Edit"<br> Modellers can now select both these options and receive a broadcast both before and after a cell edit is performed.<br> The table cell click broadcast includes a new attribute: "_beforeedit" which is non zero when the broadcast is being initiated "before" the cell edit.<br> This is useful in this scenario:<br><br />
<blockquote>user clicks a cell<br>model receives a cell click with _beforeedit = 1<br>model determines whether cell should be edited and sets<br>s.EnableTableCellEdit if it should<br> PL edits the cell<br> PL sends a second cell click BC with _beforeedit = 0<br>so the model can deal with the consequences of the edit </blockquote><br />
<br><br />
<br />
*'''DOC''' The table view options have updated documentation at:<br> http://wiki.planimate.com/Table_View_Options_Choices<br><br />
<br />
*'''NEW''' Tables have option to show column numbers on their own row Note though the number will follow the alignment of the column labels. Also you need to set at least 2 column label rows for this to be useful<br><br />
<br />
*'''CHANGE''' Table view options will not show broadcast related options if there is no cell click broadcast assigned yet.<br> When a cell click broadcast is selected, PL will automatically show the options dialog so the user can select WHEN the broadcast is to be sent, as there is no default before/after now, any combination of before/after/row and column broadcasts can apply to cell click broadcasts<br><br />
<br />
*'''NEW''' Portals can be renamed by their context menu (and also sidebar) this is useful in busy network models there portals are too close together to click under them<br><br />
<br />
*'''NEW''' Routine operations "FindColumnLabel" and "FindColumnTitle"<br> This enables a column label/title to be located in a table based on any other formatted text (eg: another label list)<br> Unlike the "Column Index" reference, they are not cached so they will work even if the table is changed at runtime.<br><br />
<br />
*'''CHANGE''' Object context menus display object list name if set<br><br />
<br />
*'''CHANGE''' Some tweaks to the route step editor<br><br />
<br />
*'''FIX''' Reworked some of the time code to remove pedantic compiler warnings<br><br />
<br />
*'''FIX''' Fixed a nasty couple of bugs where pasting smaller tables into the table editor would cause crashes in table editor and/or views<br> Greetz go out to Tom for his efforts in finding a replicate procedure for this one<br><br />
<br />
=== 5.21o ===<br />
<br />
*'''NEW''' Support "CONTINUE" routine operation<br> This is used in a loop and causes the rest of the code to be skipped and the next iteration of the loop to be tested/performed.<br> Its useful to filter out particular iterations from being processed<br><br />
<br />
*'''NEW''' Support "RETURN" routine operation<br> This causes the routine to immediately exit (if used in a subroutine it will go back to its caller).<br> Its useful to get-out fast if something isn't what you expect (avoids wrapping a lot of code in IFs)<br> Consider readabiltiy when using this and CONTINUE; they should be used in clear up-front testing to avoid having to wrap all your code in an IF. Avoid burying them deep in core logic<br><br />
<br />
*'''FIX''' Bogus comma in search line text removed<br><br />
<br />
*'''FIX''' The time a model becomes paused is measured before the "animation starting" dialog is presented. This is useful when profiling an "advance to time" and you aren't around when the advance finishes<br><br />
<br />
*'''SPEED''' Cleanup and Inlined FEC code, went back to one list with priority regions Cleaned up the way PL tracks when changes during lookahead cannot undo Optimise SET operation Fast lookup for subroutine call Reduce paramters being passed around using routine handlers Inlined and optimised LinkedList (FEC uses it) Cache some routine line properties to avoid determining them dynamically Clean up iterate code Poll testing for events when advancing to time now uses new loop-end test system<br><br />
<br />
=== 5.21n ===<br />
<br />
*'''NEW''' Table Columns have a new option "Dynamic Combo List" When used with the "Edit With Combo" option, it causes the combo box to dynamically generate and show a list of all the options that match what is typed by the user.<br> This can be useful where there are many options making the full list too long to select from<br> The "Select Existing Labels" option is also supported in which case the user must match an existing label before the field edit will close (or escape out).<br><br />
<br />
*'''NEW''' New option "Create Path Folders" for a change object-&gt;File operation configured to "Create folder".<br> This will create every folder specified in a multi-level folder specification.<br><br />
<br />
*'''NEW''' System string attribute s.LoadFileNamePath<br> This string attribute is set (for compiled PL app exes only) to the name of the first parameter passed to the EXE (whether from the command line or a file dropped using explorer).<br> This enables a Planimate compiled application to respond to data files associated with it or dropped on its shortcut.<br> The run start broadcast of an application can check the length of the attribute (routine op FormattedWidth) and then use it or format it into a label for file operations. It will be zero length if unset.<br><br><br><br />
<br />
*'''CHANGE''' Paint Button Broadcasts have a new _location attribute is set to the model object index of the<br>closest portal up the hierachy that has an index set, 0 if none<br><br><br />
*'''CHANGE'''&nbsp; the panel index that used to be sent with paint button click was always for closest dynamic panel. So if the button was on a "view panel" you did not get its index but rather the panel index of the owning dynamic panel. This has been corrected so the panel id is the actual id for the panel that the button is on.<br><br />
<br />
*<br><br />
<br />
'''CHANGE''' Renamed change object file operations, removed spaces (evantually these will be converted to routine operations)<br />
<br />
<br><br />
<br />
*'''CHANGE''' ShowPopupPanel at (-2,-2) should centre the window<br><br />
<br />
*'''FIX''' Fixed an issue where a table view with customised columns was pasted into a place where a pre-existing table with less columns picked up the scope, causing the customised view to attempt to reference columns that were not there<br><br />
<br />
=== 5.21m ===<br />
<br />
*'''REMOVE''' Removed the "Round Values To Integers" option for attributes. This should be done in routine code now, and views support rounded displays.<br> PL will report any attributes which had this option on when loading<br><br />
<br />
*'''SPEED''' Reworked item attribute lookups and added a caching mechanism which enables references to lookup item attribute quicker if the same item class uses the object with the reference<br><br />
<br />
*'''SPEED''' Reworked the number comparison code to use an algorithm that avoids the need for branching which speeds it up<br><br />
<br />
=== 5.21l ===<br />
<br />
*'''FIX''' Table View Filter notification broadcasts are now sent when the table view is regenerated so that the filtered rows are in effect.<br> The previous table rework was causing the filter change broadcast to be sent before the filtered rows had been determined, so it wasn't possible for that broadcast to query which rows were being shown<br><br />
<br />
*'''FIX''' Fix drawing of table views when the title is hidden. The smaller margin is now filled and the table border is displayed<br><br />
<br />
*'''FIX''' Reworked the way PL detects breaking out of a loop. If you are in developer mode and a model gets stuck in a loop, press &lt;ESC&gt; once and PL should respond within a second or 2.<br> Do not press hold or press other keys or mouse events as they will delay when PL gets to process the &lt;ESC&gt; keypress<br><br />
<br />
=== 5.21k ===<br />
<br />
*'''NEW''' Table views can send a "column width broadcast" when their columns are changed. This is useful for applications which keep track of a user's column width settings for individual views<br><br />
<br />
*'''SPEED''' Since 5.20i Planimate by default supported international locales for comparing strings. Unfortunately this has been found to slow down runs significantly so is now optional, using the end user option "Support Locale For Strings (slower)"<br> This option is off by default so needs to be enabled if you are dealing with labels etc which contain extended characters<br> A model that uses a lot of item attributes will be typically 300% faster<br><br />
<br />
=== 5.21j ===<br />
<br />
*'''NEW''' Gantt option "Dont Show Zero Labels" prevents the gantt showing label index 0 in a bar label<br><br />
<br />
*'''NEW''' There are 3 new routine operations for searching<br> Search() ReverseSearch() BinarySearch()<br> capability is the same as previous versions, the main difference is the editing interface; the searches are configured with parameters and a condition like most other routine operations instead of a customised dialog box.<br> Existing models will be updated to use one of these according to the options that were selected in the old search dialog<br><br />
<br />
*'''NEW''' System-&gt;Other attribute "JobID"<br> This gives access to the existing command line option /JOBID=xxx where xxx is a number.<br> It can be useful in passing a number to a model from the command line.<br><br />
<br />
*'''NEW''' Help menu option to generate the top level wiki page for system attributes<br><br />
<br />
*'''CHANGE''' System attributes are now internally managed using a table to make adding new ones easier and assist in generating documentation.<br> The system attribute selection popupmenu is rearranged as a result.<br> Additionally a few items that were previously hidden are now exposed.<br><br />
<br />
*'''FIX''' Editing expression shows dropdown suggestion in more cases than it used to<br><br />
<br />
*'''FIX''' Function key broadcasts are now sent without pausing the run engine Note: broadcasts sent whilst the engine is running are sent with the main panel id, not any popups that may happen to be open.<br><br />
<br />
*'''CHANGE''' function key broadcast will send F2 if a table view with focus doesn't claim it first<br><br />
<br />
*'''CHANGE''' function key broadcasts are sent globally, not scoped<br><br />
<br />
=== 5.21i ===<br />
<br />
*'''FIX''' Fixes a bug introduced in 5.21 where a table will lose its horizontal scroll after the panel it is on is left or the model saved/reloaded<br><br />
<br />
=== 5.21h ===<br />
<br />
*'''NEW''' Engine option "Always load DLLs from external files" This is useful where a DLL wont load using the PL memory loader<br><br />
<br />
*'''NEW''' Added new EndUser option "Send _Key BCast for function keys"<br> This enables PL sending a new "_Key" broadcast when the function keys are pressed.<br> 2 attributes are set, _panel and _keycode<br> _panel is set to the panel which had the focus when the key is pressed The _keycode is defined in the new label list "_keycodes"<br> A broadcast is not sent for F2 because this is used by PL tables and field editors.<br> A broadcast is not sent for F10 because Windows uses it to move focus to an applicaiton's menubar.<br><br />
<br />
=== 5.21g ===<br />
<br />
*'''FIX''' Model explorer is locked out during paste and replace operations to avoid flicker<br><br />
<br />
*'''FIX''' Free text columns properly sorted<br><br />
<br />
*'''SPEED''' The way label indexes were automatically allocated was very inefficient and one source of slowdown for big models that create many portals.<br> Dynamically created portals now get object labels allocated faster<br><br />
<br />
*'''SPEED''' Copying many portals was being slowed down by the "unique name generator" which "munges" the copied object's name so it doesn't conflict with existing names.<br> A better approach now makes it possible for PL to copy/paste many objects much more quickly.<br><br />
<br />
*'''SPEED''' Broadcast entries registered slowly for many portals with broadcast entries in them<br><br />
<br />
=== 5.21f ===<br />
<br />
*'''NEW''' New value unit "Value No Decimal" Rounds any decimal to a whole value<br><br />
<br />
*'''NEW''' New column option "Ignore Hover Colors" prevents hovers affecting a column<br><br />
<br />
*'''CHANGE''' Made the table editor alternate row colour a light grey rather than yellow (CellBackground2 #f0f0f0) but if you have already migrated to 5.21f your INI file will still have the old value.<br><br />
<br />
*'''CHANGE''' Now allow longer Paint text and tips (255 chars)<br><br />
<br />
*'''CHANGE''' Ctrl-clicking the "Reset Routine Fonts/Colours" button now forces defaults for non inverted display (mainly useful for me so I can save a model with dark text/light background routine editor colours).<br><br />
<br />
*'''FIX''' Loading pre version 447 models which included tracks would crash, now they load (still need updating to new track code).<br> Previous workaround was to use version 5.10p etc to bring them forward first<br><br />
<br />
*'''FIX''' Fixed crash/lockup when loading an older model that used local route assignments in change objects instead of the global route list ids.<br><br />
<br />
*'''A''' note on Color and Colour:<br><br />
<br />
*'''Where''' text is read by a user (eg:dialog title) I tend to use "colour" in<br />
<br />
*'''keeping''' with PL's Australian origins.<br><br />
<br />
*'''Where''' text is interpreted/parsed/compiled, "color" is used in keeping with<br />
<br />
*'''standard''' use of color for programming APIs.<br><br />
<br />
=== 5.21e ===<br />
<br />
*'''FIX''' Fixed issue which caused unexpected options to be turned on for a table view using column filters when loading an older format model (pre 5.21)<br> This was caused by an internal field being changed from 16 bit to 32 bit (to store more options). Since the filter option was using bit 15, it was being sign extended into the newly available bits, effectively turning all the new options "on".<br> If you have already loaded your model to post 5.21, you might want to confirm the options on any table views that had column filters turned on.<br> It was not intended to enable hover tracking and hide cell borders for these tables automatically.<br><br />
<br />
=== 5.21d ===<br />
<br />
*'''FIX''' Tables with no rows will still process horizontal scroll updates<br><br />
<br />
*'''NEW''' Settings-&gt;Engine options:<br> "PBA User cannot CTRL-T"<br> This prevents a user of a PBA using CTRL-T to stop the engine. (a developer in user mode can still use it)<br> "PBA User cannot CTRL-G"<br> This prevents a user of a PBA using CTRL-G to continue a run (a developer in user mode can still use it)<br> Note that if the engine is somehow stopped in the PBA, CTRL-G will then work.<br> "Do not poll for pause during PBA run"<br> This prevents a user of a PBA from pausing simulation runs using the keyboard or mouse.<br><br />
<br />
*'''NEW''' Routine operation "Clear Filter" enables table filter to be cleared for a view on a panel of a table (or all views if the panel id is 0)<br> This is useful after new data has been imported into the table.<br><br />
<br />
*'''CHANGE''' ESC no longer interrupts a long PL loop in a compiled application (PBA) This prevents users from accessing what should only be visible to developers.<br><br />
<br />
*'''CHANGE''' PL polls for pause events less often. This change accomodates modern faster PCs where polling too often wastes a lot of time.<br><br />
<br />
=== 5.21c ===<br />
<br />
*'''FIX''' Fixed routine line display in references display (broken in 5.21)<br><br />
<br />
*'''CHANGE''' Routine editor shows dropdown list when backspacing through name<br><br />
*'''CHANGE''' Routine editor handles nested tables<br> eg: t.table1[t.table2[1][c.bbb]][c.aaa]<br>'''CHANGE''' Routine editor removed field-in-button editor in condition edit dialog<br><br><br />
<br />
=== 5.21b ===<br />
<br />
*'''FIX''' Fixed a bug in the reference formatter caused by an attempt to optimise it for large strings that was not compatible with expressions<br><br />
<br />
=== 5.21a ===<br />
<br />
*'''FIX''' Fixed some border line issues with new table views and validate against invalid border styles<br><br />
<br />
=== 5.21 ===<br />
<br />
Its exactly 20 years since Doug &amp; I started work on what we now call Planimate so to celebrate I've given PL a refreshed table editor The Table view and editor have been largely rewritten<br />
<br />
*View Option for resizeable columns (drag right border of cell to resize column)<br />
*Separate options to enable resize from column/data areas<br />
*-Double click column separator to autosize/autofit column<br />
*Option for hover tracking for table views has been added. This causes the current selection to follow the mouse cursor. The row, column and cell colors for the hover can be set<br />
*Alternate row label colours for cells and row labels make data easier to read. This is supoprted automatically by the view, modellers dont have to code it<br />
*Many customisable colours for the table view have been added (in the Graphics configuration dialog)<br />
*The Graphics configurations can be saved to files and reloaded. This is useful now there are so many colour properties. The files are saved in with a "VW" file extention<br />
*Table Edit windows (not views) now appear with a graphical scheme that can be edited in the [TableEditorColors] section of the Planimate INI file. The data in this section is compatible with VW files. Currently there is no per-table-editor customisation since thats what views are for.<br />
*Filtered views update properly when rows are added/removed<br />
*Cell properties edited in filtered view now apply properly to the cells in the filtered set<br>FIXES<br />
*mouse wheel scrolling whilst editing a cell would do silly things<br />
*if a table has 0 column rows set, the table editor will still one row to facilitate editing by the modeller<br />
*In "single click to edit" mode, clicking on an unselected cell whilst there is a selection will clear the selection rather than initiate edit<br />
*dragging a selection would have an initial lag if the drag was started on the currently selected cell<br />
*many cases of missing redraws/updates when the tables column labels were changed or other changes made in the table editor now update both the editor and the views properly<br />
*&nbsp;Row label size calculation is much faster, especially if only row label numbers are used<br />
*Row labels update properly when a filter selection changes the rows such as not to display rows needing long row numbers/row labels<br />
*Table views edit cells faster and with less flicker on complex panels (eg: with a lot of paint/other graphics) in cases where edit fields/ combo boxes do not extend past the borders of the table. Implemented multiple stages of selective redraw to reduce flicker/processing time).<br />
*NOTE the new colour properties are not yet editable by model code. This will be eventually addressed along with other view property access.<br><br />
*'''NEW''' Labels can now be up to 16383 characters long. This is useful where long strings are being processed/generated by code.<br> This has required some rework of buffer management to prevent stack overflows in complex routines.<br><br />
<br />
*'''NEW''' Planiamte's tool kit iFlow now supports both RGB and palette colours specified in the one value. The colour palette will be enhanced to enable selection of colours by palette index or RGB value throughout the platform's use of colour.<br> In the Graphics "VW" files mentioned above and the [TableEditorColors section of the INI file, RGB colors are specified using #RRGGBB form (in hex) whereas palette colours are decimal numbers, with 255 meaning transparent. See the INI file generated by this version of PL as an example.<br> By editing the VW files generated by the Graphics dialog, you can manually bring in RGB colours at this time.<br><br />
<br />
*'''FIX''' Pressing F2 when editing a condition/search using expression now opens the correct editor. Note however that the expression has to be valid (ie: generate no errors) before PL will transition.<br><br />
<br />
*'''FIX''' The way some iFlow co-ordiante boxes were translated to Windows GDI (eg: paint rectangles) was inconsistent. This manifested itself when displaying with a zoom apart from 100% and would probably<br>affect printing.<br><br />
<br />
*'''FIX''' An extra pixel added to lines to make sure they always draw has been removed as it was inconsistent. This might manifest as missing pixels in certain graph views; if this occurs let us know.<br><br />
<br />
*'''CHANGE''' Have made the default font used for table cells bigger as it was too small and did not render cleanly on systems with 120DPI fonts<br><br />
<br />
*'''CHANGE''' The status line and icon chooser label font are now set to an internally managed font<br><br />
<br />
*'''FIX''' Ensure obsolete routine operations are not selectable<br><br />
<br />
*'''REMOVE''' Route "Distance" setting; was not used for anything<br><br />
*NOTE Wholesale code rework (internal)<br> Report any odd behaviour. Beyond the changes above. it might be<br> attributed to:<br />
*Global renames of functions (particularly string) to abstract away from<br> posix/C differences and MS compiler complaints<br> Global renames to add some naming consistency<br> More 64 bit time cleanups<br> Cleanups to reduce warnings from the picky new MSVC2008 compiler<br> Formatting/processing buffer sizing and handling rationalised/cleaned up<br><br><br />
<br />
<br><br />
<br />
=== 5.20l ===<br />
<br />
*'''NEW''' Table views can now have resizeable columns<br> Enabling the "Resizeable Columns" table option enables the columns to be resized by dragging on the column separator line<br> Enabling "Column Separators" extends the column separator line up to the column label area<br><br />
<br />
=== 5.20k ===<br />
<br />
*'''NEW''' Value format "RGB"<br> This formats colour values as hex RRGGBB which is commonly used in graphics design.<br> (internally they are represented as 00BBGGRR on x86 systems).<br><br />
<br />
*'''CHANGE''' Improved the "no outgoing flows" portal error message<br><br />
<br />
*'''CHANGE''' Cleanups to track system UI: "section details" menu option and dialog removed (the network details table replaces it) default name for track table is now "Track Network Details" automatically added section control columns have a default clear value of 100 New sections are automatically added to the model object list "Section Type" column is added to an automatically created Track Network Table Redundant naming options for track sections removed Sections are automatically added to the model object list A "Section Name" column in the track table stores the section model index<br><br><br />
<br />
*'''CHANGE''' Protect against multiple tracks in same direction between 2 objects since its not supported by track table<br><br />
<br />
=== 5.20j ===<br />
<br />
*'''NEW''' INI file has new settings for:<br><br />
<br />
StepEditorW These set the size of the routine step editor dialog<br />
StepEditorH<br />
<br />
ItemPopupW Set the size of the item-click popup<br />
ItemPopupH<br />
<br />
DragGridX Set the default movement grid<br />
DragGridY<br />
Making the routine step editor bigger allows more space for the expression edit field<br />
<br />
<br />
*'''NEW''' Added some accellerator keys to the breakpoint dialog<br><br />
<br />
*'''FIX''' The locale change in 5.20i had more effects than anticipated especially on number formatting when not in a US/English locale, which caused problems with the number formatting code.<br> The locale now only affects the string comparison code, as intended<br><br />
<br />
*'''CHANGE''' The "IDKBaseEnable" INI option is now renamed "UseOnlineHelp" to reflect its function<br> Setting this will cause PL to use the wiki for context sensitive help instead of the local help files.<br> Pressing CTRL whilst clicking a context help button toggles use of the local or online help.<br><br />
<br />
*'''REMOVE''' Obsolete routine operations for primary/secondary bookings, SetOncomingTrain and SetLookthroughJunction<br><br />
<br />
*'''REMOVE''' Track length setting - this can be managed by the modeller now<br><br />
<br />
=== 5.20i ===<br />
<br />
*'''CHANGE''' Cleanup to toolkit to remove 32/64 bit compiler warnings. This should not have broken anything. Look out for any errors particularly with text handling.<br><br />
<br />
*'''NEW''' Routine operation "UnblockTrain" enables the modeller to trigger an unblock for all blocked trains or a specific train ID.<br> if ID is 0 then an unblock attempt is made for all trains<br> If ID is set &gt; 0 then an unblock attempt is made only for the specific item with the matching item ID<br> The detailed way it works is as follows: An unblock event gets posted to the FEC with the train ID to try. When the event is processed, if the blocked train is still in the blocked train list, it and only it will get an unblock attempt.<br> This makes this operation safe even if the train already became unblocked (or even exitted the model) before the unblock message it processed.<br> This operation is useful where the modeller knows a state change in a track network can release trains. If the train ID is known, then using it can avoid the platform unnecessarily testing all the blocked trains. This will improve performance in networks with many blocked trains.<br><br />
<br />
*'''NEW''' Conditions can be edited using the expression editor. They remain internally represented in the condition structures to retain compatability with the graphical condition editor and the binary search mechanisms.<br> Retaining compatibility has 2 side effects:<br><br />
<br />
- conditions display with AND and OR but when edited will use<br>&amp;&amp; and ||, the expression lanuage notation for AND and OR<br>- since the condition editor does not follow BODMAS but the expression<br>editor does, brackets will be automatically added to clarify the<br>order that evaluations are done. The current algorithm is a bit<br>excessive with the brackets.<br><br><br />
<br />
*<br />
'''FIX''' Handling of lower case and text sort order now follows current locale<br />
<br />
<br />
*'''FIX''' Planimate now treats non breaking whitespace (0xA0) as a space when trimming spaces from labels<br><br />
<br />
*'''FIX''' Removed ability to edit references when a route assign change object is opened during simulation (it can still be inspected).<br><br />
<br />
*'''FIX''' Fix track network details build not setting the tuple names of columns it newly added, causing it to add them again<br><br />
<br />
*'''CHANGE''' Better memory management when a new table is created<br><br><br />
<br />
=== 5.20h ===<br />
<br />
*'''NEW''' Further rework to track section time handling. This affects track models. They will need minor alteration with this PL version:<br> This is the final major rework of the PL track infrastructure, the supporting model code is currently being finalised.<br> 1. Automatically Generated Section Location Table always on<br> Track sections now always use a table to control their times and restriction level. In past versions, sections could be manually configured in interaction mode.<br> 2. Section Time Column Specification<br> The way that trains identify which column their section run time should be read from has been changed. In past versions, a modeller defined attribute was used. Now, 2 new system maintained item attributes are used:<br> s.ItemTrackForwardColumn s.ItemTrackReverseColumn<br> For existing models which work in 5.20g<br> These attributes need to be set to the *column* index in the Network Location table where times for the train at each section will be read. PL will automatically look up the times for the section in the Network Locations table.<br> This is a case of finding references to the existing item attributes that the model was using and replacing them with references to the system item attributes.<br> Its important that both "forward" and "reverse" directions are set up (but they can point to the same column).<br> 3. Obsolete system attributes have been removed<br> The following track related attributes are now remvoed and existing references will cause errors when the model is run (which assist in locating them).<br> s.BookingId s.ForcedStop s.InLoopInRoutine s.InLoopOutRoutine s.InJunctionLoop<br> 4. Automatic creation of the Network Location table<br> When the model is started, PL checks the table referenced in the Network Details dialog exists and contains the From and To columns. If it doesn't, the user will be asked whether to create it.<br> These changes are part of the consolidation of the track system capabilities and will reduce resource usage and decrease run time for large track models (avoiding the use of memory hungry references and avoiding item attribute lookups for every train movement).<br><br />
<br />
*'''NEW''' End User Option "Center Icons On Spatial Links" causes ioons on all spatial links to be drawn centred rather than against their bottom left corner<br><br><br />
<br />
*'''CHANGE''' Label list handling of empty labels in the table editor has been cleaned up.<br> A new label list option "Interpret Empty Input As Label Index 0" controls the behaviour<br> Off (default):<br> If an empty label is entered (eg: in a combo field) and enter is pressed to accept it, it is treated as cancel and ignored<br> On:<br> If an empty label is entered then it is stored as label index 0<br> This helps prevent empty labels ending up in label lists due to sloppy user editing.<br> Note that if a label list already contains an empty label at a non zero index, PL will attempt to continue using its index. However its recommended that empty labels be reindexed to 0.<br><br />
<br />
*'''CHANGE''' DataSet2 had the tendency to add "0" as a label for numerical 0's in the data which didnt actually correspond to a label. The label list option "Interpret '0' As Label Index 0" is now handled by the dataset2 label loader and such indicies will stay 0.<br><br><br />
<br />
*'''CHANGE''' The ReFilterTableView routine operation will now apply to all views of a table if the panel index is set to 0<br><br />
<br />
*'''CHANGE''' See 5.20e release notes below for new note on a change to CopyFromClipboard. This note was missed from the release and affects how the "options" value is treated.<br><br />
<br />
*'''CHANGE''' Internal rework to support 64 bit platform. This should not affect the 32 bit version.<br><br />
<br />
=== 5.20g [new file version] ===<br />
<br />
*'''NEW''' New routine operations<br> GetViewportScrollX,GetViewportScrollY,GetViewportZoom<br> allow a viewport's zoom/scroll to be queried dynamically.<br><br />
<br />
*'''FIX''' Attributes modified while DisableUndo is set no longer initiate unblocks on dependent objects/views.<br><br />
<br />
*'''FIX''' Customised table views would be lost after an undo of a table edit for their table<br><br />
<br />
*'''CHANGE''' Reworked code for setting attributes and cells to support a "no updates" mechanism in a more straightforward way. No expected model impact.<br><br />
<br />
*'''REMOVE''' Removed section booking support (primary and secondary) This can be implemented in the model directly<br><br />
<br />
*'''REMOVE''' Obsolete portal option "Oncoming Train Check"<br><br />
<br />
*'''REMOVE''' Obsolete portal option "Act As Junction"<br><br><br />
<br />
=== 5.20e [new MDL file version] ===<br />
<br />
*'''NEW''' Routine operation CopyFromView copies a cell or selection from a table view, like CTRL-C. The panel and table specify which table view.<br><br />
<br />
*'''NEW''' System attribute s.DisableUndo (Run Engine) enables the modeller to disable the undo/revert mechanism that normally occurs when a routine is executed during lookahead (before the item actually moves).<br> Setting this non zero will cause attributes and tables altered during lookahead to retain whatever is done to them after the lookahead is complete.<br> The modeller must set this value back to zero before the routine finishes or an error will be reported.<br> This is intended for advanced users who are hooking into Planimate's lookahead mechanism, for example in routing trains. A previous "hack" way of achieving this functionality was to send a message during lookahead, since the undo mechanism did not extend to the message.<br><br />
<br />
*'''CHANGE''' CopyFromClipboard has different behaviour for the options.<br> It now requires "options" to be set; 0 no longer defaults to using the clipboard options. The bits are: 1: row labels 2: col labels $: formatted<br> So formatted with column labels needs value of 6<br><br><br />
<br />
*'''CHANGE''' The MatchedIndex reference type no longer stops with an error if a matching error occurs, it just returns 0.<br> This enables simple searches to be replaced with matchedindex references which is both faster and more memory efficient.<br><br />
<br />
*'''CHANGE''' Routine operation ImportIntoView renamed PasteIntoView<br><br />
<br />
*'''CHANGE''' Control key navigation no longer possible in user mode, to prevent users going places the modeller didnt intend<br><br />
<br />
*'''CHANGE''' The internal type of the iterate variable in a SEARCH operation has been changed to a long integer.<br> This means the search iterator variable will be treated as an integer and is limited to about 2 billion before it rolls over.<br> This should not affect any existing models.<br><br />
<br />
*'''CHANGE''' The mechanism for allowing breaking out of endless loops will now work for situations where routines are calling other routines. (the breakout poll counter is only reset when an event with a different time occurs).<br><br />
<br />
*'''FIX''' Purge attributes will no longer remove an attribute that is in the data objects list<br><br />
<br />
*'''FIX''' Track Swap Ends was broken<br><br />
<br />
=== 5.20d (new MDL file version) ===<br />
<br />
*'''NEW''' Table views with the column filter option enabled have a new option in their configuration context menu to specify a "Filter Broadcast". This gets sent after a change is made to the filters.<br> It is useful where an update or resort is needed after a new filter has been selected.<br> As for a table click broadcast, the view column, actual column and data id are set. Refer to the tuple reference (help menu) for the actual attribute names<br><br />
<br />
=== 5.20c ===<br />
<br />
*<br />
'''CHANGE''' Track log item parameters are no longer sent back from a message item to the parent of the message. These include:<br />
<br />
<br />
- loop enter/exit start/end delay times<br>- section nominal running time (s.TrackSectionNominalTime)<br>- section id (s.TrackLastSectionId)<br>- road id (s.TrackLastSectionRoad)<br> These parameters, logged and maintained by the track system, were being overwritten when a message item returned.<br><br />
<br />
*<br />
'''CHANGE''' An item that carries other items used to be called an "Agnet" its now called a "Carrier", a clearer term.<br />
<br />
<br />
*'''CHANGE''' s.ItemActAsAgent has been renamed s.ItemActAsCarrier<br><br />
<br />
*<br />
'''CHANGE''' "Agent Drop-OfF" has been renamed to "DropOff" and "Agent Pick-Up"&nbsp; has been renamed to "PickUp"<br><br />
<br />
*<br />
'''CHANGE''' PL no longer has the "agent" checkbox when a new class is named. This can still be set:<br />
<br />
- from the item class context as a defaullt<br>- dynamically using the s.ItemActAsCarrier attribute<br><br />
<br />
*<br />
'''CHANGE''' Table Click Broadcast behaviour:<br><br> 1) table clicks now send 2 additional attributes _from_row and _from_col pass the top left corner of any selected region. If there is no selected region, they are set to the current cell (like _row,_col)<br> 2) the _to_row and _to_col attributes will now be set to the bottom right of any selected region even for all table clicks. In past versions, they were set to the current cell for cell clicks/context clicks.<br />
<br />
<br />
*'''REMOVE''' Panel display options "Show Loop Names" "Show Item Paths" "Show Agent Paths"<br> are removed. Show/Hide flows from the background context menu is still supported<br><br />
<br />
=== 5.20b ===<br />
<br />
*<br />
'''CHANGE''' Planimate no longer uses track loop objects.<br> Track loops are now implemented using portal logic code. Documentation and demonstration models of this capability will be forthcoming<br> Old models containing them will give an error on load.<br />
<br />
Current PL license holders should&nbsp; contact ID for assistance<br>if they need assistance porting track loops.<br><br><br />
<br />
*'''NEW''' Sub Label list option "User Can Add Labels" With this option selected, labels typed into table fields/combos will be added to the sublabel list and also to the parent label list if they were not already members.<br><br />
<br />
*'''CHANGE''' The reallocate table rows operation will now release the allocated memory for a table if its count is 0 and the table contains 0 rows<br> This provides a way to release large allocated tables but be careful about fragmentation if you allocate/deallocate frequently.<br><br />
<br />
*'''SPEED''' inlined some table code for speed<br><br />
<br />
*'''CHANGE''' Track rework tech details:<br />
<br />
- removed loop object<br> - track object reworked to assume just 2 endpoints<br> (trackstation) which interface to portals and<br> a section inbetween<br> - found that tracks were repeatedly saving static <br> data, wasting MDL space<br> - track runtime code uses direct references between the<br> section/endpoints (no lookups needed now)<br> - route stores pointers to Portals now since no other<br> object can be on route<br> - removed base class for section and station,<br> section instance and station instance<br> section is just a simobject (like a spatial link)<br> station is now standalone as its just an interface class<br> - station/stationinstance no longer inherit from<br> simobject/instanceobject since they dont use 90% of<br> the functionality<br> - section names kept more in sync with endpoints<br> - Added an abstration layer for the FEC to manage objects<br> with (so it can send loop delay notifications to<br> TrackStationInstances)<br> - menu cleanups to remove loop references<br> - loop attributes left in place but return 0<br> - TrackLoop and TrackStation no longer reistered<br> PL objects<br> - inlined a LOT of code<br> - removed a LOT of track lookups and searches that are not<br> needed (some might reappear as services to the modeller later)<br />
<br />
<br><br />
<br />
=== 5.10p ===<br />
<br />
*'''NEW''' A new DLL data interface mode has been added, TABLEDIRECT which enables PL to pass table memory directly to the DLL which can read and write to it.<br> PL must preallocate the maximum number of rows the DLL would need, but it eliminates a 2 step copy process between the DLL, the dll interface and PL itself, allowing huge tables (millions of rows) to be shared by PL and DLLs that generate and process them.<br><br />
<br />
*'''SPEED''' Have rewritten the PL FEC to optimise it for speed. All event processing should be faster. I'm interested in observed performance vs. 5.10o<br><br />
<br />
=== 5.10o ===<br />
<br />
*'''NEW''' /DEBUGDLL command line option enables DLLs to be debugged using an external debugger. Normally PL loads DLLs in a way that does not enable them to be debugged.<br><br />
<br />
*'''CHANGE''' Distribution patterns supported 2 ways of generating PDF/CDFs, using an internal, hidden table and using a model table reference.<br> They now just support the model table reference, which keeps the data exposed and simplifies their UI.<br><br />
<br />
*'''CHANGE''' Some optimisations to the label list code for faster adding<br><br />
<br />
*'''FIX''' Viewports inside view panels would not animate smooth because the owning view panel had an "Update Interval Scale" of 0 which could not be edited.<br> It was this way since normally view panels do not contain dynamic objects to animate. View ports change all that.<br> This property can now be set from the background context menu. If you have a viewport with dynamic animation, set the "Update Interval Scale" to 1, or whatever fraction of the nominal interval you want the viewport to update at.<br><br />
<br />
*'''REMOVE''' Removed the range checking option from attributes.<br><br />
<br />
*'''REMOVE''' Removed billboard tables. Old models using them will not load<br><br />
<br />
*'''REMOVE''' Menu item to access the old icon editor. You can still call up its EXE manually for the time being but future versions of PL will be abandoning the ICN format<br> You can convert ICN to BMP using Tools-&gt;Resource File Admin<br><br><br />
<br />
=== 5.10n ===<br />
<br />
*'''NEW''' Penel-Engine Option "Broadcast Track Clicks" enables a broadcast to be sent when a user clicks on a track section. This includes details on the end points, section object index and mouse co-ordinates.<br> Help-Broadcast Tuple Reference-TrackClicked documents the fields<br><br />
<br />
*'''NEW''' Routine operation "TableReferenceSet"<br> This will return non zero if a table reference resolves to an actual table. This is useful in testing if an item table reference is actually set to anything, enabling say a module to have optional table parameters.<br><br />
<br />
*'''NEW''' LogDrivenGraphs now also send broadcast on the right mouse button. the new "_buttons" attribute is set to 1 for left button and 2 for right button.<br> This can be used to add modeller defined context menus to log driven graphs<br><br><br />
<br />
*'''NEW''' Table clicks now send "_buttons" as well (1=left,2=right) to be consistent with other broadcasts. _contextclick is still sent for compatability.<br><br />
<br />
*'''NEW''' Column option "No Combo If Only 1 element" will suppress a table combo dropdown appearing if the label list associated with the cell has only one member, however a cell click broadcast will still be sent. This is useful in some UI situations.<br><br />
<br />
*'''FIX''' PL no longer requires all the parameters to a DLL to be respecified if the DLL's parameter counts change. This helps when editing a model with a new version of a DLL<br><br />
<br />
*'''FIX''' PL will now pass tables with zero rows to a DLL so the DLL will still see the number of columns that were allocated. This prevents DLLs from giving validation errors.<br><br />
<br />
*'''FIX''' A buffer in the table click broadcast send code was not big enough (no reported issues with this)<br><br><br />
<br />
=== 5.10m ===<br />
<br />
*'''NEW''' Label lists have a new option "Remove Leading Spaces" This works like the "Remove Trailing Spaces" option except for leading spaces; any such spaces from user input or imported data are removed.<br><br />
<br />
*'''NEW''' New viewport option "Wheel Scroll On Click" enables a viewport with the "directly handle clicks" option OFF to be clicked (to get focus) and then scrolled with the mouse wheel.<br><br />
<br />
*'''NEW''' Added support for out-of-scope writing to item table references.<br> The routine operation "OutOfScopeWrite" enables writes to an item table reference pointing to a table which is not in scope. The item table reference concerned needs to be passed as the parameter. Write access to the table will then be allowed for that item.write access will only be granted if the item table reference is <br>&nbsp;-- <sup>pointing to a table at the time the OutOfScopeWrite() operation is</sup> <sup>performed</sup><br>&nbsp;--<sup>out of scope write access is lost when the item table reference is</sup> <sup>reassigned or cleared</sup><br>&nbsp;--<sup>out of scope write access does not carry through message sends or</sup> <sup>returns, broadcasts or items split from the original item.</sup><br />
<br />
'''<sup>Note</sup>'''<sup>:</sup><br />
<br />
<sup>item table references can always be written to if the table is in scope at the location where the reference is used. Getting permission with OutOfScopeWrite() is not necessary in this case</sup><br />
<br />
<sup>This operation can lead to hard to debug code, since table access can be occuring from unexpected places. The routine operation can be searched for (using the Find routine operation capability).</sup><br />
<br />
<sup>A key benefit of this feature is enabling code reuse and empowering modules to operate on table data they are "called" with.<br></sup><br />
<br />
&lt;sup&lt;/sup&gt;'''FIX''' Module loading/model merge code now supports data object reference, including references to label lists in the data object list. Its quite complex to implement as there are 2 levels of merge needed, firstly the data object references are merged then the label lists are merged (which may merge data object lists when lists are combined).<br />
<br />
*'''FIX''' Using SetViewportScroll() on a visible viewport has immediate effect<br><br />
<br />
*'''FIX''' Rework scrollbar code; scrolling should be smoother in popup dialogs<br><br><br />
<br />
=== 5.10l ===<br />
<br />
*'''CHANGE''' The HandlePopupMenu and SetMenuBar routine operations now will read 2 additional columns in the menu table, if they exist.<br> IF THE MODELLER WAS USING COLUMN 4 or 5 for their own data, this data needs to be moved as the menu ops will use what is in column 4 and 5.<br> The existing columns were:<br><br><br />
<br />
column 1: depth<br />
column 2: code (refer to 5.09f notes)<br />
column 3: label<br />
'''NEW COLUMNS are:'''<br />
column 4: disable flag, 0 = item enabled, 1 = item disabled<br />
column 5: tick mark, 0 = no tick, 1 = ticked<br />
<br />
'''**********************************************************************'''<br />
** Older models using HandlePopupMenu and SetMenuBar with additional<br />
** modeller data in columns after the first 3 will need updating.<br />
''' It is intended that these columns will eventually be labelled but this has not been incorporated in this release.'''<br />
<br />
<br />
*'''NEW''' Change-&gt;File option "Execute commands using shell"<br> When this option is selected, executed commands are processed via the windows shell rather than the low level EXE loader.<br> This enables URLs and data files to be launched, with Windows automatically determining the application to open the data files with as happens when they are double clicked.<br><br />
<br />
*'''NEW''' Change-&gt;File Option "Dynamic Command"<br> When this option is selected, a command line for the execute command feature is specified using a reference, like a dynamic file reference. The default is a "0" or "1" which obviously wont achieve much. A label reference will usually be useful.<br><br />
<br />
*'''FIX''' Some of the obscure file operations might have autopurged themselves (eg: DeleteResource), now fixed<br><br><br />
<br />
=== 5.10k ===<br />
<br />
*'''NEW''' Log driven graph data and configuration tables can now have a column _colorrgb. If this column is present, the cell provides the colour as an RGB value rather than a palette index, enabling any colour to be specified.<br> This column overrides _color if both are present in the same table.<br> The EncodeRGB() routine operation may be handy.<br><br />
<br />
*'''NEW''' Routine Operations InterpolateValue (Arithmetic) InterpolateColor (Paint)<br> InterpolateValue can be used to compute an interpolated value between value1 and value2 based on a ratio value. If the ratio is 0.0 then value1 is returned, if its 1.0 then value2 is returned.<br> InterpolateColor does the same thing except it works for RGB colour values, which represent a colour by 3 bytes packed together and hence need special handling to interpolate correctly.<br><br />
<br />
*'''CHANGE''' Internal graphics code uses more RGB colours with translation from palette colours moved to higher levels. The palette handling code should still be intact so palettised images are still supported.<br><br />
<br />
=== 5.10j ===<br />
<br />
*'''NEW''' Table option "Lock Cell Format"<br> This option prevents table cell formats being copied (losing the existing format) when routine code assigns a table, row or column to another table, row or column.<br> This makes it easier to transfer data to a view which has customised cell formats. This option will be on for newly added tables and off for tables in previous models. Turning it on also speeds up table data copying.<br> Note: when setting one table to another ie:<br> t.table2[] = t.table1[]<br> cell formats in t.table2 will only be retained if the 2 tables are identically sized before the assignment.<br><br />
<br />
*'''NEW''' New option Settings-&gt;End User option "Defer display until Model Loaded BC"<br> This prevents a model loading in User Mode or as an application from displaying anything in the main window to after the Model Loaded broadcast has been sent. This is useful for applications which need to process some data before presenting an initial display to the end user.<br><br />
<br />
*'''FIX''' Paint palette works again<br><br />
<br />
*'''CHANGE''' Graphics internals pen/brush caching removed, some internal cleanup to support future graphics features<br> Removed palette oriented pen/brush cache in preparation for supporting RGB colors in PL<br><br />
<br />
=== 5.10i ===<br />
<br />
*'''NEW''' Condition editor reference buttons now use inplace field editors like the routine editor (if enabled). This enables typing of references, adding attributes on the fly etc.<br> Also as with the routine editor, pressing F2 opens the full reference selector dialog.<br><br />
<br />
*'''FIX''' The menubar handler now waits for button up status to prevent bogus "pause" dialogs appearing when user menubar options trigger broadcasts (and hence the run engine) which were seeing the mouse button as down even though a mouseup event had already occurred.<br><br><br />
<br />
*'''FIX''' Points/blobs in graphs are now properly clipped<br><br />
<br />
=== 5.10h ===<br />
<br />
*'''FIX''' If clicking on an object in a viewport caused a model error which stopped the run AND hover broadcasts were enabled, the platform would crash due to hover broadcast being sent as the run was being shutdown<br><br />
<br />
*'''FIX''' Log driven graph lockup when autoscaling was enabled but there were no points to plot<br><br />
<br />
*'''FIX''' Prevent some junk being drawn on edges of graphs when they have been scrolled<br><br />
<br />
=== 5.10g ===<br />
<br />
*'''FIX''' Viewports without a view no longer block clicks<br><br />
<br />
*'''FIX''' Viewport's show flow lines when parent is a view<br><br />
<br />
*'''FIx''' Breaking out of an iterate tables loop was broken<br><br />
<br />
*'''FIX''' If a model's DB became inaccessible whilst the model was loaded (eg: network share) then PL would crash when new model was being processed even though the DB wasn't necessary.<br><br />
<br />
*'''CHANGE''' An unconnected wormhole exit now gives an error rather than acting blocked. this has enabled:<br><br />
<br />
*'''CHANGE''' The Paint Button ImageWidth/ImageHeight properties now evaluate the state attribute of the button when determining which image to return information for. This is useful as it means you can query the image information of a button before it has actually been redrawn in a changed state.<br><br />
<br />
*'''SPEED''' A lot of function inlining (preventing calls) and cleanup has resulted in reduction of core engine processing overheads:<br><br />
<br />
- item create/destroy/enter/exit monitoring at portals<br>(whether portal monitoring was enabled or not) is faster<br>- all exits process lookaheads slightly faster<br>- class mapper/unmapper calls in portals that dont use them (ie: most)<br>now avoids unneded checking<br>- unblocking stack depth checking is faster (UnblockPrevious())<br>- routine case handler current-line tracking faster<br>(needed so PL can report which line when a model error occurs)<br>- iterate/iterate table current-line tracking faster<br><br />
<br />
=== 5.10f ===<br />
<br />
*'''NEW''' New format "OS Percent" is like value except values are scaled by 100 and a&nbsp;% is appended<br> Input wise, it handles values with a leading, trailing or no percent symbol.<br><br />
<br />
*'''FIX''' If a table view scroll was linked to a broadcast and that broadcast did a repaint and that repaint caused the table view to redraw and it that redraw determined that a scroll bar was not necessary then a crash would occur as PL attempted to query the now non-existent scroll bars position in the original scroll handler<br><br />
<br />
*'''FIX''' Fix reference expression parser: index was not being deleted in unexpected cases causing a leak and an attref scan error to be reported as a result<br><br />
<br />
*'''FIX''' Reworked endpoint plotting for column overlay graphs to handle closing/opening of bars at the endpoints vs. points. This should remove unexpected things at the right hand side and stray points at the LHS in point mode.<br><br><br />
<br />
=== 5.10e ===<br />
<br />
*'''NEW''' Routine operation "SetViewportTarget"<br> This enables the target of a viewport to be set dynamically.<br> It takes 3 parameters: Panel With Viewport Current Panel Inside Viewport New Panel Inside Viewport<br> "Panel With Viewport" and "Current Panel Inside Viewport" identify the viewport to modify.<br> Current Panel can be 0 to specify the first viewport found; this is useful if the panel only contains one viewport.<br> Panel With Viewport can be 0 to specify the toplevel panel<br> The New Panel can be 0 to specify "no panel" in which case the viewport becomes hidden in user mode.<br> Panel references can either be object list references (need to be portals) or panel list references.<br> Updates are applied immediately; no force repaint is needed.<br><br />
<br />
*'''NEW''' Enhanced portal subsystem menu and hence sidebar context menu (more options available)<br><br />
<br />
*'''NEW''' Enhanced viewport editing including ability to fit to viewed portal<br><br />
<br />
*'''CHANGE''' Unlinked viewports no longer display in user mode<br><br />
<br />
=== 5.10d ===<br />
<br />
*'''NEW''' A number of new value formats have been added which use the user's locale settings in the operating system (OS) to perform formatting and parsing of values.<br> These are particularly useful in interfacing to other apps which expect data in a local locale format.<br> The new formats are: "OS Date Time", "OS Date", "OS Time", "OS Currency", "OS Value"<br> NOTE: Since these formats are locale/user specific, a formatted DAT file written using these formats may not be readable by an instance of Planimate running in a different locale.<br><br><br />
<br />
=== 5.10c ===<br />
<br />
*'''NEW''' The Switch mode "Lookahead Separator" has been repurposed to "Track Lookahead Separator".<br> In this mode a switch will forward track "checknext" lookahead tests out the first outgoing path. Any other tests including normal item lookaheads and movements are directed out the second outgoing path.<br> The "Assume No Blocking" option works on the second path. Track CheckNext tests (out the first path) do not depend on the setting of this option and are always performed. Things are easier to work with if the assume no blocking option is on.<br> This mode is useful in track models where the modeller is adding logic to Planimate's track "far" lookahead rules. It makes it easier to separate the "far lookahead" flow from the actual item movement flow.<br> The suggested method:<br> Separator switches after portal entries connected to tracks should have assume no blocking off<br> Separator switches after modeller capacity/wormhole entries etc (where the modeller is triggering the track checknext lookahead) should have the "assume no blocking" option on. Otherwise they are more complicated to work with (you have to lookahead twice, second time without track checknext).<br><br />
<br />
*'''NEW''' A new routine operation "EnableTrackCheckNext" enables a tracks modeller to convert a standard Planiamte lookahead (eg: when an item is about to leave a capacity in a portal) into a track lookahead detectable by the "Track Lookahead Separator" switch mode.<br> This is useful where items are being transferred between different track networks, eg: using wormholes.<br> The operation executes during lookahead and is automatically undo by Planimate when the lookahead thread unwinds behind the change object. If PL is already doing a track lookahead or an item is actually moving, the operation does nothing.<br><br />
<br />
*'''CHANGE''' Switches no longer cache decisions made during track lookahead. This shouldn't affect existing models as the track lookahead mechanism already purges the cached decisions. This change makes the EnableTrackCheckNext routine operation work properly for switches in the track lookahead path (following the separator, which already works ok).<br><br />
<br />
*'''CHANGE''' The switch has been optimised. Some switch modes are now more efficient in cases where the switch is used by the same class in succession.<br><br />
<br />
*'''NEW''' RHS Y Scale for log driven graphs.<br> This enables graph data with 2 different Y scales to be pllotted on the one graph. The 2 scales are autocalculated and displayed separately, one on the left and right sides of the graph.<br> To use this first enable the RHS Scale option in the scale options. You will need to use the Overlay Configuration Table added in 5.09r to specify that a given overlay should be processed using the RHS scale. Add a column "_rhsscale" and set this to 1 for the overlays<br><br />
<br />
*'''CHANGE''' Log driven graph - data overlays which are not enabled will no longer affect the autoscale computations.<br><br />
<br />
=== 5.10a ===<br />
<br />
*'''NEW''' Switch mode "Lookahead Separator"<br> &lt;obsoleted&gt;<br><br />
<br />
*'''NEW''' Added a test for a track logic condition where a loop exit delay end is being sent where the item no longer has knowledge of the section that it had come from (lookahead issue).<br><br />
<br />
*'''CHANGE''' Renamed system attribute "DoingLookahead" to "RoutineInLookahead" to more accurately reflect what it is signalling - ie: a routine is being executed during lookahead, not item movement.<br> This will also be set for messages sent from a routine in lookahead.<br><br><br />
<br />
*'''CHANGE''' Adjustment to y scale values to make them consistent with y scale labels<br><br />
<br />
*'''FIX''' Log Driven Graph handling of overlay 0 fixed. This overlay is not plotted but can still be used to set scale ranges.<br><br />
<br />
*'''FIX''' Fixed an issue that could crash when a hover broadcast was sent whilst PL was busy initialising the model (eg: doing track route fill intermediate steps at startup)<br><br />
<br />
*'''FIX''' Fixes the undoing of random numbers generated doing lookahead; the random generator was not being properly reversed, causing it to generate a different random value during move. This affected code where an attribute was set during lookahead and immediately used in a blocking switch with no intervening capacity. The attribute of the item would be inconsistent with the path it took.<br><br />
<br />
*'''FIX''' Fix the DLL loader crashing if the DLL wasn't found<br><br />
<br />
*'''FIX''' Added 2 checks to detect if a train is transferred from one track portal to another (eg: through a wormhole) and that train had a loop entry delay under way. In this case it is important that the destination also have loop delays enabled so PL properly handles the loop delays on both ends. If the option is not consistently set then PL will now report an error.<br> Previous versions would become erratic due to a loop delay end event being unable to associate with a road to make "clear".<br><br />
<br />
*'''SPEED''' reworked the track fill steps recursion stack handling to use a faster table and avoid allocation of memory until its actually necessary<br><br />
<br />
=== 5.10 ===<br />
<br />
*'''NEW''' 5.09z introduced cell writes to item table references that refer to a table that is "visible' or in scope. It is now extended to allow row and other operations as well.<br><br />
*'''FIX''' Portal copy/paste was broken in 5.09z<br><br><br />
<br />
<br><br />
<br />
=== 5.09z ===<br />
* '''NEW''' New system attribute s.RouteTestRow (Track submenu) enables a modeller to query which row of a Route Selection table is being tested. This is useful when the change objcet multiple route test capability (added in 5.09y) is being used, as it enables the modeller to access other data they are storing in the table.<BR/> The value is the row number from the table.<BR/> This value is set only during lookahead for change objects immediately downstream of the change object that is testing routes from the table. Otherwise this value should not be relied upon for any purpose.<BR/><br />
<br />
* '''NEW''' Subsystems and Panels in the model explorer are sorted by name<BR/><br />
<br />
* '''NEW''' Item table references can have values written to them if the table referenced by the item is in scope at the reference doing the writing<BR/><br />
<br />
=== 5.09y ===<br />
* '''NEW''' Table->Advanced->Expected Row Count<BR/> This value enables a modeller to specify how much row memory should be allocated for the table upfront.<BR/> If a table is going to grow to a known mumber of rows, performance can be greatly improved by setting this value so that the table is allocated right from the start. This avoids the table having to reallocate itself as more rows are added, which wastes time and worse, fragments the system memory into small, useless chunks.<BR/> Setting this value too high will waste system memory so take care.<BR/> The Routine operation AllocateTableRowMemory does the same as this setting, except it can be dynamic. This value is useful where the expected maximum size of the table is known upfront.<BR/><br />
<br />
* '''NEW''' Table->Advanced->Default New Column Format<BR/> This enables the initial format of newly added columns to a table to be specified. This can include label lists. This is useful for tables which import from data which adds columns which should be of a particular format.<BR/><BR/><br />
<br />
* '''NEW''' The route selection dialog in the change object now enables a number of routes to be specified and they will be tested sequentially, with the first "accepting" route taken by an item.<BR/> The routes to test are specified in column 1 of the table. The reference must be to the entire table. The rows in this column should be set to the route IDs to test.<BR/> An additional "row limit" attribute can be set. This provides a convenient means of limiting the number of rows tested. This is useful because the table needs to be prepared and available during lookahead, during which time rows cannot be added/removed from a table. The default of -1 for the row limit will scan all rows in the table.<BR/><BR/><br />
<br />
* '''CHANGE''' The route selection dialog has been cleaned up<BR/><br />
<br />
* '''CHANGE''' Previous versions of Planimate enabled a train route assignment using a table of routes hard-coded in the change object by the modeller. (local table mode). This mode of operation has been removed. Route selection is now always made using the global route IDs associated with the routes.<BR/><br />
<br />
=== 5.09x ===<br />
* '''FIX''' Routine operation "RegisterBlockedTrain" works way up hierarchy of portals until it finds a portal that is connected to a track network.<BR/> This ensures that the same portal gets registered by the modeller and by the track network itself<BR/><br />
<br />
=== 5.09w ===<br />
* '''NEW''' New routine operation "RegisterBlockedTrain" enables a modeller using tracks to register that a train has become blocked for reasons the track system is unaware (eg: modeller's own lookahead has determined the train should not move).<BR/> This operation should be used in lookahead.<BR/> The train is registered at the current portal the routine that executes this operation is located. The portal exits of this portal will be unblocked when the track system attempts an unblock. Hence the train should be reachable in a reverse direction from the portal exits (ie: without an intervening capacity) otherwise the unblock message will never reach the capacity at which the train is waiting.<BR/><BR/><br />
<br />
* '''FIX''' Exporting of free text cells to clipboard removes new lines AND carriage returns to prevent cells being broken up. (There isn't a standard way of bringing multiline text into cells via the clipboard).<BR/><br />
<br />
=== 5.09v ===<br />
* '''FIX''' Track error 1156 no longer occurs if a train is blocked multiple times on different tracks (due to complex lookahead) at the same portal. This works around the error where lookahead is being used to test multiple outgoing tracks from that portal and the engine has had Move() recursed (as part of the lookahead) which caused it not to reset the item's blocked history upon a subsequent test of a track.<BR/><br />
<br />
=== 5.09u ===<br />
* '''NEW''' Table and Graph Views without a title show a tool tip in edit mode when the mouse is near the top where the context sensitive menu appears. This is useful in identifying the view and also finding the location for the context menu<BR/><br />
<br />
* '''NEW''' Cell Views can now have a broadcast associated to send aftor an edit, like attribute views<BR/><br />
<br />
* '''NEW''' PL will attempt to show more detail following an internal error 1156 error (track system train being blocked at 2 locations).<BR/><br />
<br />
* '''FIX''' Label lists used in attributes in routines now identify the owning object<BR/><br />
<br />
* '''NOTE''' Partial work on RHS graph scales underway; editors and data saving/loading are present but not actually used yet.<BR/> Report if any existing graph code is broken compared to 5.09t<BR/><BR/><br />
<br />
=== 5.09t ===<br />
* '''FIX''' Autosave with alternate filename now works properly<BR/><br />
<br />
* '''FIX''' "Immediately Copy To System Clipboard" now works with customised table views<BR/><br />
<br />
=== 5.09s ===<br />
* '''CHANGE''' Autosave of models (if enabled has been changed:<BR/><br />
- it saves to modelname(AUTOSAVE).mdl hence not disrupting<br />
the modellers explicitly saved files and backups<br />
- it does not save the DB to the autosave files<br />
- it does not clear the "saved" flag<br />
- it does not clear tables which are set to clear before save<BR/> This should make autosave more useful as a backup and less intrusive to work flow.<BR/><br />
<br />
* '''CHANGE''' A force repaint routine operation is ignored if a repaint is already underway. This was made possible by the modeller doing a force repaint within a table row scroll broadcast being sent by PL as it first showed a table view.<BR/><br />
<br />
* '''NEW''' "Run Behaviour" Option "Immediately Copy To System Clipboard". Normally, data copied from tables in PL stays internal to PL until focus is switched to another application, at which point it is copied to the windows system clipboard.<BR/> This was needed on older systems where copying to the system clipboard used precious system memory and was slow.<BR/> With this option on, the copy to the system clipboard happens as sson as the data is copied.<BR/> This option is useful where modellers implement the ctrl-v handler for pasting and they want internal PL data, copied with ctrl-c to be available (ie: the data needs to be in the system clipboard).<BR/><BR/><br />
<br />
=== 5.09r ===<br />
* '''CHANGE''' The Log Driven Graph has been rewritten. It now supports the configuration of overlays being defined dynamically using a separate configuration table. This means graph configuration details do not need to be provided as extra columns in the source data, potentially saving a lot of memory for large data sets. Other new features:<BR/><br />
- a scale factor for Y can be provided as well as the offset. This is<br />
useful for plotting data with different ranges<br />
- plots can be enabled/disabled/reformatted without changing the<br />
source data table<br />
- data path has less overhead so it should be faster<BR/> Note that the "End Point Sets Colour" option is no longer supported. For horz bars and lines, the start point sets the colour/width/line style. For vert bars, points and labels, the current point sets their properties.<BR/> Older models that used the end point to set properties for bars and lines will need some work.<BR/> The plot mode names have been changed.<BR/> Documentation is here:<BR/> http://wiki.planimate.com/Log_Driven_Graph<BR/> Due to the separate overlay configuration table, it is now viable to consider plot modes which require more parameters to specify. There is now future possibility for:<BR/><br />
- plotting with icons/bitmaos instead of points<br />
- other properties such as text rotation<br />
- 3D transformation of plots<BR/> enabling/disabling overlay does not alter scale<BR/> Note there may be impacts on column overlay graphs These need testing<BR/><br />
<br />
* '''FIX''' "Show Location" is greyed out in the error/breakpoint dialog if the error is occuring at a time where a panel change would break the platform, for example an error whilst a panel is being drawn.<BR/><br />
<br />
* '''FIX''' Planimate table views were sending scroll update broadcasts whilst they were searching for the correct scroll offset to show a given cell. This created an "elevator effect" when scrolling a large table AND a scroll broadcast was used AND the scroll broadcast did a repaint.<BR/> PL now only sends the scroll broadcast once it has determined the correct scroll offset for the table view.<BR/><br />
<br />
=== 5.09q ===<br />
* '''FIX''' Find list now goes to correct object when list has been sorted<BR/><br />
<br />
* '''FIX''' Fix a crash bug in table editor -> wasn't handling case of a font change making no rows visible when updating its titlebar<BR/><br />
<br />
=== 5.09p ===<br />
* '''NEW''' Find capabilities for change objects performing FILE actions, ODBC and route assigns<BR/><br />
<br />
* '''NEW''' Options under Settings->End User<BR/><br />
Hide Title Bar : Shows main window without the title bar in user mode<BR/> Hide System Menu : Hides the system emnu and close box in user mode (equivalent to command line option /NOCLOSE)<BR/> Maximise On Load : Maximises the main window when loading a PBA ONLY (equivalent to command line option /MAXIMISE)<BR/><br />
<br />
* '''NEW''' The model INI file can include a section to configure sockets<BR/> [Sockets] "socketname" "ip-addr" "port-number"<BR/> "ip-addr" is ignored if the socket is configured as a server and should be set to ""<BR/><br />
<br />
* '''CHANGE''' Planimate and Planimate PBAs no longer create a PLANIMAT.DBG file by default. Use the /DEBUGFILE command line option to have PL create the file, which is useful when debugging.<BR/> The "Show Debug Log" option in the tools menu is now hidden unless this commandline option is used.<BR/><br />
<br />
* '''CHANGE''' Removed the old "Run Reports" (RUN files) that PL generated as they are obsolete given the way PL is now used. If you miss it, let me know.<BR/><br />
<br />
* '''NEW''' Enabled alternate code for blitting icons for non WinNT systems. Rotated icons may look strange but it makes PL usable under WINE when its in Win98 mode<BR/><br />
<br />
=== 5.09o ===<br />
* '''FIX''' Saving standalone EXEs is now available again with more recent keyfiles issued. Restrictions still apply if you do not have an "open PBA" keyfile.<BR/><br />
<br />
* '''FIX''' If a table with a column formatted for freetext but containing no rows was copied, PL would fall over when the model was saved.<BR/><br />
<br />
* '''FIX''' Enabling the Pause At Events debugging option whilst Model Clicks While Running (engine option) is enabled will give a helpful message and not enable the option. These options cannot be on together.<BR/><BR/><br />
<br />
=== 5.09n ===<br />
* '''FIX''' Fixed a crash due to a buffer overflow when setting the tuple name of a table column from routine code. Planimate will now complain if an attempt is made to set a tuple name longer than the allowed limit (currently 32 characters).<BR/><br />
<br />
* '''FIX''' Fix a crash when editing expressions and "[]" were inappropriately used, also fixed some leaks in error cases which could cause "scan count" warnings to appear until the model was reloaded into a fresh instance of PL<BR/><br />
<br />
* '''FIX''' Fix a crash when a bend point in a pipe, spatial link or track was selected and the link was directly deleted (not via the multiple selection).<BR/><br />
<br />
=== 5.09m ===<br />
* '''NEW''' Column properties TextColor and BackgroundColor<BR/><br />
<br />
* '''NEW''' Routine operation "FormatNameIntoLabel" retrieves the internal (tuple) name of a table or column and makes a label out of it. If the label already exists, its index is returned.<BR/><br />
<br />
* '''CHANGE''' Routine operation "FormatTitleIntoLabel" now returns the index of an existing label instead of creating a duplicate.<BR/><br />
<br />
* '''CHANGE''' SetFormat accepts an entire labellist as its label list name parameter, resulting in the label list's name being used.<BR/><br />
<br />
* '''FIX''' GetFormatListName was adding duplicate labels. It now returns the index of any existing label<BR/><br />
<br />
* '''FIX''' Fixed a typo in a route error message<BR/><br />
<br />
* '''CHANGE''' Have set up the old kbase.planimate.com to redirect note requests made by older versions of Planimate (when the option to use the web for context help was used) to the appropriate page on wiki.planimate.com<BR/> This means older versions of Planimate will also have access to the material on the wiki and the idkbase server can be decomissioned.<BR/><br />
<br />
=== 5.09l ===<br />
* '''NEW''' Default label list "_value formats" lists the names of the formats returned by GetFormat()<BR/><br />
<br />
* '''NEW''' Routine operations GetFormat() and SetFormat() enable the format of a data target to be retrieved. The format is a number corresponding to the formatting option. The _value formats label list enumerates the formats supported.<BR/> The SetFormat operation includes a third parameter which is ignored unless the assignment is for a "Label" format which which case it should name the label list.<BR/><br />
<br />
* '''NEW''' Routine operation "ReFilterTableView" reapplies any active filter to data that has changed in a table (eg: after a sort). It gives no error if there is no filter active.<BR/><br />
<br />
* '''NEW''' Routine operation "GetFormatListName" will create a label of the name of the label list that the given data is formatted for. This is useful when GetFormat() indicates the format is for a labellist and you want to know which one.<BR/><br />
<br />
* '''NEW''' Paint state change broadcast sets _paintid to the index of the paint object<BR/><BR/><br />
<br />
* '''NEW''' Some Help menu item enhancements to facilitiate getting useful content out of PL to feed the new wiki<BR/> Help->Show All Labels: shows all user label lists and their contents Help->Show all Routine operations: shows all routine operations.<BR/> The text includes formatting comamnds for the wiki.<BR/><br />
<br />
* '''CHANGE''' Routine Operation "FormatForList" is recategorised under special to match the other meta-formatting operations<BR/><br />
<br />
* '''CHANGE''' Planimate now uses the new knowledgebase at wiki.planimate.com the URL is configurable in the Planimate INI file and will be set up automatically when you run Planimate.<BR/> By default Planimate will use the internal help file and ctrl-clicking a context help button will use the wiki.<BR/> Setting HelpIDKBaseEnable=1 in the INI file reverses this behaviour, making the wiki the default.<BR/> The IDKBase code has been removed from PL.<BR/><br />
<br />
* '''FIX''' Had incorrectly labelled the "Write Column Labels" option in the Change Object->File Write options<BR/><br />
<br />
* '''FIX''' Column filter dropdown font now matches the column font<BR/><br />
<br />
* '''FIX''' Planimate was not bumping the INI file version when saving an updated INI file.<BR/><br />
<br />
* '''FIX''' If an import from clipboard was performed in the table editor into a table with existing rows and one of the columns was formatted for free text and a message needed to be displayed during the import (eg: missing label) PL would give LinkedList errors as the view would try to redraw what it thought wwre the existing rows but which since had been deleted<BR/><BR/><br />
<br />
=== 5.09k [new MDL file version] ===<br />
* '''NEW''' A new column property and associated label, RotateTitle enables title rotation of table columns to be set at runtime<BR/><br />
<br />
=== 5.09j ===<br />
* '''CHANGE''' In object editing mode, with the "show all paths" option enabled, arrow heads over objects no longer take the click. This makes more sense as in object mode, objects should have the click precedence.<BR/><br />
<br />
* '''FIX''' Fixed the CTRL-V broadcast from 5.09i, it wasn't putting the key code in the right attribute. Made _contextclick = 2 for key events.<BR/><br />
<br />
* '''FIX''' Selecting multiple objects no longer snaps to a square box when the shift key is pressed<BR/><br />
<br />
=== 5.09i ===<br />
* '''NEW''' Added new routine operation "GetMyDocumentsName" which returns a path including a specified filename and folder name within the My Documents folder. The folder is created if it doesn't exist.<BR/><br />
<br />
* '''NEW''' Table click broadcasts now include the Data Object List index assigned to the table (0 if none assigned) in attribute "_dataid". This is useful where a number of tables send the same broadcast and you want a way to tell which table the broadcast is for.<BR/> A future version will include an operation to convert a data object index into a table reference<BR/><br />
<br />
* '''NEW''' Typing CTRL-V in a table view with cell click broadcasts enabled can now send a cell click broadcast, as if the view was clicked, but with a new attribute called called "_key" set to the ascii code of CTRL-V (22).<BR/> This enables a modeller to handle the paste request, typically using the paste routine op introduced in 5.09e.<BR/> The broadcast will only be sent if the System->Modeller option "Enable Table Key Event Broadcasts" is enabled. This is so old models dont get confused by unexpected "cell click" broadcasts. Before enabling this option, modellers should update existing cell click handlers to test if "_key" is non zero, to determine if the event is an actual table click or a command key press. This is best done in the code that checks for _context (right mouse button) clicks.<BR/> Other keys may be added in the future.<BR/> If just a cell is selected, its location is set in _view_row, _to_row etc.<BR/> If a cell range is selected, then the cell range is set, top left in (_view_row,_view_col) and bottom right in "_to_row,_to_col) ie: the actual current selection isn't sent. This is because if the user has some cells highlighted, they'd expect a paste to occur into those cells. For ranges, the modeller can pass this info to the PasteIntoView routine operation.<BR/><br />
<br />
* '''CHANGE''' Renamed routine operation "GetDocumentName" to "GetAppDataName" to more accurately reflect what it does - that is, create a folder/ file specification within the user's Application Data folder.<BR/><br />
<br />
* '''CHANGE''' Change object->File write operation now has separate control over including row and column labels. In previous versions, one option controlled the presence of both<BR/><br />
<br />
* '''NEW''' Experimental "Rotate Title" option on table columns, draws the title vertically. The Row Title lines table option is useful in making more space for the titles.<BR/><BR/><BR/><br />
<br />
=== 5.09h ===<br />
* '''NEW''' /NOCLOSE command line option prevents close box, windows menu icon and min/max box. This is useful where PL is an embedded application<BR/><br />
<br />
* '''CHANGE''' Fixed bug in message entry selector which caused a lockup if a message entry had a long name. Also made the pick dialog bigger<BR/><br />
<br />
* '''CHANCE''' Internal clenaup of startup window code and removed some unused network code<BR/><br />
<br />
=== 5.09g ===<br />
* '''NEW''' Routine operation "ForceRepaintPanel" enables a repaint of just one panel. This is useful when the panel is in a viewport and you dont want to repaint everything<BR/><br />
<br />
* '''NEW''' Object property "ObjectDraggable" can set this property at runtime. This is useful for portals<BR/><br />
<br />
* '''NEW''' Panel option "Broadcast Background Drags".<BR/> When this is selected, drags in the background of a panel are broadcast to the panel as Broadcast "_Panel Drag"<BR/> The following fields are sent:<BR/><br />
_panel : the panel index of the panel clicked<br />
_command : 1 = drag starting _dx,_dy are 0)<br />
2 = drag update _dx,_dy are delta<br />
3 = drag end _dx,_dy are final delta<BR/><br />
_dx,_dy : delta dragged, from the starting point<br />
_keys : key down flag bitmask<br />
1=shift, 2=ctrl, 4=alt<br />
_buttons : button down state, 1 = left button, 2 = right<br />
test this with a bit mask as future versions may<br />
have combined values<BR/><BR/> This is useful in implementing draggable map displays<BR/><br />
<br />
* '''CHANGE''' Planimate object co-ordinates are now stored as integers instead of double precision values. Any models that depended upon fractional object co-ordinates will need to be reworked.<BR/> In the past spatial link models where objects were placed on top of each other required fractional co-ordinates, now that the link cost can be set explicitly, the fractions are no longer needed.<BR/><br />
<br />
* '''FIX''' Cleaned up paint object runtime property/text setting to be more efficient if the paint object is not on a panel with any other panels inheriting from it<BR/><BR/><br />
<br />
=== 5.09f ===<br />
* '''NEW''' Routine operations "HandlePopupMenu" and "SetMenuBar"<BR/> HandlePopupMenu enables a selection to be made from a hierarchic popup menu. The value is returned immediately and it can be used in lookahead (useful for advanced debugging).<BR/> SetMenuBar enables a complete modeller customsied menubar, with hierarchic menus, to be built in one step. It superceeds the "ClearCustomMenubar" and "AddListToMenu" routine operations.<BR/> Both these operations take a 3 column table as a parameter (the table can have more than 3 columns but only the first 3 are used).<BR/> The columns are: depth: sets the depth of the submenu, 0 = top level label: the text label for the menu item<br />
id : return id for menu item<BR/><BR/> The menu structure is defined by enumerating the menu items in prefix order, for example for:<BR/><br />
File Edit Tools<br />
-------------------<br />
New Cut Add--->Table<br />
Load Paste Label<br />
Save Reset<br />
Quit<BR/><BR/> depth label id<br />
0 File 0<br />
1 New 1<br />
1 Load 2<br />
1 Save 3<br />
1 Quit 4<br />
0 Edit 0<br />
1 Cut 5<br />
1 Paste 6<br />
0 Tools 0<br />
1 Add 0<br />
2 Table 7<br />
2 Label 8<br />
1 Reset 9<BR/><BR/> Notes:<br />
- typically it will be useful to use the same list & format<br />
for column 2 and 3, so the command names and handler names<br />
are common<br />
- A label of '-' is a separator<br />
- Dont use a separator as a submenu<br />
- Menubars can not have selection items at their top level,<br />
(depth=0), only submenus. Popup menus do not have this<br />
restriction<br />
- sub menu items need not have an ID set as they are not themselves<br />
selectable<BR/><br />
<br />
* '''CHANGE''' The step editor will be sized bigger to support editing the ImportIntoView routine operation without scrollbars, but it needs to be the first routine line edited when the routine is opened as the step editor gets cached while the routine list is open<BR/><br />
<br />
* '''CHANGE''' Reworked the status bar to show the item message area even when the activity indicator icon has been hidden<BR/><br />
<br />
* '''CHANGE''' For table columns formatted with the "Open With Combo List" option, the combo will close completely when a click outside the list occurs, instead of just collapsing the list.<BR/><br />
<br />
* '''FIX''' Folder names with "."s in them were causing problems for the icon mover (and probably other places) these should be resolved<BR/><br />
<br />
=== 5.09e ===<br />
* '''NEW''' Routine operation "ImportIntoView"<BR/> This operation enables the modeller to trigger importing of the current Windows clipboard into a table view. It is intended to be invoked in a routine triggered by a cell click in a table view<BR/> The operation takes the following parameters:<BR/><br />
Table : this should be an entire table reference<br />
Panel : A portal or panel label referring to the panel containing the<br />
view of the table<BR/> TL Row : These specify the top left cell into which data will be TL Col : pasted<BR/> Options: Unused at the moment<BR/> Rows Read : These specify the number of rows and columns read from Cols Read : the clipboard. If an error occurs, then they refer to the cell where the error occured, relative to the<BR/> Return result: This is 0 if there were no errors, otherwise the following values are currently defined:<BR/> 1: undefined error 2: error placing clipboard into temp file 3: disk full while writing clipboard 4: no data in clipboard 5: incomplete rows encountered 6: formatting problem for values 7: undefined label or label lookup failure<BR/> Notes:<BR/> If the clipboard data extends past the columns in the table, the extra columns in the source data are ignored<BR/> If the clipboard data extends past the rows in the table, new rows are appended to the table EXCEPT if a row filter is active, in which case the extra rows are ignored<BR/> Views with customised column arrangements/formats are supported; the data is placed in the table according to the column arrangement of the view.<BR/> If the view has an active row filter, then the data is pasted into the rows that are currently visible as if they were contiguous.<BR/> Cell specific formats are recognised and used in formatting incoming data (including labels). This can assist in moving "report" type tables back into PL.<BR/> Free text cells are supported but not new lines etc within them<BR/> Labels are added automatically unless the table column has the "Only Select Existing Labels" option or the label list has the "Only Modellers Add" option and the platform is in User Mode. In these cases, unexpected labels stop the import and return the undefined label error code<BR/><br />
<br />
* '''CHANGE''' The routine framework now supports up to 8 "parameters" per routine operation which is an improvement from the originally designed 3. Greatly reduced the number of places in the code where theres code dependent on this limit.<BR/> This means more advanced routine operations can be added with more parameters without having to use tables etc. to carry the parameters.<BR/><br />
<br />
* '''CHANGE''' New category in the routine editor "Table View" as we've got quite a few operations specific to them<BR/><br />
<br />
=== 5.09d ===<br />
* '''NEW''' Pressing SHIFT while forming a box or resizing a box and dragging the mouse will make that box into a square. This is useful for forming circles.<BR/><br />
<br />
* '''NEW''' Graph mode "Point" for plotting points. The width parameter sets the radius of the points. Note there is no clipping to the graph bounding box.<BR/><br />
<br />
* '''NEW''' Routine operation GetFilteredRows Returns a list of values which are the rows visible to the user due to the row filter settings. If no row filter is being used, this returns an empty table.<BR/><br />
<br />
* '''CHANGE''' Renamed TableViewRows and TableViewCols (routine operations) to TableViewVisibleRows and TableViewVisibleCols respectively. Existing references are automatically updated<BR/><br />
<br />
* '''NEW''' Routine operation "TableViewRows" returns the number of visible rows in a table view. This may differ from the number of actual rows in the table if there is a row filter active<BR/><br />
<br />
* '''NEW''' Highlighting and copying rows whilst a row filter is active will now only copy the visible rows<BR/><br />
<br />
* '''CHANGE''' Have renamed the attributes sent with the "cell clicked" broadcast to enable existing code to keep working when customised views are used.<BR/> "_row" and "_column" are now called "_view_row" and "_view_col". These are the row/col from the view's perspective that was clicked<BR/> "_data_row" and "_data_col" are now "_row" and "_col" These are the row/col from the source table's perspective.<BR/> Any model with customised views, which used _data_row and _data_col to reference the original table needs these references renamed to _row and _col respectively. This not automatically done by the platform.<BR/> If in doubt, check for any item attributes called _data_row and _data_col.<BR/> Note that _to_row and _to_col continue to refer to the end of a selection from the view's point of view. These have not changed.<BR/><br />
<br />
* '''CHANGE''' Allow longer command line for execute from a change object (255 chars)<BR/><br />
<br />
* '''CHANGE''' Allow longer command line for execute from a button<BR/><br />
<br />
* '''CHANGE''' Internally defined table row labels are no longer supported. Using a "Row Label Column" is still supported Any row labels encountered during a load are logged in the debugging file and a message is given<BR/><br />
<br />
* '''CHANGE''' Transposed table writes no longer supported.<BR/><br />
<br />
* '''CHANGE''' When a file is written using comma delimiting and quoted fields are not forced, Planimate will strip commas from value fields even if their formatting inserts them. If its a label which contains a comma, then Planimate will automatically add quotes as needed.<BR/><br />
<br />
* '''FIX''' Second title row alignment changed If the main title is right aligned, second title is now right aligned otherwise its centred<BR/><br />
<br />
=== 5.09c ===<br />
* '''NEW''' System Attribute "LoopDelayOverride" (Track) This enables a modeller to instruct the PL Track Engine to ignore track portal loop delay testing and assignment when an item is doing a TestEnter on a portal exit leading up to the track.<BR/> It is useful where a modeller is doing advanced lookahead in evaluating possible train routes and the loop delay mechanism needs to be temporarily disabled in order that the modeller receives notification whether a route is actually viable.<BR/> Note that a special mode dispatcher is also required for this option to be useful, see below.<BR/> PL will revert any changes made to this attribute during lookahead. Ensure any "Move" code does not leave this attribute in a non zero value or portal loop delays will fail<BR/><br />
<br />
* '''NEW''' Dispatcher option "Look through in lookahead" (note its an option, not a mode)<BR/> This experimental option enables a modeller to look past a capacity object during lookahead but have that object assert its capacity on the item when the item actually moves through it<BR/> Used together with the LoopDelayOverride attribute, this option enables a dispatcher in a portal on a track network to "catch" a train that is testing viability of routes on the track network in lookahead but at the same time, needs to respect and wait for loop delays before it can leave the portal.<BR/> In previous versions, it wasn't possible for a route to be assigned and tested in lookahead within a portal that is using loop delays.<BR/> The engine would give an error because an item at a capacity object before the route assignment could not hold a section in loop delay since no commitment to the route had been made.<BR/><BR/><br />
<br />
* '''FIX''' Label list references in the undo buffer (eg: a column using a label list from a table that had been modified) would crash if selected in the references browser for the label list. PL now gives a helpful message instead.<BR/><br />
<br />
=== 5.09b ===<br />
* '''CHANGE''' Log a warning in the PLANIMAT.DBG file for any loaded portals with both the Act As Junction and Does Loop Delays on. This combination isn't accomodated in the logic design and any such warnings should be investigated<BR/><br />
<br />
=== 5.09a ===<br />
* '''CHANGE''' The application name is now shown in the about box for internally keyed standalone EXEs<BR/><br />
<br />
=== 5.09 ===<br />
* '''CHANGE''' Routine editor step description for conditions, dll calls and other special cases more useful<BR/><br />
<br />
* '''NEW''' Planimate routines calling DLLs is enhanced<BR/> Strings and entire label lists can be parameters and return values in a DLL call. This opens up a lot of opportunties for processing of data outside of Planimate where very high performance is needed.<BR/> The DLL SDK demo has been updated and is available to anyone who is interested. Please email InterDynamics for further detail.<BR/> Previous version DLLs are supported (but see the next note)<BR/><br />
<br />
* '''NEW''' Previous versions would load and unload a DLL for every time it was called. This has been changed and a given DLL will remain loaded after its first invocation whilst PL is in run mode.<BR/> There are impacts of this is:<BR/><br />
- multiple calls to any routines in the same DLL file will be<br />
much faster because it is remaining mapped in memory.<BR/><br />
- any static data altered by code in a DLL will persist for the<br />
run (including model triggered run restarts) which can be very<br />
useful but requires careful planning by the implementor of the DLL.<BR/> I suggest a specific "initialise" routine be included in any DLL which keeps any static data within itself so the modeller can get the DLL into a know state..<BR/> Note that after each routine call, Planimate calls the DLL to deallocate any of the input/output transfer buffers allocated by that DLL routine call.<BR/><br />
<br />
* '''NEW''' Planimate network broadcasts can now operate over UDP instead of TCP. The advantages of doing this are that there is no connection setup/teardown (and associated delays) and if the network isn't available, PL will not stall until a timeout.<BR/> Sending these broadcasts is very efficient and will have minimal impact on the speed of the run.<BR/> The disadvantages are:<br />
- there is no guarantee of receipt of data nor ordering.<br />
Packets are more likely to arrive in a lightly loaded internal<br />
LAN than over the internet. However your application must<br />
cope with lost or misordered packets.<br />
- one is limited to the amount of data in a broadcast that can<br />
be sent. A safe limit is about 1400 bytes. 3 attributes with<br />
average names and various formats take about 300 bytes. Most of<br />
this is initial overhead. Note that this overhead will include the<br />
model's name, item class name and the broadcast name so avoid really<br />
long names if space is critical.<BR/> Each additional attribute uses the following # of bytes: # of characters in name + # of characters for its formatted value + 5<BR/><br />
- comms is only one way (from the "client" socket to the<br />
"server" socket, for two way comms you need to set up a client<br />
and server socket at each end.<BR/><br />
<br />
=== 5.08q ===<br />
* '''NEW''' Routine display window includes a "Last Invoked" field above the list which shows the simulation time at which the routine was last invoked (in lookahead or move)<BR/> This field is reset when the engine restarts<BR/> This is useful for verifying that a given routine has been executed when expected.<BR/><br />
<br />
* '''NEW''' Table columns have a new options "Open With Combo List". This causes cells with combo boxes to open with the list down when the cell is clicked.<BR/><br />
<br />
* '''FIX''' Dialogs in Yes/No/Cancel mode were not returning -1 on cancel due to an extra validation<BR/><br />
<br />
* '''FIX''' GetColumnProperty now works when passed a column as well as a cell reference<BR/><br />
<br />
* '''CHANGE''' Column and block selsction broadcasts now set the _data_row and _data_col fields as well. For a block broadcast, this corresponds to the top left corner of the block<BR/><br />
<br />
=== 5.08p ===<br />
* '''NEW''' New Change Object->File Write option "Write precision as displayed" causes formatted tables to be written using any column specified display rounding.<BR/> By default this is not enabled (to prevent unexpected loss of precision) but in some cases the format as displayed is desired<BR/><br />
<br />
* '''NEW''' Routine operation "SetLastDataFile" enables the last data file read/written to be explicitly set. This is useful if the filename is being shown in the titlebar and you are using DataSet2 (which does not set this name).<BR/><br />
<br />
* '''FIX''' In the case where a number of pipes used matched cells for their source limiting together with control attributes in the same table a pipe updating its source limit could mess up the scheduling of the other pipe events.<BR/> Reworked things in the pipe event handling to prevent this interaction<BR/> The use of matched cells with pipes isn't recommended but if you want to use it then performance will be much better if the control attributes come from a table which is not changing very often.<BR/><BR/><br />
<br />
* '''NEW''' Modeller defined dialogs have a Yes/No/Cancel button configuration clicking Yes returns 1, No returns 0 and Cancel returns -1.<BR/> Clicking the [x] to close the dialog returns -1 as well<BR/><BR/><BR/><br />
<br />
=== 5.08o ===<br />
* '''NEW''' Planimate can now import DLL's into a model's DB file and execute routines in them without extracting them. This means a standalone EXE can be shipped with some code in DLLs which remain hidden.<BR/> A modeller needs to put the DLL into the model's DB file (not a shared DB file). Use the Resource File Admin menu option.<BR/> The file browser for the DLL Call selector can also browse into DB files.<BR/> Its a good idea to keep the original DLL files away from the folder with the model to guarantee the right version (the one placed into the DB file) is read during editing and building of the standalone EXE.<BR/> Remember that the standalone EXE builder will not include the DLL unless its placed in the model's DB.<BR/><br />
<br />
=== 5.08n ===<br />
* '''NEW''' Routine operation "TrackSectionType" returns the type of a track section, using the "_section types" label list<BR/><br />
<br />
* '''NEW''' Route system attributes are now available during lookahead at the location which is the last step in the route. This is useful in enabling processing of the entire route at the last location during lookahead.<BR/> s.routestepidnex at the last location will be set to 1 past the number of steps in the route. This is consistent with the route step index always pointing to the next step in the route once you the train enters a location that was in the route.<BR/> The modeller can assign the route step index 1 beyond the last step, important if the modeller is "exploring" the route during lookahead.<BR/> Attempting to obtain the location while the index is beyond the last step will result in a model error, since logically the route has "finished" and there is no next step.<BR/><br />
<br />
* '''CHANGE''' Have cleaned up the portal's lookahead code; this involves tracks, spatial links and normal item flows. There should be no noticeable difference; possibly a speed increase.<BR/><br />
<br />
* '''CHANGE''' Removed re-initialisation of menubar when clearing for a custom menubar which should remove the flicker as long as the custom menubar is added immediately after the clear<BR/><br />
<br />
* '''CHANGE''' Increased the maximum # of steps in a route to 512<BR/><br />
<br />
=== 5.08m ===<br />
* '''FIX''' The new Advance to time dialog was adding a random offset to the time entered. An internal field was not being initialised properly<BR/><br />
<br />
=== 5.08l ===<br />
* '''NEW''' The title of the free text editor form can be set by the modeller using the "SetFreeTextTitle" routine operation.<BR/> This can be set in a pre-edit cell click broadcast, enabling the title to be dynamically changed for different columns and rows.<BR/><br />
<br />
* '''NEW''' Ctrl-Enter in the note editor dialog closes/accepts the edit<BR/><br />
<br />
* '''FIX''' If an error occurred while resolving a reference used in a dataset, it could crash the platform - fixed<BR/><br />
<br />
* '''FIX''' Dataset2 loader has extra validation against a dataset file which results in no header XML being read.<BR/><br />
<br />
=== 5.08k ===<br />
* '''FIX''' If a table view had a scroll set and the target table had columns removed, the platform would crash if there was only one column in the table OR if a fixed number of columns was specified.<BR/><br />
<br />
=== 5.08j ===<br />
* '''FIX''' Pasting paint objects clips them against the panel so they wont paste outside of the viewable area<BR/><br />
<br />
* '''FIX''' Pasting objects now pastes them relative to the place where the mouse was originally clicked, not where the mouse is at the time the option is selected from the context menu<BR/><br />
<br />
=== 5.08i ===<br />
* '''CHANGE''' PL no longer warns when loading an "older version" model and no no longer marks it as modified by default (there is no need to save a model to "upgrade" it if just running it).<BR/> You can restore the message (reworded) by setting the new WarnOldVersion INI value to 1.<BR/> [Edit] WarnOldVersion=1<BR/> This defaults to 0 to reduce distractions for first time users.<BR/><br />
<br />
* '''FIX''' Restored use of the red block when PL cannot load an icon. It was defaulting to a 0x0 empty image which didn't give visual feedback of the load error.<BR/><br />
<br />
=== 5.08h ===<br />
* '''FIX''' Printing of panels containing cached BMPs/ICNs was broken (JPGs and Paint-Image objects were OK). This is now fixed.<BR/> Printing of partially transparent icons will print white for the transparent parts; the Win32 printer api does not guarantee services that are needed for layering and doing it using an offscreen buffer could potentially use too much memory when printing large panels on high resolution devices.<BR/> If you want an exact image of what you see on the screen, use a screen capture or Planimate's in built save panel to BMP routine operation.<BR/> The printing operation is intended for high resolution printouts of tables and report panels (does font substitution) rather than an accurate rendering of the graphics/transparency.<BR/><br />
<br />
* '''CHANGE''' Special case handling for replacing a reference in a routine:<BR/> If the 'from' and 'to' are both table references, then any matching references to the 'from' table name (cell, column etc) will be replaced with the 'to' table name EXCEPT if the from or to references are dynamic or item table references.<BR/> In this case, only exactly matching references will be replaced.<BR/> This is because dynamic and item table references use extra fields to specify them which are not available in all the reference types.<BR/><br />
<br />
* '''FIX''' Comparison testing for references was comparing fields which are not visible/used in some modes, leading to lack of a match when the references were actually the same.<BR/><br />
<br />
* '''FIX''' Fixed a few editors which could generate "invalid screen" errors if used from the context popup when right clicking on a portal in the sidebar (choosing icons, object attribute mapping).<BR/><br />
<br />
=== 5.08g ===<br />
* '''NEW''' Routine operation "GetProgramName"<BR/> This retrieves the folder where the currently running PL EXE (or standalone EXE) is located and appends a given filename to it.<BR/> The resulting file/path is available in s.LastAccessedDataFilePath<BR/> This is useful where a Planimate based applications wants to read or write a file in the same directory as the program EXE (which is common to every user on the system) instead of the Documents And Settings area (which is specific to every user).<BR/> Note that on some corporate environments, writing to the program directory will be restricted.<BR/><br />
<br />
* '''NEW''' Referencing s.NullAttribute (system null attribute) in a place where Planimate expects a label reference will now resolve to an empty string rather than a 0. This can be useful sometimes in string operations.<BR/><br />
<br />
* '''NEW''' Delete confirmation messages for portals include the portal's name<BR/><br />
<br />
* '''FIX''' Fix a memory corruption when the "Model File Info" option was used. An incorrect string buffer was being passed and being overwritten, corrupting the model in memory.<BR/><br />
<br />
* '''FIX''' Fix printing of foreground object icons<BR/><BR/><br />
<br />
=== 5.08f ===<br />
* '''CHANGE''' Removed the automatic redraw after a table's row or column scroll is set by code. This was causing flickering when printing.<BR/> If a modeller is setting a table view's scrolls and the view is currently visible the modeller now needs to force a repaint once the new settings are made. This is not required when printing.<BR/><br />
<br />
* '''FIX''' Enhanced broadcast handling to prevent a "page printed" broadcast handler from processing windows events, causing unexpected redraws and other things to happen in the middle of a print job. This was an issue for the "_page printed" broadcast handlers.<BR/><br />
<br />
* '''FIX''' The "point browser" option was not being put into the correct menu in the Graph Options dialog. This made it look like it was on when it was off. Selecting OK in the dialog with it in the "enabled" menu actually enabled it.<BR/><br />
<br />
* '''FIX''' The updated animation manager was not allowing object icons to correctly print as it was rendering them into offscreen buffers during a print job.<BR/><br />
<br />
=== 5.08e ===<br />
* '''NEW''' A new Advance For Interval/Advance To Time dialog<BR/> You can toggle between advance to date/interval within the dialog<BR/> Advance for interval remembers the separate components of intervals like 2M 5d without collapsing into a single value.<BR/> IT correctly advances by months and years specified, based on the current calendar time.<BR/> This means:<BR/><br />
- advancing by "28w" will retain "28w" next time you advance<br />
- advancing by "1Y 1M" will actually advance by 1 year and 1 month<br />
based on the current calendar date<br />
- fractions are allowed, so you can advance 1.5M<BR/> This will be interpreted as 1 "calendar" month plus 0.5 of a "relative" 30 day month = 15d.<BR/> The dialog also works in relative (non calendar) time modes.<BR/><br />
<br />
* '''CHANGE''' Rework of the calendar time code to better support dates beyond the year 2035.<BR/> Planimate will now read the system date correctly if its set beyond 2035.<BR/> A model can now have edit and run start dates beyond 2035.<BR/> Previously, a run could pass year 2035 but not start at a date beyond it due to 32 bit overflow. The representation of start dates has been changed to 64 bit values, eliminating the constraint.<BR/> There is a hard coded limit at year 3000AD. Please let InterDynamics know if you need to model beyond this year.<BR/><br />
<br />
* '''CHANGE''' Rework of IDKBase code to use new 64 bit time code. This wont affect anyone unless you are using a VPN connection to the server to access the knowledge base directly.<BR/><br />
<br />
* '''CHANGE''' 4 digit years in menus and clock<BR/><br />
<br />
* '''CHANGE''' The default calendar edit base time is now 1-jan-2007.<BR/> Note that Planimate still starts in "relative" time mode, as previously. this is the initial date that will be suggested when a new model is first switched to calendar time mode.<BR/> This default only applies to new models when first switched to calendar time mode.<BR/> The date is common to previously chosen start dates in that its a Monday.<BR/><BR/><BR/><br />
<br />
* '''FIX''' Pressing ESC on the pause/continue simulation dialog is now like selecting pause<BR/><br />
<br />
=== 5.08d ===<br />
* '''NEW''' System attribute s.CPUID<BR/> This returns a value identifying the type and revision of the CPU. This is intended to help modellers secure their models from copying.<BR/> Its not a unique CPU serial number as modern cpus do not support this<BR/><br />
<br />
* '''NEW''' System attribute s.SystemID<BR/> This returns the volume serial number of the drive containing the Windows system32 directory. It may be useful to modellers wishing to help secure their models from copying.<BR/> Note that a user can set the volume serial number of a drive.<BR/><br />
<br />
* '''CHANGE''' The condition editor confirms before allowing a "None" selection to wipe all the conditions under it.<BR/><br />
<br />
* '''FIX''' Adding/Removing columns from a view when column filters were enabled would cause a crash<BR/><br />
<br />
=== 5.08c ===<br />
* '''NEW''' The portal attribute list and routine attribute value list (accessed during a breakpoint) now have an additional display of the "raw" value of the attribute. This is always formatted as a value with 15 digits of precision, so expect to see long fractions in calculated values.<BR/> This is useful for displaying to the developer the underlying index for a label as well as values whose formatting otherwise strips the precision<BR/><br />
<br />
* '''NEW''' Routine operation "SetOncomingCheck" enables the "Oncoming Train Check" portal option to be set/cleared by the modeller.<BR/> For Portals which are not acting as a junction, this option may be turned off. It should remain on for portals acting as a junction.<BR/><br />
<br />
* '''FIX''' Removing columns from a scrolled customised table view would cause a crash if there remained no columns in the scrolled region<BR/><br />
<br />
=== 5.08b ===<br />
* '''FIX''' The ICN to BMP converter will no longer overwrite any BMP with the same name as an ICN in a DB file. It will report a message and continue on, leaving the ICN. (now working)<BR/><br />
<br />
=== 5.08a ===<br />
* '''CHANGE''' Default of INI option "UseFullAttrefEdit" is now 1.<BR/> This will only affect when starting without an INI file and keeps PL consistent with the tutorials.<BR/> Experienced users will want to set this option to 0 if starting with a new install.<BR/><br />
<br />
* '''CHANGE''' Inner about box credits<BR/><br />
<br />
=== 5.08 ===<br />
* '''NEW''' SMALLER EXE<BR/> The 2 large about box BMPs for editor and standalone compilations have been converted to JPGs and included as resources within the PL EXE itself. This makes the EXE much smaller and means the<br />
_!system.db need no longer contain a _PLBANNER.BMP which will<br />
reduce its size too.<BR/> This was done to prevent the main about box depending on an external BMP in the _!system.db file (which could have been tampered with).<BR/> _PLBANNER.BMP should be left in _!system.db if you plan on using older PL EXEs in the same directory.<BR/> Note that whilst the EXE is smaller, there isn't a saving when its compressed as the BMPs were compressing by 95% or so.<BR/><br />
<br />
=== 5.07r ===<br />
* '''NEW''' Routine operation "ExtractIntoFormat"<BR/> This operation enables a sub string of a label to be extracted and either interpreted as a formatted value or placed into another list. Its parameters specify the reference to format (usually this would be a label) and starting and ending character positions.<BR/> The characters are numbered from 1. If the ending character is 0, the last character in the string is used.<BR/> The result should be an attribute or cell.<BR/> If the result is formatted as a label list then a label for the extracted string will be matched or created if it doesnt already exist and the result set to its index.<BR/> The extracted substring is trimmed to remove leading and trailing spaces and enclosing double quotes. If it ends up being an empty string then the index/value 0 is returned and no label is added.<BR/> If the result is formatted as a value, time etc. then the substring will be parsed using that format.<BR/> If there are any parsing errors (eg: bad data) then the value 0 will be returned.<BR/><br />
<br />
* '''NEW''' Log driven graphs have a new option "Point Browser On Mousedown" which, when enabled. will show the x and y points in the titlebar upon a mousedown as occurs for the Column Overlay graphs.<BR/><br />
<br />
* '''CHANGE''' Defaults for Planimate INIs changed. This only affect you if you start without an existing INI file:<BR/> EditorPaletteStatus=1 RoutineEditorRatioW=80 RoutineEditorRatioH=80 TableTitleLines=2 HelpWebSite="http://kbase.planimate.com/index.php"<BR/><br />
<br />
* '''CHANGE''' Default expiry date for time limited standalone EXEs is now 5 days. Users with an Open PBA license can override this.<BR/><br />
<br />
* '''CHANGE''' Internal rework of StringToValueErrorStatus handling<BR/><br />
<br />
=== 5.07q ===<br />
* '''NEW''' Dynamic panels have a new option "Show Spatial Links In Background" This is similar to the portal option "Show In Background" and causes the spatial links on that panel to be drawn in the background layer, behind views instead of in front.<BR/> This is useful where portals and links connecting them should be shown behind views which overlay them.<BR/><br />
<br />
* '''NEW''' New routine operation "GetDocumentName" enables the modeller to read and write files into the "Documents And Settings/user/Application Data" folder for the currently logged in user.<BR/> This is useful for saving user specific defaults and settings for an application.<BR/> It takes 2 parameters, Folder specifies the subfolder within the user's Application Data folder and Filename is the name of the desired file within to read or write.<BR/> The folder will be created as required and ensure it is writeable. If successful, the result attribute is set to a non zero value and the s.LastAccessedDataFilePath system attribute is set to the entire folder/file specification, ready to use in a file operation.<BR/> If the operation returns 0 then either a bad folder name was specified or the system policy does not allow applications to write to their documents and settings area, in which case an application should continue gracefully.<BR/><br />
<br />
* '''FIX''' Column filters would fail if there were more than 32767 rows in the table. This limitation has been removed<BR/><br />
<br />
* '''FIX''' Column filters would generate the column filter dropdown list VERY slowly if there were many unique labels in a column (> a few thousand).<BR/> This has been greatly sped up using a binary sort/merge.<BR/> Up to 100,000 unique labels are now displayed in a filter's dropdown list. Wildcards will still select any others not in the list. This is 100x the limit of other table editing applications.<BR/><br />
<br />
* '''CHANGE''' Speed ups/rework of existing internal string list code<BR/><br />
<br />
* '''CHANGE''' Removed old PV tokens and merged several source modules, rearranged the code base.<BR/><br />
<br />
=== 5.07p ===<br />
* '''NEW''' Routine operation "ListRoutineCode" will create a text file with the text of the routine code of a given change object (by name)<BR/><br />
<br />
* '''CHANGE''' The "DescribeRoutineData" and "ListRoutineCode" routine operations will now also look for the change object with the given name in a subsystem with the "Handles Parent Messages/Broadcasts" portal option enabled (and any sub portals within with this option on).<BR/> This enables the modeller to bury the routines out of top level nodes<BR/><br />
<br />
* '''CHANGE''' Reworked number formatting code.<BR/> Table cells formatted as values are copied to the clipboard with 12 decimal digit precision instead of the default 4 as appears in the table view.<BR/> This affects the "Value" and "Value With Commas" formats ONLY, other formats like fixed, times and money are written to the clipboard as shown.<BR/><br />
<br />
* '''CHANGE''' Handling of the "Display Rounding" column option<BR/> Columns formatted with a fixed number of decimal places eg: "Fixed xxxx.xx" will not have the display rounding value (specifiable in a column) applied, since the rounding is already implied by the number of decimal places that the mode is fixed to.<BR/> For columns formatted as "Value" and "Value With Comma", +ve values of "Display Rounding" set the number of decimal places shown, -ve set rounding to units/tens etc and 0 rounds to whole.<BR/> This does not affect the underlying data, cell edits or file/clipboard writes. Its useful for presenting data in summarised or precise form.<BR/><br />
<br />
* '''FIX''' Arrow keys can be used in a popped down combo list without it closing<BR/><br />
<br />
* '''FIX''' Notes on 5.07o filter were slightly inaccurate - fixed<BR/><br />
<br />
* '''FIX''' No longer crash if adding a column overlay to a single column table with act as mapper turned on<BR/><br />
<br />
=== 5.07o ===<br />
* '''NEW''' Tables Views have an option to enable "Column Filters"<BR/> This shows an extra row under the column titles. Clicking cells in this row enables filter text to be entered or possible labels/values chosen.<BR/> Simple wildcards like * and ? can be used to match text strings and individual characters.<BR/> The filter applies/updates when a filter cell is edited. f cells are edited, they remain in the set even if they no longer match the current filter settings. Reselecting any filter column will reapply the filter to the updated data.<BR/> The drop down lists in the filter columns show the possible labels/values for that column that are not "blocked" by any other filtered columns<BR/> If a row is inserted, the filter is cancelled but reselecting any of the filter columns will reapply the filter settings (which remain visible)<BR/> If a column is inserted or removed, the filter columns are reset.<BR/> The "Combo List Width" column option also applies to the filter list, if it is opened.<BR/> Filter settings are not saved<BR/><br />
<br />
* '''NEW''' Added column option "Edit Labels With Combo" which enables labels to be selected and entered using a dropdown/field "combo" box.<BR/> This avoids the clunky popup for selecting labels that PL has used in the past.<BR/> If the label list has the "Only Modellers Can Add" option on and the system is in "User" mode then the combo will only enable selection of a label in place using a dropdown list, otherwise labels can also be typed.<BR/> Any "new" labels typed are automatically added. If the "Rename Labels Instead Of Adding Labels" column option is enabled, then typed labels cause a rename instead.<BR/> This option overrides "Edit Labels With Field" option; the difference is that there is a dropdown list of possible selections<BR/> The F2 key and alt-down are keyboard shortcuts to dropping down the list.<BR/><br />
<br />
* '''NEW''' Table columns have a new option "Only Select Existing Labels". This works with the new "Edit Labels With Combo" option and prevents text being typed into a cell, only the list selections can be chosen.<BR/> This augments the label list option "Only Modellers Add", enabling users to add labels in some cases and only select labels in others.<BR/> It doesn't work with the old popup label select dialog.<BR/><br />
<br />
* '''NEW''' Column property "ComboListWidth" and edit option "Combo List Width" enable the width of the drop down list in the new combo label to be specified. If 0, the width of the cell is used.<BR/><br />
<br />
* '''CHANGE''' The "default" label lists that PL provides for a number of properties and options are now rebuilt upon load of a model to ensure the latest PL labels are present in them.<BR/> This means any changes made to these lists will not persist.<BR/> The "_colors" and "_external files" lists are excluded from this<BR/><br />
<br />
* '''CHANGE''' Column option "Edit Labels In-Place" has been renamed to "Edit Labels With Field" to distinguish this option from the new "Edit Lables With Combo".<BR/><br />
<br />
* '''CHANGE''' ShowPanel routine operation renamed to ShowPopupPanel to be consistent<BR/><br />
<br />
* '''FIX''' The table scrollbars now do not "jump" if you click within the scroll bar "thumb"<BR/><br />
<br />
* '''FIX''' Tables will no longer cause a crash if a table view is too small to fit at least one column.<BR/><BR/><br />
<br />
=== 5.07n ===<br />
* '''FIX''' Dataset2 did not correctly merge system label list formatted columns. A column formatted for _Model Objects created a new label list eg: _Model Objects2 upon load.<BR/> The merge has been reworked to use the existing system list.<BR/> If a label is in the dataset that no longer is in the system list (eg: a portal deleted) it will be replaced with 0 since the dataset loader cannot modify the system label list.<BR/><br />
<br />
* '''CHANGE''' standalone exe's now have lowercase "exe" extention<BR/><br />
<br />
* '''CHANGE''' removed the old "list mode" that cell views would use to select their table cell if the table only had one column.<BR/><br />
<br />
* '''NEW''' SetPaintImage routine operation enables the image of paint buttons states to be set. SetPaintImage and SetPaintText both work for paint Image objects.<BR/><BR/><br />
<br />
=== 5.07m ===<br />
* '''NEW''' Paint Buttons showing images now enable the modeller to set the range of image pixels which are displayed. The image will then be stretched (or shrunk) to fit the paint image objects rectangle.<BR/> The advantage of doing this instead of using a viewport is that it is very fast and efficient; the image is only loaded in memory once and large animation buffers for the entire scrollable area are not required.<BR/> The new functionality is enabled at runtime only using the following paint properties (only useful with a paint button with an image selected). Use the paint property label list and the SetPaintProperty/GetPaintProperty routine operations.<BR/> ImageWidth,ImageHeight: return the size of the current image file, in pixels<BR/> ImageXOffset,ImageYOffset: can set/read the top left pixel of the image to display (normally 0,0)<BR/> ImageUseWidth.ImageUseHeight: set or read the number of pixels to show within the paint image, normally both are 0 which causes the default entire width/height of the image to be used.<BR/> These attributes are not saved and revert to zero when a model is loaded. They do not propogate with inheritance but this may change.<BR/><BR/><br />
<br />
* '''CHANGE''' 5.07l's release note about "Extract Data References" said that references are not repeated. This is not the case, I have decided to repeat references if they are used for both read and write.<BR/><br />
<br />
=== 5.07l ===<br />
* '''NEW''' Routines have a new File menu option "Extract Data References"<BR/> This will extract all references to data in the routine code into a text file and show it.<BR/> The file has 5 tab separated columns: full-reference read or write indicator table name (if any) row reference column reference<BR/> References are not repeated. If a reference is read AND written then it is only shown as "write".<BR/> Constants and expressions are not shown but the fields within an expression will be, if they are non constant.<BR/><br />
<br />
* '''NEW''' Routine operation "DescribeRoutineData"<BR/> This enables the description described above to be extracted from a change object and written to a file for later processing.<BR/> It takes 3 parameters Panel -> panel or owning portal of a subsystem where the change object is object -> the change object's object name text filename -> file name to write the report to<BR/><br />
<br />
=== 5.07k ===<br />
* '''FIX''' Clicking outside a calendar entry field now accepts the data again (this was broken in the 5.07h table cell handling rewrite)<BR/><br />
<br />
=== 5.07j ===<br />
* '''FIX''' Can now paste replace on the current visible panel again<BR/><br />
<br />
=== 5.07i ===<br />
* '''FIX''' Broadcast Button click handler now clears an internal "pause pending" flag in the engine to enable further animations after an animating item doing a broadcast is interrupted.<BR/> Previously, a "continue" was required to reset the flag<BR/><BR/><br />
<br />
* '''FIX''' If a broadcast button is clicked to start a run and then the animation of that broadcast is interrupted by a pause click, the engine will now not produce errors<BR/><br />
<br />
* '''CHANGE''' (APPLIED to 5.07h)<BR/> Table scroll bars are bigger to make them easier to grab on modern higher resolution displays<BR/><br />
<br />
=== 5.07h ===<br />
* '''NEW''' Table views have a new "fixed columns" property which enables a number of columns on the left hand side to be held fixed whilst the rest remain scrollable.<BR/><br />
<br />
* '''CHANGE''' Table editor enhancements CTRL-Z maps to undo<BR/><br />
<br />
* '''CHANGE''' A new default "Edit Mode" for table cells: "Automatic Enter/TAB advance"<BR/> When a cell edit is completed with a TAB or ENTER then the cell to the right or underneath is selected respectively (only for value or date cells).<BR/> The "Edit Single Cell" option can be selected to prevent the automatic advancement<BR/><br />
<br />
* '''CHANGE''' Pressing TAB in the table view selects the cell to the right<BR/><br />
<br />
* '''CHANGE''' Using the shift key with the arrows extends the selection in a table. Using the ctrl key as well selects to the end of the table.<BR/><br />
<br />
* '''FIX''' Expresisons were not testing for divide by zero<BR/><br />
<br />
=== 5.07g ===<br />
* '''FIX''' Paste Into Replace (<ctrl> + Paste Into) will now work whan using the sidebar treeview context menu. It currently prevents you from doing this when the current visable screen is in the hierachy of the "Paste Replace" root portal.<BR/><br />
<br />
=== 5.07f ===<br />
* '''NEW''' Sidebar Treeview Context Menu The sidebar tree view now has a context menu for Dynamic and Application panels. There is also a new context menu option "Paste Into" for Portal objects (Dynamic and App) that will paste compatible options into the selected Portal. Pasted objects using this option will appear in the top left corner of the target panel<BR/><br />
<br />
* '''CHANGE''' New Object Selection Behaviour When using the mouse drag multi object selection you can now modify the selection behaviour.<br />
- Clicking on the background will clear the current selection<br />
- ClicknDrag creates a selection group containing the selected objects<br />
erasing any exiting selection groups<br />
- SHIFT+ClicknDrag Adds selected objects to the current selection<br />
- CTRL+ClicknDrag Subtracts selected objects from the current selection<BR/><br />
<br />
=== 5.07e ===<br />
* '''NEW''' PL no longer prompts the modeller to apply a default width when a column unit mode is changed; this was annoying and the width can be set manually as required.<BR/><br />
<br />
* '''CHANGE''' pressing 'c' in the routine list view inserts an empty (comment) line<BR/><br />
<br />
* '''CHANGE''' Removed forced clipping of paint-text objects to the visible work area.<BR/> This caused them to lose alignment with other objects when a panel was resized<BR/><br />
<br />
* '''CHANGE''' The "Focus" is now cleared when a click in a panel background occurs.<BR/><br />
<br />
* '''CHANGE''' Basic mousewheel support for table views and dialogs.<BR/> This will only operate if a mouse driver is not installed which translates scroll events into scrollbar events.<BR/> (some mice come with drivers which do this translation to enable x axis scrolling; it might be an option to enable/disable this)<BR/> (scroll wheel support in Windows(TM) is a bit of a dog's breakfast)<BR/><br />
<br />
* '''CHANGE''' Focus handling in dialogs with icon palettes (icon mover, selector) to facilitate the scrollwheel working as it should<BR/><br />
<br />
* '''FIX''' Clicking in the subsystem name no longer hides the panel-explorer if it is visible.<BR/><br />
<br />
=== 5.07d ===<br />
* '''CHANGE''' Setting the zoom of a visible viewport will now update the viewport immediately. If zooming in, the zoom is centred on the centre of the current view (as much as possible)<BR/><br />
<br />
* '''FIX''' The "Hide from Sort" column option introduced in 5.07a was working in reverse - fixed (so the default "off" state for this option allows the column in the sort menu)<BR/><br />
<br />
* '''FIX''' Dragging windows over the Planimate work area often left bits of garbage in the margins. This was unpredictable and caused by the Windows window manager not consistently sending EraseBackground messages.<BR/> Many applications "fix" this by forcibly redrawing everything all the time but this causes flicker especially when animating panels.<BR/> Have fixed by explicitly clearing the margin areas as part of the panel redraws rather than trusting the windows notification. This seems to have fixed it whilst retaining the clipping of objects within the active panel work area.<BR/><br />
<br />
* '''FIX''' No longer flash a "default" object when adding a track/pipe/spatial link<BR/> This distracting and caused problems on large networks when scrolling was required.<BR/><BR/><br />
<br />
=== 5.07c ===<br />
* '''NEW''' Resource File (PL model databases) administration dialog has a new option that will convert all the ICN format files in the selected DB file into BMPs<BR/> This can be useful for converting icons so they can be edited with modern graphics editors which support > 16 colours<BR/> The old ICN files are removed from the DB<BR/><br />
<br />
* '''FIX''' Track Portals and the s.LoopExitDelayStart attribute<BR/> The "LoopExitDelayStart" system-item attribute was being set for all on-track portals at the time a train tested the portal exit (to leave).<BR/> Its been changed so it only gets set where the portal is configured to use loop delays.<BR/> This means<BR/><br />
- the "Act As Junction" and "Use Loop Delays" portal options<br />
should not be used together<BR/><br />
- for code in a non loop-delay portal, the s.LoopExitDelayStart<br />
time will properly represent the time the item started leaving<br />
the previous object<BR/><br />
- for code in a loop-delay portal, the s.LoopExitDelayStart will<br />
only be valid up until the last point of capacity in the portal<br />
before the portal exit... so you can use it before a queue just<br />
before the portal exit but not after the queue (since the<br />
item would have "tested" the portal exit which needs to set<br />
this attribute as a loop exit delay could potentially be starting.<BR/><br />
<br />
* '''FIX''' Crash if a missing routine attribute was reported at startup and the modeller tried to use the "Show References" to open the containing panel (half-baked runtime failed during redraw of icons)<BR/><br />
<br />
=== 5.07b ===<br />
* '''NEW''' Support JPG and GIF as "icons". This means they can be selected for object and icon states and as paint button states.<BR/> Unlike paint images, icons are kept cached in memory and are usually rendered by the animation manager if they are object or item icons.<BR/> Transparency for these types used as Icons is not supported. It may come at a later time, as may multiple image GIF loading.<BR/> related rework:<BR/><br />
- rewrote icon palette to support multiple types<br />
- reworked icon classes to track icon type for loaded icons<br />
- reworked standalone EXE creation to use the icon type info<br />
- cleaned up image loading code and bitmap classes<BR/><br />
<br />
* '''NEW''' It is now possible to read and set the columns that a Table View displays dynamically using the routine "GetTableView" and "SetTableView" operations.<BR/> These both expect 3 parameters:<br />
- the table the view is for<br />
- the panel the view is on<br />
- a configuration table.<BR/><BR/> The configuration table needs to contain a column called "_basecolumn".<BR/> For GetTableView, rows in this column will be set to the column indicies of columns in the table view. If the table view does not have customised columns, then there will be one row for each column in the table.<BR/> For SetTableView, each row in the configuration table should have a column index from the parent table in the order you want them to appear in the view.<BR/> Rows should not be repeated.<BR/> If the table has no rows then the table view will be set to its default view of the parent table (without customised columns).<BR/> Modellers need to force repaints after customising a view if that view was visible..<BR/><br />
<br />
* '''FIX''' "Retain on paste" attributes now retain their clear value, min and max value and all their options settings<BR/><br />
<br />
* '''FIX''' ODBC fix for SQLConnect where a NULL username and/or password were passed - this caused a crash with some ODBC drivers.<BR/><br />
<br />
=== 5.07a ===<br />
* '''NEW''' Routine Operation "BrowseFile" enables a "browse to file" dialog to be presented to the user. A default file extention (eg: *.DAT) with or without path can be provided. A second parameter specifies whether a load-style or save-style file dialog should be used. The return result of the routine operation is non-zero if a file was actually selected by the user (they didnt cancel). In that case, the resulting file spec can be retrieved using:<BR/><br />
s.LastAccessedDataFile : file name only<br />
s.LastAccessedDataFilePath : file name with path<BR/> This operation is useful when prompting the user to select a file to use in the dataset operations introduced in 5.07<BR/><br />
<br />
* '''NEW''' Panels have a new "Child Window Style" popup option to cause them pop up as child windows to the parent window (contained and clipped against the window) rather than popup windows (able to exist outside the parent window).<BR/> Previously this style was automatically enabled for windows without a titlebar or border. By making it explicit, the modeller can have borderless, titlebar less popup windows. These are useful because unlike child windows, they can be partially transparent.<BR/> For older models, this option will be automatically turned on if the popup was set up with no border and no title bar, so they should behave the same.<BR/><br />
<br />
* '''NEW''' New label list "column properties" used in conjunction with the "GetColumnProperty" and "SetColumnProperty" routine operations enable a number of properties of a table column to be changed in modeller code. This is useful for building and controlling UI tables under program control.<BR/> These routine operations alter the table itself and will not update any customised views of the table.<BR/><br />
<br />
* '''NEW''' Column option "Hide From Sort Selection" will prevent the column from being selectable in the sort menu for the table. This replaces the hiding of columns when their Width is 0<BR/><br />
<br />
* '''CHANGE''' Columns with a zero width are no longer hidden from the table sort menu Use the "Hide From Sort Selection" option instead<BR/><br />
<br />
* '''CHANGE''' The PLDLL interface has been enhanced to support column ordered table data. This is a new option in the DLL SDK and enabling it may reduce the need to reformat data in a DLL's implementation, increasing speed.<BR/> If you are using the Planimate(r) DLL SDK, contact ID for an update.<BR/> Older DLLs built with the previous SDK remain compatible.<BR/><br />
<br />
* '''FIX''' The expression parser did not handle "-" properly in expressions such as "p.x - (p.y + p.z)" It would accept and process the expression properly but would present the expression without the brackets. A subsequent edit would commit the wrong expression and cause "p.x - p.y + p.z" to execute which was not the desired result.<BR/><br />
<br />
* '''FIX''' A long lurking bug in track code has been fixed.<BR/> If a train was doing a loop delay at the time a run was stopped, it could cause an application fault.<BR/><br />
<br />
=== 5.07 ===<br />
* '''NEW''' DataSet 2.0 framework<BR/> This adds new routine operations to save and load data. Refer to the attached word doc for more details.<BR/> Old style datasets are not affected and will be eventually phased out.<BR/><br />
<br />
=== 5.06o ===<br />
* '''NEW''' Routine operation "Set table row height"<BR/> Sets the number of lines of text each table row displays. Useful when free-text is being used.<BR/><br />
<br />
* '''FIX''' Columns formatted as free text now work properly with the "Copy Format" context menu option in the table editor<BR/><br />
<br />
* '''FIX''' Width of table selector when adding a table view now accomodates the full length of the table name instead of cropping it<BR/><br />
<br />
=== 5.06m ===<br />
* '''NEW''' Paint property "TextWidth" in the paint property label list<BR/> This is a read only property that enables a modeller to determine the width required for the current text in the paint button.<BR/> The actual button's width is not changed.<BR/> 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.<BR/><br />
<br />
* '''NEW''' Routine operation "SetPaintTip". This enables the tip text of a paint button to be changed dynamically.<BR/> 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)<BR/><br />
<br />
* '''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.<BR/> Have reworked the way popup panels close to avoid this.<BR/> 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).<BR/><br />
<br />
=== 5.06l ===<br />
* '''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.<BR/><br />
<br />
* '''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.<BR/><br />
<br />
* '''CHANGE''' Title of Planimate window - "Planimate" now substituted by "Planimate(r) by InterDynamics"<BR/><br />
<br />
* '''FIX''' Window title - removed the dangly "-" when "Ready" in edit mode<BR/><br />
<br />
* '''FIX''' CTRL-Enter does not introduce an unexpected link break in a single-wrapped multiline field (eg: used in the expression dialog)<BR/><br />
<br />
* '''FIX''' A leak in the expression parser when the entered expression had errors with the use of square brackets has been fixed<BR/><br />
<br />
=== 5.06k ===<br />
* '''NEW''' "//" is a shortcut to adding a comment in the routine operation selector<BR/><br />
<br />
* '''NEW''' Alignment of values in "hr min" unit mode is now more consistent<BR/><br />
<br />
* '''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.<BR/> 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.<BR/> Commas and trailing zeros (after the decimal) do not appear in the field with this option on.<BR/> This option only takes effect with the "Value" and "Fixed" formats.<BR/><br />
<br />
* '''NEW''' System attributes "MouseXPanel" and "MouseYPanel"<BR/> 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.<BR/> This value is also not affected by the scroll or zoom of the current panel in the main window.<BR/><br />
<br />
* '''NEW''' System Attribute (Engine) - "User Mode"<BR/> This is set non zero if the editing tools are unavailable (ie: the system is in user mode or a standalone EXE)<BR/> This enables a model to adapt its UI/operation for a developer or an end user<BR/><br />
<br />
* '''NEW''' Label list option "Interpret '0' As Label Index 0"<BR/> 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)<BR/> This also takes priority over the "No Numbers" label option, ie: "0" will be allowed but no other numbers.<BR/> Note that it must be a "0" and not "00", "+0" or "0.0"<BR/><br />
<br />
* '''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.<BR/><br />
<br />
* '''CHANGE''' Have changed the way text in paint buttons with the "Fit To Text" option selected is aligned.<BR/> 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.<BR/> If either or both of "left align" or "right align" options are on, then no margin is added to either side of the button.<BR/> 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.<BR/><BR/><br />
<br />
* '''CHANGE''' I've made some changes to the value formatting code.<BR/> 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.<BR/> Previously, this combination would only show up to 4 digits of precision and trailing zeros were removed.<BR/><BR/><br />
<br />
* '''CHANGE''' The field width overflow indicator in formatted values is now always ">>>"<BR/><br />
<br />
* '''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.<BR/> References to the class were not being properly purged from the copy/pasted portal<BR/><br />
<br />
* '''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.<BR/> I have changed the initialisation order to only enable the internal system broadcasts after the engine is fully initialised.<BR/><br />
<br />
=== 5.06j ===<br />
* '''Routine''' enhancements and fixes<BR/><br />
<br />
* '''NEW''' "CopyFont" routine operation enables fonts to be copied between columns and table cells<BR/> 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.<BR/><br />
<br />
* '''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).<BR/><br />
<br />
* '''FIX''' Routine editor menubar is now updated when a new routine attribute is added in the textual editor<BR/><br />
<br />
=== 5.06i ===<br />
* '''FIX''' Fixes a bug in the routine editor introduced in 5.06h which prevented adding operations without a target.<BR/><br />
<br />
=== 5.06h ===<br />
* '''NEW''' Panel Width and Height object properties (useful for a portal) are now writeable, enabling a panel to be resized dynamically<BR/><br />
<br />
* '''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.<BR/> 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.<BR/> 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.<BR/> During any given edit, it will only ever prompt once for a given attribute name/type combination, again to prevent nagging.<BR/> Tables, Columns and Label lists cannot be added on-the-fly.<BR/><br />
<br />
* '''NEW''' A new INI value<BR/> [Table] TableColumnNoSort=0<BR/> 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<BR/><br />
<br />
* '''NEW''' Routine operation "GetPaintProperty"<BR/> Enables a paint property, as determined by the property index from the "_paint property" label list to be read.<BR/> 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.<BR/><br />
<br />
* '''NEW''' Routine operation "DeleteAllPaintObjects"<BR/> This deletes ALL paint objects on the destination panel. All paint objects inheriting from these objects are also deleted.<BR/><br />
<br />
* '''NEW''' Routine operation "FitPanelToArea"<BR/> This resizes the work area of a panel to fit the objects contained within, with a specifiable border margin.<BR/> Note that some objects do not report their size correctly until they are initially drawn (as for GetPaintProperty notes above).<BR/><BR/><br />
<br />
* '''NEW''' Time mode "xxhr yymin"<BR/> This is primarily an output mode intended for displaying an interval as integral hours and minutes - example:<BR/> 3hr 16min 1hr 10min 12min<BR/> Times are rounded to the nearest hour/minute.<BR/> days/weeks are shown as hours.<BR/><br />
<br />
* '''NEW''' _Data Object label list<BR/> Tables, attributes, label lists and sub label lists can have a label associated with them in this list.<BR/> This will be used in DataSet Version 2.<BR/><BR/><br />
<br />
* '''FIX''' RowCount default for DeleteRow was not being set properly for a dynamic table reference<BR/><br />
<br />
=== 5.06g ===<br />
* '''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.<BR/> It applies to formats except scientific and the latitude/longitude formats.<BR/> If using decimal commas, do not forget to change the number separator from "," (Settings-> System Parameters) otherwise the number processor will get confused.<BR/><br />
<br />
=== 5.06f ===<br />
* '''NEW''' A new object property for track sections has been added:<BR/> "SectionFillEnable"<BR/> 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.<BR/> 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.<BR/><BR/> 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.<BR/> 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.<BR/> 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<BR/><br />
<br />
* '''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.<BR/> 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.<BR/><BR/><br />
<br />
=== 5.06e ===<br />
* '''NEW''' Dispatcher mode "Send Dynamic Broadcast"<BR/> In this mode a dispatcher sends a broadcast to a scope set by a reference, as for the normal broadcast.<BR/> Unlike the normal broadcast, the type of broadcast sent is determined dynamically by another reference.<BR/> This reference should be set to an attribute which has a valid broadcast label index, to identify which broadcast type to send.<BR/> 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.<BR/> Document your intent when using it.<BR/><br />
<br />
* '''FIX''' Label suggestion list updates as you type more of the label in<BR/><br />
<br />
* '''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<BR/><br />
<br />
=== 5.06d ===<br />
* '''This''' version addresses a few issues with importing and reading data<BR/><br />
<br />
* '''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.<BR/> The import processor was using the incorrect # of columns after the resize, possibly overwriting memory.<BR/><br />
<br />
* '''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<BR/><br />
<br />
* '''FIX''' The table importer will strip trailing spaces from values to prevent them causing errors in the number perser.<BR/> For labels, the modeller can select whether trailing spaces are removed or not in the label list.<BR/><br />
<br />
* '''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.<BR/> This prevents the auto-typer getting confused in countries where long numbers are spaced with spaces instead of columns.<BR/><br />
<br />
* '''FIX''' Item table references were not working at runtime because the table name was not being properly pre-processed, as of 5.06a.<BR/><br />
<br />
=== 5.06c ===<br />
* '''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.<BR/> This keeps "local" paint objects on a panel in the foreground<BR/><br />
<br />
* '''NEW''' Pop-up suggestions when entering a labellist and a label member both work<BR/><br />
eg: l._colors[ will pop up a list when the [ is typed<BR/><br />
<br />
* '''NEW''' Pop-up suggestions when entering a column reference for a table now works<BR/><br />
eg: t.table[1][c. will pop up a list when the . is typed<BR/> (unlike for labels, a column label cannot be assumed as the column reference is sometimes an attribute, value or expression)<BR/><br />
<br />
* '''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.<BR/> When the View Control condition is false, the object effectively becomes transparent to all clicks in it.<BR/> For Paint Objects, this applies in all modes except Paint Edit.<BR/> For the views, this applies when the editing tools are hidden and in run mode.<BR/> eg:<BR/> By testing the "HaveCurrentPendingEvents" system attribute, a view can be prevented from being modified if there are any scheduled events on the FEC.<BR/><br />
<br />
* '''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.<BR/> Trailing spaces are not limited for label aliases.<BR/><BR/><br />
<br />
=== 5.06b ===<br />
* '''This''' version contains mainly fixes to 5.06A as testing of the new code<br />
<br />
* '''continues.''' <BR/><br />
<br />
* '''NEW''' new object properties ObjectPanelWidth and ObjectPanelHeight enable the width and height of a portal's subsystem to be read<BR/><br />
<br />
* '''FIX''' Selection of "Label" attribute field mode now works again in the graphical attribute reference editor<BR/><br />
<br />
* '''FIX''' Extraneous quoting for labels containing a decimal in the second character fixed<BR/><br />
<br />
* '''FIX''' BitXOR operator is consistently formatted like the other bitwise operators<BR/><br />
<br />
* '''FIX''' Parser now reports if the label list name is bad for a label reference<BR/><br />
<br />
* '''FIX''' Parser now handles functions when mixed with other operations<BR/><br />
eg: 0 - t.datatable.ColumnIndex(c.Origin)<BR/> is useful for a reverse sort column index<BR/> Also extraneous brackets no longer are put around functions<BR/><br />
<br />
* '''FIX''' Memory leak in parser<BR/><br />
<br />
=== 5.06a ===<br />
* '''This''' is an initial test release; a significant rewrite has occured which needs<br />
<br />
* '''to''' be tested for compatibility with existing models.<BR/><br />
<br />
* '''The''' expression parser and its integration into attribute references has been<br />
<br />
* '''rewritten.''' <BR/><br />
<br />
* '''The''' key new capabilities are:<BR/><br />
<br />
* '''-''' Any of the graphically specified attribute references can also be represented and edited textually, a big step towards a consistent routine "language".<BR/> (The graphical editor is still supported and is being enhanced next)<BR/><br />
<br />
* '''-''' Expressions can be used for individual fields of a reference, such as the row and column index of a table.<BR/> This enables references such as<BR/> t.mytable[r.whichrow + 1][c.Column]<BR/> In previous versions, temporary variables would be required to do this,<BR/><br />
<br />
* '''-''' A framework for strings without labels is in place<BR/> 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.<BR/><br />
<br />
* '''-''' Functions with multiple parameters are supported.<BR/><br />
<br />
* '''-''' PL will do its best to represent a typed-in expression as an equivalent attribute reference that would have been selected graphically.<BR/> This is important as there are many optimisations for the attribute reference objects.<BR/><br />
<br />
* '''-''' Future framework for advanced references (eg: referencing data from within an external database, calling a DLL)<BR/><BR/><br />
<br />
* '''As''' an example of the enhanced function capability, the following additional<br />
<br />
* '''functions''' can be used in any attribute reference.<BR/><br />
<br />
* '''min(x,y)''' : minimum of 2 values<br />
<br />
* '''max(x,y)''' : maximum of 2 values<br />
<br />
* '''atan2(x,y)''' : arctan; useful for finding angle of a line<br />
<br />
* '''hypot(w,h)''' : find the length of a line with width and height<BR/><br />
<br />
* '''The''' following basic "types" are recognised:<BR/><br />
p. Portal attribute<br />
i. Item attribute<br />
r. Routine attribute<br />
l. Label list<br />
k. Class attribute<br />
s. System attribute/property<br />
c. Column label<br />
t, Table reference<BR/><br />
<br />
* '''All''' the other references build on these.<BR/><br />
<br />
* '''Further''' documentation will be posted to the knowledge base, in the meantime<br />
<br />
* '''the''' routine editor's display shows the textual form of any reference<br />
<br />
* '''edited''' with the graphical editor.<BR/><br />
<br />
* '''IMPORTANT''' CHANGES<BR/><br />
<br />
* '''Any''' previous model using *expressions* with cell references will not load.<br />
<br />
* '''(these''' were very crude and I dont expect many people to have used them)<BR/><br />
<br />
* '''This''' version saves in a new model file version<BR/><br />
<br />
* '''Table''' column labels must be preceeded by "c." in all cases.<BR/><br />
<br />
* '''System''' and Object Attribute names have had the spaces removed from them<BR/><br />
<br />
* '''Spaces''' can be used in attribute/table names without quotes being required.<br />
<br />
* '''Trailing''' spaces are always removed<BR/><br />
<br />
* '''eg:'''<br />
(p.in counter + 3) / 5<BR/><br />
<br />
* '''will''' expect the portal attribute to be called "in counter"<BR/><br />
<br />
* '''A''' popup reference to functions is to be added.<BR/><br />
<br />
* '''I''' am interested in any load issues or reference display problems in your<br />
<br />
* '''existing''' models so please let me know.<BR/><BR/><br />
<br />
=== 5.06 ===<br />
* '''NEW''' New Animation Manager<BR/><br />
<br />
* '''The''' Animation Manager and a lot of the supporting graphics code in<br />
<br />
* '''PL''' has been rewritten.<BR/><br />
<br />
* '''The''' previous manager was designed in an era of slow CPUs and video blit speeds.<br />
<br />
* '''The''' algorithms it used did not scale well to handling many items and animating<br />
<br />
* '''portals''' on larger work areas.<BR/><br />
<br />
* '''The''' new manager opens up new possibilities for the future, though for this<br />
<br />
* '''release''' the focus has been to get current PL capabilities working under the new<br />
<br />
* '''framework.''' <BR/><br />
<br />
* '''The''' new manager uses more CPU and video bandwidth for simple models, but scales<br />
<br />
* '''more''' linearly with complexity than the previous one.<BR/><BR/><br />
<br />
* '''New''' capabilies:<BR/><br />
<br />
* '''-''' Models with many items moving will animate far smoother<br />
<br />
* '''-''' 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<br />
<br />
* '''-''' "zero time" animation with a high animate speed proceeds much faster, making it easier to "fast forward" through models with animation on<br />
<br />
* '''-''' Item info panels impose less overhead on the animation<br />
<br />
* '''-''' 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.<BR/> 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.<BR/><br />
This is done by naming the BMPs like: TEST@00 TEST@01 TEST@02 and<br />
selecting TEST@00 as the icon. PL will then load the other images<br />
together for that image.<BR/><br />
<br />
* '''-''' 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.<BR/><br />
<br />
* '''-''' the issue of "missing" items until a "continue" when changing panels has been resolved<br />
<br />
* '''-''' items use less memory and there is far less memory throughput for models with a lot of animation (reducing memory fragmentation)<br />
<br />
* '''-''' pipes are now rendered with a graded smoothing of the colours within<br />
<br />
* '''-''' The end points of pipes no longer overwrite the object they connect to<BR/><br />
<br />
* '''-''' attribute and cell views with a transparent background will redraw properly (though they impose an overhead when updating)<BR/><br />
<br />
* '''-''' the new engine should not cause any slowdown in "advance to time" performance of the simulation engine<BR/><br />
<br />
* '''-''' animating items should never leave debris (sometimes happened with auto-rotating items)<BR/><br />
<br />
* '''Considerations''' and caveats:<BR/><br />
<br />
* '''-''' A 1GHz PIII class system with 128MB RAM and AGP video is minimal if animation quality is important<br />
<br />
* '''-''' WinME, Win98 and Win95 are no longer supported; no icons will display<br />
<br />
* '''-''' The "No Backing Store" dynamic panel option is no longer supported<br />
<br />
* '''-''' All dynamic panels will now allocate twice the memory for animation buffers.<BR/> For a 32 bit colour setup, the amount of memory allocated will be:<BR/> width * height * 4 * 2 * zoom-factor<BR/> eg: a 3000x2000 panel will require 48MB at a 100% (normal) zoom<BR/><BR/><BR/><BR/><BR/><br />
<br />
===5.05q===<br />
<br />
CHANGE Positioning an already visible popped up panel now uses co-ordinates consistent with creating it (see 5.05p).<br />
CHANGE Reading the Top and Left Window co-ordinate of a panel window has been updated to reflect the positioning changes.<br />
Popped up panels (either child or popup) now return the relative offset to the top left corner of the active work area.<br />
NEW The main planimate window can have its co-ordinates read and set.<br />
This is done using the same routine operations as for popup panels,<br />
ie: PanelWindowLeft and PanelWindowTop read position ShowPopupPanel to set the position (with panel already visible in the main window)<br />
In this case the co-ordinates are returned as Windows screen co-ordinates. This enables a model to reposition the main PL window.<br />
Doing this may be very user unfriendly so make it optional<br />
<br />
===5.05p===<br />
<br />
NEW Option on attribute and cell views "Repaint Panel After Edit"<br />
This causes the view to schedule a panel repaint after a user clicks and edits the field.<br />
This is useful where a panel display has fields and objects which indirectly depend on the attribute (eg: visibility control) and avoids need for a broadcast to be set up just for a repaint.<br />
This option should be used only where required as it will introduce some lag or flicker on panels with complex displays, images or graphs.<br />
NEW Value formats<br />
Calendar Day Month Day Month HH:MM<br />
These are for cases when the year is unimportant<br />
Modeller beware:<br />
Columns formatted with this format cannot be imported from formatted files or datasets. The dataset will give an error on load and abort the load. (Datasets 2.0 will work).<br />
Clear values for these columns cannot be edited once this format is selected. Select a normal calendar format first to change the clear value, then change the format back.<br />
The date/months can be edited with the calendar picker but the user may need to expand the calendar to chose a leap year if they want February 29th.<br />
CHANGE SPATIAL LINK USERS TAKE NOTE:<br />
The spatial link run/stop control has been changed:<br />
*The value now matters and is used to scale the item time. eg: 1.0 uses the nominal time, 0.5 doubles the time, 2 halves the item time.<br />
*The minimum "on" value is now 0.01. Any lower value and the spatial link is considered stopped.<br />
The scaling occurs only once, as the item enters the spatial link and changes will not affect that item whilst its on the link<br />
CHANGE Made a global change to the dialog code which will attempt to position a dialog so that it does not get covered up by the task bar (on systems which do not have "auto-hide" on.<br />
Look out for any side effects particulary on small screen systems with a multi-line taskbar.<br />
CHANGE Popup panels (popup, palette and child window styles) are now all positioned upon creation relative to the top left corner of the Planimate work area instead of the overall window or the screen.<br />
This should help in more accurate window positioning when the Planimate window is on a second display or when there is margin around the active area due to a large display.<br />
Have not changed the reading or updating of co-ordinates at this stage, will wait for feedback on the current change first.<br />
FIX Paint button hover broadcasts now support the "send broadcast to global scope" paint button option.<br />
FIX The condition editor was displaying portal attribute scope (if enabled) in the buttons, where they should have not been.<br />
<br />
===5.05o===<br />
<br />
CHANGE Gantt block click popup now auto-sizes to the width of the longest string<br />
FIX Maximising a table window now updates its window properly<br />
FIX In the routine editor, the attribute name suggestion popup responds properly to a line being double clicked. This did not work before as it was originally only a keyboard accellerator<br />
NEW Right clicking in an open field in the routine editor open the full attribute reference dialog. This is an alternative to F2<br />
FIX Gantt block click popups (and other similar popups) now get the correct number of rows shown in the window<br />
FIX Panel title updated after a dataset operation within a routine<br />
FIX The "Include Scope In Portal Attributes" option no longer messes up the routine list or the routine step editor<br />
<br />
===5.05n===<br />
<br />
NEW Rewrote the track loop delay mechanism to support modeller interfacing to the section hold mechanism from a portal.<br />
Selecting the portal option "Track:Does Loop Delays" enables loop delays for a portal. The delays used are set by the references in the Track menu, just as for Track Loop objects.<br />
It works as follows:<br />
A train entering the portal starts a loop entry delay on the section it entered on.<br />
If the train immediately leaves the portal (within 0.1 seconds of its entry time) then the delay is cancelled and there is no entry or exit delay.<br />
If the train cannot leave the portal (eg: next section prevents it) or it is held in the portal (eg: in a multiserver) then the inbound section will undergo the loop entry delay (being unavailable to other trains during that period).<br />
When the train eventually tries to leave the portal, the following occurs:<br />
*if the loop entry delay hasn't finished yet, the train will be blocked from leaving (and the incoming section continues to be held)<br />
*once the loop entry delay finishes, the train is further blocked from leaving for the loop exit delay (and the outgoing section is held in loop delay)<br />
*once the loop exit delay finishes, the train can leave the portal onto the outgoing section.<br />
Apart from being blocked from leaving, a train is free to move about inside the portal while the loop entry delay is under way.<br />
Portals with loop delays require a capacity for the train to wait at. This can be a standard dispatcher or a multiserver configured for items to not block each other (the default). A queue is not recommended unless the trains must leave in a specific order.<br />
If a train enters a loop delay portal and the item is subsequently destroyed (eg: in an exit) then any section with a loop entry delay is immediately released.<br />
Loop delays are not compatible with portals set to "Act As Junction<br />
CHANGE The portal "Route step lookthrough" option is obsolete and is removed; any use of it is replaced by "Act As Junction" which has the same effect.<br />
<br />
===5.05m===<br />
<br />
FIX Menu bar hide option fixed<br />
FIX Appropriate title for data set selection when selecting a dataset for a load<br />
<br />
===5.05l===<br />
<br />
NEW 'i' also inserts line in the routine editor CTLL-D deletes the current line in the routine editor<br />
NEW INI file option for developers:<br />
[Routine] UseFullAttrefEdit=0<br />
IF you set this to 1, PL will always edit attributes using the full dialog editor instead of in-place.<br />
CHANGE Routine Step Editor Changes<br />
'''IMPORTANT'''<br />
Instead of &lt;TAB&gt;, &lt;F2&gt; now opens the full dialog attribute reference editor. This is in line with other popular spreadsheet applications.<br />
&lt;TAB&gt; key now advances to the next row in the step editor<br />
FIX Routine Step Editor now enables opening the full editor if the field is empty, instead of displaying an error and forcing some text to be in the field<br />
FIX Startup code for standalone EXEs now starts the model after the about box has finished. This is to avoid the model start broadcasts popping up dialogs before the about box had been experienced.<br />
FIX Resolved a co-ordinate issue in the window manager that prevented panel updates being performed. This affected redraws when transparent paint objects were used, for example transparent hover buttons AND there were margins around the work area.<br />
CHANGE Rewrote the popup-at-mouse positioning code to account for the taskbar when positioning a popup (eg: inital position for the routine step editor)<br />
FIX Pop up list windows were not getting sized properly. Have reworked this code to improve things; they have many combinations and options and are affected by the system window scheme; they will need some verification. This was evident in the size of the gantt click popups.<br />
FIX Potential crash after a gantt or train graph click-popup due to the nodes being regenerated after a redraw<br />
FIX Window bug where all Form based windows (dialogs, info popups) were forcing the main window to unnecessarily redraw. This fix will reduce flicker and make PL graphs much more responsive when they are clicked.<br />
(all windows were causing parent windows to recompute their margins when this is only required for child windows such as the Planimate work area in its container window).<br />
CHANGE Update to change in 5.05d<br />
Popup windows set to close on loss of focus will now close even if they are caption bar less (child windows) however such windows will close if they contain fields.<br />
Hence a caption-bar less popup window set to auto close should not contain fields the user will click in.<br />
Popup windows with a caption bar are not affected.<br />
<br />
===5.05k===<br />
<br />
NEW Loops have a new option "Act As Transparent Junction In Lookahead"<br />
This option only takes affect if the loop is currently setup for zero roads otherwise it is ignored.<br />
It tells the track system to not perform lookahead tests from the point of view of this loop but rather step to the next object and continue lookahead tests there.<br />
It also makes the loop "transparent" to oncoming train checking (as would be expected for a 0 capacity loop acting as a junction) so trains on the other side of the loop will be "visible" when capacity lookahead (CheckNext) tests are being done.<br />
With this option on, it should avoid situations where distant trains are "released" when another train passes a 0 capacity loop acting as a junction (ie: an optional loop that is currently disabled and shouldn't be logically affecting the network)<br />
NEW Help menu has an option enabling another key file to be selected. If the key file is useable, it will automatically be copied to PL's settings folder.<br />
CHANGE Time formats<br />
The format<br />
Time HH:MM SS<br />
no longer hides the seconds if they are 0 nor hides the HH:MM if they are zero. This is to increase consistency for end users.<br />
CHANGE If the current key file is unuseable, PL will give the error message then offer the file browser so another can be selected. This is useful when key files expire<br />
CHANGE No longer disable/re-enable main window at startup as it causes flicker<br />
FIX Time format "Time HH:MM (no seconds)" now properly "sticks" when selected.<br />
FIX For some routine operations (eg: Sort) the incorrect routine operation was selected in the field if the modeller selected the routine operation browser for an existing routine line.<br />
<br />
===5.05i===<br />
<br />
FIX The UI state was getting confused if a dataset was loaded that required the model's Run Date to be changed. This occured because changing the date requires the engine to be stopped and started, the latter was changing the state unexpectedly.<br />
This would not have been noticed in models that processed the "dataset loaded" broadcast.<br />
<br />
===5.05h===<br />
<br />
NEW System attributes (prefix "s.') are now suggested and handled in-place in the routine attribute field and browser<br />
FIX Tuple copy of matching columns where the original and destination table is the same table should now be supported<br />
<br />
===5.05g===<br />
<br />
This release adds a browser to assist in typing in attribute names in the routine step window. It signifies the completion of new UI capabilities to improve the editing of routines.<br />
NEW This adds a dropdown list which suggests attribute names as portal, item or routine attributes are typed into the routine step details window.<br />
The list drops down after the type of attribute has been specified (eg: "p." or "i." or "r.") and updates as text is typed.<br />
Names with spaces are handled (they get quoted when inserted)<br />
The list only appears after the initial "type" of the attribute and the "." is typed and is not part of another name or within quotes. You can use the list even in an existing expression to choose a different attribute by selecting the "old" name you wish to replace (but not the space after it) then typing say "p." for a list of portal attributes.<br />
Up and down arrow keys can be used to select an attribute and pressing SPACE or ENTER will insert the highlighted attribute name (if eny)<br />
An upcoming release will add support for system attributes, labels and cell references in expressions.<br />
FIX Fixed precedence of / over * in expressions. This was causing brackets to disappear in cases like a / (b * c) which then evaluates as (a / b) * c.<br />
Now / and % share a higher precedence than *<br />
This affects modellers who use the expression capability to type in formulas.<br />
<br />
===5.05f===<br />
<br />
NEW Added context help buttons and idkbase content for the new routine editors<br />
NEW Routine step editor supports pressing TAB on a line to go directly to the attribute reference editor rather than in-place edit. This is useful if you know that a table needs to be selected for a line<br />
FIX Small negative numbers no longer display as "-0". This is a display change only and if your code is testing against 0, then you will need to account for roundoff.<br />
FIX Routine Delete-All (from the menu) didn't set the Undo state<br />
FIX Z-order of portal state edit dialog was not properly maintained and it could be lost behind the main window<br />
FIX PL now disables the main window at startup while the "about" box is up to prevent the click that closes the about box being interpreted as a region select<br />
FIX 2 routine operations had the same name (FormatIntoLabel)<br />
<br />
===5.05e===<br />
<br />
Further progress on routine editing:<br />
NEW The routine editor now supports direct editing of attributes and mathematical expressions in the routine step details window.<br />
When an attribute reference is selected for edit (eg: the "target" in many operations), the following types can be entered directly "in-place":<br />
*constant numbers eg: 12345<br />
*portal attributes eg: p.attributename<br />
*routine attributes eg: r.attributename<br />
*item attributes eg: i.attributename<br />
*an expression eg: p.attribute + i.attribute * 2 + 1<br />
*** Once this field is open, you can press &lt;TAB&gt; to use the *!* full attribute reference dialog. If the field contents are valid, *** it will transfer them to the dialog.<br />
If the reference does not support editing in place (ie: not one of the above) then the attribute reference dialog opens immediately.<br />
An upcoming PL version will include a data browser/dropdown to enable attributes to be quickly entered in the field.<br />
NEW The '/' key can be used to edit the comment of the currently selected routine line in the routine list. After an edit, it auto-advances to the next line.<br />
This makes it easy to add comments to existing code<br />
"/" was chosen because in C and Java, "//" signifies a comment.<br />
NEW The '/' key can be used to edit the comment of the currently open routine step window.<br />
FIX Multiple highlighted routine lines when debugging with a routine window open<br />
FIX Attribute References in Object Property or Expression mode were not discarding of any previous table reference string<br />
FIX Icon picker and mover realigned for new form code<br />
FIX Column title clicks no longer sort the step editor fields<br />
FIX Formatting of breakpoint statements in a routine has been cleaned up<br />
FIX Dont show extra formatting commands in the routine operation comments field<br />
<br />
===5.05d===<br />
<br />
This version addresses a number of requests on the BZ list<br />
CHANGE Pressing ENTER in the routine list no longer closes the window but rather edits the current line. (it was too easy to accidently close the editor after closing a step editor).<br />
CHANGE A Loop Up/Down Decision is now considered "not in use" if there are no decision tests made, regardless of the "default" value of the decision. This change should not affect any models.<br />
CHANGE If a breakpoint occurs during the "advance to time" mode, Planimate will now drop out of that mode while the breakpoint dialog is open to make it easier to inspect the model.<br />
FIX multiple step columns appearing when the routine window is minimised and restored.<br />
FIX A different subsystem can no longer be selected in the hierarchy explorer while graph points are being examined.<br />
FIX Added an interlock to prevent routine list commands being executed while the routine step window is active. This could lead to crashes if the routine window was closed whilst a step was being viewed<br />
FIX Non-floating viewports have their co-ordinates udpated properly when the main window is resized; this was causing them to lose their position temporarily when the main window was bigger than the required panel area and it was resized.<br />
FIX An auto-close popup panel containing a view will no longer close when that view is clicked for editing. This was fixed by making the panel watch for deactivate events rather than killfocus events.<br />
FIX The label option to directly read numbers as label indicies will now do so quietly, without asking any questions about adding labels until an actual label is encountered.<br />
<br />
===5.05c===<br />
<br />
Continuing the rework of the routine editing to reduce cumbersome editing, the routine list and step editor have been rewritten and now have the following capabilities<br />
*A single level of Undo on editing lines in the routine has been added. This is available via the context menu or using CTRL-Z<br />
*The "Routine Step" window is now a popup and has no OK/Cancel buttons; it closes when you click outside it or press ESC or ENTER. Changes are now always committed but can be undone with the Undo feature.<br />
*When the Routine Step window is open, the left and right arrows can be used to step through the details of other routine lines. An "undo" following this stepping will undo all changes to details made while the Routine Step window was open.<br />
*The routine editor has the following tweaks<br />
*The selected routine line auto-advances after an edit<br />
*The initial selected line in the "Routine Step" popup is the one after the "Operation" line<br />
*More routine colour categories are now supported:<br />
*"Routine Constants" sets the colour of constant values<br />
*"Routine Scoped Attributes" sets the colour of attributes that have scope beyond the routine<br />
*"Routine Local Local Attributes" sets the colour of attributes local to the routine (ie: routine attributes)<br />
If your model was saved with 5.05 or later, you should reset the routine editor fonts if you want to see the new default colours and styles.<br />
*The step menu has been removed from the routine editor menubar as its functions are available in the context menu and in shortcut keys<br />
*Mathematical operations (like + and *), comparisons (like &lt;= and &gt;) and logical operations are now shown using the "Routine Control Statements" font style. This helps them stand out from routine attributes which could include these characters.<br />
*Logical operations have been renamed to make them consistent between routine operations, conditions and expressions.<br />
"Not Equal" is now shown as "!=" "Equals" is now shown as "=="<br />
*These shortcut keys are supported in the routine list: "[" Jump to start of code block "]" Jump to end of code block "-" Toggle disable/enable of line "A" Edit routine attributes "D" Duplicate the current line "E" Edit details for the current line SPACE Edit details for the current line "M" Show the context menu for the current line CTRL-C Copy selected range CTRL-X Cut selected range CTRL-V Paste copied rows at the current row CTRL-Z Undo the last edit INS Insert a new row at the current row DEL Delete the current selected row range ESC Close editor ENTER Close editor UP Previous line DOWN Next Line<br />
*These shortcut keys are supported in the step detail popup UP Previous step detail line DOWN Next step detail Line LEFT Previous routine line RIGHT Next routine line ESC Close step popup ENTER Close step popup SPACE Edit details for the selected step line<br />
NEW Value format: "Value with commas, no decimal"<br />
FIX An empty subroutine will no longer cause the parent routine to be deleted<br />
FIX Text displays which included an "&amp;" now display as expected rather than treating the ampersand as an accellerator underline<br />
<br />
===5.05b===<br />
<br />
FIX The routine editor now overrides the custom colours on the highlight line. Otherwise the selected line is difficult to read on a dark text/light background setting.<br />
<br />
===5.05a===<br />
[new file version]<br />
This version is the result of more heavy development of the new routine editing environment. It adds colour coding of routine code which can greatly enhance readability.<br />
NEW Routine editor now uses multiple colours/fonts/styles to show the lines in a routine.<br />
There are 6 customisable categories:<br />
"Routine Operations" The style used for row numbers, the names of most routine operations<br />
"Routine Control Statements" The style used for code flow-control statements such as IF and ITERATE<br />
"Routine Value References" The style used for values and references to attributes<br />
"Routine Table Reference" The style used for references involving a table<br />
"Routine Label References" The style used for references directly referencing a label list<br />
"Routine Comments" The style used for comments<br />
These may be customised in the Fonts dialog. The styles are saved along with the model. Note that colours set in this dialog are now retained.<br />
For a new model (or one which didn't have any routine fonts defined yet) Planimate will detect if you are using an inverse Windows colour scheme and use an appropriate style.<br />
A new button in the font dialog enables the routine operations styles to be reset to the EXE defaults. This is useful when loading a model created under a different windows colour scheme.<br />
I will someday support styles being put into the INI file; this is challenging due to the large number of parameters which specify a font.<br />
CHANGE The "Routine Operations.txt" file shipped with 5.05 is no longer necessary as its obsolete and I now have a method of compiling it directly into the EXE.<br />
I still manage the "master" routine operations in a spreadsheet. Contact me if you'd like to contribute to the style (eg: better comments on the routine lines).<br />
CHANGE More reformatting of routine operations. Operations which had a table as the "result" now have the table as the first member in the bracketted list. The intention is that "=" should only apply to values.<br />
===5.05===<br />
<br />
This is a first release of major rework of Planimate. Appreciate any feedback.<br />
A new routine editing environment is being built. This version includes:<br />
*a new routine operation selector<br />
*a new routine step editor<br />
*a table driven routine definition system<br />
There is more to come; I wanted to get something out so feedback could start coming in.<br />
The release includes a TXT file "routine operations.txt" which must be placed in the same directory as the Planimate EXE. This file contains a database defining the routine operations and is in the process of being populated.<br />
Eventually this file will be rolled into the EXE once it settles down.<br />
For now, you can use this version of Planimate to edit and release using 5.04G as the model format or engine capabilities have not changed.<br />
NEW ROUTINE EDITOR REWRITE<br />
The routine editor now uses an external database table to drive the editing and display of the routine lines.<br />
A new selector for routine operations has been written to replace the hierarchical menus. This has the following features:<br />
1. Two lists show routine operation categories and operations. Selecting a category will set the operations list with the relevant operations. "ALL" is included as a category.<br />
2. Notes on the currently selected routine operation, how its formatted, its expected parameters and comments are displayed in a field at the bottom of the selector dialog.<br />
3. There is a combo-box field into which routine operations can be typed. As text is typed, the operations list is filled with any matching routine operations (from any category) sorted in order of match depth<br />
4. Some operations such as Set or Inc can be matched either by typing their name or by the notation indicated in brackets, so "=" can be typed for Set, "+=" for Inc etc.<br />
5. If the text typed exactly matches an operation, it gets highlighted and placed at the top of the operations list. Other operations may still be in the list if they contain the entered text.<br />
6. IF an operation is highlighted, the comments field pertains to it. If no operation is highlighted then the comments field pertains to the topmost operation in the operations list<br />
7. Pressing enter/OK selects the highlighted operation. If none is highlighted then it selects the first operation in the operations list. This enables rapid keyboard selection of operations by typing the minimum needed to get it to the top of the operations list<br />
8. Using the up and down arrows on the combo-box field navigates the routine operations in alphabetical order, updating the category, operations and comments areas. This is useful for browsing operations by name when the category is not known by the developer<br />
9. The tab order of the fields is arranged for speed:<br />
Initial: Combo-field, then operations list, then OK button.<br />
ENTER can be used at any time to select the highlighted or topmost operation.<br />
10. TeXt CaSe is not considered in matching routine operations. Generally the following rules are used:<br />
*Most operations are named in MixedCase (sometimes called CamelCase)<br />
*Scientifc operations and math functions are in lower case<br />
*Execution control operations are in UPPERCASE<br />
Benefits:<br />
Increase modeller productivity and speed Assist in becoming aware of related routine operations An in-built cross-reference to the routine operations Support mouse and keyboard users<br />
NEW Routine Line Editor<br />
The editor which appears when a routine line is clicked has been reworked<br />
Instead of buttons, a list enables the operation and parameters to be selected and edited.<br />
Double clicking a line shows the appropriate editor<br />
The comment can be typed in "In place" by selecting its line.<br />
The arrow keys and space bar can be used to select and edit a line. Ehe ENTER key closes the step editor<br />
The extra step editing buttons have been removed<br />
CHANGE Improved the report of a label list's users<br />
CHANGE A major rewrite of the way fields, buttons etc. are positioned in all the Planimate editing and user dialogs. This will affect the layout of all dialogs slightly. The new method embodies the way co-ordinates are measured in the Win32 environment and makes reliable positioning of widgets easier.<br />
Multi-line fields in particular were reworked.<br />
<br />
===5.04g===<br />
<br />
NEW 2 new track rules have been added which are proving to increase train throughput with train fleeting type situations.<br />
A new Engine Option "Enable June2006 Track Enhancements" enables these new rules so existing models can be tested with and without this option.<br />
CHANGE 1:Change to track rules<br />
IF a train is doing a loop exit delay as a train behind it doing a lookahead, its considered viable capacity for the train behind to start moving towards the loop.<br />
CHANGE 2:Change to track rules<br />
IF a train is looking ahead at a loop with only one capacity slot left, that loop now responds "yes" to the train if it is followed by a non-single track with at least one train heading in the same direction as the original train. Otherwise, it recurses the test on the next object along the track, like before.<br />
FIX Routine operation to set paint text no longer changes the bounding box of the paint object; this required the paint object to be visible.<br />
<br />
===5.04e===<br />
<br />
NEW The data importer now supports comma delimited data with commas inside quoted strings<br />
NEW Comments can be associated with lines in a multiple condition list (including the "default" line). This will assist modellers in documenting their intent for the conditions and under what circumstances they expect the default case to be taken.<br />
NEW Space key or double clicking on a line in the multiple condition dialog is now a shortcut to eiting that condition.<br />
NEW The "Accept Incomplete Tables" file read option will now also accept tables with less columns than the expected number of table columns. This enables data with variable trailing columns to be read<br />
CHANGE Stand-alone application EXE's have their window auto-sized to fit the initial panel's work area as much as possible. This is useful for creating "utility" applets with small windows.<br />
CHANGE Reworked the startup code so the clock is not visible unless its needed when a planimate application EXE is loading<br />
SPEED The "Matched Copy Row" routine operation has been sped up using a table-to-table tupling cache. This will speed up the transfer of matching columns between two tables with different column arrangements.<br />
Careful handling has been included to reset the cache should either the source or destination tables have their column structure changed during the run.<br />
SPEED Have reworked the way routine lines are executed to gain more speed.<br />
*overheads of the routine-line profiling debugging option have been reduced when that option is not turned on (the usual case)<br />
*code has been re-arranged so the CPU can better predict which branch to take in tests for errors (which normally would not occur).<br />
SPEED Have reworked the way routine "SET" is processed. Made the special case tests (setting a label list, setting an item table) process faster and put the set attribute=attribute case in a place so it will process with much less overheads.<br />
This will speed up all models that use routines.<br />
FIX When the background is clicked and dragged to select a group of objects, no grid snapping occurs for the selection box. This enables the edges of the panel to be reached.<br />
FIX Rework of startup code so standalone applications running in /BATCH mode are supported. This enables batched execution of Planimate based applications without a GUI being presented to the user.<br />
<br />
===5.04d===<br />
<br />
NEW The routine editor supports multiple line selections for cut and delete.<br />
The range between the first and last selected rows is used, even if not all rows within it are selected.<br />
NEW Routine editor shortcut keys:<br />
CTRL-C -&gt; copy selected row range CTRL-X -&gt; cut selected row range CTRL-V -&gt; paste rows INSERT -&gt; insert rows 'F' -&gt; Jump to block end 'D' -&gt; Jump to block start 'E' -&gt; edit current line SPACE -&gt; edit current line DEL -&gt; delete rows (confirms first) - deletes between first and last selected rows, even if some rows not selected<br />
=== Editor's please note ===<br />
A selected range spans from the first to the last selected rows. Deleting a range will delete ALL rows in that range, even if they are not selected.<br />
NEW The mouse cursor indicates "busy" when datasets are being saved and loaded<br />
NEW A new option on a Label List "Treat Numeric Values As Indicies" enables importing of label data where some entries are raw index values and the modeller wants them to be treated as such.<br />
SPEED Attribute Referenes now store control information in 32 bit values rather than 8 bit values, to increase access speed.<br />
SPEED Portal and Routine attributes values are now faster for reads, as fast as constant and label values.<br />
(attributes used for table row/column references get no speed benefit)<br />
SPEED Routine Attributes are now potentially MUCH FASTER than portal or item attributes for writes. This is because PL now takes advantage of the fact that they do not have views or unblock dependencies.<br />
Routines with long, speed critical iterative loops should use routine attributes then write the results back to item or portal attributes once they are done.<br />
The speed advantage is lost if rounding or range checking is enabled for the routine attribute; PL then has to do the full processing.<br />
SPEED Sped up writing to table cells by inlining a key part of the table code<br />
FIX Interactive inspection of switch conditions was not showing label reference values, this is now corrected.<br />
FIX Initial positioning of the sidebar on some displays was incorrect. Changed the way it gets calculated.<br />
FIX The "Log Viewer" menu item will now execute the correct EXE; previous releases would execute "PLanimate.EXE" if it existed, causing an error message to appear. This was fixed by quoting the entire file spec passed to the Windows shell.<br />
FIX A routine editor opened during a run now shows the comments in the correct column when the run is stopped.<br />
FIX Routine operation Matched Row Copy propagates updates to the cells which have been updated. This is now done cell by cell rather than for the entire row. Also fixes the screen update issue.<br />
<br />
===5.04c===<br />
<br />
NEW A new option in settings-&gt;End User "Enable Reading Decimal Commas"<br />
This enables Planimate to read numbers/money where a comma is used as a decimal point, as is the case in European databases. Numbers with normal decimal points will still be read OK.<br />
This only affects reading numbers, they will still be displayed with a decimal point once in Planimate.<br />
It is intended to be used with the number separator enhancement in 5.03n which must be set to a non-comma character.<br />
This change involved rework of the S_TIMEFM module which does all the number and money conversions and the auto-format detection in PL.<br />
Its been tested but be on the lookout for any issues with data entry and/or import.<br />
FIX Debugging with the routine editor open during a run was broken in 5.04b and is now fixed. The new code has the benefit that routine "taken" information is available even if the routine editor was not open at the time the model was run - very useful for "after the fact" checking.<br />
I believe it will also execute faster on modern procesors as I'm avoiding an branch test which would cause a hiccup in the flow of instructions through the processor's pipeline. This is important when one considers that this code is performed for every line of every routine in the model.<br />
<br />
===5.04b===<br />
<br />
NEW Value format x.xxxxxx% for those times when a percentage really needs to be precise.<br />
CHANGE The y-scale on graphs no longer loses its format for values when the yrange is &lt; 0.01.<br />
Doing this was useful when the existing formats did not have precision displays &lt; 0.01 but is no longer appropriate.<br />
NEW IFs, WHILES and Conditions in routines can now be viewed while the model is paused, like the switch.<br />
CHANGE Routine "Taken" information is now always available for all routines, even if a routine editor was not open for the routine (its better to just do the count than to test whether to do it first)<br />
<br />
===5.04a===<br />
<br />
BUGFIX Fixed data copy to the clipboard which 5.04 broke<br />
CHANGE No longer truncate numbers &lt; 0.0001 upon imput or import from clipboard<br />
===5.04===<br />
<br />
This release has no new features, however significant rework of the iFlow toolkit has occured.<br />
*Due to cleaned up windows message processing, the UI will be a bit faster<br />
*More error checking has been added for window message processing<br />
*New standard functions for processing number&lt;-&gt;string conversions<br />
*Underlying toolkit (largely) supports Unicode (but PL doesnt yet).<br />
SPEEDUP Have inlined table index processing code. This seems to make table-intensive routine code about 10% faster.<br />
<br />
===5.03o===<br />
<br />
BUGFIX The number separator introduced in 5.03 defaulted to a "." instead of ",".<br />
*** IMPORTANT *** If you saved your model using 5.03n, you'll have to change it manually, (settings-&gt;system parameters-&gt;number separator)<br />
<br />
===5.03n===<br />
<br />
CHANGE Relaxed a restriction preventing icons being loaded from an external file in a standalone EXE. IF the icon name contains a "\", PL will now look in an external folder for the icon before searching its database for the image. This is useful for the Table Grid View where icons can be referenced with a label list. The list can name the icons as say "images\my_image.bmp". PL will then look in a subfolder called "images" to the directory where the EXE is from.<br />
BUGFIX Fixed the now famous "Attref scan count" issue. Thanks to the numerous people who reported how to reproduce it.<br />
Copied conditions were not being properly cleared at the start of a run due to the magic that occurs to enable the condition editor to view the attribute states when a switch is clicked at runtime.<br />
This caused the copied conditions to leak into the ether and trigger consistency/safety checks.<br />
NEW The number separator character can be changed from the default ","<br />
This is set under Settings -&gt; System Parameters -&gt; Number Separator<br />
<br />
===5.03m===<br />
<br />
BUGFIX Graph scales would lockup when the graph consisted of a single -ve Y value and the option to extend the y-range was on. It was messing up the yrange. The scale code is protected against this and the y-range extender has been fixed.<br />
<br />
===5.03l===<br />
<br />
BUGFIX Scenario option in previous release was busted<br />
<br />
===5.03k===<br />
<br />
NEW Option Settings-&gt;End User-&gt;Ask DataSet Type On Load<br />
This causes PL to put up the dataset type selection dialog before a dataset is loaded. This is useful where the user is dealing with a lot of dataset files with different extentions and wants to load a particular type.<br />
BUGFIX Paste condition is cleared before an attref scan to prevent scan count errors during editing/renaming of attributes when there is a condition in the copy/paste buffer<br />
<br />
===5.03j===<br />
<br />
NEW New option in Setting-&gt;Engine to unblock trains in FIFO order instead of the default LIFO order<br />
<br />
===5.03i===<br />
<br />
BUGFIX routine editor and multiple screens. Show the step editor before editing the initial target attribute to ensure it has correct co-ordinates<br />
BUGFIX About box positioning tracks monitor main window is on<br />
BUGFIX Panels popped up by the model now appear on the monitor containing the PL main window (if they are independent floating popups)<br />
NEW Added a debug option to report whenever an object (Exit or Dispatcher) initiates a restart of the run engine<br />
Note that automatic restart-after-stops are not reporting, this option can be turned off in the settings<br />
BUGFIX After an exit restarts a run, it was possible that some zero time unblock events could be posted to the FEC, giving the user errors when they attempted to interact with the model.<br />
After the engine restarts, the engine now clears zero time events before returning to the user.<br />
This might break old models which expect the run to pause after a restart from an exit but I think the new behaviour makes more sense. It will pause after the zero time events are processed.<br />
<br />
===5.03h===<br />
[new file version]<br />
NEW Routine operation: Iterate Table Rows<br />
This makes it easy to iterate an attribute over every row in a table, from the first to the last. The modeller specifies an iterator attribute (routine attributes are most efficient) and a table.<br />
Apart from the convenience, it is also faster.<br />
Unlike the standard iterate operation, setting the iterator variable will NOT affect the loop; the change will be ignored when it comes around to doing the next iteration. This helps gain a bit more speed.<br />
NEW Debugging for switches in Attribute, Condition or Multiple Condition mode.<br />
Clicking on the switch in run pause will show the attribute/condition including the last values of the attribute reference.<br />
This should assist debugging condition logic and switches which are not acting as expected.<br />
In all cases, the value shown is the last value the attref returned (including during lookahead) and not the current value of the data that the attref refers to.<br />
BUGFIX Run In Realtime now works again (was using the wrong FEC) It got broken during the V5 updates when a second FEC was added for async network events.<br />
CHANGE Run In Realtime will now still advance the simulation clock if there are no pending events on the FEC. This is useful where an incoming broadcast or a conditional test in the _Run_continue broadcast will generate activity and the clock should be moving.<br />
CHANGE When an attribute, cell, table, column overlay, gantt, traingraph, log driven or grid view was in a portal copy and pasted to a new location in the model (eg: through a paste-replace) it would update its reference only if the data object it referenced was copied along with it. otherwise it would remain pointing at the original data, even if that data became out of scope in its new location and there was new data to replace it.<br />
I've redone it so when an attribute, cell, table, column overlay, gantt, traingraph, log driven or grid view gets pasted, it will re-bind itself to the "closest" data object to it matching the name of the original data object. If none exists, it will remain pointing to the original (now out of scope) data object.<br />
This only applies to views in dynamic panels; the ones in view panels dont update, for now. This might change one day.<br />
CHANGE Rework how attribute values are read. This is to allow the previous read value of an attref to be retained as efficiently as possible, needed for item attributes. We all hope I haven't broken anything here.<br />
CHANGE Reworked the way table scrollbars are handled so they are more intuitive to users.<br />
Clicking outside the thumb area now scrolls instead of jumping to the position clicked, like the OS scrollers do.<br />
If "3d Proportional Scrollbars" is enabled, the scroll amount is a page of rows, otherwise it is 10 rows.<br />
If the mouse is held down over a second, it autoscrolls.<br />
NEW Table views have a new option "No Cell Menu" which totally disables the cell click menu.<br />
If a cell click broadcast is enabled, it will be sent instead when the cell is right clicked, with the "_contextclick" item attribute set to 1.<br />
NEW System attribute "Model Needs Saving"<br />
The modeller can set/reset this to control whether PL will prompt to save the model upon exit. This is only useful for models used by editors, obviously a standalone EXE isn't going to be saving any models.<br />
BUGFIX Left handed mouse XP option should be now supported. One of the Win32 functions wasn't consistent when the mouse buttons are switched.<br />
NEW A warning message given if some objects in a multi-select could not be deleted<br />
CHANGE Improved dialog for changing column width after a format change; dont bother showing it if the width is not changeling.<br />
<br />
===5.03g===<br />
<br />
BUGFIX Data file close check was reversed after a lockfile/dataset file open error<br />
BUGFIX TCP server sockets write to multiple connected clients. Reading from multiple clients is supported but may cause problems if packets are fragmented and they overlap. This would more likely happen with packets &gt; 1KB over the internet. Probably wont happen over a LAN.<br />
BUGFIX Removed the 5.03c ODBC error 12 hack. Its not necessary if the "Local Table" attref is set to s.Null Attribute for ODBC operations which Insert or Update data rather than retrieving data.<br />
BUGFIX Restoring a hidden Table Editor window now redraws properly. (the hidden window was still setting the window's client rect, causing it to exclude the entire client from redraw as a minimised window has no client area.)<br />
<br />
===5.03f===<br />
<br />
BUGFIX Major bug in subroutine/attribute management would cause platform crash particuarly if the platform was attempting to report an error in the model<br />
<br />
===5.03e===<br />
<br />
NEW Support for recursion in SubRoutines.<br />
SubRoutines can have "local" routine attributes defined. Each call of a subroutine gets a new copy of these attributes, meaning that if a subroutine calls itself (recurses) then the recursed instance will not overwrite the attributes of the instance calling it.<br />
The local attributes of a subroutine are always cleared when it is called.<br />
Since we dont have parameter passing to routines yet, inputs and outputs to subroutines will have to be via routine attributes defined in the main routine. These remain "global" to all instances of a recursed subroutine.<br />
The included demo model demonstrates using recursion to derive the n'th value of the fibonacci sequence.<br />
SPEED: String comparison has been sped up where testing for a match. This should speed up models with many item attributes<br />
SPEED: Now avoid keeping unnecessary "undo" information for routine attributes. This should speed up routine attributes accessed during lookahead.<br />
Note: accessing a routine attribute is faster than accessing an item attribute<br />
CHANGE Have doubled size of gantt block click window so longer labels are OK<br />
CHANGE formatting of routine export text cleaned a bit<br />
<br />
===5.03d===<br />
<br />
NEW Expression parser rewrite<br />
Numerical expressions are far more powerful, include logical operators, comparisons, references to table cells (with column label) and labels.<br />
<br />
===5.03c===<br />
<br />
CHANGE ODBC Error 12 is no longer reported to temporarily get around using the "fetch" operation to insert.<br />
<br />
===5.03b===<br />
<br />
BUGFIX Tracks system unblock fix<br />
An unblock was not occuring after a train went through a loop with a loop entry delay set but no loop entry delay was actually required<br />
<br />
===5.03a===<br />
<br />
BUGFIX Table cell click BCs didnt have enough memory allocated for the newly added info in 5.03<br />
NEW Multi-column lists now have full-row selection (eg: routine editor, table/attribute lists)<br />
NEW Tool tips added to list fields which are too narrow for their column<br />
NEW MAJOR REWORK OF THE WINDOWING SYSTEM<br />
*changed the way the main planimate window is managed; now any needed scrollbars are placed at the edge of its available space rather than within the bounding rectange of the actual panel area.<br />
This will reduce the need for scrollbars and look more sensible when a panel is larger than the screen area in one direction only<br />
*reworked the repaint of the "explorer" window to avoid flicker (InvalidateClientArea rather than a forced Show)<br />
*reworked the sidebar splitter code to avoid unnecessary forced repaints and made distinction between updating the splitter bounding rect and responding to its movement<br />
*reworked the clock to prevent it causing flicker of the main window as it repainted; did this mainly by setting flags so it doesnt become activated when clicked or moved (causing the main window to have to lose and regain activation)<br />
*Impose clipping on the sidebar objects to prevent them overrunning into the status bar<br />
Probably some graphical glitches left; look out for anything new or weird with window display or mouse click handling.<br />
CHANGE No longer round numbers &lt; 0.0001 to 0 upon entry or import<br />
NEW Cell views now support using a dynamic column reference as well as a dynamic row reference<br />
this will make it easier to have cell views pointing at columns using a column label<br />
NEW Table views have an option to send the cell click broadcast when an entire row and/or column is selected.<br />
To distinguish from editing broadcasts, this broadcast is sent as follows:<br />
Click on an entire row: _row set to the row, _col set to 0 Click on an entire column: _col set to the column, _row set to 0<br />
When these options are enabled, the modeller must ensure to update the broadcast handlers to check for cases where _row or _col are 0<br />
NEW Table broadcasts include a new attribute _contextclick which is set if the broadcast occured because of the context mouse button (usually the right button). This is useful together with the row/column click notifications<br />
BUGFIX Lines properly clipped to panel area upon creation<br />
BUGFIX RTF windows properly clipped to panel area upon creation<br />
BUGFIX Mouse-forming of a box no longer does freaky things if the box extends into the no-mans-land window area (outside the panel work area)<br />
BUGFIX Row/column selection now updates table window title bar<br />
CHANGE Have reworked the form resizing code to manage relocating buttons when the form resizes automatically instead of coding each case-by-case<br />
Enabled resizable modal dialog<br />
NEW Attribute/table and some labelt dialogs are now resizeable (they dont remember their size or column settings yet)<br />
BUGFIX Crash merging models with sub label lists being referenced should be now fixed (wasnt updating owner of temporary Sub label list to the new one before merging)<br />
===5.03===<br />
<br />
This version introduces Customisable Table Views<br />
Tables can now have a column arrangement, colours and formatting customised for each view of the same table.<br />
By default this feature is off for a table view; click in its column line to bring up a query dialog to enable the customised view mode for that view.<br />
Once a view becomes customised, it will not reflect columns rearranged, added or reformatted in the source table, it holds on to its own format.<br />
A view can contain multiple instances of the same column with different colours/formatting.<br />
Table click and scroll broadcasts send their "_row, _col, _to_row, _to_col, _colscroll, _rowscroll" values in view co-ordinates. For a cell click, there are additional attributes set: _data_row and _data_col, which will be the "actual" cell in the source table that was clicked.<br />
Table click broadcasts sent for a block of cells will have these new attributes set to 0; A block in the view may not correspond to a contiguous block in the source table (since columns can be rearranged in the view).<br />
Deleteing all columns in a view reverts the view to non-customised.<br />
Tables with customised views should not import data with the dynamic column resize feature since it may reallocate columns in the table first, messing up the customised view(s).<br />
Different views of the same column can not only have different formatting but also different label lists assigned.<br />
Routine code access to the table and import/export/dataset operations will always use the format as defined in the table. Interactive copy/paste from the view of the table uses the formats defined in the view.<br />
Routine-level access to a filtered "view" of a table will NOT be provided as this will be implemented by a new table type designed for this porpise, with the working name of a "Record Set".<br />
There should be little impact on model run speed when no views are visible as the processing for the customised views is only done on table display/editing/user interaction and not in the model runtime engine.<br />
Some options and table-level settings would make sense being customiseable per view but were skipped for this release as focus was put on the key support code to make the views possible.<br />
Cell specific formats (eg: cell colour, format, font) are supported but the cell specific format information is stored with the table, not the view. This wont be changed for now. The precedence for formatting and display of a table cell is:<br />
*cell specific format/colours<br />
*row colour (if Column Colour Precedence is off)<br />
*view customised format/colours<br />
*column customised format/colours<br />
*row colour (if Column Colour Precedence is on)<br />
<br />
===5.02o===<br />
<br />
CHANGE The "Model Loaded" broadcast was being sent too early, before dispatchers were initialised.<br />
It is now sent AFTER the "Preinit End" broadcast but before the "Run StarT" broadcast, at which time the engine is properly initialised.<br />
BUGFIX Pauseable 0 multiserver does not allow its time to be changed from 0<br />
BUGFIX Second title text can be set to empty string once set<br />
NEW Routine operation to set a paint object's property<br />
A few properties are supported (use the new Paint Property Label List to select the property) including co-ords, colours and rotation.<br />
Modeller needs to repaint after updates are complete.<br />
Inherited paint objects are updated<br />
BUGFIX Fixed font manager comparison to also compare underline and strikeout flags<br />
<br />
===5.02n===<br />
<br />
NEW If a broadcast button is clicked while PL is doing a "real" delay (advancing time until the next event time) then the pending event is pre-empted so the broadcast can be processed, after which the platform will continue to delay until the next event.<br />
BUGFIX "Hierarchic Files In Folder" routine operation now works when passed a relative path<br />
BUGFIX Expression editor properly quotes names with spaces in them<br />
NEW Change-&gt;File Operation "Delete Empty Folder Hierarchy"<br />
Will delete all empty folders it finds within the specified folder and deletes the specified folder if it ends up empty.<br />
Whilst this does not delete files, modellers must still be careful to call this with an intended folder.<br />
<br />
===5.02m===<br />
<br />
BUGFIX Removing all lines in a routine and closing the routine editor now purges the routine even if its a shared routine.<br />
The routine will only be deleted when all routine attributes and subroutines are also removed.<br />
Hence dont leave a routine (especially a shared one) empty otherwise all references to it will be lost.<br />
BUGFIX Icons updated for change objects if a shared routine is deleted<br />
BUGFIX No longer crash if deleting a shared routine and a change object using that shared routine is in the copy/paste buffer<br />
NEW The modeller "redraw lock" is ignored if printing. This should enable use of the redraw lock flag to reduce flickering when multiple panels are printed.<br />
NEW Subroutines can be renamed. The calls to the subroutine are not updated and will need to be edited; this allows a subroutine to be "swapped" with another.<br />
BUGFIX Change object icon indicates a routine is associated when a routine is associated with no routine lines but with subroutines or attributes defined (which prevents it being removed).<br />
NEW Modeller INI file options:\<br />
[Routine]<br />
AutoSizeOperationColumn=1 AutoSizeCommentColumn=1<br />
Turning these on enables the routine editor to auto size these columns to fit the contents when the routine editor is first opened and theres something in there to resize to.<br />
BUGFIX Reworked the loop routine selection dialog so it has an explicit "None" button to avoid accidently losing the routine association.<br />
NEW Routine line comments can be much longer<br />
NEW Switches display path numbers that lines in a multiple condition table correspond to<br />
<br />
===5.02l===<br />
<br />
BUGFIX The change to broadcasts in 5.02b broke the continue/pause behaviour of broadcast. Its now fixed so a broadcast will now only process events at its current time unless an explicit "continue run after broadcast" button option or routine line is executed.<br />
Check interactive broadcast buttons; if you expect a run continue then it has to be specifically requested.<br />
BUGFIX Fixed a nasty bug when an error occured during lookahead and PL attempted to display an error dialog, triggering further errors in views (controlled by attributes) which would obscure the previous, real error. Furthermore, if a viewport was involved, the platform would crash.<br />
BUGFIZ Viewport zoom offsets were being messed up when the view containing the viewport or the viewport itself were not scaled to 100%<br />
*fixed offset save/restore code to account for the current zoom<br />
*ensure that when zoom is changed, current zoom is stored before the window's zoom value is changed (by hiding the window before the zoom is changed)<br />
NEW Menu for a attribute view has an edit for any attached dial (in case the dial is lost)<br />
<br />
===5.02k===<br />
<br />
BUGFIX Change Object-&gt;File-&gt;Save Image can now accept an optional data target. IF provided, it is treated as a portal/panel reference, enabling the modeller to specify a single panel to save instead of the currently visible one.<br />
NEW Change Object-&gt;File-&gt;Delete Folder option added Will delete the nominated folder only if it is empty<br />
NEW Routine operation "Hierarchic Files In Folder"<br />
This creates a list of path/file names for all files matching a simple wildcard specification, searching in the current folder and all folders under it.<br />
A starting folder can also be specified (relative or absolute).<br />
The returned list of files include their full paths, new label-string operations below can assist in processing these as required.<br />
The Path/File spec can be something like<br />
"*.DAT" - returns all DAT files in current folder and below "data\*.DAT" - returns all DAT files in data subfolder and below "C:\data\*.DAT" - returns all DAT files in absolute location and below<br />
CHANGE The "Append To Label" and "Rename Label" have been extended in the way their target can be specified. Existing models should not be affected. See next note.<br />
NEW Label String Operations:<br />
"Append To Label" "Rename Label" "Extract File From Path/File" "Extract Path From Path/File" "Extract File Extention"<br />
These share common usage in taking a "source" attribute (in string form) and performing a string operation on it, putting the result into a supplied "target" attribute/label list.<br />
SOURCE: Is interpreted as a formatted string. Usually would be an attribute formatted as a label but could be a formatted number, an internal system string attribute.<br />
If its a table row, the cell's formatted strings are concatenated together.<br />
TARGET: Must be an attribute/cell formatted for a label list. The label list will receive the new label and the attribute will be set to the label code for the label in the list.<br />
The initial value of the attribute is important.<br />
If the attribute is set to a label code for an existing label, that label will be replaced with the result of this operation.<br />
If the attribute is set to a non zero label code which has not been used, a new label will be created with the result of this operation, usingthe given label code.<br />
If the attribute is set to zero, a new label will be created with the result of this operation and attribute will be set to a newly allocated label code.<br />
EXCEPTIONS (override the above):<br />
If the result of this operation is an empty string, attribute will be set to 0 and no label will be added to the target label list.<br />
If the result of this operation is an existing label in the target label list, the attribute will be set to the label code of the existing label.<br />
LABEL STRING Operations:<br />
"Append To Label" Appends the source string to the target label (if any)<br />
"Rename Label" Replaces the target label with the source label. Can also create a new label if the target label code is 0.<br />
"Extract File From Path/File" Treats source as a file/path specification and sets the target to just the file name.<br />
eg:<br />
"C:\My Models\NewModel\Data.DAT" would result in "Data.DAT"<br />
"Extract Path From Path/File" Treats source as a file/oath specification and sets the target to just the path (everything before the last "\"<br />
eg:<br />
"C:\My Models\NewModel\Data.DAT" would result in "C:\My Models\NewModel"<br />
The trailing slash is removed unless it is preceeded by a ":" or is the first character in the string.<br />
"Extract File Extention" Returns everything following the rightmost "." in the source string. If there is no "." then an empty string is returned (label code 0).<br />
eg:<br />
"C:\My Models\NewModel\Data.DAT" would result in "DAT"<br />
More string operations will be added to this in future versions<br />
<br />
===5.02j===<br />
<br />
BUGFIX Reworked reading of model file info to prevent buffer overflows<br />
BUGFIX Unblocking blocked trains from a switch based on a condition which posted an FEC unblock event was broken and the unblock never occured.<br />
This would manifest itself as trains unnecessarily blocked.<br />
Have reworked the unblocking code<br />
CHANGE The way track junctions book following sections and test for capacity has been cleaned up. They now book sections (linked by junctions) first then perform capacity testing on the nodes acting as junction and beyond the last junction.<br />
Fixes issue of a junction portal not getting a lookahead message if its next to a capacity portal.<br />
NEW Error message added:<br />
If a junction portal flows a lookahead path into internal capacity rather than out its portal exit, this is deemed broken behaviour because its supposed to link to the next section as the portal *should* have no capacity as far as lookahead is concerned.<br />
<br />
===5.02i===<br />
<br />
NEW Added a counter for individual blocked train unblock attempts<br />
FIX Error message for "train turnaround at a junction" now includes details to assist in debugging<br />
NEW Clicking the ROUTE NAME line in an item's detail popup open another popup listing the routes steps, highlighting the current step.<br />
Note if you drag the item route list, you'll find the item popup is still open underneath it and it will still respond to scroll wheels.<br />
<br />
===5.02h===<br />
<br />
NEW A new track lookahead rule has been added.<br />
When loops are checking if a train can enter them, they look for other "oncoming" trains at portals with the "oncoming train" flag set.<br />
The new rule is: if the train wanting to enter a loop comes from a portal with the "oncoming train" option set, there is no need to test for other trains approaching that portal - since the train doing the test is already in the portal and will be creating capacity there when it heads off towards the loop.<br />
This rule fixes a deadlock resulting from a loop not letting a train in because other trains were approaching the portal that the train was in.<br />
<br />
===5.02g===<br />
<br />
BUGFIX Loop Exit Delay End was broken (being stored/read from the wrong attribute)<br />
BUGFIX IDBase client reworked to not re-request lock on note if no attachments are to be sent<br />
<br />
===5.02f===<br />
<br />
NEW Routine operation "Send Named Immediate Message"<br />
This enables a message to be sent to a specifically named entry at the destination subsystem - very useful in network models where you want to invoke a "method" at a given location.<br />
CHANGE Cleanup of messaging code, named messages from routines or dispatchers will now resolve faster<br />
<br />
===5.02e===<br />
<br />
CHANGE TRACK REWORK<br />
Older models that do advanced stuff in their in/out routines may need updating due to changes here. As well as speed ups, these changes will make train movement logging much more straightforward to implement.<br />
*Loop Entry and Exit routines (if selected) are now called for all loops in the model, even if they are "acting as junctions" (optional loops).<br />
*The loop exit routine is ALWAYS invoked before any loop exit delay is performed. Any loop configured to execute a loop exit routine after the exit delay will give a warning message upon load (logged to planimat.dbg) and be reconfigured.<br />
*The LoopEntryDelayStart timestamp is now (properly) made before the loop entry routine is called<br />
*Trains "thrown" at a loop get the LoopEntryDelayStart and LoopEntryDelayEnd times set to the current time<br />
*Trains ending their route at a loop will call the loop exit routine so their last step gets properly logged.<br />
*New Track system attributes. These simplify management of routines executed as trains move through the network:<br />
"Track Loop In Routine Active" This is set if the currently executing routine is being executed as a loop entry routine. Otherwise its 0.<br />
"Track Loop Exit Routine Active" This is set if the currently executing routine is being executed as a loop exit routine. Otherwise its 0.<br />
"Track Loop Acting As Junction" This is set if the currently executing routine is either an Entry or Exit routine AND the loop is acting as a zero capacity "junction" (optional loop) for the train currently moving through it. Otherwise its 0.<br />
*Loops no longer support an attref for # of roads. A model can set the # of roads by setting the loop's Capacity (object attribute).<br />
Existing constant attrefs are converted to a number. Non constants give a warning (logged to planimat.dbg) upon load and the value 1 is used.<br />
Note that setting the loop capacity object attribute does not persist between runs; the loop resets to the initial # of roads specified at edit time upon an engine restart.<br />
<br />
===5.02d===<br />
<br />
BUGFIX Actually remembered to bump version number and file version number (should have been increased in 5.02c)<br />
SPEED The way broadcast items are allocated has been rewritten - much less duplication for a new item setup, means faster broadcast processing.<br />
SPEED PL now has a separate item cache for every item class. This means items can be recycled much faster because PL knows they are ready for use for that particular item class. Also inlined the cache code so items will pop out even faster<br />
<br />
===5.02c===<br />
<br />
REMOVE Train arrival/departure/dwell times which used to be stored in internal route tables<br />
PL no longer uses arrival/departure/dwell times stored in internal item route tables to override track section running times.<br />
Removed very messy route depart cache code so track models should be a little faster<br />
REMOVE System-item attributes for train forced arrival/departure/dwell times removed. PL will warn if these are referenced; use the "Find - advanced - attribute reference" in the previous PL release to find and remove these attribute references. You can continue using the model even with the warnings; it will complain at any object actually using them during model run.<br />
NEW A number of new system-item attributes are maintained by Planimate to assist track modellers in generating graphs and logs, minimising the extra model code (and speed impact) that the modeller needs to put into the track code.<br />
Please refer to Planimate Knowledge Base note 313 for details on these attributes.<br />
CHANGE Moved track specific system attributes to their own flyout in the system attribute select menu<br />
SPEED Inlined route manipulation into item code for further speed<br />
NEW For routes ending at a loop, the loop's exit routine is now called so its final section travelled can be logged. This might confuse older models which did not expect the exit routine to be called for a train ending its life at a loop.<br />
NEW Item click popup - wider time fields, new fields for train time logging<br />
<br />
===5.02b===<br />
<br />
BUGFIX Memory leak for object attribute name when an attribute is associated and logging with an object<br />
CHANGE Have reworked the broadcast code so sideeffects of a broadcast without the "Continue run after broadcast" option on are processed outside of the broadcast handler.<br />
This shouldn't affect operation of broadcasts but means the release note about this for 5.02a can now be ignored.<br />
<br />
===5.02a===<br />
<br />
CHANGE: Attempting a run restart while a broadcast is processing is now not allowed as it messes up the engine.<br />
Existing models that do a run restart (eg: to change the run start date or allocate objects or load a dataset) will produce an error message if they break this new rule.<br />
To fix old models:<br />
#1: (If its a dataset load - this is not needed for dispatcher)<br />
If a dataset is being loaded by a routine directly in a broadcast thread, isolate it with a 0 delay multiserver.<br />
#2: Ensure that user click broadcast buttons that could trigger a restart (typically buttons that broadcast to continue a run) have the "continue run after broadcast" option ON.<br />
If this option is OFF then the broadcast is still "pending" while PL is clearing zero time events and you will get an error, even with zero delay multiservers isolating the thread.<br />
Taking care to use the "continue" option with broadcast buttons is also important if you want the run to be pauseable in zero time because in end user mode, PL wont pause while a broadcast or its sideeffects are being processed.<br />
BUGFIX Small leak in modeller set message in status bar<br />
BUGFIX Explorer window now not continually updated during a ctrl-paste<br />
BUGFIX CTRL-Paste will not replace the originally copied portal, this would (sometimes) confuse the platform when the replacement match was recursive.<br />
===5.02===<br />
(built with VC)<br />
NEW Find (Advanced) for a specific attribute reference.<br />
You can also use "wildcards" by using the system-&gt;null attribute as a field placeholder which will then match any constant/item/etc in that field of the attref. Good for finding unusual table references, all references to a specific object attribute etc.<br />
NEW Track unblocking rules refined:Here is exactly when a track unblock occurs:<br />
*train leaves loop it was waiting at (but only if no loop exit delay)<br />
*loop exit delay ends<br />
*section control attribute changing with section becoming idle<br />
*train leaving section and entering loop with no loop entry delay<br />
*loop entry delay ends<br />
*train leaving section and entering a portal<br />
*train leaving non "act as junction" portal and entering section<br />
*a portal entry for a portal on a track gets unblocked (but NOT if the unblock was propagated from the track through the portal. This one is so a switch at a portal entry can unblock the track.<br />
Can YOU think of one I've missed???<br />
SPEED For reference in case of strange behaviour bugs<br />
*Optimisations assuming PL is running in an environment with VM<br />
*FEC event processing streamlined - less redundant checking of pause, zero time flags<br />
*Old unused track object unblocking code cleared out<br />
*Track loops cache information to avoid having to look it up to determine use of gates and exit conditions every single time<br />
*Some debug options removed (from release builds)<br />
*Time-profiling-enabled check code sped up<br />
*Object input paths pruning rewritten to avoid unneeded memory reallocation during run start<br />
*Object input/output links now cache object instance pointers to speed up item movements through objects<br />
*Sped up destination object/flow search for item movements<br />
*preferred links only format names if they have an error to report<br />
****** - routes now use preallocated tables (limit of 256 steps per route) to avoid memory thrashing<br />
*Added routeinstance cache so route info objects can be recycled<br />
*sped up FEC event cache; no longer impose cache size limit on FEC<br />
*inlined switch decision reset list; now uses a custom table structure that will be quicker<br />
*Planimate table sorts are now more efficient; use preallocated index tracking tables (if the table is &lt; 50000 rows) and validation of the sort is more efficient.<br />
*The item recycler now sniffs around a bit for an item with the same class in its past lifetime as the new one being asked for. This can avoid reallocating item attributes/item tables.<br />
*smarter posting of track unblock events (see above)<br />
<br />
===5.01i===<br />
<br />
SPEED Optimisations assuming PL is running in an environment with VM FEC event processing streamlined Old track object unblocking code cleared out Track loops cache information to avoid having to look up/test use of gates and exit conditions Some debug options removed (from release builds) Time-profiling-enabled check code sped up Object input pruning rewritten to avoid unneeded memory reallocation Object input/output links now cache object instance pointers Sped up destination object/flow search preferred links only format names if they have an error to report routes now use preallocated tables (limit of 256 steps per route) Added routeinstance cache so route info doesn't get reallocated sped up FEC event cache; no longer impose cache size limit inlined switch decision reset list<br />
Planimate table sorts are now more efficient; use preallocated index tracking tables (if the table is &lt; 50000 rows) and validation of the sort is more efficient.<br />
The item recycler now sniffs around a bit for an item with the same class as the new one being allocated. This can avoid reallocating item attributes/item tables.<br />
NEW Find (Advanced) for a specific attribute reference.<br />
You can also use "wildcards" by using the system-&gt;null attribute as a field placeholder which will then match any constant/item/etc in that field of the attref.<br />
<br />
===5.01h===<br />
<br />
CHANGE: The "end time" for a run is now taken as the time that the engine finished processing events, not the time the run is stopped. this makes profiling much easier.<br />
<br />
===5.01g===<br />
<br />
BUGFIX Crash in F (broken table code)<br />
<br />
===5.01f===<br />
<br />
BUGFIX Distribution patterns used in routines that executed in lookahead did not properly "undo" possibly leading to lookahead and move not matching (if the random variable was depended upon in a blocking switch)<br />
SPEED Reduced memory allocation "thrashing" when splitters are used with different outgoing item classes to the incoming item and there are NO common item attributes to "tuple"<br />
SPEED Reduced memory allocation "thrashing" when table tupling is used and there are no matching attributes (don't know why it would be used... but its fixed anyway)<br />
SPEED Optimisation where a routine has the "Only During Move" routine line as the first routine line - now processes as quick as using the "Only During Move" routine option.<br />
(the line is used instead of the option when the modeller wants code "only during move" not to mark the thread as "dirty", preventing decisions based on attributes further down that thread).<br />
SPEED (possibly) optimised the way internal tables are searched<br />
SPEED Built with VC and set "inline all possible functions" flag<br />
<br />
===5.01e===<br />
<br />
BUGFIX Hidden objects not selectable in drag<br />
NEW ctrl-click table button in attref dialog shows the table editor for that table<br />
NEW New format modes for Percentage (x.xx) without % and Parts Per Million without the "ppm"<br />
NEW Second column title text of table can be set in a routine<br />
NEW "FIND" ability for label references with no label for the index/value (in the Edit-&gt;Find-&gt;Advanced button list)<br />
This will search the model for any constant label references that do not map to a label string. It shows the attribute reference browser to assist in browser though sometimes the bad reference can be very deep (eg: within a scalar for a field inside a distribution pattern dialog).<br />
Note: references with a value of "0" are not treated as "Bad" even if a label for 0 does not exist.<br />
NEW When an attribute reference listed in a references list is double clicked, if the reference is in a routine then the routine object will flash then the routine editor will be opened.<br />
<br />
===5.01d===<br />
<br />
BUGFIX Buffer overflow if labels &gt; 64 characters used in many places such as graphs, attribute value/clear value etc.<br />
CHANGE Made fact that row count set to 0 in a gantt uses row labels more obvious in dialog and status menu<br />
CHANGE The Label List selection list is now substantially bigger<br />
NEW Model DB can contain help (CHM) files, PL will look in there as well when trying to locate a help file<br />
NEW Modeller specified model help file name and standalone EXE support<br />
InterDyne settings has a new field for help file name. This sets the application (modeller supplied) help file, overriding the default use of the model's name if this field is empty.<br />
The extention (".CHM") is optional; PL will strip any extention and add ".CHM" to whatever name is supplied.<br />
PL will look in DB files to locate this help file.<br />
If a modeller wants to ship a standalone EXE with a help file inside it, import the CHM file into the model's DB file (Tools -&gt; Resource File Admin) before creating the standalone EXE. Planimate will then unpack the CHM file into the PL_MEDIA subdirectory when the user first accesses it.<br />
NEW System attribute returns windows multimedia timer. The value is in milliseconds with 1 ms accuracy, useful for profiling.<br />
Note this value wraps to 0 when it reaches 2^32 (about every 50 days<br />
NEW Units format "ppm" (parts per million)<br />
1000000ppm = 1 unit. One decimal digit is allowed.<br />
NEW Run profile logging for: Routines Invoked By Track Lookahead gives routines invoked in track testenter OR track checknext Routines Invoked By Track CheckNext Only gives routines invoked in track checknext (far lookahead) only Routines Invoked By Track Loops in/out routines as trains move (never done in lookahead) Blocking Switch Decision In Lookahead blocking switches that had to make decisions (lookahead)<br />
NEW Paint image select file dialog now shows all supported image types by default<br />
NEW Clicking on a multiserver icon (or its head in "road" mode) during run (not user mode) enables you to browse its items, showing item entry time, class, id and time-till-departure. Clicking on a line will show the item details for that item.<br />
<br />
===5.01c===<br />
<br />
BUGFIX Leak in jpg/gif/... code fixed<br />
NEW New system attribute (Engine) "Automatic Restart After Error" [Experimental]<br />
If the model sets this attribute to 1 during a run AND the "Restart When Model Stops" option is enabled, then PL will attempt to restart the model if a model error occurs.<br />
This is intended for special cases where model errors in some runs are unavoidable (eg: a modeller managing multiple runs of a network directly rather than using PL's inbuilt mechanism).<br />
It is not to be used for general modelling or catching file errors. It will not work if the "Friendly Errors" dialog is enabled or any other dialog appears, apart from the standard "model error" dialog appears.<br />
When an error occurs, the model error dialog appears for 10 seconds. If the user clicks/closes the dialog then the restart will not occur, otherwise the dialog closes and the model restarts.<br />
The modeller should check and act on the "last stop reason" system attribute (if they are relying on restarts a handler for this should already be there).<br />
Upon a restart this attribute gets reset to 0. The modeller should only set it non zero after the code that proceeds it has been proven robust.<br />
BUGFIX After a dataset is loaded and its broadcast is sent, any other current time events (created eg: because switches depend on the data loaded) are now cleared before returning to the user.<br />
BUGFIX Copying a subsystem with paint objects and table references to them The copied tables will now point to the copied paint objects<br />
CHANGE Internal change to broadcasts to avoid recursion of Continue() form within a broadcast handler if the system was in simulate mode when the broadcast was sent (eg: loading a dataset in a routine).<br />
CHANGE Internal change: subsystem knows owner is only a portal<br />
<br />
===5.01b===<br />
<br />
NEW Support for JPG/GIF/WMF/EMF (windows metafiles) in paint image objects.<br />
These are rendered straight from the file to the display (so huge files should be OK and wont need the memory of an equivalent BMP)<br />
Currently not supported for icons/paint button states (these use memory cached BMPs)<br />
Not supporting animated images<br />
CHANGE Importing into DB file : no longer need to specify "type" if the extention is recognised by the DB system<br />
CHANGE exporting from DB - sets file extention form its type<br />
CHANGE selecting files from DB reworked to retain original extention of the file so it can be correctly reloaded<br />
CHANGE New percentage mode is now x.xxx%<br />
NEW New system attribute (Engine) gives access to option whether "Animation Starting" messages will be presented to the user.<br />
<br />
===5.01a===<br />
<br />
NEW Pipes have a new option to send a broadcast when a pipe event occurs.<br />
Pipes with this selected will send the new "_Pipe Event" broadcast as a global broadcast.<br />
It will tuple match to the following item attributes:<br />
_pipeid : the pipe object index (or 0 if no index set) _pipeflags" : a value as folows:<br />
1: Pipe destination is at target limit<br />
This indicates the destination of the pipe has become very close or &gt;= than the pipe's "target limit" (meaning within 1.0e-12 of it).<br />
If the modeller takes action on this broadcast, they must realise that in some unlikely circumstances, the target attribute may be short by up to 1.0e-12 of the intended limit.<br />
The broadcast is sent every pipe update iteration once the target limit is reached, hence the modeller should stop the pipe and/or clear the target within that broadcast thread to avoid getting stormed with broadcasts.<br />
NEW Pipe option "Adjust Update Interval To Reduce Errors"<br />
BACKGROUND<br />
Pipes move values from one place to another by generating events at regular intervals and subtracting/adding to the source/target according to a specified hourly rate.<br />
Numbers in PL are represented using C double precision values (64 bit). These have a precision of about 14 decimal digits. This precision limit becomes a problem when the pipe is transferring in small amounts to end points which contain a large value.<br />
For example a pipe may be set up to transfer at a rate of 1750 units per hour, at a sampling resolution of 10 seconds to a target already containing 2 billion units.<br />
1750 / 3600 * 10 = 4.86111111111111 (the number recurs but in memory would stop after 14 digits or so)<br />
When the pipe dumps the first quantity into the target it does:<br />
2,000,000,000 . 000 000 000 000 00 + 4 . 861 111 111 111 11 ^<br />
but due to the 14 digit limit, the result will lose the smaller fractions of the value being added because its a large value and runs out of precision (about where the ^ is)<br />
Over time these errors accumulate, leading to noticeable misbalance in the system and comparisons against expected limits failing.<br />
Ways to alleviate this problem include:<br />
*keep sources and targets as small as possible (eg:have a separate accumulator for your "entire" stockpile)<br />
*dont sample more often than necessary (the more frequently it samples, the smaller the values moved)<br />
*dont code/expect exact quantities with pipes, allow a margin of error either way<br />
An additional and significant improvement can be gained using this new option.<br />
WHAT THE NEW OPTION DOES<br />
Given that the hourly rate for the pipe is known, PL adjusts the transfer amount per sample to a value which takes less precision to represent. To compensate for this, the update interval is adjusted slightly, in order to keep the hourly rate the same.<br />
So basically it trades off accuracy in the amount transferred against the accuracy of the sampling interval.<br />
This all assumes that a "real world" model does not get troubled by the sampling interval not being exact.<br />
EXAMPLE<br />
In the case above, the amount per sample becomes 4.859375 (looks strange because truncation is done in base-2 math) and the sampling interval becomes 9.996428571429 (expect up to 0.1% variation from what is specified)<br />
Test case:<br />
Set up to transfer 100 million units to a destination containing 2 billion, at rate and sampling as specified above.<br />
With this option off, you end up with surplus of 1.124 units. This would cause matching problems if you were testing the result against a hard-coded number, mess up material balances etc.<br />
With this option on, the values are accurate to the display resolution.<br />
NOTE:<br />
The precision limits are still there and will still manifest themselves when the ratio of bin level to transfer amount per sample is high.<br />
Initial testing suggests a ratio of 100 million to 1 should be OK<br />
NEW Clicking on a pipe in paused mode displays useful information in high precision, including its transfer rate per sample and update interval.<br />
CHANGE "Animation Starting" and a couple of other dialogs are redone so the buttons can be customised with labels more specific than "OK" and "Cancel" (all the system dialog provided).<br />
BUGFIX Fixed crash bug when cell stats point beyond a table's columns at run start (because the table shrunk during the run)<br />
NEW Value format: Percentage XX.XXX always displays at least 2 leading zeros and 3 decimal places<br />
NEW Spatial links have option to hide them individually. They are hidden in end user and run mode but will always be visible in edit mode.<br />
===5.01===<br />
<br />
NEW Attrefs have a new mode "Expression" where an expression can be directly typed in.<br />
Expressions follow BODMAS rules so a*b+c*d will evaluate as (a*b)+(c*d). Unneeded brackets are removed.<br />
Expressions can include constant values, attribute references and some basic math functions.<br />
Expressions can include:<br />
+, -, *, / and ( )<br />
the following single value "functions" are currently available:<br />
sqrt(x) square root sqr(x) square (x * x) fabs() removes the sign of x so its always positive round(x) rounds x to closest integer trunc(x) removes fraction of x, leaving just integer part ceil(x) lowest integer which is &gt;= x floor(x) highest integer which is &lt;= x exp(x) e to the power of x ln(x) natural log of x log10(x) base 10 log of x pow10(x) 10 to the power of x pow2(x) 2 to the power of x<br />
cos(x) sin(x) trig functions, x in radians tan(x)<br />
acos(x) asin(x) arc-trig functions, return radians atan(x)<br />
Attribute references:<br />
Currently expressions can include attribute references as follows<br />
i.attname : item attribute p.attname : portal attribute r.attname : routine attribute s.attname : system attribute<br />
If "attname" contains spaces or non alphabetic/numeric symbols, it must be quoted:<br />
examples:<br />
p.attribute i."next location" s.clock s."run number"<br />
Expressions are "parsed" when OK is entered so any syntax errors will be picked up during editing. Run time speed should be faster than the equivalent code using multiple routine lines.<br />
Attribute names are not validated until run time.<br />
FIX: Browsing then cancelling a paint button state image file gives the option to remove the currently associated image (if any).<br />
BUGFIX: Drags of viewports in user mode - stopped no longer possible<br />
<br />
===5.00z===<br />
<br />
NEW System attribute "Last Scenario Path" returns full path of data set file accessed<br />
<br />
===5.00y===<br />
<br />
BUGFIX Fixed object property "Capacity" name string (now appears in menu)<br />
<br />
===5.00x===<br />
<br />
NEW: Tuple Increment and decrement routine operations<br />
like tuple set except they increment/decrement the table row with the item values rather than setting it<br />
<br />
===5.00w===<br />
<br />
NEW: Pipe Table Row Mode<br />
A new mode is supported for pipes which is useful when material blending needs to be tracked. This is only supported for pipes with a zero delay (version<br />
===5.00s===<br />
) which transfer directly between source and target.<br />
In this mode pipes still transfer between source and target values (with limiting etc operating the same). The values are now cells in tables. Most likely they will be cells in the same column but different rows of the same table (but this is not forced).<br />
Every time a transfer occurs, other columns in the source table will also be transferred, proportional to the amount of the source that was transferred.<br />
For example, the source value can be total tonnes and the other columns can be a breakdown of this total into its components. As the source "flows" to the target value, the components will also proportially accumulate in columns in the target row.<br />
No tuple matching is performed: columns must match if 2 different tables are used for source and target.<br />
To use this feature:<br />
*ensure the pipe Total Time is 0 (otherwise it doesn't work)<br />
*select the "Pipe Table Row Mode" option for the pipe<br />
*set up the source and target references as table cells (preferably to the same column but different rows in the same table)<br />
*The pipe context menu will include new menu items to select "Additional Data Column Start" and "Additional Data Column End" so the modeller can specify the range of columns that the pipe will transfer in addition to the source/target.<br />
They defaults to column 2, assuming the primary source/targets are in column one.<br />
If this column range overlaps either the source or target columns then those columns get skipped to avoid "double transferring".<br />
Note that the cells referenced can be changed on-the-fly but the modeller needs to plan this extremely carefully!<br />
BUGFIX: Co-ordinate handling code fixed so hovering over an RTF/non click through viewport no longer sends wrong hover co-ordinates to the main window<br />
<br />
===5.00v===<br />
<br />
BUGFIX: forgot to bump the file version number; models created in U wont read in earlier versions<br />
BUGFIX: Spatial Links with the optional Pipe View options could not handle stopping/starting the pipe animation if there no items moving on the spatial link (ie: the link was stopped).<br />
I've changed it to read the "pipe control" attref every display update interval. However this means that the "pipe control" attref cannot reference an item (which it most likely would not have).<br />
Pipe activity colour and section colour *can* continue to reference item attributes as they are computed as each item crosses a pipe "bin" boundary.<br />
NEW: Object Attribute attref "Capacity"<br />
Can be used to read the capacity for:<br />
Track Loops: (returns # of roads in addition to main line) Queue returns maximum length Dispatcher returns maximum length Multiserver returns last capacity multiserver tested against<br />
Can be used to set the capacity for:<br />
Track Loops: Sets # of roads (see below)<br />
NEW: Track Loop "Capacity" changes:<br />
As described above, the # of roads of a loop can be read and set as its "Capacity" object attribute.<br />
The value set here overrides the capacity set up during edit and is NOT retained after the run stops. (This may change in the future).<br />
Currently loops use an Attribute Reference to determine their capacity on-the-fly. I want to phase this out as its inefficient having to resolve an attref for something that doesn't change very often.<br />
Existing models that use say a table cell lookup to read a loop's capacity must be re-coded to set the loop's capacity using the Capacity object attribute instead.<br />
A future version of PL will ignore the attref for the loop's capacity UNLESS it is a constant. If its not a constant, a default of "1" will be used for the loop's capacity when the model is read with the future version of Planimate.<br />
BUGFIX: Pausing during 0 time graphical loop and advance to time dialog visible (developer mode only)<br />
Zero time graphical loops could not be interrupted during advance to time. I've changed it so:<br />
It now works like this:<br />
The first attempt to &lt;ESC&gt; or close the advance to time dialog sets the "paused" flag as it used to.<br />
If the model doesn't then pause and you press &lt;ESC&gt;/close the advance to time dialog again, then PL displays the pause menu, enabling you to either change the debugging options (useful to enable "allow pause at same time events") or to forcibly stop the run.<br />
CHANGE:Have reduced poll-check interval for PL in advance-to-time from 500 to 5000 events (as CPUs get faster, more events can be processed per second and we want to poll less often during advance-to-time).<br />
Have changed "iterate check interval" from 50000 iterations to 100000.<br />
These should improve performance during advance to time but not impact pauseability on modern cpu<br />
<br />
===5.00u===<br />
<br />
NEW: "Reallocate Table Rows" routine operation (table) Allocates memory for the table so it will fit the number of rows specified. This is useful when you know how big a table is going to grow and can be quite important when there are more than 8000 or so rows and many columns.<br />
If the table's allocated memory has already grown past the number of rows specified here, this operation is ignored.<br />
<br />
===5.00t===<br />
<br />
Experimenting with window transparency<br />
It gets specified as a value from 1..255, 255 = opaque and turns off the transparency mechanism for that window (saves resources).<br />
It only works under Win2K and WinXP. On older systems, it is ignored.<br />
NEW: Transparency of the clock can be set by clicking on it<br />
NEW: Transparency of a panel when it gets popped up can be set in a routine operation (display). It can also be set as a panel property. This only works for popup windows and not child windows.<br />
NEW: Transparency of main window when Planimate is active and inactive can be set in the INI file<br />
eg:<br />
[Display] ActiveTransparency=254 InActiveTransparency=180<br />
Note that with transparency "on", animation will be jumpy. I haven't found the mechanism to change the transparency update interval yet.<br />
Also there is a flicker when transitioning an open window from no transparency (255) to some degree of transparency so you may want to use "254" instead of "255" for close to no transparency.<br />
<br />
===5.00s===<br />
<br />
NEW: Pipe enhancement: 0 delay pipe<br />
If a pipe is set with a "Total Time" of 0, it now opeartes in a new mode where it transfers directly between the source and target attributes without using any intermediate bins.<br />
This mode eliminates issues of "run off" and existing "stuff" in the pipe. The pipe will still animate (as a single logical bin representing the quantity being tranferred every sampling interval).<br />
0 delay pipes support the reversing and limiting capabilities of delay pipes and are more efficient processing-wise.<br />
NEW: Pipe enhancement: source and target limiting<br />
A new option on pipes enables "Source/Target Limits". This enables limits to be placed at the source and target ends of the pipe.<br />
The lower limit can be used to prevent the pipe draining its source below a specified value. This is useful in situations where the source cannot be completely drained by the pipe.<br />
The upper limit can be used to prevent the pipe overfilling the target. When this limit is reached, the pipe effectively becomes "blocked" and stops "flowing". The block applies to the whole pipe (no packing of pipe contents occurs).<br />
These limits work in addiiton to the Load Limiting function.<br />
The limit values are re-read every pipe update iteraction.<br />
<br />
===5.00r===<br />
<br />
BUGFIX: Attref editor now knows owning object so it can browse item attributes through the Add button (useful for switches)<br />
NEW /jobid="xxx" command line option.<br />
This sets the "jobid" field in XML packets sent by PL and is useful when determining where an XML packet has come from.<br />
Currently PL does not read this field; its useful when an external server is co-ordinating PL runs.<br />
BUGFIX: Resizing panels now properly updates loops and bend points<br />
BUGFIX: Selection regions include bends and loops (they cannot be deleted or copied in a multiple selection)<br />
<br />
===5.00q===<br />
<br />
CHANGE: Table key-to-edit now responds to '$' and '.'<br />
NEW: Planimate will now save model backup files into a subfolder called "Backups" if that folder exists within the folder where the current model is being saved<br />
BUGFIX: Reworked PL engine simulation engine state to prevent track system errors and subsequent crashes as the model engine shuts down<br />
NEW The row used by a cell stat can now be dynamic<br />
The row is determined when the panel containing the cell view is shown. Hence cell views with dynamic rows values should not be logged.<br />
REWORK Fixed a few cell stat bugs which would have caused memory corruption if tables had less columns than the cell stat was set up for. Had to add lots of new validation to support dynamic rows.<br />
NEW Run Engine System Attribute to control fine timer tick option on/off<br />
NEW Paint buttons have new option to cause hover broadcast to be sent globally (to whole model) rather than to the scope of the button.<br />
BUGFIX Z-order fix for shared routine name dialog<br />
NEW OK/Cancel buttons in attribute editor<br />
So now if you [x] an attribute dialog, you are cancelling it not closing it.<br />
NOTE Cancel only useful for "Cancelling" a change to the name/value or checkboxes; if you change the units then the fields are commited and cancel wont revert to whatever the attribute definition was previously set to.<br />
<br />
===5.00p===<br />
<br />
BUGFIX: Test for model version broken in O when clearing the new hide about box bit<br />
<br />
===5.00o===<br />
<br />
NEW: "Hide About Box" option in Settings-&gt;End User<br />
Enables the about box to be hidden in standalone EXEs (PBAs)<br />
This option will only be available to internal ID developers who have been issued a new "never expires" developer keyfile.<br />
<br />
===5.00n===<br />
<br />
NEW: PL now looks for a "Section Type" column in the track table specified in Network Details.<br />
If this column is found, PL uses it to read/set the track network section types.<br />
The column should be formatted using the "_section type" label list.<br />
When the run starts, PL will treat the column as follows:<br />
If the value is "-" then PL will read the section type from the track network. This should be default value for the column in order that existing networks are properly set up in the table.<br />
If the value is not "-" then PL will ensure the section is changed to the value in the table when the run is started.<br />
CHANGE: Section table window now bigger. Section table now includes section type to assist with debugging.<br />
NEW: Section Type label list - used for specifying section types<br />
FIX: Batch mode no longer shows clock Also does not perform event polling (testing for pause) which could lead to bogus popups<br />
NEW: Multiple backups of models kept<br />
Planimate now keeps multiple BAK versions of a model. This may be useful with the autosave feature.<br />
The most recent backup is the ".BAK" file, then older versions will ripple through .BAK.1, .BAK.2 ... up to the number of backup files specified in the INI file SaveBackupCount value (default is 10)<br />
If SaveBackupCount is 1, you only get one ".BAK" file (like before)<br />
INI File setting:<br />
[Edit] SaveBackupCount=nnn<br />
nnn is the # of backups to keep when saving the model default=10 value range:1..999<br />
NEW: AutoSave for models<br />
Automatically saves the model if a given number of minutes has passed since the model was modified.<br />
AutoSave currently only occur when:<br />
*the run is started (in editor mode)<br />
*toggling to "User Mode" from "Editor Mode"<br />
Auto saves do not occur if in user mode.<br />
Autosave is off by default, it can be enabled from the INI file<br />
[Edit] section:<br />
AutoSaveInterval=nn<br />
# of minutes between autosaves of the model during editing, 0 = disable default=0 value range:0..600<br />
<br />
===5.00m===<br />
<br />
FIX Have reworked the way PL determines the "Application Data" folder in order to avoid users of NT being forced to install Internet Explorer.<br />
<br />
===5.00l===<br />
<br />
FIX Fixes a crash on exit if help was open and the target PC uses a Pentium 4 with hyperthreading or multiple processors.<br />
<br />
===5.00k===<br />
<br />
NEW help buttons for change object icon/route and odbc dialogs<br />
CHANGE Attref Separator option is now on for new models<br />
<br />
===5.00j===<br />
<br />
FIX: Save/Save As shortcut label in menubar<br />
CHANGE: "Remove Button" renamed to "Remove Button Action" for paint buttons<br />
CHANGE: Default posn of portal exit now close to portal entry<br />
BUGFIX: Paint button Hover broadcast properly deallocated when button deleted<br />
NEW: Free text cells get written to the clipboard as text (not hex) with newlines and tabs within converted to spaces.<br />
FIX: Toggling smooth/stepped dragging with key now updates menu bar<br />
<br />
===5.00i===<br />
<br />
NEW: Launch Log Viewer option in Tools Menu<br />
Launches: "Planimate Log Viewer PBA.EXE"<br />
NEW: Option for file read/write at change object<br />
"Remain in directory of chosen file"<br />
Causes PL to not return to the default directory when a browser is used in a change object to select a file.<br />
This option only takes affect for PBAs (standalone EXEs) to prevent PL losing track of where the model being edited and its DBs are.<br />
<br />
===5.00h===<br />
<br />
FIX: Help topmost fix, msgs on failed help load<br />
<br />
===5.00g===<br />
<br />
NEW Routine operation (Table) "Set Cell Text"<br />
Use this to copy "Free Text" between table cells. Source and target must be table cell references, both in columns formatted for free text.<br />
You need to force repaint to reflect changes in free text formatted cells on any currently visible table.<br />
NEW Button paint objects have resize to text/image option<br />
NEW Button command click action for "About"<br />
NEW New table view option not to show the current cell<br />
NEW Portal tool tips (set from portal edit menu)<br />
NEW Tables can have a font specified for data on a column by column basis, using the column "Cell Font" option.<br />
The font selected here overrides the Default Table Cell Font (if set) and is overridden by the cell specific fonts<br />
The "Cell Font" option in the Table menu is renamed to "Default Cell Font"<br />
NOTE that the Default Cell Font is used in sizing cells for the table view so it should be set for the "largest" font if you then override the fonts for each column, so the cells will be big enough<br />
<br />
===5.00f===<br />
<br />
FIX: Table saves row height value<br />
FIX: Path editor doesn't allow a step to be repeated between paths. Also tool tip generator and flow line preview reflect this rule<br />
FIX: Show on load note (must be called main) now actually shows<br />
NEW: Spatial link routine operation to set the link cost of a spatial link requires spatial link cache flush operation<br />
<br />
===5.00e===<br />
<br />
NEW: Seetings Menu option "Edit INI File" opens the platform ini file<br />
NEW: Triple track section types (testing) Train movement between portals seems OK Section control table building should be in place<br />
Now with working section control for third track<br />
CHANGE: Removed scroll wheel handling (without driver) for the time being<br />
BUGFIX: help ids for get integer dialogs - default help button for id 0 no longer shown<br />
NEW: New routine file option "Allow Empty Cells" enables the column option "Dont Show Zeros" to take effect for tables written to a file. (normally all values are written out).<br />
BUGFIX: Object positioning when creating objects dynamically was out by 1 pixel due to different ways of getting middle pixel of even # of pixel icons - now more consistent.<br />
CHANGE: Table cell editing changed so a click outside a cell area does not trigger a cell edit<br />
<br />
===5.00c===<br />
<br />
NEW: New row option "Row Height" sets the row height in lines (found under table editor row menu)<br />
NEW: Cell text will now wrap to the number of rows (specified by row height). Long text will be truncated (similar to long column names)<br />
CHANGE: Table columns formatted for "Free Text" are now written to DAT and DataSet files.<br />
Free text cells are written to the file as a single (potentially large) hex cell.<br />
which looks something like this:<br />
0004:21222300<br />
Before the colon is the byte count, followed by hex character pairs for every ascii character. Last one is always "00".<br />
***NOTE***<br />
This will affect reading existing DAT/DataSet files IF the tables they are read to contain any columns formatted for free text. (they will fail to read). They would have probably failed anyway if the user had entered quotes, new lines or tabs in the free text.<br />
<br />
===5.00b===<br />
<br />
NEW: Spatial links have a new option "Link Cost"<br />
This enables the modeller to set the "distance" of the link directly (default 0 uses screen distance).<br />
This is useful where you have a short link connecting nodes but you dont want items to take that link as a "short cut" unless you specifically nominate an object on that link as a target.<br />
<br />
===5.00a===<br />
<br />
BUGFIX: Fixed the issue of the sidebar area being reserved when a model changes from user mode to editor mode even when the sidebar may be hidden.<br />
BUGFIX: Fixed context links for dialogs that read integers<br />
BUGFIX: Double quotes in fields converted to ' (if you paste one in)<br />
BUGFIX IDKBase Updates menu no longer gets updated by idKBase while the mouse is down<br />
NEW: Added option to display cell borders on a grid view<br />
NEW: New context help links in various dialogs<br />
NEW: Added support for mousewheel scrolling of panels for machines win95 and above<br />
NEW Time Format: "C time" DAY MON DD HH:MM:SS YYYY as C standard libraries write<br />
BUGFIX: Routine step editor was re-enabling closing of routine list while editing an attribute reference<br />
BUGFIX Positioning of portal entry/exit now checks subsystem panel Pentry always at top left, Pexit at bottom right.<br />
NEW: IDClient.xml can be placed in the Planimate application data folder and it will be found<br />
NEW: IDCLIENT.xml can contain a new parameter "auto" which if set to 1, causes an automatic login the first time idKBase is accessed. Subsequent attempts to open will show the login dialog.<br />
to use this, edit idclient.xml as follows:<br />
: port="8118" auto="1" name="....<br />
===5.00===<br />
<br />
NEW: Added more context ids/help buttons for Data menu windows<br />
BUGFIX: CTRL-I and &lt;TAB&gt; key are now distinguished in RTF editor (idBase)<br />
NEW: Can send an immediate message from a loop entry/exit routine<br />
CHANGE: IDBase references changed to IDKBase to distinguish the knowledge base from the IDBase file area.<br />
CHANGE: INI file IDBaseMenu is now IDKBaseMenu. If you had set it to 1, you need to set it again for this release.<br />
NEW: 3 Way help system<br />
Clicking a context help button shows help from local help file<br />
CTRL-clicking a context help button shows help using the new IDKBase web site. This opens the default system web browser and should work through firewalls if normal web access is permitted.<br />
CTRL-SHIFT-clicking a context help button uses the IDKBase client to connect to the database (enables editing - requires IDKBase account)<br />
A new [Help] Section in the INI file contains an option HelpIDKBaseEnable = 0 by default. If you set this to 1, then the actions of the CTRL-click and CTRL-SHIFT-click are reversed (ie: CTRL-click uses IDKBase to edit note, CTRL-SHIFT-click opens web site).<br />
NEW: [Help] section in INI file contains a string HelpWebSite="...." The default site is the InterDynamics help web set. This should not be changed unless you have arranged a proxy site to deliver Planimate help to you.<br />
<br />
===4.98h===<br />
<br />
BUGFIX: Centred label now uses plot colour rather than label colour<br />
BUGFIX: FIle Mneu properly generated in user mode<br />
<br />
===4.98g===<br />
<br />
BUGFIX: Very narrow points in area graphs used to be missed (when viewing a broad time range with a lot of fine data). Now they get plotted as a vertical line.<br />
NEW System attribute "Visible Portal Index"<br />
If the main visible panel is a subsytem of a portal with an object label, that label index is returned. If the top level window is visible, 0 is returned. Otherwise the value is -1<br />
BUGFIX: Icon and Route assignment dialogs at a change object no longer become lost behind the main window.<br />
NEW Plot mode "Centred Label" - works for log driven graphs<br />
This draws just the label string, centred horizontally at the plot point. This enables placement of annoations/labels within the graph.<br />
If you want to reference this mode using the _Plot Modes label list in an older model, add "Labels" with index 8 to the list.<br />
<br />
===4.98f===<br />
<br />
NEW: Context help support added for item pickers and list pickers and links in most PL uses of these dialogs are now in place<br />
<br />
===4.98e===<br />
<br />
NEW: Gather capability in IDKBase search windows (File menu)<br />
Collects together the notes in the window and writes them to a text file<br />
<br />
===4.98d===<br />
<br />
CHANGE: Entry no longer allows distribution for batch size to be edited Older models will still work but new entries wont be able to have a distribution assigned to the batch/item limit. This is NOT the inter-arrival time - that can still have its distribution edited.<br />
CHANGE: Planimate now looks for PL5_MAIN.CHM for its help file<br />
NEW: Control clicking on a context help button will now open IDKBase instead of showing help from the local help file. This will hopefully help make authorship and updating from within Planimate easier.<br />
IF a context help item does not exist for the item you've selected, then you will get an error message then PL will ask if you want to create a new note.<br />
Dont try create notes yet - the IDKBase server EXE needs updating and I'll populate the database with some items I've already written.<br />
(to author notes you need a valid IDKBase login)<br />
<br />
===4.98c===<br />
<br />
BUGFIX: Deleting objects in a flow was also crapped up by the 4.98 fix to module merge (because more code was dependiong on an owner pointer that is now cleared after the object is removed from its manager)<br />
<br />
===4.98b===<br />
<br />
BUGFIX: Deleting multiple selections of dynamic objects caused crash<br />
(changed place where I deregister the multiple selections - owning panel was unknown due to a change made for model merging)<br />
<br />
===4.98a===<br />
<br />
NEW: Logger channel column header section has an extra column at the end<br />
This affects the format of log files.<br />
The column is called "Attribute Type"<br />
This is a string which is set to the type of object/property being logged for that channel.<br />
Possible settings are:<br />
"Count In" Logging in count of an object "Count Out" Logging out count of an object "Occupancy" Logging occupancy of an object "State" Logging state of an object<br />
"Portal" Logging a portal attribute that is not associated with an object attribute<br />
"Cell" Logging a table cell<br />
Other labels may be added in the future.<br />
===4.98===<br />
<br />
CHANGE: Default icons are now 16x16<br />
BUGFIX: Change column position dialog now displays correct column count.<br />
CHANGE: Disabling routine lines during run now doesn't get toggled by a double click on the row but rather a popup menu appears in which you can select enable or disable.<br />
BUGFIX: Crash during merging in module fixed (was not NULLing owner of the merged-in portal)<br />
CHANGE: Major rework to file location handling:<br />
*PLANIMAT.DBG is now placed as follows<br />
First an attempt is made in the EXE's directory. If this is not writeable then an attempt is made in Application Data/InterDynamics/Planimate If this is not writeable an error is given but PL continues and tries the working directory as a last resort (in case its different than the EXE directory)<br />
Previous versions wrote to the working directory.<br />
The idea is to keep the debug file close to the EXE if possible.<br />
*Planimate looks for the developer's INI file as follows:<br />
First in Application Data/InterDynamics/Planimate/Planimate.INI<br />
If thats not found, then in the EXE directory Planimate.INI if thats not found, then in the EXE directory Planimat.INI<br />
If any of them are found, Planimate will write back updates there.<br />
If no INI file is found, Planimate will write Planimate.INI to its application data directory.<br />
These changes makes working with older versions that overwrite Planimat.INI a bit easier as the newer version will favour Planimate.INI and the older version uses Planimat.INI.<br />
*Planimate searches for model resources (DBs, BMPs etc) as follows:<br />
*the current directory (where the model or standalone EXE is<br />
*the EXE directory (where system DB is)<br />
*the subdirectory PL_MEDIA under the current directory (if it exists)<br />
*the Application Data/InterDynamics/Planimate directory<br />
As well as affecting models this means PL will find key files in the Application Data directory. However a keyfile in the Planimate EXE's directory will take precedence.<br />
*Key file loader no longer works with _SV_KEY.KEY file. The key file is usable (for now) if you rename it to _PL_KEY.KEY<br />
*KEY FILES:<br />
The key loader will now look in Application Data\InterDynamics\Planimate for key files as well. Note that it looks in the working directory first so its possible to have a "local" key for special purposes.<br />
If a key is not found, PL now puts up a file browser so the user can select a key file to use. The file used is copied into the Application Data planimate folder or the EXE folder for older versions of Windows.<br />
If upon attempting to proceed with that key, PL discovers its not valid (eg: its expired, is not a valid key type etc) then PL will delete the copy it just made in order that the user gets another opportunity to pick a key file next time they run PL (avoids users having to locate Application Data ....)<br />
BUGFIX: Running PL with a runtime key with advanced options set (unusual but possible to generate) allowed editing until the first entry into end user mode (after which it would not switch back to edit mode)<br />
BUGFIX: Menu bar with tools hidden fixed (was not updating properly leading to an empty Run menu in Application mode<br />
<br />
===4.97j===<br />
<br />
BUGFIX: Special handling added so an immediate message sent during a track lookahead (useful for making permanent changes to attributes/tables in lookahead) wont mess up the original train's route information (section tokens were being discarded)<br />
<br />
===4.97i===<br />
<br />
BUGFIX: When a user defined menu was used and the model was changed back to editor mode from user mode the side bar would be redrawn before the menu was regenerated. Thus the sidebar would be pushed down for the menu. Now fixed.<br />
NEW: New INI file option "ModuleFolder" defines the folder Planimate will first look in when loading a module. ModuleFolder="Modules" (will look in {exe path}\Modules)<br />
BUGFIX: End User menu display options were being ignored (ie Hide Load/Save Model)<br />
NEW: New End User option "Hide Window Option", Hides the window menu when in end user mode.<br />
<br />
===4.97h===<br />
<br />
NEW: fixed cell stats logging and label list management<br />
NEW: "Graphics" menu option now availalbe in the multiple selection menu that appears when a group of objects is left clicked.<br />
This enables the "graphics" properties of all the selected objects to be set at once, which means border style, background, text and border colours and gradient colours.<br />
The graphics dialog will default to the graphical settings of the object that was selected first in the selection group.<br />
Only paint objects and views have "Graphics" properties, other selected objects will be unaffected by this option.<br />
NEW: The defaults for the "graphics" copy/paste buffer can be set using new options in the INI file<br />
(styles are numbered from 0 as they appear in the menu, colours are numbered from 0)<br />
[Edit] DefaultBorderStyle=5 DefaultBorderColor=0 DefaultBackgroundColor=15 DefaultTextColor=0 DefaultTopLeftGradientColor=7 DefaultTopRightGradientColor=7 DefaultBottomLeftGradientColor=7 DefaultBottomRightGradientColor=7<br />
NEW: Routine op to set Column text alignment mode can be set Index codes are: 0 = left 1 = right 2 = centre<br />
<br />
===4.97g===<br />
<br />
NEW: The "Save Window Image" change object File operation can now write to the clipboard.<br />
Supply a filename of just "-" (using the dynamic filename option and a label list) and instead of the bitmap being written to a file, it will be placed into the clipboard, from which the user can paste the image into a graphics application.<br />
CHANGE: Comparison precision changed from 1e-10 to 1e-12. This means equality checks require 12 digits of precisions to match<br />
If a model computes one value from fractional components and compares it to a number computed differently, they may not exactly match.<br />
Solutions include using "Round" on the computed numbers and avoiding code that expects *exact* values to be reached, but rather tests for thresholds being crossed.<br />
BUGFIX More issues with data menu items when viewing application panel fixed<br />
BUGFIX Added alternative "go back" handling for panel navigator when its docked - the existing mechanism broke when the navigator is in the dock because the navigator never gets activated/deactivated message.<br />
These means go back (ctrl-b) and ctrl-d/ctrl-f will work for all panels visited using the docked navigator.<br />
CHANGE: Cell-Stat Views no longer "track" their cell as rows are added/deleted from the table. They stay hard-coded to the cell they were initially associated with<br />
CHANGE Change object menu "lookahead" option now more descriptive and uses a flyout rather than the option popup<br />
CHANGE INI files now support strings<br />
New INI setting<br />
[INI] DefaultFolder="."<br />
Sets initial working folder for PL (default is the folder set by the shortcut, which is usually the exe's folder<br />
NEW: If the display option to not auto start scheduled entries has been selected and the model hasn't started the entries yet, then a new item in the paused background click menu enables the modeller to start them.<br />
NEW: Table routine operation "Purge Duplicate Rows"<br />
Removes any identical rows after the first one encountered.<br />
Comparisons are made using Planimate's rounding rules (now 12 digits precision). This will create issues for values over 12 digits long, with different round off error or with long multilabels.<br />
<br />
===4.97f===<br />
<br />
BUGFIX About box shows user bmps properly for PBAs<br />
BUGFIX Issues in routine editor of condition editor enabling parent windows to be clicked/closed causing crash now fixed<br />
(Screens were propagating "Enable()" up to parent Screens; now dont do the propagate if the parent screen is also a Form class)<br />
BUGFIX Views (eg table) will not copy paste between models directly; (they need to be in a portal with their table) this is now checked, (including multi-selections) and the copy/paste buffer is discarded if it contains a view when another model is loaded<br />
BUGFIX: Planimate Help menu commands would only find the Planimate help file if there was no model loaded (ie current path = exe path) now works with model loaded.<br />
CHANGE: Planimate will now first search for a folder called "Help" under the search path to find help files.<br />
<br />
===4.97e===<br />
<br />
NEW About box shown for all versions of PL including standalone applications (gets shown for 5 seconds)<br />
NEW Application key files for creating internally keyed applications become unusable after the EXE is a year newer than the application key.<br />
NEW Planimate has more sophisticated INI file handling<br />
To better support multiple users, the INI file is now created by default within the users "Application Data" folder. I still support INI files in the EXE folder however, so no action is required if you are happy with the INI file where it is. The INI file has also been renamed.<br />
The search works as follows:<br />
*look in the EXE directory for "PLANIMATE.INI" If not found, then<br />
*look in the EXE directory for "PLANIMAT.INI" If not found, then<br />
*look in "Documents And Settings\(username)\Application Data\InterDynamics\Planimate" for "Planimate.INI"<br />
If all these fail to find an INI file, then PL will default to creating one in the Application Data folder, as above.<br />
If PL does find an INI file, it then writes back to that location.<br />
<br />
===4.97d===<br />
<br />
CHANGE: More changes to about box<br />
Application name is shown at top left of application bitmap area for standalone exes<br />
No nags on expiring of PL Model End User ("InterDyne") key files<br />
A keyfile with an application name associated can only be used with a standalone EXE with that application name (not as PL End user key)<br />
PL Modellers do not get option to create applications with external key files UNLESS they have ability to create unkeyed applications. It is intedned that most developers would create/ship PBAs which have been internally keyed with a PBA license key.<br />
BUGFIX Display of routine atts and purging during copy to a sub-routine fixed<br />
BUGFIX IDBase menu status once connected<br />
BUGFIX Data attribute/table items now always available and bind to closest dynamic screen's data when in a view panel<br />
CHANGE "Average" field for constant value distribution now labelled "Value"<br />
NEW Breakpoint/error dialog now remembers its position during a PL session<br />
NEW "Step" button in breakpoint dialog - next routine line executed will be breakpointed before it executes<br />
BUGFIX "Draw from top" gantts now work properly with the y scrollbar<br />
CHANGE: most recent list of models available in user mode again<br />
NEW Value format "Scientific"<br />
formats values as: 1.23<br />
===4567e===<br />
-003<br />
Unlike all other value formats, no clipping or rounding is performed on numbers read/written using this format. Currently is fixed at 6 decimal digits of precision.<br />
NB: PL is not intended for processing of very small or huge numbers and most of the other formats do rounding/clamping of values to protect modellers and users from some roundoff issues.<br />
<br />
===4.97c===<br />
<br />
CHANGE: Reworking about box, inner about box and PBA about box<br />
NEW: Basic List of Logged Stat Displays under View menu select "View Logged Stats"<br />
<br />
===4.97b===<br />
<br />
CHANGE: Modules looking for module configuration screens will no longer search within other modules.<br />
CHANGE: Object names are updated in the treeview when a new object name is created<br />
CHANGE: date testing for keyfiles fixed<br />
NEW: ability to enable/disable lines in a routine (ie: comment them out)<br />
[somewhat tested]<br />
this is intended for immediate debugging and wont be saved in the model file. If you want something persistent, then use an IF.<br />
Lines are disabled using their context menu during edit or by double clicking or right clicking on them during simulate<br />
A disabled line has a "-" in front of its line number<br />
Disabling a WHILE, SELECT or ITERATE disables all code within it (this isn't indicated though)<br />
Disabling an IF disables its ELSE as well Disabling an ELSE disables just the else part<br />
Disabling on an ENDIF, ENDWHILE etc is ignored. Disabling a CASE is not yet supported<br />
I am interested of any speed difference in routine processing with this release compared to<br />
===4.97a===<br />
.<br />
Disabling a line in an instance of a shared routine during simulate will be lost when the run restarts, otherwise disabled lines persist between runs.<br />
<br />
===4.97a===<br />
<br />
NEW: Routine operation Spatial link - Add Spatial Link Bend<br />
enables a bend point to be appended to the current bend points of any spatial link going from one designated portal to another.<br />
This is intended for models which construct spatial link networks on the fly. There is no way to remove a bend point; recreate the link as required.<br />
CHANGE: "Use mouse position" co-ordinate for popping up a panel in a routine change from (-9999,-9999) to (-1,-1) as what is used in a popup panel button click action.<br />
Models using (-9999,-9999) introduced in<br />
===4.96m===<br />
need to be updated<br />
CHANGE: Table scrollbars remain operational if the mouse leaves their region as the mouse is dragged.<br />
NEW: Easier to delete a distribution scaling value (delete button in attref dialog)<br />
NEW: Note in routine editor given for bitwise and modulus re: 14 digit limit<br />
BUGFIX: Fixed PL showing and forgetting about the "advance to time" dialog if an error occured durng the initialisation of the model.<br />
BUGFIX: Locating broadcast button paint objects from the broadcast now implemented<br />
4.97<br />
NEW: Edit -&gt; End User Model Info<br />
has new "Application name" field. This sets default application name used when creating a keyed standalone EXE.<br />
NEW: Key file format. Now have account name field. Names can be longer<br />
New format key files are 248 bytes.<br />
key files now have up to 50 char names new fields for account name and application name in key files and demo/edu version bits date testing performed for demo/edu/runtime versions<br />
PL still compatible with older key files (account name = user name)<br />
Newer key files implement expiry/aging<br />
No longer need DLL to make standalone applications<br />
You will need special key file to create internally keyed standalone EXE - contact TonyG about this<br />
CHANGE: Panel (Dynamic / Application) Object names appear in the treeview. An ini option controls this: TreeViewObjectNames=1 (1 to turn on, 0 to turn off)<br />
<br />
===4.96m===<br />
<br />
CHANGE: When using the "Show Panel" routine operation you can now specify popup coordinates of -9999, -9999 and the popup will show at the mouse cursor position. (Only works with popup panels that dont have the caption bar hidden as popup windows with caption bar hidden use coordinates based on the panel not the windows desktop)<br />
<br />
===4.96l===<br />
<br />
NEW: INI Option<br />
[Edit] SwitchVisibleInRun=1<br />
If set to non 0, newly added switches default to being visible during the run, otherwise they default to hide during run.<br />
NEW: ctrl-e when editing toggles object/paint modes<br />
CHANGE: Routine operations Modulus, Bit AND,Bit OR and Bit XOR are now performed using 64 bit integers so there is no 4 billion limit.<br />
Beware of roundoff issues - beyond 14 digits you will lose precision in units.<br />
CHANGE: Delete Paint routine operation has an option to also delete paint objects that were inheriting from the paint object (default = 1 = yes)<br />
BUGFIX: Restoring minimised routine editor column issue fixed<br />
BUGFIX: Loss of focus on user dialog editing in a routine fixed<br />
BUGFIX: Scoped broadcast in application panel not broadcasting to dynamic panel that owns the application panel fixed<br />
BUGFIX: Queues and dispatchers paste properly in a group paste<br />
<br />
===4.96k===<br />
<br />
BUGFIX: Routine attribute list title was broken, often causing crash<br />
BUGFIX: Paint delete all inherited missing screen repaint<br />
BUGFIX: dispatcher was updating rect before loading overflow flag<br />
<br />
===4.96j===<br />
<br />
CHANGE: Palettes that are visible will reload and appear after saveing model as standalone application<br />
BUGFIX: Model merge crash fix<br />
Merging of labels was broken if a class merge occured with item classes that had item attributes that referenced label lists (an internal list of all label list references was being corrupted)<br />
<br />
===4.96i===<br />
<br />
BUGFIX: A serious engine bug which caused blocking switches in "first available path" mode not to properly retain the switch caches of following also-blocking switches.<br />
BUGFIX: Fixed bugs with restarting run and attribute views not being properly reset during the restart. Caused a crash<br />
BUGFIX: Fixed bugs with model copy views - were not getting log channel initialised properly, also caused a crash.<br />
NEW: Object property "rotation" sets rotation of object bitmap units of one tenth of a degree<br />
CHANGE: Setting an objects xpos or ypos Object property no longer animates or updates the object. This enables multiple updates of objects to be performed without flicker (a force repaint updates the positions).<br />
NEW: Routine option Display-&gt;Repaint Dynamic Objects<br />
this can be used to update dynamic objects which have been positioned/ scaled/rotated using the object attributes.<br />
It updates all the objects in one hit using the animation manager.<br />
This should result in a smooth update and the ability to create very nice animations using objects.<br />
This routine operation also speed-regulates to keep update speed consistent on different hardware (by releasing empty CPU time to other tasks). It should be invoked in a master timing loop every "frame" you wish to show.<br />
<br />
===4.96h===<br />
<br />
CHANGE: Added an extra column to the log header table.<br />
If a logged attribute is associated with a label list, the label list name is now in column 4 of the channel header<br />
If a logged attribute is associated with the Object State Attribute of an object, then the name of the object is passed as a label list name - eg: "_MultiServer States"<br />
This enables log viewers to associate the column with a state label list for each object class (which the log viewer must maintain)<br />
CHANGE: 0 width columns are not offered in the sorting column setup list<br />
BUGFIX: Was writing garbage in log header for the hour of the date<br />
NEW: PL now only shows the focus cell for table views which have the keyboard focus<br />
NEW: Context help buttons being added - not yet functional<br />
<br />
===4.96g===<br />
<br />
NEW: INI file option<br />
[Display] PaletteTitleDocked=1<br />
If set to 0, palettes wont have titles while in sidebar<br />
BUGFIX: Palette state in menubar properly updated if palette closed while not docked<br />
NEW: Typing while a table view has the mouse focus now goes straight into the cell for the table.<br />
NEW: Dynamic object menu option for all objects that can be assigned object attributes. "Log Attributes To File" A dialog will allow the user to select object attributes to log to file. If an attribute has not be assigned one will be created.<br />
NEW: Editor Palette. Brings some of the menu commands into a palette. Its display is controlled with the ini options: EditorPaletteX=0 EditorPaletteY=0 EditorPaletteDocked=1 EditorPaletteStatus=0 SidebarEditorPalettePos=0<br />
BUGFIX: The sidebar splitter can no longer be dragged outside of the Planimate window.<br />
NEW: Selecting an attribute in the routine editor menubar brings up its editor<br />
NEW: Infrastructure for help buttons in dialogs added.<br />
BUGFIX: Label lists with names starting with "_" no longer offer the scope button in their editor. They should not be moved from the top of the hierarchy.<br />
NEW: Attribute lists name their owner in titlebar<br />
BUGFIX: IDBase finds its XML file (should be in EXE dir) regardless of current working path<br />
CHANGE: Renamed "Broadcast Messages" list "Broadcasts"<br />
NEW: Ini option to disable help buttons [Edit] NoHelpButtons=0<br />
If zet to 1, help buttons are not displayed in dialogs<br />
NEW: Routine operation to format into label at index<br />
Label String -&gt; "Format Into Label/Index"<br />
This allows modeller to specify label and index for a label added to a list. If an existing label already exists at the index, it gets replaced<br />
<br />
===4.96f===<br />
<br />
BUGFIX: Times written in log files were broken<br />
BUGFIX: Message when calendar time needed fixed<br />
CHANGE: Full Text table cells no longer written out when a table is exported. They would corrupt the table as a delimited format doesn't mix well with a format supporting new lines and tabs.<br />
NEW: &lt;Insert&gt; key while viewing a routine brings up menu to insert a new routine operation<br />
CHANGE: Tab order in routine step order to make it quicker to get to the routine operation buttons<br />
BUGFIX: Deleting paint objects in a group of selected objects now also deletes any paint objects that inherit from them.<br />
Note that PL doesn't ask to confirm as when a single paint object is deleted.<br />
NEW: Dragging in background in Paint mode enables a selection to be made as in object mode. All objects are selectable (as in object mode) but only paint objects are sensitive to clicks and drags, not modelling objects. This mirrors object mode.<br />
CHANGE: Views are now sensitive to clicks in paint mode. This makes it easier to position them while creating paint content.<br />
CHANGE: Views default to white background/black text<br />
<br />
===4.96e===<br />
<br />
CHANGE: Long Label Support<br />
I've increased buffers to support much longer labels<br />
4k byte temporary string handling buffers (up from 512 bytes) 1k byte label text (up from 64 bytes)<br />
Some UI elements like editor's context popups will look silly with long labels so be careful where you use them.<br />
Long labels are primarily intended for internal use, such as file paths and URLs<br />
NEW: New Label String Routine Operation:<br />
"Label Character"<br />
enables modeller to read the ascii code of a given character within any formatted value (doesn't have to be a label). This is useful for special processing, looking for delimiters etc. Works well in conjunction with using Formatted Width (to get the width of a formatted value/label) and Label Trim (to extract a substring of a label string)<br />
NEW: Can now message into a module and the class remapping will work. You need to manually set up the remapping (portal menu-&gt;data-&gt;class mappings) as the platform doesn't prompt to do it automatically as when you are flow editing.<br />
BUGFIX: Message entries now properly count message items entering their subsystem. Previously this was missed causing the portal's occupancy to go -ve when the message item went through an exit<br />
<br />
===4.96d===<br />
<br />
*** A Number Of Changes require modeller attention if<br />
*loading models using the _Log broadcast or _Logged Attributes label list<br />
*loading models containing tables without the "Variable Length" option on<br />
***<br />
CHANGE: The "Variable Length" table option is no longer supported. All tables are assumed and treated to be variable length by the run engine.<br />
This does not affect end user options to not resize the table but affects the way tables are treated when rows are appended/deleted during a run or a "clear" is performed on the table.<br />
An old model with the "Variable Length" option off will report a warning upon load. The warning will also be logged to the debug file.<br />
NB: Planimate has been warning about turning off the Variable Length option on tables for a while now. Older models may have had this option "off" as tables used to be "fixed length" by default.<br />
Older versions of PL have a "Find" function to locate fixed length tables. Obviously this is no longer useful and has been removed.<br />
If you want to "Clear" a table without deleting its rows, you can achieve this by using the arithmetic "Clear" operation on the entire table.<br />
NEW: Table file reading supports reading data formatted on a cell by cell basis. This requires the new option described below.<br />
NEW: Option in file reading in change object "Read Over Existing Table Contents"<br />
With this option "on", PL will not clear a table before reading into it. Instead, PL will attempt to read the file based on the formats of the existing cells in the table.<br />
This is VERY useful combined with using cell specific formats in a table. The modeller can specify what format data should be read in on a cell-by-cell basis (including different label lists).<br />
This option replaces the behaviour of reading into a table with the (now retired) "Variable Length" table option turned off.<br />
With this option on, PL doesn't read data past the rows already present in the table.<br />
CHANGE: Logging option on an attribute view is now "Change Broadcast"<br />
New option "Record Changes To Log FIle" will write a log file of changes to the attribute (NOT IMPLEMENTED YET)<br />
CHANGE: Renamed internal lists<br />
*the broadcast "_Log" is now called "_Value Change"<br />
*the Label List "_Logged Attributes" is now called "_Change Tracking"<br />
If you have used this mechanism (introduced in<br />
===4.94t===<br />
) then you will need to manually replace these strings in your model - match/replace including the quotes:<br />
"_Log" -&gt; "_Value Change" '_Logged Attributes" -&gt; "_Change Tracking"<br />
Alternatively remove references to the "_Log" broadcast and "_Logged Attributes" label list before upgrading the model.<br />
<br />
===4.96c===<br />
<br />
BUGFIX: The<br />
===4.94x===<br />
change also affected BCs sent from graphs. Have updated Train, Gantt and Log Driven graph click handling<br />
CHANGE: Log Driven Graph has new initial scale options<br />
CHANGE: Trig Menu in routine selector is now called Math<br />
BUGFIX: Reindexing reworked for:<br />
Labels SubLabels MultiLabels Object Labels Panel Labels Paint Log Labels Broadcasts<br />
(was not properly occuring meaning that model merges would mess up)<br />
BUGFIX: Paint palette now uses paint palette INI settings for co-ordinates (if not docked) and docked state, rather than using object palette<br />
BUGFIX: Lockup in displaying model object list when object/subsystem names were very long fixed<br />
CHANGE: Updated application banner resource in PL<br />
<br />
===4.96b===<br />
<br />
BUGFIX: A change in<br />
===4.94x===<br />
caused an attribute view formatted to a label list with cyclic selection AND configured to send a broadcast to now put up a bogus "pause run" menu when clicked.<br />
I've fixed this by ensuring that cyclic selection actions wait for the mouse button to be UP before proceeding. (In previous verisons the cyclic selection occured on the mouse down).<br />
BUGFIX: Clicking objects off palette created flickering - fixed<br />
BUGFIX: Default for command button click action was invalid and would cause a crash if selecting a command for a new button was not performed<br />
CHANGE: Renamed "Gantt" graph mode (in Column Overlay Graph) to "Labelled Bar" to distinguish it from the "Gantt" view.<br />
The Labelled Bar mode is useful where the overhead of the Gantt View is not desired as it does not keep a copy of the gantt nodes.<br />
NEW: Attribute and Cell Views have new option "Cen Edit During Simulation which enables them to be clicked upon/edited in simulate mode.<br />
The Engine Option "Mouse Clicks While Running" must be on<br />
<br />
===4.96a===<br />
<br />
BUGFIX: z-order of gantt parameters dialog fixed<br />
BUGFIX: flow hover line over object connected to spatial/pipe appears properly<br />
BUGFIX: crash bug if a module was loaded but not pasted (produced a system error and corrupted the target model file)<br />
BUGFIX: new ibeam cursor causing more problems than tool tips on fields are worth. Removed it. Tool tips seem OK under XP.<br />
BUGFIX: Queue/Dispatcher bounding boxes had slight calculation error causing their width to be offset and hence vertical lines through them not to be straight<br />
BUGFIX: double redraw when changing panels fixed - avoid unnecessary menubar rebuild function call. This prevents the flicker and and speeds up panel changes<br />
CHANGE: View edit menus have new layout<br />
CHANGE: The object palette now supports dragging OR clicking objects off the palette, either case lets you drag an object about and place it.<br />
This keeps the UI consistent with the paint palette yet lets users who like dragging get their fix.<br />
CHANGE: Help files can now be located in the model file directory, not just the executable directory<br />
4.96<br />
NEW: INI file options that effect the order that widows are displayed in the sidebar. The higher the number the higher the sidebar position. [Display] SidebarTreePos=1 [Palettes] SidebarObjectPalettePos=4 SidebarPaintPalettePos=3 SidebarClassPalettePos=2<br />
NEW: Paint palette now includes icons for adding links and viewports.<br />
Its called the Paint &amp; Link Palette<br />
NEW: The paste from clipboard routine operation now has an option to show or not whow the configuration first (1 = show the ui).<br />
The table editor has a new option to edit the default clipboard import configuration.<br />
BUGFIX: If you typed key while dragging object off the object palette it would confuse the message pump. Planimate would continue thinking it was in a drag (even though you can use it) and would not quit.<br />
BUGFIX: Tracks no longer enable a ghost rectangle in the lower left corner when using drag-selects<br />
NEW: Added hacked ibeam cursor to resources so tooltips work properly in fields (used by idbase currently)<br />
BUGFIX Forming a track/spatial link/pipe wont flash the origin object.<br />
Has a new cursor too<br />
BUGFIX: Model INI file (not PLANIMAT.INI) now defaults to the model's name<br />
CHANGE: Small UI enhancements and consistency fixes<br />
*irrelevant dynamic options hidden in panels<br />
*section details dialog z-order fixed<br />
BUGFIX: Loading a module will now merge in any resources in its DB file into the current model's DB file.<br />
Any existing resources with the same name and type are replaced.<br />
CHANGE: Object Menu cleanup<br />
******* IMPORTANT ************* ** ** A lot of basic UI stuff has been messed with this version. ** Please take note of the TO BE TESTED section below ** **<br />
NEW: Planimate confirms when starting a run with trace animation on<br />
NEW: Object attribute Out count was counting negatively, now it counts +ve<br />
BUGFIX: Crash on adding object to a view panel now avoided<br />
CHANGE: No blocking between items option is on by default for new servers<br />
CHANGE: "Advanced editing" is no longer an option saved with the model. IT can be toggled using the "Settings" menu and a default set in the PLANIMAT.INI file.<br />
BUGFIX: Zoom animation when a note is closed now visible<br />
NEW: Improved interface to adding an RTF note:<br />
*first draw box for the note<br />
*then select note file<br />
Note then appears. The note "link" is placed at the bottom left of the note and named with the note file name.<br />
Cancelling either step aborts adding of the note.<br />
REWORK: Flickering<br />
Flickering when switching modes and updating menubar now reduced. This involves the menubar rework below and may introduce missing update bugs if I've missed an action that can cause something to change state.<br />
NEW: Paint palette (in progress)<br />
NEW: Ini file now at version 2<br />
BUGFIX: Changing a class's scope or name properly udpates the menubar and class palette<br />
<br />
===4.95g===<br />
<br />
BUGFIX: Class Submenu under "View" menu now populated<br />
NEW: Servers have an option to prevent a blocked item from blocking other finished items. This makes it act more like a dispatcher when many items are finished and one is blocked.<br />
<br />
===4.95f===<br />
<br />
CHANGE: The Panel Option "Include in Module Configuration Panels" had now been changed to two options: "Include in Module Edit Configuration Panels" "Include in Module Runtime Configuration Panels" Allowing display panels to be include in the modules runtime popup menu<br />
BUGFIX: Crash on merging a module containing panels fixed<br />
NEW: ODBC option to strip trailing spaces from data has been added.<br />
WARNING:Review options on ODBC objects. The bits were not properly enumerated.<br />
This would most likely affect the "Keep database open" option.<br />
NEW: "Line to target" shown when linking spatial/pipe/track network objects<br />
<br />
===4.95e===<br />
<br />
NEW: INI file has a version number. From now on PL EXEs wont overwrite the INI file if it has a newer version than they write.<br />
NEW: INI file includes some comments<br />
CHANGE: The way paint buttons display images has been changed.<br />
If the button has a border, the image is now shown WITHIN the border box of the button (ie: a 1 pixel margin on all sides) in order to leave the border intact.<br />
If the button is set for no border, the image extends all the way to the bounding box of the button, as in previous versions.<br />
This affects only multi-state buttons; I've left paint images objects as-is.<br />
NEW: Save BMP file operation can now save another panel's image to file.<br />
A data target may be included which should be formatted as a portal or panel reference. PL will then activate this panel, grab its image then save it. The panel must not be already visible in a popup.<br />
NEW: Save BMP file operation now has option to show file browser first, enabling user to specify target BMP to save to.<br />
NEW: When a module (portal with "module" option on) which has internal classes is included in a flow, PL will check if there is a mapping for the current class being edited. If there isn't it will offer to allow an internal class to be selected. If the module only has one class, then PL will create a mapping automatically without prompting the user. This simplifies the use of modules with a single scoped class within them.<br />
CLEAN: Removed obsolete step usage tracking code in flow/path database<br />
Loads and copies might be faster<br />
<br />
===4.95d===<br />
<br />
NEW: Portal / Application Panel option "Act As Module" Panel Option "Include in Module Configuration Panels" Turning on "Act As Module" will cause the Portal to search for subsystems containing the "Subsystem is Module Configuration Screen" flag. These substems are presented in the Portal's context menu and will popup when selected. It is recommended to have the popup options "Stay in Front of Main Window" and "Ensure Visable on Display" are turned on for the Configuration Screen subsystems.<br />
BUGFIX: Fixed the shortest queue switch mode<br />
BUGFIX: Object Palette now removes itself from the sidebar before being deleted to create stand alone exE<br />
CHANGE: Agent pickup/dropoff objects changed in palette (the icons were already correct)<br />
CHANGE: Agent Pickup/Dropoff menus simplified (attributes available at objects menu)<br />
CHANGE: Switch option "Assume No Blocking" is now "Switch Cannot Block Items" and is accesible directly from the switch popup menu<br />
BUGFIX: Table browser is bigger<br />
NEW: If a change object has the same name as a system broadcast eg: "_run start" then it will now act as a broadcast receiver for that broadcast. The following special conditions apply:<br />
*The change object must have no flows associated with it (ie: it must stand alone)<br />
*An item class called "_bc" must exist and it will be used to carry any matching broadcast attributes<br />
*The item created within the change object is immediately destroyed after the change object processes the broadcast<br />
*Change objects that receive broadcasts have a new icon assigned to them<br />
NEW Dispatcher has option to show its broadcast/message icon during run<br />
CHANGE Vertical queues and dispatchers now are 16 pixels wide<br />
CHANGE Right click on an object not in a flow in flow edit mode now gives a popup message rather than a modal dialog<br />
<br />
===4.95c===<br />
<br />
NEW: Paint object click action "View Objects Interaction Menu" tries to open the named objects interaction editor. The command will search within its scope looking for an object that matches the specified name.<br />
BUGFIX: Hiding the button bar while the side bar is visable now redraws the splitter bar correctly.<br />
BUGFIX: Multiserver with a capacity set to 0 sets itself to "Unavail" state now (assuming no items present or blocked in which case the busy/ blocked states take priority<br />
BUGFIX: Flow editor previews the result of a "replace object" properly<br />
<br />
===4.95b===<br />
(new model file version)<br />
BUGFIX: Track junction enhancement from<br />
===4.95a===<br />
now actually works. Have cleaned up testenter/lookahead code for sections so track models should be a bit faster.<br />
UPDATE: Sped up track portal code by caching section pointer at run start<br />
NEW : Flow editor now response to clicks not holds. Makes flow editing quicker<br />
NEW : Can click on entry while editing a flow and a new path is automatically started. Clicking on an entry with an existing path selects that path<br />
UPDATE: Removed "Full" state from portal's state tables<br />
BUGFIX: Should prevent system errors while terminating a track model with booked sections<br />
<br />
===4.95a===<br />
<br />
NEW: Dispatchers display an icon in their corner in some modes:<br />
Broadcast dispatchers display the _DISBC icon Messaging dispatchers display the _DISMSG icon<br />
These icons will be available for download separately in the Planimate 5 region. Drop them in your planimate folder.<br />
Note:Icons will be changing often as PL5 nears release<br />
CHANGE: Fit to model area now takes into account the sidebar presence and width<br />
CHANGE: Class icon in status bar is now to left of the class name<br />
NEW: Track junction enhancement - a train automatically enters a section it has a token on (because of a junction) without needing to do a further lookahead test which could cause the train to get stuck mid-junction.<br />
BUGFIX: Fixed tests for routine editors positioned off screen which was giving bogus message on dual screen systems<br />
4.95<br />
BUGFIX: Class remapping now works for items created within a local scope (eg: an item created inside a module)<br />
<br />
===4.94z===<br />
<br />
CHANGE: Entry schedule/arrival can be edited with right click<br />
CHANGE: Multiserver 0 delay option can not be turned off when it is in an application panel<br />
CHANGE: Redundant "Add" button in paint and log label lists removed<br />
CHANGE: "Create Standalone App" is now in the Advanced Edit menu<br />
CHANGE: Queue and Dispatcher now are 16 pixels high so flow lines are straight<br />
NEW: Typine '@' while filling in a date time popup sets the field to the current date and time Typing '#' while filling in a date time popup sets the field to the current date and time 0:00<br />
BUGFIX Palette update after a run particularly if the palette was not docked was broken in y<br />
<br />
===4.94y===<br />
<br />
BUGFIX: clamp width of condition description in condition editor to prevent button growing<br />
BUGFIX: merging with scoped classes fixed<br />
BUGFIX: menubar status fixed when hierarchy explorer opened<br />
BUGFIX: Can reference log label list<br />
BUGFIX: Better management of sidebar during run. The sidebar no longer needs to be hidden, the palettes get disabled. Reduces flicker<br />
CHANGE: Tables in Mapper mode identified as "Table" not "Mapper" in the titlebar<br />
<br />
===4.94x===<br />
<br />
*bugs in managing palettes in application mode fixed<br />
*memory leak for deleting hidden splitter<br />
*palettes being shown when loading a "tools hidden" model<br />
*crash when closing due to an update being made to palettes which were already deallocated<br />
*explorer window not being tracked when in interdyne mode<br />
*reduced flicker in sidebar when switching to/from interdyne mode<br />
*to toggle a palette being in the sidebar/floating now use the ALT key when it is displayed.<br />
(CTRL was causing problems eg with CTRL-T and CTRL-H)<br />
*changes to portal hierarchy (during edit or initiated by model) will be faster if the explorer window is visible or docked.<br />
<br />
===4.94w===<br />
<br />
CHANGE: *** old models need attention for this ***<br />
Graphs using columns called _thinkness and _link_thickness need to have those columns renamed. Planimate now expects the columns to be called _width and _link_width respectively<br />
REWORK: ICON BROWSER PALETTE OVERHAUL:<br />
*"Choose Icons" palette:<br />
*state selector rewritten<br />
*cell highlighted clearly<br />
*icon name has more space<br />
*handles scrolling better (for custom portal states)<br />
*right click on a state shows "Locate" option which will point the RHS palette at the folder/DB where the icon is located and hihlight it<br />
*DataBases which dont contain any ICN or BMP files are not displayed since there is nothing to select there. They are displayed in the icon mover.<br />
*model's database is not opened by default if its empty<br />
*funky focus issues fixed<br />
*ability to select invalid states fixed (clicking in the scrollbar area)<br />
*The "Change Directory" button in palettes has been renamed and works more as expected - selecting a DB opens it, selecting an icon displays its folder. The file type filter now includes BMP, ICN and DB files.<br />
*"DB" files are now referred to as "Resource Databases" in file browsers<br />
*Scrollbars work properly in the palette browser particularly when "lo cating" icons<br />
CHANGE:<br />
In Tray renamed to Agent Drop-off Out Tray renamed to Agent Pick-up<br />
NEW:Panel navigator, sidebar and palettes<br />
*sidebar is only available during edit. During runtime and application mode it gets hidden and its state is restored when going back to edit<br />
*during run if a navigate is performed, the modal navigation dialog is used (the sidebar cannot be shown as it may contain the editing palettes)<br />
*ctrl-N when the explorer is docked gives it focus and the keyboard can be used to explore. &lt;ENTER&gt; or &lt;SPACE&gt; returns focus to the Planimate model window. ctrl-W can be used to show/hide the sidebar including the explorer.<br />
ctrl-N when the explorer is not docked shows/hides it.<br />
*focus after using palettes is returned to main window<br />
CHANGE: "Text Format" changed to "Text Alignment" in view menu<br />
<br />
===4.94v===<br />
<br />
BUGFIX: Fix for Bad String Load Error (Enum order of routine commands was altered)<br />
<br />
===4.94u===<br />
<br />
CHANGE: Newly added Log Driven Graphs will behave differently<br />
The modeller can determine if the colour/thickness/linestyle and yoffset of a drawn segment is taken from the starting point or ending point of the segment.<br />
By default it is now taken from the starting point which makes it consistent with gantt and train graphs.<br />
A new option on the view, "End Point Sets Colour" is on for older models. It is off for newly added graphs.<br />
BUGFIX: Sorts where rows matched as identical could result in those rows swapping positions in repeated runs of the same model due to the random nature of the sort when things match.<br />
To prevent this, I've added an internal check which uses row order as the final sort criteria if 2 rows match all the conditions the modeller has specified.<br />
I also applied this fix to the "create sort index" operation.<br />
NEW: Tables with transparent backgrounds should display properly.<br />
These can look cool over gradients etc. but will be very CPU intensive to redraw. Not recommended for tables which update often.<br />
Basic editing and value updates of the table should redraw properly<br />
NEW: Object and Class palettes are now dockable in the sidebar To make the palettes dock use the new ini file options Sidebar related inifile options are now:-<br />
[Dislay] SidebarW=200 // Initial width of the sidebar SidebarStatus=0 // Currently unused TreeViewDocked=0 // 1 = Dock the tree view in the sidebar TreeViewStatus=0 // 1 = Tree view is visible when Planimate loads<br />
[Palettes] ObjectPaletteDocked=0 // 1 = Dock the object palette in the sidebar ObjectPaletteStatus=0 // 1 = Object palette is visible when Planimate loads ClassPaletteDocked=0 // 1 = Dock the class palette in the sidebar ClassPaletteStatus=0 // 1 = Class palette is visible when Planimate loads ObjectPaletteSize=0 // 0 = 6x2 (new style) 1 = 4x3 palette (old style)<br />
The defaults are to show palettes in the sidebar.<br />
If the ctrl key is held while showing a palette, it will appear opposite to the default in the ini file.<br />
NEW: INI defaults for palette (when not docked):<br />
[Palettes] ObjPaletteX=0 ObjPaletteY=0 ClassPaletteX=0 ClassPaletteY=80<br />
NEW: Key press combination to show / hide the side bar &lt;ctrl&gt; &lt;w&gt; while in edit mode<br />
NEW: Routine operation under "Label" Create Sub Label List Has three inputs Format Result - Attribute to format to new sub label list List Name - Name of new list (label) Parent List - Parent list for the new sub label list<br />
<br />
===4.94t===<br />
<br />
BUGFIX: incorrect "Another exists" messages for paint label list reworded<br />
BUGFIX: Loading of ovals broken in<br />
===4.94s===<br />
now fixed<br />
NEW: Support for logging of attributes.<br />
Attribute/Cell Stat views now have a "Log" option. This adds them to a new global label list, "_Logged Attributes"<br />
When a "logged" attribute changes during a run, the platform will now send a new global broadcast "_Log" with the following item attributes:<br />
_logtime - the time of the log event. Normally the clock but it can be different if the modeller artificially sends log BCs _logvalue - the new value _logid - the index of the event in the "_Logged Attributes" label list.<br />
Note: the initial value of the attribute does not currently generate a log event. This proved problematic but might change in later versions<br />
NEW: Clock colour can be changed using the "Graphics" menu when the clock is clicked upon in editing mode.<br />
Clock now defaults to white in new models<br />
Gradients, border style and transparency are not supported.<br />
CHANGE: The default "Calendar" start date for new models is now 1-jan-2001. This is a Monday.<br />
<br />
===4.94s===<br />
<br />
NEW: Basic "Module" load capability. New File menu option "Add Module To Current Model" enables simpler merging of models. Selecting this option<br />
*saves the current model<br />
*enables a "PMB" saved model to be selected<br />
*loads that model and merge with original model<br />
*leaves user with the "module" ready to be pasted (the original model is not resaved after the merge)<br />
This option requires that the model which is the module is saved as a PMB file and only has one top level portal. No other objects are carried through the merge process.<br />
NEW: In "Advanced" mode, new portals have pentry/exits hidden until they are included in a flow or have tracks/spatial links/pipes first connected<br />
NEW: System broadcasts cannot be deleted or renamed<br />
NEW: Tracks menu only visible if there are tracks on the main screen<br />
NEW: Title and behaviour of colour palette different when its selected from the edit menu. In this case you dont select a colour so clicking on a colour just updates its name in the field at the bottom.<br />
NEW: Updated "no interaction details" dialog and object click menu<br />
BUGFIX: fixed a paint copy bug when paint objects were using a condition<br />
The new condition editor was not setting the proper owner on copy of the condition. This would be unnoticed in all cases except where the special scope gets overriden as in paint objects with the "parent scope" option on.<br />
NEW Update interval is set to 10 and a message is given if a track/spatial/pipe is added and its still 0<br />
UPDATE Table "Act As Mapper" is on by default<br />
NEW: Paint ovals now inherit same abilities as rectangles, buttons (visibility control, click action, hover text)<br />
NEW: A new table option enables the table's comment to be displaywd in the table when the table is empty - this includes when the table has no rows<br />
NEW: Object step menu has "Start new path here" option<br />
<br />
===4.94r===<br />
<br />
NEW: *** Important For Editors ***<br />
Some items in the menu bar are now in a new ADVANCED menu<br />
A new "UI:Advanced Editing" display option enables/disables the advanced menu<br />
When loading older models, Advanced Editing is turned on Otherwise new models use the [Edit] AdvancedEditing flag in the INI file. This defaults to 0 so new users of Planimate dont see the advanced stuff. Existing users will want to make sure they have:<br />
[Edit] AdvancedEditing=1<br />
note this is a new section in the INI file and previous PL versions will remove it<br />
NEW: INI file option [Edit] AssumeNoBlocking<br />
IF 0 (default) then:<br />
*new switches are blocking switches<br />
*new routines invoke lookahead If set to 1 then PL acts as previous ie:<br />
*new switches are assume no blocking<br />
*new routines invoke only during move<br />
This makes it easier for new users of PL to work with blocking switches and routines.<br />
BUGFIX: Runtime Paint Copy label assignment fixed<br />
BUGFIX: label list, broadcast editors manage focus better after an edit<br />
BUGFIX: Alternate portal entry/exit properly cropped to screen when created<br />
UPDATE: Descriptions for clock/time formats<br />
NEW: Item palette tool tips and keepfront fix<br />
NEW: Renamed menu bar items<br />
NEW: defaults and misc changes:<br />
*Portal Options ON for new portals: Retain State After Run<br />
*Item Options Flip Icons ON by default<br />
*All Splitter Options ON by default<br />
<br />
===4.94q===<br />
<br />
NEW: paint object menu now shows object label name and index if its set<br />
NEW: paint label references now shows co-ordinates (middle) of paint object to help locate it<br />
BUGFIX: paint object copy properties validates against attempt to copy own properties<br />
BUGFIX: if dragging an object from the object palette, releasing over the object palette does not drop an object<br />
CHANGE: default window width for new panel is now 1016. If your INI file has another value it gets retained<br />
NEW: INI file option to display the IDBase menu - by default its off but power users can enable it<br />
to enable put under [Display] : IDBaseMenu=1<br />
(PL will add an entry in your INI file for this so check for it)<br />
NEW: INI file option determines if new models/portals get flows displayed. It is on by default, to disable under [Panels]:<br />
ShowFlowsInNewPanels=0<br />
NEW: INI file option enables flow editing tool tips to be disabled: They are on by default, to disable under [Display]:<br />
ShowFlowEditToolTips=0<br />
CHANGE: FLOW EDITING: left click on arrow head now goes into flow edit mode for that path. right click on arrow head goes into interaction mode (as before)<br />
If there is only one class for the path, the class is selected without the popup being displayed.<br />
BUGFIX: main window "Topmost" bug after using palette fixed<br />
BUGFIX: Many Forms, Item Pick and List Pick dialogs that could become hidden behind the main window now have proper owner set<br />
<br />
===4.94p===<br />
<br />
NEW *** palettes now act on the mousedown not mouseup ***<br />
NEW:<br />
Loop menu has better display of train status<br />
The train name may be prefixed by one or more of the following letters: L : Train is in loop enter/exit delay l : Train is undergoing a forced dwell/delay at the loop G : Train is blocked by the loops out gate F : Train is forced stopped (priority pass is pending at the loop)<br />
Trains blocked from moving by any of these conditions are not registered in the blocked trains list.<br />
NEW:<br />
*Tool tips in the flow editor<br />
*indicator line in flow editing to show where the flow will connect to<br />
*right click on class palette icon enables item class properties to be set<br />
*info panel y offset can be specified for an item class<br />
*info panel frame style/background/text colour can be specified including support for gradient and transparent styles<br />
*Column title tool tip option - displays column title in a tool tip when hovering over the column's title<br />
*Listeners AND sources browsable at buttons and entries Note that button sources reports 1 extra due to an internal copy button used in inheritance tracking<br />
*An attribute range check error is now processed as a breakpoint instead of a hard stop if break points are enabled. Otherwise its processed as a hard stop.<br />
*Animate speed and time scaling can be set via system attributes (under Display/Mouse submenu)<br />
BUGFIX:<br />
*not possible to drag objects off screen (clipping was broken in move)<br />
*class palette now works<br />
*track unblocks dialog has a "cancel" button to let you out of debugging messages. Pressing cancel turns off the debug option and continues.<br />
*"Paste Over" in table row menu now unavailable if no rows in the target menu<br />
<br />
===4.94o===<br />
<br />
NEW: CONDITIONS REWRITTEN<br />
*Conditions now have a new implementaiton featuring the ability to include brackets and to have an unlimited number of comparisons in the condition.<br />
The brackets enable the evaluation order of the condition to be set, otherwise the ordering is as in previous versions of Planimate - expressions are evaluated in the order they are encountered.<br />
The new condition editor features:<br />
*one comparison per row with vertical scrolling when there are many rows<br />
*indenting to show the condition struvture<br />
*buttons on each row to add opening and closing brackets<br />
*horizontal scrolling when the brackets get deep<br />
*comparison rows can be easily duplicated and deleted using the menu on the "bracket button" at the left of each row<br />
*Validation to prevent OK on conditions with incorrect or incomplete matching brackets<br />
*A status line at the bottom indicating if there are outstanding brackets to close or a bracketing error<br />
*A summary of the expression near the bottom wher A,B,C etc are substituted for the attrefs, enabling the comparison logic to be quickly reviewed without the distraction of the attrefs being compared<br />
*copy and paste capability enabling conditions to be copy/pasted to other objects or to/from multi-conditions<br />
*A "Report" button which formats and displays the condition in full into a text window for review and documentation purposes<br />
The multicondition and search functions also use the new condition code.<br />
The multi-condition dialog has been reworked to accomodate the new condition editor. The rows in the multi-condition now have a context menu for editing so some of the editing buttons at the bottom of this dialog were removed.<br />
The search dialog has also been reworked to accomodate the new condition editor.<br />
<br />
===4.94n===<br />
<br />
*the /SHARES file mapping option no longer complains if a share is being mapped and the share already exists (code 85). This is to avoid issues with systems that remember the previous share between sessions.<br />
*file locking: was passing deallocated string to unlink()<br />
<br />
===4.94m===<br />
<br />
NEW: INI file option is now available to determine whether the Navigational tree view appears in a side bar or floating window.<br />
INI option: TreeViewDocked Values: 0 = undocked (floating window) (default) 1 = Docked<br />
NEW: Command line option to compile a stand alone exe format:- planimat /MAKEEXEKEY="key_file" "model_file"<br />
key_file the key_file for the planimate pba model_file model file to be compiled<br />
both key_file and model_file must be present for a successful compilation<br />
<br />
===4.94l===<br />
<br />
NEW: Can browse listeners of a broadcast directly at a broadcast button.<br />
This shows all listeners regardless of scope; they may not actually receive the BC if it is a scoped BC.<br />
NEW: Table column menu option "Show References"<br />
Shows all table references that can *potentially* read/affect the column This includes:<br />
*direct hard cell reference<br />
*cell reference via column label<br />
*all cells via a variable in the column index<br />
*row references (eg: as used in tupling)<br />
*entire table/block references<br />
*use of the column as a matched cell matching source<br />
References from dynamic table references and item carried table references are not shown though for the latter, the assignment of the item table reference should be shown.<br />
Let me know if any other ways of referencing a column have been missed<br />
NEW: Sorting Enhancements<br />
*The sort edit window now supports up to 8 sort columns and each column can be sorted either Numeric (index order) or Alphabetic (formatted string order) It now displays column numbers if the columns have no label<br />
When selecting a new column in a sort dialog, if the column has a label list associated it defaults to "Alpha". The user can change it back to "Numeric" if its desired to sort the label list column by the index.<br />
*The "Table Sorted By User" broadcast now sets "_sort5" .. "_sort8" attributes as well<br />
*A new routine operation "Advanced Sort" is available. In addition to specifying a target table, another table is passed which contains the configuration information for the sort as follows:<br />
Column 1 contains the column #s for the sort keys Column 2 contains the forward/reverse flag (0 = forward, 1 = reverse) Column 3 contains the numeric/alpha flag (0 = numeric, 1 = alpha)<br />
This table can contain up to 8 rows, the maximum number of sort columns supported.<br />
<br />
===4.94k===<br />
<br />
CRASH FIX:<br />
*Large/long runs of Planimate which had a large memory throughput would cause Pl to crash on close. This was because the report written to PLANIMAT.DBG was overrunning its buffer.<br />
TRACK REWRITE<br />
*** THE TRACK CODE IN THIS VERSION IS EXPERIMENTAL ***<br />
Now do centralised blocking management<br />
*trains which become blocked are added to a global blocked train list. This list is ordered by oldest waiting train.<br />
*The list is now being unblocked "Newest Train First". This was found toI resolve a deadlock in the test model I'm working in and achieve better throughputs. Ideally I wanted to unblock oldest train first. This issue will be further investigated.<br />
*the new menubar option Track-&gt;Blocked Trains option enables this list to be viewed. If a train is double clicked/right clicked, a "blocked reason" for it being in the list is displayed. The reason display is greatly improved.<br />
IF clicking on a train causes it to "disappear" from the list then the train was no longer blocked and was able to move. This should not normally happen so report it if you notice it.<br />
*There is also an "Unblock All" button to attempt to unblock all items in the list. This should not be normally ever needed but would highlight any missing unblocks in the PL code.<br />
*It might be necessary for me to provide a modeller "initiate unblock" if section availabiltiy is based on an attref that PL does not normally send unblocks for. Table cells refs are OK.<br />
*The list includes columns for time train became blocked (VERY useful), train id, blocking track location, route, step etc.<br />
*Trains in the track blocked list might actually not be on a route! I've (hopefully) handled the situation of a train being in a queue followed with an assign route change connecting straight to a portal exit. Hence while the train is blocked, the route isn't actually assigned yet but the platform knows a track has blocked it and keeps it in the track blocked list anyways. This involved new code in the core PL engine so existing models will be slightly slower.<br />
*theres also a new debugging option which will cause PL to report all "blocked reasons" as unblocks are attempted (useful when stepping along a run).<br />
*have rewritten track code to accomdate this new unblocking<br />
Also made logic changes to:<br />
*"Stopped" trains / priority passing (cleanup)<br />
<br />
===4.94j===<br />
2<br />
*(CVS release only) - has the track unblock list code but the old track instance code which doesn't make use of it yet<br />
Uploaded so I can compare old and new track instance code without other differences<br />
<br />
===4.94j===<br />
<br />
*new Routiner operation Set Junction Mode (Route) enables the "Act As Junction" option on a portal to be set (1) or reset (0) by the modeller.<br />
This is useful when a portal is a junction in some scenarios and has "capacity" in others.<br />
<br />
===4.94i===<br />
<br />
NEW:<br />
Option to hide the "Print" menubar option (in application mode)<br />
BUGFIX:<br />
Fixed a VERY NASTY and hard to find bug with paint inheritance.<br />
If a hierarchy including base and inherited paint objects was copied AND the "Scope Control Attributes To Parent" option was on AND Paint objects used a visibility control condition AND The parent hierarchy occured after the child hierarchy (in the order of portals in the model) THEN ... the copy hierarchy was left with a stale parent scope pointer.<br />
This would cause a crash if the original hierarchy was subsequently deleted (eg: because the copy was being moved to another model) as the scope pointer is needed during the model merge process (its used to resolve label list references so unused label lists can be purged during the model merge).<br />
I now make sure all child objects have their scoped updated if the parent object experiences a change in its parent (as may happen during the situation above - in the RedirectObjectLinks() handler).<br />
BUGFIX:<br />
Rearrangement to INI attribute list to prevent crash when reloading model.<br />
CHANGE: Track options<br />
These changes are intended to make existing track models work more reliably with the latest track code in previous releases without needing modification.<br />
New track code is being developed but this is not released yet.<br />
*Track system now always runs in "compatability mode" so I've removed the compatability mode modelling option. The new way of capacity testing described in the 4.93 release notes is temporarily disabled - I'm not aware of anyone using it,<br />
*"Act As Junction" and "Route Step Lookthrough" options now both do exactly the same thing. Eventually Route Step Lookthrough will be retired.<br />
This is a temporary hack so existing models are more likely to work with the<br />
===4.94g===<br />
/h enhancements<br />
*Made unblockign a bit more "agressive" (still old style)<br />
CHANGE: Code cleanup (instance object construction) - should not affect users<br />
<br />
===4.94h===<br />
<br />
REWORK: More changes to track Route Step Lookthrough, simplifying the search because unblocking doesn't support it properly yet.<br />
NEW: New system label list _system_colors containing list of indexed system color descriptions<br />
NEW: Routine Operation "Get System Color RGB" the returns the RGB value of the specified system color<br />
These two additions can be used along with "Set Palette Colour" to keep a Planimate interface compliant with the current windows theme.<br />
<br />
===4.94g===<br />
<br />
FIX: Panel Selector tree resizing issue has been fixed.<br />
<br />
===4.94f===<br />
<br />
REWORK: New Route Step Lookthrough method introduced in 4.93 was causing a problem with an RCM. I've changed it to something that seems more sensible and the model seems to run OK now.<br />
<br />
===4.94e===<br />
<br />
NEW: Model Explorer now opens "docked" in a sidebar. The width of the sidebar can be adjusted to allow a persistant "explorer" view.<br />
The default sidebar width is stored in the planimate.ini file SidebarW=200<br />
The sidebar can also be displayed by default using the ini file SidebarStatus={0 / 1} 0 = off, 1 = on<br />
(Those with high enough resolution may want to try these ini settings) SidebarW=200 SidebarStatus=1 StartW=1230<br />
<br />
===4.94d===<br />
<br />
BUGFIX Get palette colour was broken<br />
<br />
===4.94c===<br />
<br />
NEW: Routine editor can be opened from within a breakpoint<br />
NEW: Routine operations "Set Palette Colour" and "Get Palette Colour"<br />
This enables colour palette entries to be directly set. Palette entries are numbered from 0 to 63 (in future this may change) and colour values are a number which encodes RGB as follows:<br />
colour_value = R * G*256 * B*256*256<br />
HEW: Routine operation "Set Item Area String"<br />
This enables the text of the "Item Area" in the status bar (where the item class name appears during editing) to be set.<br />
It may be useful to provide additional status/context information to the user as this field is quite large.<br />
<br />
===4.94b===<br />
<br />
NEW: All help files are now assumed CHM (Html Help). Planimate will load HTML Help upon its first use. If not available (ie: not installed) it will give an error. Versions of windows from Win98 on include HTML help in their default install.<br />
NEW: double clicking label references in the label reference list now opens the table editor and selects the column if the reference is from a column<br />
NEW: Routine operation "Files In Folder" (Label/String)<br />
This enables a modeller to get a list of files in a given directory matching a certain type into a label list.<br />
The target specifies the label list into which matches are appended. (there is no check for duplicates already in the list).<br />
The "Path/File" should be a label specifying the source folder and file filter<br />
eg: c:\windows\*.INI would give all "INI" files in c:\windows<br />
The Path/File string is mapped through the filename mapper (File Name Remapping) as occurs for change object File operations so names may be overidden at runtime using the INI file and "|" can be used to separate multiple fields which are separately overridden<br />
REWORK: Ownership tracking for attrefs in routines reworked to enhance tracking of these. Should not affect anything.<br />
<br />
===4.94a===<br />
<br />
BUGFIX: Months in day validation fix when importing times<br />
(bug from<br />
===4.93m===<br />
)<br />
4.94<br />
*New routine operation: "Enable Editing" (under table) - works on columns<br />
This enables a modeller to control where columns in a table are editable by clicking on them. Useful with dynamically constructed tables or where different access levels control edit access, without having to mess with broadcasts.<br />
*Major rework of code to:<br />
*Safeguards to idicate if a release EXE contains some libraries compiled with debug options on<br />
*make compile with Visual Studio 2003 (VC7) (now builds with 3 compilers)<br />
*Move core code modules into iFlow (TCP/IP, XML, Calendar Time processing)<br />
*Remove memory leaks with idBase<br />
*Prevent idBase updating the menubar when its being browsed<br />
*Rework code using obsolete "streams" functionality (affects TCP/IP, XML and RTF notes)<br />
*Manage windows notifications a bit more orderly<br />
*Experimental:idBase is integrated into Planimate. Its in the menubar for developers. This will be made optional later.<br />
People with an idBase knowledgebase account can put their idclient.xml file into the working directory to simplify login.<br />
(will make it default to the EXE directory in a future release)<br />
= note: new file version but if you dont use the new routine operation then you can edit the MDL and change 419 to 418 and it should be OK in<br />
===4.93l===<br />
<br />
===4.93n===<br />
<br />
*moving of modules to move TCP/IP and XML stuff into iFLow<br />
*rework of old stream code so we can compile with VC7 and other compilers<br />
<br />
===4.93m===<br />
<br />
*** REWORK OF CALENDAR TIME HANDLING ***<br />
*Planimate can now display, input, import &amp; export calendar dates beyond 2035. The current limit for input is 3000 AD<br />
This means long term runs which go beyond 2035 will now display calendar dates without issues.<br />
The file format has not changed from<br />
===4.93l===<br />
so if there are any issues noticed, you can step back to the previous release until I address them.<br />
There are these following limitations:<br />
*The PC clock must be before 2035 AD, if the model uses it.<br />
*Timestamps in key files are limited to 2035<br />
*The Edit Calendar Date Reference and the Run Start Date reference must both be before 2035 AD (ie: the model can "run" past 2035 but it cannot have time "0" as a date beyond about Jan 2035)<br />
These will be addressed in due course and require a change to the MDL format which is why I didn't do them yet.<br />
*Internal cleanup - millisecond handling during time processing<br />
*Internal cleanup - signed and unsigned values being mixed in internal code causing warnings in MSVC<br />
<br />
===4.93l===<br />
<br />
*Fixed a memory leak when a label list is loaded from a dataset file<br />
*Fixed a crash which occured if a portal copied during run contained paint objects which were controlled by portal attributes<br />
<br />
===4.93k===<br />
<br />
*no button effect doesn't disable default ENTER handling of buttons<br />
*report added for model objects, panels and paint label lists. This creates a text file which can be copied/pasted into tables etc.<br />
*table references now include routine code and comment<br />
*fixed bug in opening help files in standalone exes<br />
<br />
===4.93j===<br />
<br />
CHANGE: Significant rework of the paint inherit code re: Copy of all paint objects. Done so paint objects know their inherit owner BEFORE their scope is initialised.<br />
!!! All paint inherit operations (editing and runtime) are affected !!! and must be carefully tested<br />
NEW: Run Engine system attribute "Active Broadcast Index" returns label index of the currently active broadcast or 0 if none active<br />
NEW: Routine operation "Format Title Into Label" - formats the target's title into a label. Implemented for tables and columns.<br />
NEW: The routine logical comparison operators "Equal" and "Not Equal" now will compare 2 entire tables.<br />
If the tables have the same dimensions and the VALUES in the cells match (using the precision limited comparison rules for numbers in PL) then the routine operation returns "1" otherwise "0"<br />
NEW: Settings button in breakpoint dialog enables animation speed and routine stepping (if routine editor visible) to be changed within a breakpoint<br />
<br />
===4.93i===<br />
<br />
NEW: Holding CTRL as the model restarts only prevents the restart if the system is in edit mode. This prevents a user CTRL-T-ing a model and having it enter "engine stopped" state<br />
NEW: Scrollbars have proportional thumbs and a more 3D border style<br />
(Unfortunately I cannot make them respond to mouse scroll events without replacing them with windows scrollbars and rewriting table views to be more like viewports)<br />
BUGFIX: File locks fixed when multi word tags are used<br />
CHANGE: If a table view has "No Block Edit" option on then the "Auto" cell submenu which includes fill and index options is not shown<br />
NEW: Display option "3d Proportional Scrollbars" enables table scroll bars which have a thumb which resizes proportionally to the amount of data in the view.<br />
NEW: Paint buttons have a new option which when selected, will cause that button to be "clicked" if the user presses &lt;ENTER&gt; on that panel<br />
<br />
===4.93h===<br />
<br />
NEW: Ability to map network resources when running under a different account<br />
When /LOGIN is used to run a PL session in a different user account, it causes a new user context to be set up which will not have any of the shared drives of the original account mapped.<br />
PL can now perform this mapping process using an additional command line option: /SHARES=&lt;ini file name&gt;<br />
The file spec specified can be the model INI file (but does not need to be). The file should have a section called [shares] and within that, one or more local drive / network name pairs, both in double quotes.<br />
example:<br />
[shares] "o:" "\\laptop\work1" "p:" "\\pippa\media"<br />
If any of the shares fail to map, PL will give an error and not load.<br />
NEW: Pressing close box on the tree explorer now stays at the destination panel instead of reverting to the original panel<br />
&lt;ESC&gt; key will close and revert to the original panel<br />
<br />
===4.93g===<br />
<br />
NEW: "Retain on paste/replace" table option<br />
This will cause a table in a replaced portal to be "retained". This is achieved by copying the table data, options and column formatting from the original table to the table replacing it.<br />
BUGFIX: The "Advance to time" dialog properly handles redrawing after a large time offset has already been advanced<br />
BUGFIX: When copying data to the clipboard from tables, PL will now allocate and use a file in the user's temp directory rather than the working directory. It also deletes the file as soon as PL is done with it.<br />
NEW: &lt;TAB&gt; is equivalent to &lt;ENTER&gt; for a standalone field such as in a table cell click<br />
BEW Routine operation "Initiate Edit" (under special)<br />
Begins editing of a view (Currently only table cell views)<br />
This routine op requires a panel/portal reference which may be a popup. It will initiate editing of cell views, chosing the view with the lowest non zero "edit order" value.<br />
This acts as if the user clicked upon the field and simulates a form setting initial focus on a field.<br />
The edit occurs while the routine is executing - ie: the current item has not left the change object; the routine is suspended at the line of this routine operation.<br />
<br />
===4.93f===<br />
<br />
NEW: Data sets are now a label list, so they can be referred as labels in a routine rather than just as a number<br />
NEW: System attribute: Owner Of Panel Visible<br />
This returns true (1) if the panel containing the current panel from where the attref is scoped is visible, otherwise it returns "2" for false.<br />
This is useful for event handlers which reside in a subsystem "under" a panel which an end user sees/interacts with. It enables routine code to determine if the subsystem immediately above is visible without requiring object or panel indicies.<br />
<br />
===4.93e===<br />
<br />
NEW: Now support 30 data set files<br />
The "Save All" data set ID is now 31 - any models using "9" to save all must be updated<br />
BUGFIX: Dial display bug in<br />
===4.93d===<br />
fixed<br />
BUGFIX: Management of palette icons cleaned up to prevent bogus load error messages after a standalone exe was created<br />
<br />
===4.93d===<br />
<br />
BUGFIX: Better display of "private" cells<br />
BUGFIX: Cleanup/rewrite of some of the stat/view code to try simplify it a bit<br />
Dials now follow the control attribute for the attribute view. The view can still be separately hidden using its "Make Hidden" option (and recovered using the Edit-&gt;Views menubar option)<br />
NEW: Dials can dynamically change colour of pointer/label text according to an attribute. This attribute has the same scope as the portal attribute or table cell the dial is associated with<br />
<br />
===4.93c===<br />
<br />
BUGFIX: Dataset read and write (routine control) - now will remap filenames that include a '*'<br />
NEW: I'm using locking for dataset file writes and reads (routine only)<br />
During a write, no-one else can open the file for read During read, no-one else can open the file for write<br />
If an "open" (either read or write) fails, it waits 3 seconds and retries, up to 5 times.<br />
IF you need more timeout on your file (ie: takes 20 seconds to read) let me know<br />
<br />
===4.93b===<br />
<br />
BUGFIX: Dragging a portal with run active should now retain its state icon during the drag<br />
NEW: System string attribute to get the current computer's name. Useful for identifying file locks<br />
NEW: File lock management added (change object-&gt;file)<br />
2 new file modes are supported:<br />
"Acquire File Lock" and "Release File Lock"<br />
A file lock is a file that an instance of Planimate keeps open to enable a mutual exclusion (mutex) mechanism to be set up. This is often useful in database applications where you need to lock multiple users from accessing a resource simultaneously. In this case the lock would reside in a shared directory.<br />
(note: The supporting network must support file locking)<br />
Planimate opens/creates a lock file with shared read and exclusive write permissions. This means other instances can read the file but not control it.<br />
The Acquire File Lock operation works as follows:<br />
*The target file (specified directly or via a label) is the lock file. It is suggested that a ".LCK" extention be used. THIS FILE WILL BE OVERWRITTEN so ensure it is not pointing at a data file.<br />
*If present, the first data target will be interpreted as a string and written to the file, as a "tag" to help identify who has the lock.<br />
It may be useful to use the recently added ability to specify a table row here so an informative line containing user name, time and computer name can be written.<br />
*If the lock is successful, the error result target is set to 0, otherwise a non zero error code (see below) is set. If an error occurs, detail of this error is available as a string in the new system attribute "Last Lock File Error". If the error is that another user has the lock, then this attribute will contain the "tag" and should be displayed to the user.<br />
*If acquiring a lock fails, the system will sleep 3 seconds and try again. It will do this 3 times before returning a failure.<br />
*It is valid to acquire a lock on a file multiple times. In this case the lock file is "verified" (against the original tag) to ensure the lock is still valid. A lock can be lost (unknown to PL) if a network outage occurs or the server is rebooted.<br />
*** Hence it is a good idea to verify locks which have been open for a long time at strategic times; eg before starting a data write after an edit session.<br />
*Locks persist when the simulation engine stops/restarts<br />
The Release File Lock operation works as follows:<br />
*The target file specifies the lock file to close. If this file is currently in the known lock list, it is verified that it in fact still has the correct "tag" and the file is closed and deleted.<br />
If verification fails or the file was not originally acquired (or previously went stale and was removed from the lock list), an error code is returned (Stale Lock).<br />
Both lock operations set the "Last File Accessed" system attribute to the actual name of the lock file, mainly to assist in debugging and diagnostics.<br />
The Edit menu contains a new "File Locks" option which will list any current open lock files and their tags. The locks are also verified.<br />
Both lock operations will return status codes from the following table:<br />
0: Indicates the lock was acquired/confirmed or released without problem 1: Failed to acquire a lock; either the lock file is in use by another instance or there is a network problem. More detail is in the "Last Lock File Error" system attribute 2: Attempt to release a lock on a file that this instance did not have a lock registered 3: Stale Lock. This can occur either when reacquiring (verifying) a lock or releasing a lock. It indicates that the lock file is no longer valid perhaps because of a network outage.<br />
It is recommended that lock files do not get kept open "all day" but rather that user interfaces are designed such that a user acquires a lock only when they are ready to make a change. This will help reduce stale locks.<br />
<br />
===4.93a===<br />
<br />
BUGFIX: If the routine editor was positioned off screen by someone with a bigger work area, it gets brought into view when opened.<br />
BUGFIX: Copying a portal between models and CTRL-pasting over another portal in a different model caused a crash. I have resolved this (by not referencing the original portal after the ctrl-paste)<br />
NEW: Columns have a "keep private" option. This will keep the display of the column empty in a view and cause "*"s to be displayed for editing the value/label in a field. It does not affect the popup label list so it should be used with the "Edit Labels In Place" option.<br />
No protection is provided for copying the column into the clipboard<br />
(the option is intended to make password entry possible where you would start with an empty cell)<br />
NEW: Planimate can run in a different user account than the user that launches it. This means Planimate can have access to data which the user cannot access from explorer.<br />
This works as follows:<br />
*The shortcut which launches Planimate needs to include the /LOGIN=filespec command line option, where filespec points to a password file. This file is generated using the ODBC Password Generator EXE (mentioned in release notes for 4.91J)<br />
*The generator EXE is used to create an encrypted file for Planimate containing the username and password of an account on the local machine to use<br />
*If a domain controller is used, the username entered in the password generator can be of the form "user@domain"<br />
*If /LOGIN is user and there is a problem opening the file or verifying the password, an error will be given and Planimate will close<br />
*Under Win2000, the user account which launches Planimate must have SE_TCB_NAME privilege and in some cases SE_CHANGE_NOTIFY_NAME as well<br />
The target account must have SE_LOGON_INTERACTIVE privilege<br />
4.93<br />
TRACK NETWORK CHANGES:<br />
A significant rework of the track rules was made. This was done to resolve situations where an item in a section following a junction following a loop following another loop was preventing movement from the first loop in the chain, due to over zealous lookahead.<br />
By default existing models will have a new Modelling Option "Engine: Older Track Lookahead Method" turned ON. Turn this OFF to activate the new algorithm.<br />
Other Track related changes:<br />
*big cleanup to the lookahead/junction testing mechanism. Junction testing is now separate, done at section testenter time rather than depending on loop CheckNext to invoke it. Should improve "Route Step Lookthrough" with portals.<br />
*Removed the "max track lookahead" control variable<br />
*new System attribute "Doing Track CheckNext Lookahead" and portal option "Handles Lookahead Tests"<br />
---- More Detail -----<br />
These are experimental and should enable advanced track modelling to be performed. The detail below assumes thorough knowledge of the tracks system's operation.<br />
When a track object (eg loop) wants to try move a train to another object, it does 2 tests:<br />
*TestEnter: Checks for capacity at an adjacent object<br />
*CheckNext: Checks further down the track for impending congestion (I often call this Track Lookahead which is different to Planimate item-on-flow lookahead)<br />
By turning on the new portal option "Handles Lookahead Tests" and testing the system attribute "Doing Track CheckNext Lookahead", the modeller can give a controlled response to the CheckNext tests that the track network propagates.<br />
For portals with the option off, Planimate will take default action. If the portals have either of their junction options on, PL will step to the next object along the route (includes intervening loops) and try test that.<br />
Using this flag a modeller can tell the track systme whether a portal is safe to consider moving towards, even if the train is some distance back and not directly "TestEntering".<br />
By directing the incoming train item towards an exit, the portal indicates it is safe to proceed towards it. By directing the incoming train towards a blocked path eg: a guide with no other flow, it indicates not to proceed.<br />
By directing the incoming item towards a portal exit, it indicates that the test should be repeated at the NEXT object along the train's route.<br />
Its important to realise that this path is only "tested" by the lookahead mechanism - an item entering should never actually move along it! That is enabled by testing the system attribute "Doing Track CheckNext Lookahead" using a non blocking switch (so the test is done during lookahead).<br />
This mechanism should only be used with the "older track lookahead' modelling option (provided for compatability of existing models) switched OFF<br />
*Enhanced Track Unblocking debugging. Portal, loop and section menus contain an "unblock" option. This will report why a train is blocked, starting at the first object to report the blockage and working back towards the start of the unblock.<br />
NEW: Routine operation "Create Password Hash"<br />
This (label) routine operation takes the formatted string of 3 attrefs and creates a 32 character hash using the RSA MD5 hashing algorithm.<br />
A modeller can use this to scramble passwords which can then be stored as in label lists without need to obscure them in datasets. This is used as follows:<br />
*Let user enter username/password. The password is stored in a temporary label list as cleartext<br />
*Use this new routine operation to create a hash of the password. This is what gets retained in say a "passwords" label list.<br />
*Clear the temporary label list - so the cleartext password is lost<br />
*When a user "logs in" do the same thing (so you end up with a hash of whatever they typed) then compare the 2 hashed strings<br />
The hash is secure; even if a user knows the hash, they have no easy way to determine which password to use to create the hash that is expected.<br />
HOWEVER... further security is necessary to prevent users "copy pasting" known hashes (eg: their own hash for which they know the password) to a different user (with say different access level) which they want to impersonate.<br />
Hence, to create a secure hash, the 3 fields of this routine operation should be used as follows:<br />
Field 1 should be set to the username. The modeller should retain this separately (in cleartext) Field 2 should be set to the entered cleartext password, which the modeller then discards (as described above) field 3 should be set to a "secret" application/version/zone specific name or string. This string should not appear in datasets, panels or be guessable.<br />
The reason for this is described below.<br />
Using all 3 fields to generate the hash prevents a user copying their hash over a different user and logging in as them using their own password.<br />
The third field is useful to prevent a diligent hacker from using their username/password/hash to hack another application which uses this mechanism but they have no rights to access.<br />
NEW The Format Into Label routine operation has been enhanced.<br />
If the source is a table ROW specification, then the contents of the cells in that row will be appended together to form a label.<br />
This is very useful in constructing say file names and paths. No delimiters are added between the columns but a modeller can dedicate certain columns to being delimiters. This gives maximum flexibility in how the cells get "packed" together.<br />
The 63 character label string limit does apply so be careful in your design.<br />
NEW: File name remapping (as used in model INI files to map internal file names to external file names/paths) has been enhanced.<br />
One or more vertical bar (pipe symbol "|") can be used to separate parts of a file name so they are remapped separately. So a file name like "theroot|thefolder|thename.dat" can be used with "theroot" and "thefolder" being separately remappable.<br />
The text following the last '|' is not remapped, however it is OK to use "theroot|thefolder|thename.dat|" to make it all remappable.<br />
NEW: Ctrl-A can be used while paused (developers only) to cause the engine to advance/process ONE FEC event only. This will be even more useful when I add a rolling FEC display window ....<br />
After this event then engine returns to paused (even if other zero time events are pending. Pause/continue BCs are not sent for this key.<br />
NEW: Items ignore clicks if the shift key is down. This enables a modeller to click on objects under the items.<br />
BUGFIX:A warning is given if a portal is copied between models and the calendar time references for the portal and the new model's differ (potentially scrambling any dates inside hte portal)<br />
BUGFIX:Fixed model merging issues with scoped item classes being looked up as "global" when they should not have been (causing bogus merging to occur)<br />
BUGFIX:Fixed issues with references to scoped classes being saved by name not by ordinal (class attribute references) causing possible incorrect loading if scoped classes had same name as global classes<br />
NOTE:Class label list name lookup and socket broadcast&lt;-&gt;class mappings are only supported for global classes<br />
BUGFIX: Rewrite and cleanup startup code; fix standalone key bug<br />
BUGFIX: Alignment of field and combo LHS was out by 1 pixel This is inherent in Windows and I've put in an adjustment for fields to compensate<br />
BUGFIX: Label lists, Sub Label Lists and Multi Labels were not being properly updated when copied to a different model. If an attempt to edit them was made without the model having been saved/reloaded, a crash would occur<br />
BUGFIX: Panel selector and Dynamic panel selectors were swapped about<br />
<br />
===4.92h===<br />
<br />
BUGFIX: "Find" would crash if trying to locate a table column. It now brings the owning dynamic panel to the front.<br />
NEW: Private item attribute option<br />
These are relevant to class mapping. If a subsystem contains a class with private item attributes, these attributes are not set or returned to the "external' item class which is being mapping into or out of the subsystem.<br />
BUGFIX: Fixed comment display in attribute listing dialog<br />
BUGFIX: Table comments are now included in model report<br />
NEW: Implemented tupling across classes when mapping classes into and outof a portal. This applies to both item attributes and item table references.<br />
Matching names get mapped unless the INTERNAL item class has the "private" option set for the attribute/table reference.<br />
A new "Report" button in the class mapping overview will display a summary of the attributes/table references that the internal class is allowing to be tupled and indicating which ones are actually matched by the external class.<br />
BUGFIX: Data set file name browsers (menubar and routine generated) now use any extention provided in the filespec as a default for any new filenames typed in without extentions rather than defaulting back to ".SCN"<br />
BUGFIX: The "default" dataset name used when loading a dataset using the menubar is now set to the first used dataset's default filespec and extention, rather than defaulting to an SCN file IF a data set has not yet been saved in that PL session.<br />
This will make life easier for users if the modeller is not using the ".SCN" extention in their datasets and the menubar dataset load/ save options are being used<br />
NEH: The file browser shows the file type instead of just putting "Selected Files" in the file type dropdown<br />
BUGFIX: More careful about locking out the model explorer browser when stuff is happening where a panel change is undesirable (eg: positioning an object, editing a note)<br />
BUGFIX: Item Table references now get renamed when the item table ref in a class is renamed<br />
BUGFIX: Item table references also merge when 2 item classes are merged during a paste<br />
BUGFIX: Using SET with 2 tables should now completely copy a table if the target table is totally empty (no rows, no columns)<br />
Also should work if the target table has the right # of columns but no rows<br />
NEW: The "Round to N" operation is now useable for entire columns as well as individual numbers<br />
NEW: When naming a subroutine in a call, there is now a dropdown to select existing routines from<br />
BUGFIX: Fixed bad code in the "redirect" of object labels when a portal is copied (from<br />
===4.92e===<br />
). Might work properly now :)<br />
NEW: Now "redirect" panel and paint object labels when a portal is copied<br />
BUGFIX: Copying lines from subroutine will now copy the parent routine's attributes and offer to include them when pasting, just as occurs when copying lines in a parnet routine.<br />
NEW: After routine lines are pasted and PL has asked and copied parent routine attributes, it now offers to do a purge of unreferenced routine attributes.<br />
NEW: Now use a hierarchy selector for the selection of panels as button targets, inherit bases etc<br />
<br />
===4.92g===<br />
<br />
BUGFIX: Paint objects &amp; Control Attribute Scope<br />
Another related issue fixed - was not re-initialising paint objects which were run-time inherited, causing their attrefs to fail.<br />
Also was not re-ionitialised temporary copy paint objects created during the run as part of the inheritance update process<br />
<br />
===4.92f===<br />
<br />
BUGFIX: Paint objects &amp; Control Attribute Scope<br />
An internal update is performed after a change to a paint object's options by the copy properties operation. This should fix scoping issues<br />
<br />
===4.92e===<br />
<br />
For testing<br />
*NEW: Paint objects have a new option "Scope Control Attribute To Parent"<br />
When this option is set, the visibility control and state control attributes (where present) for the paint object will be looked up using the scope of the parent object of an object instead of the scope of the paint object itself.<br />
This means that paint objects throughout a model can share a control attribute located in scope of their ancestor object without the control attribute having to be in scope of every paint object in the model that wants to use it.<br />
*NEW: Object label "redirection"<br />
When a portal is copy/pasted, the platform will now update any object references (ie: object label list labels) within the portal to point to the copies of the reference. This will help keep copied portals intact when they reference objects within themselves using labels.<br />
This will also work when a portal is copied to another modem, however it is known that the object label names chosen may not match the object name when it gets pasted, particularly for the "top level" portal; something to be aware of.<br />
*BUGFIX: Copy pasting between models was broken when references to the class label list were used (and maybe in other cases) as the platform was not properly handling a structure being "unavailable' during the copy/paste process<br />
*cleaned up object label list to make it directly store SimObjects. This removed a lot of old testing and error handling code<br />
*rewrote way that attrefs are "scanned" for updates, initialisation etc<br />
<br />
===4.92d===<br />
<br />
*BUGFIX<br />
Spatial links, pipes and shared routines were broken in<br />
===4.92c===<br />
<br />
*SPEEDUP: Setting attrefs now faster as the "is it writeable" test has been sped up<br />
*SPEEDUP: Comment lines are skipped in the routine handling code which should speed up models with many comment lines/separators<br />
<br />
===4.92c===<br />
<br />
*REWRITE<br />
No visible new features in this release and file format hasn't changed since<br />
===4.91l===<br />
<br />
Rewrote AttRef code - there is now a distinction between the "data scope" that an attref has data access to and the "owning scope" within which it exists. Now make use of the structures introduced for scoped label lists.<br />
Included rework of:<br />
*all routine operations<br />
*special operations such as search,conditions,multiconditions<br />
*simulation objects like multiserver, pipes, spatial links, trays<br />
*paint objects (visibility, state control)<br />
*views (visibility)<br />
Each Attref will now use 8 bytes of memory more (additional caching)<br />
I've optimised the code so constant-during-run attrefs and normal table references should be noticeably faster.<br />
The rewritten code will enable better copy/paste and more scoping options to be considered.<br />
<br />
===4.92b===<br />
<br />
*BUGFIX: Wait for broadcast dispatcher option fixed:<br />
The item would wait forever if ALL broadcasts were processed in 0 time<br />
*BUGFIX: fixed bug in resizing boxes with mouse introduced with<br />
===4.92a===<br />
<br />
<br />
===4.92a===<br />
<br />
*BUGFIX: reworked object hierarchy to make it possible to directly report which paint object causes an attribute referencing error and to properly highlight objects if they are not on the current screen<br />
Known bug - if a paint object causes a referencing error as the result of a force repaint, the paint object will be identified and the routine name/line of the calling routine will be shown but not the object containing the routine.<br />
*BUGFIX: When an paint object is set to another paint object using the copy paint properties routine operation, objects which inherit from the object being updated will also get updated with the *changes* that the target object experienced.<br />
*BUGFIX: table editor crash when trying to edit a column which was referring to a label list which had become out of scope<br />
*NEW: Pressing an arrow key while dragging an object switches to keyboard movement mode (so you can let go the mouse button and continue moving the object with the keyboard.<br />
Capslock should be off so the keypad can be used. &lt;ENTER&gt; accepts or &lt;ESC&gt; cancels. Co-ords are displayed in the titlebar<br />
*NEW: Pressing keypad "-" enables the co-ords of the currently dragged object to be entered numerically<br />
Co-ordinates are specified using the planimate canvas co-ordinate system (0,0) is at the lower left of the panel area<br />
If a resize is active, the width/height of the object can also be changed<br />
4.92<br />
This is a first release of significant new functionality in Planimate for initial testing.<br />
SCOPED ITEM CLASSES AND CLASS MAPPING<br />
These are a key part of the Version 5 we are moving towards.<br />
Scoped Item Classes: -------------------<br />
*Item classes can be scoped to a portal (currently in item class edit menu)<br />
*This means that their flows can only exist in the scope of that portal<br />
*This keeps the portal self contained. Copying the portal will create a separete item class for the copy and the 2 will be isolated from each other<br />
*Scoped item classes will have access to scoped label lists (which global item classes do not) encouriging the modularity further<br />
Class Mapping: ------------- The idea here is to provide a mechanism where a module (a portal) can be pasted into a model, carrying with it not just attributes and tables but also label lists and item classes (with their attributes) which it uses internally. The goal is that the module can be pasted (singly or multiply) into another model without any of its internal code interfering with existing model code, or with multiple instances of itself.<br />
Scoped item classes are an important part of this as even if common global class names were somehow agreed upon, different modules would need different attributes and use the same named attribute differently. By scoping, this usage is kept local and isolated.<br />
To work within an existing model, a mechanism is required to "map" the existing, outside or "external" classes in a model to the private, local or "internal" classes in the module being pasted in. This is provided by the "Class Mapper" and is a new option in the edit menu for a Portal.<br />
The class mapper specifies how external classes are mapped to internal classes in the module as items enter (and also the reverse when items leave the module)<br />
Items can enter a portal in the following ways:<br />
1. via flows 2. via a apatial link/track 3. messaging to the portal 4. via a broadcast 5. via a wormhole 6. via a throw<br />
Methods 1 and 2 are currently mapped by the class mapper. As the item enters portal it gets "translated" to an internal item for the portal. As it leaves, it gets translated back to the external item.<br />
Method 3 will be in a later release. 4 should already occur due to the existing broadcast mechanism for class translation (see below though).<br />
5 and 6 wont be supported for modules as they are not modular by nature.<br />
The translation process involes copying matching item attributes (see below) as occurs in "tupling" with tables and between different item classes.<br />
An external item survives while an internal item is inside a portal where a mapping has occurred. It gets put "aside" until the item leaves the portal whereupon its attributes are updated.<br />
This whole process works both in lookahead (looking into the module/portal to determine if it has capacity, the module looking "out" to see if there is capacity for an item that wants to leave) and "lookthrough" (looking right through a module with no capacity to see if what is on the other side has capacity for an item to move.<br />
It should also work recursively (modules inside modules). It has been challenging to ensure the mappings undo changes to the item attributes during the lookahead process at both incoming and outgoing interfaces and this needs testing.<br />
Upcoming enhancements/fixes<br />
*At the moment, all item attributes with matching names are copied when translating external to internal and coming out again. This can expose what should be "private" attributes within the module so a "keep private" item attribute option is planned to enable the module builder to specify exactly which item attributes feed in/out of the module<br />
*A report of the class mappings and matching attributes which a given module will transfer. This report will help document the "API" of the module and help ensure that all expected attributes are properly defined in the external scope<br />
*Carried items to be transferred between the external and internal items on the way in/out<br />
*The ability for a module to produce an item without one entering and the class mapping to properly occur as the item leaves the module<br />
*Table references to be treated similar to item attributes as described above<br />
*If a class is mapped, the module is not able to assign routes/link targets for the external item. A mechanism to enable this needs to be developed (though this raises the issue - how does the module know about the external network)<br />
*A mechanism to "insulate" modules from scoped broadcasts is intended. This will prevent a module having its internals activated by modeller broadcasts in the model it is pasted into unless those broadcasts are specifically targetted at it.<br />
*Get the actual inter-model pasting working smoothly<br />
This mechanism will slightly slow down items entering and leaving a portal even if scoped classes are not used. I can probably optimise this if it has a great impact. As far as I know existing models that dont use scoped classes should not be affected (run wise) by the new mechanism and I'd appreciate testing to confirm that this is the case.<br />
<br />
===4.91m===<br />
<br />
*BUGFIX: "Full Edit Menu With BC" also applies to the table's row select menu - ie: makes it available when cell click broadcasts are being sent.<br />
<br />
===4.91l===<br />
<br />
*NEW: Table view option "Full Edit Menu With BCs"<br />
This shows the full editing context menu when a table cell is right clicked even if an edit broadcast is being sent.<br />
This option is automatically turned on for models saved with<br />
===4.91k===<br />
AND the "Dont Defer BC on FEC" option on, since the intention of the latter option is to enable BCs to be sent on edit whilst retaining full editing of the table under modeller control, with the context menu retaining all its options.<br />
<br />
===4.91k===<br />
<br />
*NEW: new system (display) attribute "Enable Table Cell Edit"<br />
This enables the modeller to decide whether a cell edit should occur whne a table cell is clicked, using the cell click broadcast.<br />
If the model sets this attribute nonzero while processing a table cell click broadcast (before edit) then the edit will actually occur. If this attribute is not set, the edit will not occur (as is current).<br />
This attribute is reset to 0 before each cell click broadcast gets sent.<br />
It is only valid to set/read this attribute in the initial thread of a cell click broadcast.<br />
For this feature to work, the table view option "Dont Defer BC on FEC" must be enabled. This forces PL to send the BC immediately rather than waiting until a "safer" time. With this option "on" the modeller MUST NOT close the panel containing the table view as a result of the cell click broadcast, otherwise the platform will crash.<br />
*BUGFIX: panel window reading now returns correct co-ordinates (client based) for child windows<br />
*BUGFIX: Popup windows can now be closed using the close box while the model is running<br />
<br />
===4.91j===<br />
<br />
* New file format, save and reload models with this version before proceeding to use it<br />
*NEW: ODBC data source Username and Passwords These can optionally be read from an external file. This file is scrambled and generated by a small separate executable.<br />
To use the external file, in the username and password fields preceed the filename with an "@" and append an "|1" for the username field and "|2" for the password field.<br />
eg: for username you might have @mypassfile.dat|1<br />
The filename can be remapped in the model's INI file as is possible with other files referenced in Planimate. This enables the end user to keep the exact path of the file out of the model/standalone EXE.<br />
*NEW Added YYYYMMDD time mode<br />
*NEW debugging - animation speed can be changed from the background run menu<br />
*NEW routine operations under "Display" PanelWindowLeft, PanelWindowTop<br />
Return the co-ordinates (windows screen co-ords, top left of window is origin) of the given panel (if its visible).<br />
This can be used to re-open the panel at the position when it gets hidden.<br />
If the panel is not visible (-1.-1) is returned.<br />
*BUGFIX: sensor entries correctly reported if there is an attribute reference error (eg: table row error) in their reference<br />
*BUGFIX:draggable popups are now also draggable when PL is paused<br />
*BUGFIX: attribute editor handles selection of a different label list without having to change mode back to values first<br />
*BUGFIX: sub-routine editor edits parent routine attributes when attributes is selected from the menu (subroutines should not have their own attributes)<br />
*BUGFIX: Paint buttons<br />
*if dynamically sizing to text and have a bitmap set, the border is determined before drawing the bitmap<br />
*tooltip is registered after rectangle has been updated not before<br />
*background colour (if set) is shown before background image and the border (if set) is shown after<br />
This means that buttons can be used with transparent bitmaps and a background colour instead of the background colour being 'hard coded' into the bitmap (which caused problems if the background colour in the bitmap was (0xBC,0xBC,0xBC as this is the transparent colour)<br />
*mouse down state image is properly shown when the engine is running (backing store is in use)<br />
*BUGFIX: Routine attribute dropdown updated after a line is edited (in case routine attributes were added)<br />
*BUGFIX: File loading had a leak if an attempt was made to load a model which was older or newer than supported, and it did not properly clear the database cache if a model load failed to occur.<br />
*CHANGE: rewrote item interaction saving to support multiple classes with the same name (to support scoping)<br />
*CHANGE/BUGFIX: scope of control attribute for views is now the same as the scope of the data for the view, rather than the scope of where the view is located.<br />
*SPEEDUP sped up/inlined counting of items as they enter/leave objects<br />
<br />
===4.91i===<br />
<br />
*properly check whether to send BC on a row append in an empty table view (if a user appended a row to an empty table, could cause crash)<br />
*panel link checks if in edit mode for popups as well as normal panel links.<br />
The message to "add a link now" indicates that it wont be inherited (doing an inherit at "click" time isn't supported by the framework).<br />
*edit -&gt; label list can be selected when viewing a panel (uses the dynamic scope of the panel being viewed)<br />
*creating new label lists now has handling for selecting global or local scope rather than defaulting to local scope (new checkbox)<br />
*label lists can be moved to a different scope<br />
*scope added to item classes (not fully implemented yet, dont use)<br />
*PLANIMAT.INI file only gets read once when Planimate starts up<br />
*Added INI file items for the object palette posistion and icon size.<br />
ObjPalCellLimit sets the icon size, if 0 the default (currently 32) is used.<br />
*New display option "Edit: Include scope for portal atts" will include the owning portal name in portal attribute references in routines (if avail)<br />
*Have renamed the options in the "display options" dialog to try get some order in there and the picker lists are kept sorted.<br />
*Attribute display popup (debugging) is wider<br />
*The run background menu contains a new option if a routine window is open and a routine is being stepped through, "Change Stepping Interval"<br />
This enables the stepping speed to be altered as the routine executes.<br />
The setting made here is specific to the currently active routine window and will remain in place for that window until that routine window is closed. (ie:the INI default is used when the routine editor window is reopened)<br />
*extra internal debug checking during ocpy/paste, proper checks to handle copy/paste of label lists between models. If any new "system error" type messages appear, the debugging has caught something that was slipping through before.<br />
*display and debug menus, Display Options now renamed Modelling Options<br />
<br />
===4.91h===<br />
<br />
*The popupmenu code no longer locks screen redraws while a menu is being tracked. This will prevent the blank screen during routine type selection<br />
*paint buttons have a new option on each state: "Mouse Down State"<br />
If a state of the button has this option set, then instead of changing the border style when the button is moused in, the button will switch to this state instead.<br />
This gives the modeller more flexibilty in how the button looks when the user actually clicks in it.<br />
*Panels have a popup option enabling them to be draggable at runtime from any position IF they dont have a normal dragbar and the click is not on any button.<br />
If the panel "Palette Style" popup option is also set, the window will be a popup rather than a child of the main window as is the default for windows without a titlebar.<br />
This option is useful for creating "remote control" type panels.<br />
*Attribute and Cell Views have a new option "Broadcast to View's Scope"<br />
This causes view edit broadcasts to be scoped to the scope of the closest dynamic panel to the view rather than the scope of the attribute which owns the view.<br />
*4.33 version Entries in scheduled arrival mode with a loop point set now get a very large "end time" set to prevent them from "drying up"<br />
*Scheduled entries which have no outgoing flow no longer stop the run with an error<br />
*New _!System.DB included with the proper planimate logo BMP therein<br />
<br />
===4.91g===<br />
<br />
*Added extra handling in the switch loader so old switches which contained a time schedule (even if they were not using it anymore) can be read without errors<br />
<br />
===4.91f===<br />
<br />
*search window wider to accomodate wider attribute names<br />
*changed way tables are brought up to date after a routine operation so scroll broadcast processing does not cause IFTableVoid errors (as for<br />
===4.33o===<br />
)<br />
*bugs with change object icon defaults fixed<br />
*fixed a very long standing bug: If icon selection palette was moved (or a redraw was required of the main window) after the last instance of an icon in the model was changed to another icon, the redraw would cause a crash<br />
*routine options dialog z-order fixed<br />
*new object palette icons<br />
Mattias has provided some nice new icons and buttons for the object palette.<br />
(time to leave 16 colour land)<br />
*** You will need to start using the _!SYSTEM.DB provided with this EXE ***<br />
<br />
===4.91e===<br />
<br />
*more work on scheduled entry reading when loading 4.33 models<br />
*fixed bug with INI file RoutineFormatW note: this value sets the size of the formatting area to format into (in characters) for each routine line<br />
<br />
===4.91d===<br />
<br />
*Scheduled entries should now be a bit more compatible with older version entries when loading 4.33 models. If on a periodic arrival a "loop" point was set, then the item limit is now set to "infinite" (-1) so the entry wont "dry up" after one item.<br />
*The modeller can set the minimum formatting width for the routine editor's display of routine lines in the INI file<br />
[Routine] RoutineFormatW = xxx<br />
Run this version to create the default entry (0) in your INI file.<br />
*Items inspected in breakpoints always have details and attribute displayed<br />
*Label lists have an option to not clear the list when it gets imported from a file<br />
*a forced repaint is done before a breakpoint dialog is shown<br />
*swapped name and scope columns in in scope/name lists so the name gets selected not the scope<br />
<br />
===4.91c===<br />
<br />
*fixed table column bug (tables referencing label lists caused a crash when Planimate lost focus and transferred the data to the system clipboard because the copy table didn't have an "owner" to determine its scope from)<br />
*side effect of above fix: when a panel/portal is deleted, any table in the copy/paste buffer is deleted.<br />
<br />
===4.91b===<br />
<br />
*entries in single event time mode now "start" properly if a delayed schedule entry start is used<br />
*fixed a bug in the distribution pattern dialog editor if it was cancelled<br />
*Have reworked code so sections and loops "know" their connecting objects rather than having to fetch them from a table. This will speed track networks up.<br />
*This version will now read 4.33 models which still contain object stats (it quietly eats the stats) so they dont need to be removed.<br />
New Track Options (from<br />
===4.33m===<br />
):<br />
*New track section type "Double (Other Road On Closure)"<br />
Works like No Overtake except if a road is closed, then the train may used the other road if its available<br />
*Loop Option "No Following Trains" has been split up into "No Following Trains (Forward)" and "No Following Trains (Reverse)"<br />
This enables a loop to act as a junction in one direction and a signal (allowing following trains) in the other.<br />
<br />
===4.91a===<br />
<br />
*wider fields in condition and decision dialogs to support the longer attribute names<br />
*palette has bigger cells and hover labels; partial progress towards new palette design<br />
4.91<br />
*The width of names has been increased to 32 characters<br />
This applies to:<br />
o Planimate Modelling Objects o Label, Sublabel, Multi label (the list names, not the labels .... yet) o Attributes (Portal, Item, Routine) o Item class Names o Table names o Column tuple name o Route names o Routine/subroutine names<br />
PL now stores these names in fixed arrays rather than dynamic strings so models will use more memory but incur less fragmentation of RAM.<br />
*Updates to handle the longer names include:<br />
*status bar now resizes according to width so it can fit long class names<br />
*splitter editor, item class editor, item class selector<br />
*Attribute reference formatting field is wider<br />
*Routine editor field trimming<br />
*double clicking on a splitter edits interaction for first class entering it<br />
*Tables, Attribute and (new) Label List browsers use more common code and include a "scope" column.<br />
(Edit -&gt; Label lists will enable view/selection of all label lists in scope)<br />
*Routine Editor: Have reworked the field trimming code for each routine line, so now more of the attributes in a routine line will be shown if the space is available.<br />
*available width updates as the window is resized<br />
*longer attrefs will be trimmed proportionally more than shorter attrefs<br />
*A number of objects/structures have been coalesced to reduce memory allocations, fragmentation and increase speed.<br />
*this includes significant recoding of:<br />
*Entry, Exit, Change (Icon), Dispatcher, Queue, Multiserver, Splitter<br />
*Table (tuple cache), Table and column dependency lists,<br />
*Routine Loading<br />
*Conditions and decisions<br />
*Cleanups to the attribute/table/label managers to commonise code and remove lookups that are no longer needed (due to new scope code)<br />
*Rework item code for speedup and allocations<br />
*items that are "destroyed" in an exit are kept in a cache for quick re-use. This cache has been extended so<br />
*if the item was carrying items, the "carry list" is retained if the item doesn't change class.<br />
This means if only a few instances of an item class every carry items, and there are many other instances of that same class which dont, then its best to either:<br />
*not destroy the "carrier" items, re-use them OR<br />
*make the carrier items a different item classes.<br />
*if the class of the re-used item hasn't changed, internal tables used to store attributes and item-tables are kept allocated<br />
*A structure used for info panels was being allocated for all items if any item attributes were set for info panel display.<br />
This structure is now only allocated if the item is actually made visible with the Show Info Panel option "on".<br />
*the item's code has been "inlined" much more giving more speed<br />
*Table title width has been increased and the create/edit fields are now consistent for the maximum length they allow<br />
*Sped up and reduce memory of label references:<br />
The new "scoped labels" meant references to these (millions in large models) were both too slow and using more memory.<br />
I've reduced memory usage where the reference isn't referring to a label (eg: its a constant scalar or attribute)<br />
I've increased speed by added a cache during runtime.<br />
*Fixed a big bug introduced in<br />
===4.90a===<br />
which caused run performance to gradually degrade. Blocking switches were mismanaging an internal cache causing a memory and speed leak as the cache list grew<br />
*The loading of many objects has been reviewed and optimisations/cleanups done to reduce unnecessary allocation/copying during the loading process.<br />
This will result in faster loading and less memory fragmentation.<br />
*clean up to table row name handling (sloppy when first non empty row label was added or loaded)<br />
*Run profile shows more internal model metrics which come in useful when determining where the memory is going.<br />
*sped up checking for user breaking out of an iteration/search<br />
*speed up: The simulation clock is now a faster-to-access global variable<br />
*sped up condition/comparison code (separating comparison and logical tests, integer only for logical tests), inlining, rework the double comparison code to avoid wasted evaluation in doing a "max()"<br />
*Distribution Pattern dialogs had to be reworked to be compatible with scope and still be efficient when a distribution was not actually being used<br />
--------------<br />
* Cleanups to supporting scoped label lists.<br />
Still to be done:<br />
*Saving/Loading scoped label lists from data sets<br />
*Migrating lists between levels<br />
*Handling "Put into subsystem" for top level lists (they stay at the top)<br />
*Creating label lists on the fly located in a portal<br />
notes:<br />
As models get bigger, the number of allocated memory blocks causes performance problems in the memory allocation system. Planimate deals with this in several ways including unused event and item caches, coalescing as much as possible into tables and using "contained" objects rather than pointers to allocated objects.<br />
The challenge is to trade off<br />
*a linear increase in memory usage vs<br />
*an exponential slow down in memory manager performance due to the increaing number of objects.<br />
<br />
===4.90b===<br />
2<br />
fixed bug - copied splitters lost their split information<br />
<br />
===4.90b===<br />
(built with MSVC++6.0)<br />
This versions adds support for scoped label lists (like attributes/tables).<br />
The menubar "Edit-&gt;Labels" continues to contain existing label lists (global) which will remain global (for now).<br />
A portal/portal entry will have a "Labels" option to enable a label list to be created within that subsystem.<br />
Scoped label lists will "osbsure" any label lists further up (or global) with the same name, as for attributes and tables.<br />
To be added:<br />
*migrating label lists between levels in a hierarchy<br />
*ability to create "global" label lists which will automatically become scoped when the top level model is "put into a subsystem"<br />
*inspecting/editing label lists in the current scope via the edit menu.<br />
This release involved significant rewrites. It's been tested with some of our recent and biggest models so loading/runtime seems OK. I've not tested editing very much.<br />
NOTE:<br />
I'm expecting modellers should be able to migrate to using this series if their model loads and runs OK. Feedback that it is robust is essential as I diverge away from 4.33<br />
*Distribution pattern<br />
Removed lots of old code for setting units/format which was not being used but was causing a lot of interaction between distributions and the label list code<br />
*Cleaned up the editing of units/labels in the code, only done in one place now using a consistent data structure<br />
*rewrote all code pathways which involve label list references to include a "scope" which is the dynamic panel from which the reference originates.<br />
This will enable scoped label lists just as we have scoped attributes and tables.<br />
The change was significant and any code involving label lists must be watched carefully, particularly when scoped label lists actually start being used (rather than only the global ones as current).<br />
Sub/Mult label lists have been enhanced to support a parent label list which is scoped. This means a subsystem using a private sub label list coukd be moved to a different place where a different parent list is in scope and the sub label list would now work with this instead.<br />
*reworked the way objects are used which makes the model database smaller and faster (contained tables rather than a pointer to allocated tables)<br />
*model merge: no longer purge unused label lists from the copied object during the merge. Eventually this will be done in a "create module" operation.<br />
*label list merging no longer gives option to create a new unique list. If a list needs to remain "unique" then a scoped list (private to the module) would be used.<br />
<br />
===4.90a===<br />
<br />
*fixes loading of models with non scheduled entries<br />
*has the vertical scrollbar fix as in<br />
===4.33l===<br />
<br />
===4.90===<br />
This is Planimate<br />
===4.33j===<br />
/k with old code/obsolete code removed. Some of the remaining objects have been significantly changed. Warning are given about incompatability but "where" is not always shown.<br />
Notwithstanding this, a few recent models I've tried do load.<br />
This version will only read models saved under Planimate<br />
===4.33i===<br />
or later.<br />
*REMOVED Single Server, Conveyor, Faciltiy, Mark, Record, Assembler<br />
*REMOVED the log viewer<br />
*REMOVED the logging system (wrote files for the log viewer)<br />
*REMOVED object stats/views. [Any model containing these will not load]<br />
*REMOVED "Global" Time Schedule support and<br />
*REMOVED Attribute references to global schedules<br />
*REMOVED Switch in schedule mode<br />
*REMOVED Multiserver reference to schedules [Any model containing these will not load]<br />
*REMOVED changling a class at a change object includes item's "Original class" tracking<br />
*Collapseed and streamlined internal object tables in Planimate, removed all supporting code for the above. Platform should be faster and smaller.<br />
*REWROTE TCP/IP support (sockets, URL processing) rewritten to use latest TCP/IP modules which I developed for idBase, enabling merging.<br />
*REWROTE Entry Object (Schedule Mode handling):<br />
*Removed support for multiple classes in schedule mode (first class leaving is now used)<br />
*Removed multi-line schedule mode. Just a single schedule mode "line" now and it gets edited on Object mode<br />
*Shortcut: double click on Entry now edits its details (the item production details, selects broadcast).<br />
*Converted "Schedule" mode into 2 new modes:<br />
"Periodic Arrivals" Produces items between a "Start Time" and an "End Time" with the item IAT and the item limit count being specifiable from a distribution.<br />
Only single items per IAT, no batches produced anymore. Use a splitter if a batch is required.<br />
Make sure entries in "Periodic Arrivals" mode do not become blocked. Future verisons will complain about this.<br />
"Single Time Arrival" Enables one or a batch of items to be produced at a single time.<br />
A time and item count can be specified.<br />
[old versions are mapped as much as possible to the new entry modes]<br />
*REWROTE Switch Object<br />
REMOVED - switch interactions:<br />
*attribute selection mode no longer has flow specific remapping, flows are mapped numerically 0 = block, 1 = lowest path etc.<br />
*distrubtion seleciton mode now always distributes evenly, no flow specific probabilities.<br />
*priority selection, absolute path removed<br />
*runtime code completely cleaned up and much more efficient<br />
*BUGFIX - cyclic selection for assume no blocking switches started at the second path leaving the switch instead of the first<br />
*Remaining switch modes: First Available: Chooses first flow which is not blocked Random Choice From Available Path: Randomly chooses between all available paths Shortest Queue Chooses the first shortest queue (or queue with empty object following) Sequential Cycles between all paths, whether available or blocked Attribute Attribute indexes which path to take Condition Single condition selects go/no go (or take second path) Multiple Condition Uses a ocndition table to determine which path to take<br />
<br />
[[Category:Release Note]]</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Planimate_4.x_Release_Notes&diff=4222ReleaseNotes:Planimate 4.x Release Notes2021-07-06T03:06:39Z<p>Rick: Created page with "===4.33q=== *recent list in file menu properly updated after a load<br /> ===4.33p=== *fixes a crash caused by appending a row to an empty table from the table view row men..."</p>
<hr />
<div>===4.33q===<br />
<br />
*recent list in file menu properly updated after a load<br /><br />
<br />
===4.33p===<br />
<br />
*fixes a crash caused by appending a row to an empty table from the table view row menu<br /><br />
(The code was not properly testing if a broadcast should be sent )<br /><br />
<br />
===4.33o===<br />
<br />
*The bugfix in n for the scroll BC was worse than the original bug so this release fixes the original problem in a different way<br /><br /><br />
<br />
===4.33n===<br />
<br />
*table scroll BCs no longer generate strange IFTableVoid errors<br />
*Fixed long standing redraw bug in icon selection (icon cache) if the icon being selected was the only instance of the icon in the model<br /><br />
<br />
===4.33m===<br />
<br /><br />
New Track Options:<br />
*New track section type "Double (Other Road On Closure)"<br /><br />
Works like No Overtake except if a road is closed, then the train may used the other road if its available<br />
*Loop Option "No Following Trains" has been split up into "No Following Trains (Forward)" and "No Following Trains (Reverse)"<br /><br />
This enables a loop to act as a junction in one direction and a signal (allowing following trains) in the other.<br /><br />
WARNING: The models saved by this version require Planimate<br />
===4.91b===<br />
if you are also testing the "Version 5" pre releases.<br /><br />
<br />
===4.33l===<br />
<br />
*If a GANTT had the option for the vertical scroller on but id didn't actually need it (eg: # of rows in te view &gt; # of labels) then a division by zero was getting into some co-ordinate calculations causing Very Bad Things to happen when the scroller was refreshed.<br /><br />
Different video hardware would probably respond differently to the bad co-ordinates passed.<br />
*increased model version # which should have been done in<br />
===4.33k===<br />
due to the new operations added.<br /><br />
<br />
===4.33k===<br />
<br />
*Pipe animmation works properly when items travel in the reverse direction on the pipe.<br /><br />
Use the pipe control attributes to reverse the activity animation as appropriate.<br />
*Format Into Label and Find Label Index now work for column and table targets<br />
*Allowable width for attribute views increased<br />
*File change object has a new menu option "Delete Resource".<br /><br />
Its intended to be used to "clear out" RTF notes.<br /><br />
This will remove the specified item from the runtime database (if set up) otherwise the model database is used (if available, not for a standalone EXE).<br /><br />
If the name does not include an extension, "RTF" is assumed.<br />
*new routine operation to set background colour of a panel (under display submenu)<br />
*bugfix: Due to support for "blocked" spatial links in<br />
===4.32j===<br />
, a bug was introduced that caused PL to crash if NO spatial link leading to a target portal was found.<br /><br />
I've changed it to just "block" the item that cannot find a destination, as occurs with a stopped spatial link. It is conceivable that a modeller may later add a spatial link, enabling the "blocked" item to proceed.<br /><br />
<br />
===4.33j===<br />
<br />
*Set Paint Text operation has been changed<br /><br />
A new parameter "For All States" (default is 1) enables the modeller to choose whether all states of a paint button are set to the new text. If this parameter is zero, then only the current state selected in the button will be update.d<br /><br />
For other paint objects this new parameter is ignored but should be left at the default.<br />
*A new paint routine operation "Copy Paint Properties" enables the properties of one paint object to be cloned into another paint object.<br /><br />
The 2 paint objects must be of the same kind or a runtime error will result<br /><br />
<br />
===4.33i===<br />
<br />
*Paint copy: has new option to prevent an inherit link being made. This makes the copied paint object independent of the parent and allows an object to be copied onto the same or parent portal in an inherited hierarchy<br />
*New routine operation to delete paint object<br />
*New routine operations: "Inherit Paint Objects" and "Delete Inherited Paint"<br /><br />
These enable a panel to dynamically have paint objects inherited into it and those paint objects to also be deleted later. The objects do not get put into the paint label list and do not need to be because their ownership is determined by the parent panel from which they are inherited.<br /><br />
Since a panel can inherit from multiple sources, this gives good flexibility in creating backgrounds and interface buttons. It might also reduce the need for hiding paint objects using visibility control attributes.<br /><br />
If a panel already contains objects inherited from a given base panel, a runtime error is given if an attempt is made to re-inherit from that panel.<br />
*New routine operation "Change Panel In Popup" (Display) enables the panel displayed in a popup to be changed.<br /><br />
This is useful in creating "wizard" type progressions of dialogs.<br /><br />
The popup is NOT resized or repositioned, so the panels selected should be compatible in dimensions. Modal options are not adopted either, the initial panel's options are kept in effect.<br /><br />
The old and new panels do receive popup closed/opened broadcasts respectively.<br />
*The data targets in the file access menu of the change object can now be moved up and down relative to each other. the "Up" and "Dn" buttons act on the currently selected item in the list.<br />
*buttons have an "Auto Fit to text" option which fits the button to the text's width. This option is only implemented for paint buttons at the moment.<br />
*bugfix: Paint Copy onto the same panel as the parent with inheritance is now trapped as a model error since the paint system will not support doing this.<br /><br />
*bugfix: Routine Editor and Default Attribute Naming<br /><br />
Due to the different scope between the routine editor's "attribute names" dropdown and the "name replace" when a name is changed, a situation could be created where a name in an item reference could trigger a global rename of that name when a newly added attribute had its default name changed.<br /><br />
To avoid this (and the annoying "rename existing" dialogs when a new attribute was created within a routine) the "New Attribute" dialog is no longer preloaded with the name in the attribute reference field next to the "add" button.<br /><br /><br />
<br />
===4.33h===<br />
<br />
*Paint Copy: A model can now copy an existing paint object into a nominated panel and it will create an inheritance link between the original and the created paint object.<br />
*have removed obsolete objects from the object palette. Since standard and "meta panel" object palettes are now the same, they use the same layout.<br /><br />
They are still internally supported but not for much longer<br />
*bugfix: routine call - a long nme can now be entered in a routine call<br />
*bugfix: time scaling mode behaves much better when mouse clicks occur. I've rewritten the delay code that this uses so it should be more reliable<br /><br />
<br />
===4.33g===<br />
<br />
*added an "Active broadcast" indicator item in the "pause" menu for developers. This will indicate any broadcast currently being processed.<br /><br />
This is very useful when resolving endless loops within a broadcast or management of pause/continue options within broadcasts.<br /><br />
DEVELOPER NOTE:<br /><br />
if your intention is to continue a run beyond the immediate effects of a broadcast button, use the "continue run" option on the button rather than forcing a run continue within the routine code.<br />
*bugfix: loading bug with RTF notes causing font pointer to be corrupted<br />
*new Change object File mode: Test/Read Resource Size<br /><br />
This mode is similar to the Test File Size routine mode except it looks in databases as well.<br /><br />
In this mode, "Target File Attribute" names a file/resource. If the name doesn't include an extention, "RTF" is assumed.<br /><br />
The file operation sets the first "Data Target" (if any exist) and the "Error Result" to the file size (in bytes) of the resource or -1 if the resource is not found.<br /><br />
This is useful to test if RTF notes exist.<br />
*changed the "Test File Size" routine operation to also set the "Error Result" attribute to the file size. Beforehand the "Error result" target attribute was not used. <br /><br />
<br />
===4.33f===<br />
<br />
*the '*' in front of note links is now editable as part of the string<br />
*note text link boxes can be resized and the note description is centred like a button. If the box has any kind of border, it will not be auto-sized to fit changing note text fonts, so allow some space around the text to accomodate variations in fonts on different systems. If the box has no border, it gets autosized to match the font.<br /><br />
Note link font can be changed.<br />
*very basic support for rotated text in paint objects. Bounding boxes do not properly update to the rotated text but without a border/background it looks ok.<br />
*inherited paint objects and paint index:<br /><br />
If a paint object does not have an index ssigned in the paint label list but its parent does, then its parent's index is used when a button broadcast is sent and in the "Button Paint ID" system attribute.<br /><br />
This means any modification made based on that paint index will really be modifying the parent object (of which there could be many inherited objects)<br /><br />
This gives the modeller lots of flexibility in their use of paint objects, inheritance and the paint object label list.<br />
*new "Paint" routine operation to show/hide RTF note paint objects (as with other paint operations, it requires repaint to take effect)<br />
*fixed bugs with "_external files" label list handling.<br /><br />
The PL_MEDIA subdirectory is now scanned for resources other than media files<br /><br /><br />
<br />
===4.33e===<br />
<br /><br />
= This version of Planimate begins the retirement of the following objects:<br /><br />
Server Conveyor Facility Mark Record Assembler<br /><br />
This version will warn about any of these objects being present upon load.<br /><br />
You can use the "Find" function to locate the objects, use the "Advanced" button and select "Obsolete Objects". This will help track down the objects.<br /><br />
Generally Servers and conveyors used for simple delays can be replaced by single capacity multiservers.<br /><br />
Assemblers and Facilities can be implementing using attributes and simple logic in a subsystem.<br /><br />
Contact InterDynamics for assistance in converting your models.<br /><br />
The intention is that subsystem based "modules" will replace the functionality of these objects, with the advantage that the specific logic of the objects can be customised way beyond the hard coded capabilities of these objects that are being retired.<br />
*new table option "Reset Cells to Default At Start"<br /><br />
This enables a variable length table to be cleared leaving the existing rows intact.<br />
*table views created on multimonitor systems should properly be brought back into view on systems with different display configurations even if they were created on a non-active display to the left of the default display.<br />
*key [F4] toggles between run (ctrl-G) if stopped or stop (ctrl-T) if paused<br />
*form fields have an option to not confirm newly added labels<br />
*now show the "hand" mouse cursor over tables with send broadcast (no editing)<br />
*Table columns have an option "Edit Labels In-Place" to enable labels to be directly typed rather than using the dropdown. Typing an existing label sets the cell to the index of the label otherwise a new label is transparently added.<br /><br />
If the other new column option "Rename Instead Of Adding Labels" is on, then if the text typed is not an existing label, the original label index will be renamed to the text entered. If the text typed is an existing label, a message is given and no change is made.<br /><br />
HOWEVER, if the index in the cell was 0 (usually "-") then<br />
*if a new label is typed, it gets added<br />
*if an existing label is typed, the cell index gets assigned to it.<br /><br />
The label list "Only Modeller Can Add" option can be used to prevent new lebels being added in both cases above.<br /><br />
In summary:<br />
*use "Edit Labels In-Place" to enable the user to type existing or new label names, with the table cell indicies being updated automatically to point to the newly referenced labels<br />
*add the "Rename Instead of Adding Labels" option to enable the user to rename a number of existing indicies, without the table indicies being changed (as long as they are not 0).<br />
*The "Bring To Front" and "Send To Back" paint object menu commands are now applied to all paint objects which inherit from them as well. The bring one step forward/back commands are NOT applied to any child objects.<br />
*a minimised table editor does not retain its properties when closed. This prevents a minimised window which does not realise its minimised from being restored when the table editor is opened again.<br /><br />
<br />
===4.33d===<br />
<br />
*Have added a new label list "_external files"<br /><br />
IF an imagea file name exists in this list (including extn) then PL will first look for that image in the current folder and then subdirectories BEFORE looking in the database as would occur normally.<br /><br />
if the file is not found in the working directory or the PL_MEDIA folder then the databases are searched for the file and it gets extracted into the PL_MEDIA folder (if found).<br /><br />
This enables a standalone EXE to carry some default images within itself but then extract them so the user can override/customise them.<br />
*paint buttons now send some tuple attributes:<br /><br />
_panel : Panel of the button (from panel label list) _paintid : Index of the paint object (from paint label list)<br />
*A new system attribute "Button Paint ID" is set while a paint object checks its visibiltiy/state attribute reference. If the object is in the paint label list, it can be used to assist in looking up visibikity for that paint object.<br />
*paint box inheritance has been enhanced to try preserve width/height and/or position when only one of these is changed. This will make box width/height track changes in width/height even if the position differ, and box positions track changes in position even if width/height differ.<br />
*routines can have longer names<br /><br />
<br />
===4.33c===<br />
<br />
*New routine operation enables position of paint object to be set using the paint object label list.<br /><br />
The X and Y values specify the lower left co-ordinate of the box which bounds the paint object.<br />
*TRACK LOOKAHEAD change have implemented a new system parameter (Display-System Parameters) which can be used to limit the # of steps that TRACK lookahead will actually look into Portals (this doesn't affect loops since the track system knows how to look inside those).<br /><br />
If this value is set too low, models with many portals and few loops will lock up due to missed lookahead checks<br />
*TRACK Debugging There is a new "Unblock" item in the section runtime click menu which will report in detail which objects are blocking any item trapped in that section. Due to lookahead this can be quite a distance from the actual section.<br />
*fixed a small memory leak in routines that generated random numbers<br />
*fixed a nasty bug with immediate messages sent during lookahead.<br /><br />
If the immediate message (msg. from routine) was followed by a blocking switch, the switch would give a system error due to its TestEnter not ever being invoked (no switch decision being made). This was caused by the immediate message not resetting a flag used to signal that lookaheads have completed.<br /><br />
For this bug to appear, the immediate message had to be sent from within a portal so the "missing" lookahead could result in the item leaving the portal anyway.<br /><br />
(immediate messages can involve items MOVING during the lookahead of another item, causing strange sideeffects in the engine if they are not handled precisely)<br /><br />
<br />
===4.33b===<br />
<br /><br />
*** Due to the model database rework, it is VERY important to backup your models and ALL DB files before using this version.<br /><br />
Edit notes with care to make sure they get saved as expected. There are many cases of databases being renamed/moved etc. while editing that I've tried to cover; if something strange happens and a note doesn't save, try remember the editing/saving trail you performed to assist in debugging.<br />
*removed text only note fields (old style multiline text boxes)<br /><br />
Any existing ones are now converted to "RTF" notes upon load of an older model. You may see them being converted at the top left of the model window - this will only happen when an model is loaded and updated.<br />
*have added a new database that Planimate will search in for model resources, the "Runtime Database". This is set in the Edit menu and enables resources (eg: notes, BMPs) to be bundled with a standalone EXE but NOT included in the EXE itself.<br /><br />
This gives the ability for end users to customise these resources even though the rest of the system is locked up inside the EXE.<br /><br />
The modeller will have to make sure the "runtime" DB is distributed along with the standalone EXE.<br /><br />
During editing the runtime database must reside in the same directory as the model. For a standalone EXE, the runtime database must be in the same directory as the EXE.<br /><br />
Its not recommended naming a runtime database with a leading "_" as that makes it a database that Planimate automatically searches anyway.<br /><br />
Planimate will use the runtime database (if set) to put newly created notes in.<br /><br />
Contents in the runtime database are not included in a standalone EXE, the database MUST be shipped together with the EXE. Otherwise the end user will experience many errors.<br />
*have added a new label list _Paint Objects. Paint objects can be added to this list from their edit menu. This will enable them to be commanded by a routine, opening up lots of interesting capabilities.<br />
*new routine operation: Set Paint Text (label string submenu)<br /><br />
This enables a paint object (selected using a painb object label) to have its "text" set to the formatted value (eg: label) of the second parameter in the routine.<br /><br />
"text" is interpreted as follows:<br /><br />
Text : text of the the object Button : text of the currently selected button state Image : image name that the image will display RTFNote : note name that the rtf note displays<br /><br />
Notes:<br /><br />
This text is retained after the model stops/restarts so the modeller takes responsibility for initialising it.<br /><br />
There is no redrawing when detail is changed; the modeller can issue a repaint when all changes are done.<br />
*have rewritten note loading to enable notes to be in any database that is accessible to the model (same rules as icons)<br />
*rewrite: label list management code has been merged to enable better reuse of common stuff. This should not affect PL much but look out for any problems. The lists involved are: Object Labels, Panel Labels and the new Paint Labels.<br />
*when selecting a note from a database, pressing &lt;shift&gt; before the note selector appears will enable another database to be selected.<br /><br />
This enables notes to be brought nto the model from a number of databases.<br /><br />
If &lt;shift&gt; is not pressed then Planimate will default to:<br />
*the "runtime" database if assigned to the model otherwise<br />
*the model's associated "DB" database<br />
*the edit menu has been rearranged and I've added some details on the various items<br />
*bugfix: file browser with "dont change directory" option tests for directory change properly and now reports if a file in a different directory was actually selected by the user.<br />
*bugfix: database file import didn't check the limit counter properly. This would have caused extra garbage to be read into RTF notes but the RTF format would have usually cuased this to be ignored.<br /><br />
<br />
===4.33a===<br />
<br />
*BUGFIX: Fixed save bugs in 4.33<br /><br />
(was not writing portal details to the file - models badly corrupted)<br /><br />
The version number was also wrong<br />
*SPEEDUP:Lookahead code<br />
*I've cleaned up the Lookahead code (TestEnter) to minimise the testing of visibility/debug flags which would slow down this time critical operation.<br /><br />
(now do the testing once up-front for each TestEnter search)<br />
*Moved special case code for multiple portal exit support out of TestEnter() so it only executes if required.<br />
*SPEEDUP:Portal entries<br /><br />
Searching was being performed on entry to every portal (flow/track/spatial) to support multiple portal entries. A cache means this searching is no longer required in the 99% of portals which do not use multiple portal entries. In the case where multiple portal entries ARE used, the system will perform as before.<br />
*new broadcasts "_popup opened" and "_popup closed" get sent to popup windows when they are opened/closed<br />
*the "Make Panel Visible" routine operation has been enhanced. If a value of "-1" is used, it goes back to the previously visible panel (like CTRL-B)<br />
*system broadcast processing has been reworked to use a table for some internal flags rather than many IF statements, to do with enabling some BCs to be sent without any listeners being present. This also simplifies a special case test for the timer tick BC.<br /><br />
4.33<br /><br />
==================<br />
*ENGINE REWRITE - ==================<br /><br />
may affect run order, requires careful verification of item movement<br /><br />
I've rewritten unblocking in Planimate in order to speed up the item movement code which is critical to Planimate's performance.<br /><br />
The following functionality has been removed:<br />
*Portal interaction menu (selecting the way items entering are counted)<br />
*There is now no class specific counting of items for portals (the existing occupancy counters will remain)<br />
*No portal item limit/blocking of items<br />
*No hierarchic unblocking (since theres no longer any limit) of items behind a portal<br />
*the Portal "Full" state is obsolete.<br /><br />
This functionality was implemented before we had switches+attributes and was very simplistic - yet supporting it was very complex and slowed down ALL model code even if the functionality was never used. <br /><br />
Removing this code will clean things up. In the cases where you need to limit a portal's capacity, use a switch + portal attribute.<br /><br />
A warning will be given when a model is loaded where a portal had a capacity limit set. This is logged to the debugging file to assist in updating the model.<br />
*Popup option on panels enables them to remain open after the run terminates.<br /><br />
This is useful for "control" panels which restart the engine<br />
*If a portal is in "Act as Junction" mode then the junction rule is enforced even if the sections are double, however the rule is so strict that the sections end up acting as single sections.<br />
*Track unblocking now works for portals which are junctions but contain capacity (eg: a queue) causing the flow based unblocking to fail.<br /><br />
(originally capacity was not expected in a junction portal)<br /><br />
<br />
===4.32p===<br />
<br />
*speedup:<br /><br />
I've made a change to the way Planimate moves items from one object to the next, by testing for recursion in a simpler way (keep a counter per object rather than using a global stack).<br /><br />
This might affect event ordering in models that previously worked using recursion of the move loop, something I've trying to cut back on.<br /><br />
I'm interested in any observed speed ups. I haven't found any bugs with the new approach - they would manifest as items stuck at places they should not be.<br />
*subroutines now have an item in their menubar to delete themselves<br />
*bugfix: cancel adding subroutine no longer crashes<br />
*bugfix: facility state properly reset when agent leaves it after being blocked<br />
*layout change to colour palette so it can be a bit narrower AND changed spelling of "Colour" to "color" in static text since the system palette and planimate label lists use that spelling anyway.<br /><br />
<br />
===4.32o===<br />
<br />
*Enhancements to dynamic object creation:<br />
*if a column called _new_name is included in the command table, its formatted value will be used to set the Object Name of newly created objects.<br /><br />
This is a big improvement over dynamically created objects getting "generic" names and avoids the modeller having to artificially label them.<br /><br />
Planimate will modify the supplied name to fit within the object name length and to be unique on the panel for that object class.<br />
*If any additional columns exist in the command table which have names NOT starting with an "_", then Planimate will use the value in the cell on a row which crates a Portal to initialise any matching Portal attributes in that Portal's SubSystem.<br /><br />
This will greatly assist in creating networks by enabling the objects to be made unique and identifiable as they are constructed.<br />
*The modeller can now put text inside the activity state area in the status bar using the Display routine operation "Set Activity String"<br /><br />
This is very useful when very long processing delays occur and you want to show the user what the system is doing as well as how far it has progressed.<br /><br />
It can also be used for displaying modeller defined "modes" to the user. The string is appropriately reversed when the activity bar moves across it.<br /><br />
If the string is a single space OR ' ' then it is treated as an empty string.<br />
*Adding a label '-' to the user defined menubar menus adds a separator<br />
*new button action to copy a named table into the copy buffer/clipboard<br />
*bugfix:fixed silly bug with naming items in user added menu (was overwriting label list)<br />
*bugfix:no longer crash with certain menu command buttons if the button is clicked during a run where clicks have been enabled during run. I've updated the command handling code to be aware of being in "Simulate" mode.<br />
*bugfix:routine attributes in subroutines are properly identified as needing to be renamed when the attribute in a parent routine is renamed.<br />
*bugfix: table name when dynamic object create table is missing some columns<br />
*the notification of routine name in error dialog is now aware of subroutines and should report the parent and sub routine names properly<br />
*Strict lookahead and Strict Attref handling are no longer an option - they are ALWAYS enforced. Any models that had these options off will need to be reworked if error messages appear when they run.<br />
*have cleaned out code that tracks which routine is active. Tracking code was replicated for debugging and internal management purposes, wasting time and space.<br /><br />
<br />
===4.32n===<br />
<br />
*Spatial link delete routine operation added - deletes all spatial links on the given panel<br />
*Table block attribute references are no longer accepted as table references in routine operations which do not properly support the block reference as a source or destination data type.<br />
*The modeller can now generate a customised menu bar.<br /><br />
The menubar is cleared using the "Clear Custom MenuBar" routine operation (under Label String) and a sub-label list of menu options is added to the current menubar using the "Add Menu To MenuBar".<br /><br />
When a menubar selection is made from a user added item, the new _Menu Command broadcast is sent with the label code of the selected item.<br /><br />
The "Clear Custom Menubar" command switches Planimate to user mode if it is not already.<br /><br />
CTRL-Shift-H can be used to restore the editing menu. Other PL CTRL key shortcuts are still active when the user menubar is active.<br /><br />
If the Clicks During Run option is on, custom menu bars remain available for selection (unlike the inbuilt menubars which are disabled during run).<br />
*New system broadcat _Menu Command with attribute _command is sent to the model when a commane is selected from the user defined menubar<br /><br />
<br />
===4.32m===<br />
<br />
**** CRASH BUGFIX ***<br /><br />
rework to avoid event re-entrancy during click-during-simulate processing, screen changes and redraws.<br />
*no longer pump events when determining the speed that an item will animate. This has the undesirable effect of (sometimes) closing the panel just as an item is about to animate<br /><br />
Hopefully this fixes the CM model issue; after a *lot* of testing I've been unable to reproduce it after closing this loophole.<br />
*pressing the [x] on the "delay box" when advancing to a time no longer will break out of long or stuck iterations/while loops.<br /><br />
This was unworkable and caused repeated "loop interrupted" messages to appear as the delay box continually signalled a close but was unable to be closed by the system (because it was stuck in a loop).<br /><br />
Pressing &lt;ESC&gt; is now the only way to break out of these endless loops.<br /><br /><br />
<br />
===4.32l===<br />
<br />
*have integrated the colour selector and the _colors label list. Colour names in the list will appear as tips over the colour squares and a colour is now selectable from a dropdown list.<br /><br />
This is in support of colour theming of models by using standard palette positions for standard interface objects, Jay's recent model email is an example of this.<br /><br />
Note that the default Planiamte _colors label list only names the first 16 colours in the palette. The default list may be changed if we get some standard allocations in place, this will only affect new models.<br /><br />
<br />
===4.32k===<br />
<br />
*subroutines can now call sibling routines<br />
*dispatcher mode: "message for each carried item"<br /><br />
In this mode a dispatcher will send a message for every item that entering item is carrying.<br /><br />
This enables processing of stats, inspection of carried items etc. to be performed without the overhead of dropping off all the carried items then picking them all up again (using Trays).<br />
*note that if the dispatcher contains more than one item, performance will be reduced according to the number of carried items by the items in the dispatcher.<br />
*new option for broadcast dispatchers: "Wait for items to exit"<br /><br />
With this option on, the item sending the broadcast waits in the dispatcher until all broadcast items enter an exit.<br /><br />
Normally, the item waits at the dispatcher only until the initial thread from each broadcast entry completes (items reach a point of capacity).<br /><br />
This option is useful when you want to guarantee that all broadcasts have been completely processed before the item leaves the dispatcher, even if the processing of the broadcast takes non zero time or involves activities beyond a single thread (eg: pauseable zero delays, other broadcasts).<br />
*paint "other Options" menu has new option to delete all paint objects on the current panel which have been inherited from anywhere. This is also applied to all objects inherited from these objects.<br />
*A new routine operation (display) "Choose Colour From Palette" enables the user to customise a single colour in the colour palette.<br /><br />
The modeller provides the colour # to customise, this must be between 16 and the colour palette size (64)<br /><br />
The operation returns 1 if a colour is chosen, 0 if the user cancelled or -1 if the modeller provided an invalid colour index.<br /><br />
<br />
===4.32j===<br />
<br />
*New feature: stoppable spatial links<br /><br />
All spatial links have a control attribute (like a pipe)<br /><br />
By default it is 1, meaning "go". If this attribute is set to 0, the link will be "stopped" with all items on the link being frozen and the end points of the link blocking any item attempting to enter them.<br /><br />
Whilst links still do not have "capacity" per se, this gives the modeller much more control over the use of spatial links to move items.<br /><br />
Its very important that the control attribute is something Planimate can "unblock" from, so portal attributes and fixed cell references are OK but item or dynamic table references are out. PL looks for the control attribute starting in the "from" portal of the spatial link.<br /><br />
Advanced user note:<br />
*If you click on an item on a stopped spatial link, the "TIME" field will show the start model date + the time the item has spent MOVING on the link.<br /><br />
If the link is restarted and you click on an item, the "TIME" field will show the resume time - the time the item has spent moving on the link (ie: as if the link never stopped).<br /><br />
This is to keep the animation calculations consistent.<br />
*fixed nasty FEC bug which would cause events not to be deleted from the delay FEC when doing a "flush" of pending events (Eg: clearing out a spatial link)<br />
*IF an item *with* a spatial link target set is about to go up to a portal with spatial links connected where no links accept the item, and that portal ALSO has flows connected to it, PL will no longer attempt to take any of the outgoing flows of that portal, or complain if there is no flows. The item will block instead. This is to support stoppable spatial links.<br /><br />
<br />
===4.32i===<br />
<br />
*new percentage format display mode which will only show fractions if required by the number<br />
*fixed editing of cache settings, was originally limited to 3 digits<br />
*train graphs have option not to hide overlapping labels<br />
*train graph lines drawn with 0 thickness are now not drawn but their labels will still be shown<br />
*change object icon updates properly after routine editor closed<br />
*values formatted for fixed x,xxx.x and x,xxx.xx retain this format if the attribute editor dialog has a value with a comma in it during editing.<br />
*table selector has proper z-order when displayed within the attref browser within a field within the dialog editor<br />
*display option enables user mode users to pause in the middle of a broadcast. Some models need this to enable pausing during long zero time code.<br /><br />
Note that PL will not break any zero time pausing rules with this option (pauseable 0 delays are still needed for the pause to actually occur).<br /><br />
<br />
===4.32h===<br />
<br />
*fixed editing of searches broken in g<br /><br />
<br />
===4.32g===<br />
<br /><br />
* Significant rewrites requiring verification of routine integrity *<br /><br />
Rework of internal code with<br />
*routines, searching, conditions, muilticonditions, dll calling, dialogs and distribution pattern dialog, lookahead code so watch for any problems with these<br />
*Routines can have subroutines defined within them. These subroutines share the same attributes as the main routine.<br /><br />
(call subrouting is under "special")<br /><br />
Subroutines have their own editor window (at the moment) which remembers its position separate to the main window.<br />
*friendlier message for unlinked buttons when in user mode with no option to select a target now<br />
*the lookahead undo mechanism has been rewritten to allocate memory in bigger chunks less often and to basically operate faster. Routines in lookahead will be improved<br />
*no longer crop paint objects upon loading to avoid them being repositioned if slightly off screen<br />
*system attribute enables reinitialisation of random seed without having to restart the engine<br />
*attempt to fix bug with lingering advance to time box. Added a new error message which warns that an attempt to pause has occured during a background thread process (eg:panel open BC) which is a Very Bad Thing.<br />
*Fixed a crash which occured when a hover BC caused the popup it was in to be closed.<br /><br />
Hover BCs were not intended for UI control and you may end up with stuck windows or laggy response on some systems due to the overheads with processing on every mouse co-ordinate change.<br />
*issues with message dispatchers and graphical loops identified and a demo model has been produced to demonstrated which I'll release soon<br /><br /><br />
<br />
===4.32f===<br />
<br />
*added check for null printer handle to avoid printing to invalid handle<br />
*fixed inserting rows into empty table in edit mode - was trying to send a BC in edit mode -&gt; crash<br />
*percentage value format - displays values like 0.274 as "27.40%"<br />
*log driven graphs have new scale options to always include 0 in the x/y scales when autoscale is on<br />
*The colour of paths (when show paths is on and not in flow/interaction mode) can be set from the item class menu.<br /><br />
Selecting "None" uses the defaults.<br /><br />
If you override the colour for one class you may want to override it for all classes otherwise the automatic colour selection may repeat colours.<br /><br />
<br />
===4.32e===<br />
<br />
*New support for building standalone EXEs which use a separate external InterDyne keyfile as their license. This enables the one standalone EXE to be distributed with various different runtime licenses.<br /><br />
It is important to specify wither an "External" or "Internal" keyfile is being used as InterDyne licenses (external file) differ from Runtime Licenses (internal).<br />
*The menu bar can be hidden in user mode, enabling a modeller to reclaim its space and provide their own control UI for an application.<br />
*fixed bug calculating gantt popup height when the block times are visible<br /><br />
<br />
===4.32d===<br />
<br />
*Object schedules on dispatchers and portals have been removed<br />
*the unavail state for dispatchers and portals has been removed<br /><br />
Possibly a slight speed increase as these two objects are commonly used<br />
*redraw locking is reset upon PL stopping if a stop occurs whilst it is active<br /><br /><br />
<br />
===4.32c===<br />
<br />
*have rewritten the FEC to use separate lists for zero time and delay events. This should increase performance slightly as it enables the events to be managed a little more efficiently.<br /><br />
If you can prove its slower (vs.<br />
===4.32b===<br />
) then I'd be very interested in a demo model of this.<br />
*FEC event reports now have longer field for object name<br />
*Fixed bug in model popup panel management - was not properly testing if a popup was already opening causing corruption if it was popped up several times and preventing the popup from closing<br />
*Popups opened by the model are now clsoed when the engine is restarted.<br />
*Adjusted the exact point where a panel closed broadcast is sent. Previous versions sent it at a time where no panel had proper focus, causing very funky things to happen. It is now sent after the new panel has been given focus but before the "panel open" broadcast is sent for the new panel.<br />
*Have added a check to the pauseable zero delay multiservers to flag an error if a pauseable zero delay is attempted in a background thread (eg: a timer tick or a panel open/closed broadcast). Pauseable activity is not allowd in these threads for obvious reasons.<br />
*closing log viewer no longer possible while its redrawing<br /><br />
Also have fixed the redraw interrupt keypress to reset properly the next time the log display is redrawn.<br /><br />
Also fixed the selection box display<br /><br />
<br />
===4.32b===<br />
<br />
*Table editing enhancement<br /><br />
= if using tables which send after edit broadcasts, read carefully as = the options available to the user have changed<br /><br />
The edit broadcast capability on a table view has been enhanced to handle notifying the modeller that a range of cells has been modified by the user.<br /><br />
This affects table views with the "Cell Click Broadcast" set and the "Send Broadcast After Edit" option on.<br /><br />
Previous versions of Planiamte would disable the cut, clear and scale cell editing functions because there was no way of notifying the modeller about these events. This is no longer the case. Planimate can notify of an edited range. <br /><br />
The modeller can disable block edits from being made using a new option on the table view "Disable Block Edits".<br /><br />
Since existing models wont have "handlers" for block edits, this option is turned on when older models sending edit broadcasts are loaded. HOWEVER be aware that this option is stricter than Planimate used to be and PASTING is now considered a block operation and hence not allowed if this option is on.<br /><br />
If this option is off, then the modeller must anticipate edits affecting more than one cell sending a broadcast as follows:<br /><br />
The cell click broadcast sends _row and _col tuple values to indicate the edited cell. In addition, it will now also send _to_row and _to_col values indicating the end of a modified range (inclusive).<br /><br />
If a single cell is edited, then _to_row and _to_col equal _row and _col respectively. Hence existing code can be upgraded to handle a range by wrapping it in "for" loops for the row and columns.<br /><br />
Further notes:<br />
*The other tuple values set by this broadcast, _previous and _current, will be set to 0 if more than a single cell is specified in the range (ie: _row != _to_row or _col != _to_col).<br /><br />
In other words it is not possible for the modeller to know the previous values if a range of cells was modified.<br />
*the fill and index menu selections send an individual broadcast for each cell modified so the previous and current values are available<br />
*A cut or insert menu selection will send a BC with the range from the top left cell to the new bottom right cell in the table.<br />
*any row operation from the row menu (if enabled) will send a BC with the range from the top left cell to the bottom right cell in the table, regardless of the row menu item chosen.<br />
*new table view option to disable block edits, that is any editing operation that could modify a range of cells without the modeller being notified of the exact cell and its previous value.<br /><br />
This does not include fill and index because they send a separate broadcast for every cell modified.<br />
*new platform attributes in the Display -&gt; System Parameters menu.<br /><br />
FEC Event Cache <br /><br />
This sets how many FEC events Planimate keeps on hand. For best model performance it should be &gt; than the maximum number of concurrent pending FEC events.<br /><br />
Item Cache<br /><br />
This sets how many items PL keeps cached ready for use. For best model performance it should be &gt;= the maximum number of concurrent items that ever exist in the model.<br />
*Extensive rework of how objects test if they are visible. This will improve the speed at which Planimate Advances To Time by reducing the number of checks<br />
*Rework of<br />
*Multiserver<br />
*Queue<br />
*Dispatcher<br />
*Intray/OutTray to squeeze more speed out of them (inline functions, better list management)<br />
*FEC tweak to try optimise the way items are placed in the FEC. Extensive testing with a large model shows there is need for much more improvement here.<br />
*Fixed what was a possible future bug with FEC which could have caused the message dispatcher fix in<br />
===4.32a===<br />
not to always apply.<br /><br />
Unfortunately this will slow down the FEC slightly :(<br />
*Menu item to show the running debug log file<br /><br />
<br />
===4.32a===<br />
<br />
*Gantt views have an option to suppress showing the times in the popup which appears when the gantt blocks are clicked 4.32<br />
*New time format mode: Day (1..); Time HHMM<br /><br />
This displays a value as a day number and hours/minutes<br /><br />
If day 1 is sunday then:<br /><br />
1d 0000 midnight sunday, value = 0 7d 2359 23:59 saturday, value = 6*86400 + 23*3600 * 59*60<br /><br />
A user can specify 2400 as a time eg: 1d 2400 interprets to 2d 0000<br />
*fixed line drawing changes in<br />
===4.31u===<br />
to ensure that single pixel lines still are drawn. This should fix dial-chart drawing<br />
*new standalone EXE functionality<br /><br />
Planimate standalone EXEs are now produced with the use of a new DLL plugin to Planimate. Please contact InterDynamics for access to this DLL.<br /><br />
3 kinds of standalone EXEs can be created depending on the developer keyfile:<br />
*10 day time limited<br />
*EXEs requiring an individual "standalone" runtime license which InterDynamics provides<br />
*EXEs not requiring an individual license (open)<br /><br />
All developers can produce 10 day time limited standalone EXEs.<br /><br />
Developers can apply to InterDynamics for licensing and key files to produce individually licensed and/or open licensed standalone EXEs.<br /><br />
Developers who currently have a newer key file enabling production of standalone EXEs have the ability to produce individually licensed standalone EXEs. These EXEs require a runtime license from InterDynamics.<br /><br />
To produce standalone EXEs not requiring a runtime license, please contact InterDynamics to arrange open licensing and a new developer key file will be provided.<br />
*message dispatcher event order clarification &amp; fix:<br /><br />
If a message item triggered any broadcasts AND the message item did not enter and leave in the same thread (ie: any capacity in the message item thread) then when the message item went into its exit, it was possible that the broadcasts would be processed before the original item tried to leave the dispatcher.<br /><br />
For this case, I've put priority on moving the original item out of the dispatcher before any broadcast events are processed.<br />
*no longer support "Interdyne" exe compilation builds. The new standalone EXE functionality superseeds it.<br />
*new developer INIfile items under [display]<br /><br />
StartX, StartY<br /><br />
Initial position for window in screen co-ordinates. If (-2,-2) is specified, the window is centred (the usual default). If (-1,-1) is specified, Windows sets the default according to its window manager rules. Otherwise the screen co-ordinate (top left) is used.<br /><br />
StartW, StartH<br /><br />
Initial width/height of the PL window<br /><br />
StartMax<br /><br />
If 1, the PL window starts maximised. When restored, it reverts to the co-ordinates as set above.<br />
<br />
===4.31x===<br />
<br />
*Crash pasting change objects - recompiled<br />
===4.31x===<br />
with old compiler, seems OK.<br /><br />
Also turned on "Pentium" code option, it was off for the last few builds<br /><br />
<br />
===4.31x===<br />
<br />
*fixes a crash issue with Billboard table handling<br /><br />
Gory detail: due to the compiler barfing at the fact that I did not include a "destructor" for an object that is being allocated in a C++ array.<br /><br />
<br />
===4.31w===<br />
<br />
*Gantt block line linking has been changed to provide a bit more flexibility.<br /><br />
2 new columns can be included in the gantt table, "_nodeid" and "_link_nodeid".<br /><br />
_nodeid enables an identifier for a gantt block to be specified.<br /><br />
A block further in time can be linked back to that previous block by setting its _link_nodeid to the same value as the previous block.<br /><br />
Many blocks can use the same _nodeid, PL will always search for the most recent block (not including the current).<br /><br />
Hence to connect a series of blocks together, setting their _nodeid and _link_nodeid values to a common value (eg: consist #) will display a line linking the blocks together.<br />
*new display option "Fastforward when no animation"<br /><br />
This causes Planimate to quickly step through animation updates if there has been no animation activity (this used to be the default behaviour). The default now is to speed-regulate the animation update intervals. This option enables that to be overridden.<br />
*bugfix:<br /><br />
have changed the way panel deletion is notified to the popup panel viewer to handle notification of panels properly.<br /><br />
deleting model with the popup panel view visible should be reliable now<br /><br />
<br />
===4.31v===<br />
<br />
*Made the hierarchy explorer modeless. You can leave it up on the screen somewhere and continue working in the model.<br /><br />
Modellers may want to put default co-ords for this in the INI file. eg:<br /><br />
ExplorerX=150 ExplorerY=350 ExplorerW=300 ExplorerH=400<br /><br />
(X,Y give the top left screen point)<br /><br />
These are placed in the [display] section<br />
*Track logic: Added a new rule enabling a train just leaving a junction to continue on the section without error message if a subsequent section also connected by junction) has become unavailable.<br />
*table titles can be centred<br />
*Have added timeouts to planimate forms/dialogs. These are intended to enable informational popups to occur and the model to continue afterward even if the user does not press [OK]<br /><br />
They should not be used with dialogs which require user input. I have attempted to cancel the timeout if user input is detected (eg: typing in a field).<br />
*Format into label has been enhanved to handle columns and tables.<br /><br />
If the item to format is a column or table, its name (tuple name) is formatted into the target attribute.<br /><br />
This enables a column name to be placed into a label list so the modeller can then work with that name<br />
*Updated to new compiler, code more conformant to modern ANSI C++ standards (many modules had some syntax changes).<br /><br />
<br />
===4.31u===<br />
<br />
*The _PLERROR.TXT file (which gets written when a model error occurs) now includes portal attributes and table dimensions for the portal closest to where the error occured and those up the hierarchy at that point (ie: those in scope)<br />
*PL properly saves the DB from a PMB (model bundle) when it gets saved as an normal MDL.<br />
*Found a very elusive icon animation manager bug<br /><br />
When two icons were drawn next to each other but not overlapping, bits of junk were left on the screen when the "lower" icon in the list left before the "upper" icon. This is because the icon drawing code was "save-undering" an extra pixel without the animation manager realising there was an overlap.<br /><br />
I've corrected it (for the x-axis only) though I suspect there is the potential for similar problems with rotated icons.<br /><br />
To fix it properly I need to make the *rotated* icon bounding rectangle available to the animation manager. Will do this if animation "junk" continues to be an issue.<br />
*Have reworked the line drawing code to minimise glitches at the end of longer lines, very evident in the table view where grids are drawn.<br /><br />
The problem arose because Windows doesn't draw the endpoint for lines but the iFlow graphics model requires it to.<br />
*Have reworked table drawing more to improve display of cells. The fill colour of cells is improved (but still imperfect when zoomed.<br />
*Linear searching can now occur in the reverse direction<br /><br />
<br />
===4.31t===<br />
<br />
*This and subsequent releases of PL are built using a new compiler (unless a problem with it is identified).<br />
*PAINT inheritance for paint buttons enhanced:<br /><br />
A change in the click action of a button is more intelligently handled.<br /><br />
Changes in an action or an action's properties are properly checked now so customisations of an action are not lost if the master is changed.<br /><br />
More detail:<br /><br />
A change in a child object's action properties/options makes that child/action unique and a change to the master's action (even if its the same type of action) wont change any property of the customised child object.<br /><br />
IMPORTANT: This does not apply to inherited Dialog action buttons, they are always treated as unique and wont track the master button while it has a dialog action.<br /><br />
HOWEVER If the master is changed from having a dialog action to another action type, ALL inherited buttons in dialog mode will be changed (the old way PL used to work).<br />
*fixed OK button handling in the debug dialog (wasn't properly closing)<br /><br />
<br />
===4.31s===<br />
<br />
*have changed the breakpoint/error debug dialog<br />
*removed a few of the buttons at the bottom and replaced them with a fly-out menu which now enables tables, attributes and labels on the current screen to be inspected.<br />
*Fixed a bug which caused an invalid screen warning to occur if the panel changed broadcast was used to change the current panel<br /><br /><br />
<br />
===4.31r===<br />
<br />
*Planimate popup child windows (without title bar) are placed topmost now of sibling child windows so they are not obscured by existing popups and viewports<br />
*time scroll window now sends update broadcasts if the keys are used to shift the window as well as the mouse<br />
*The popup which appears when an item is clicked (or ctrl-clicked if system properties are hidden) now contains a "TRACE" line.<br /><br />
Selecting this line toggles trace animation just for that item on and off, very useful when debugging<br />
*re-enabled backing store for view panels, some models had too much flicker on table cell broadcasts which updated tables. The backing store uses memory but elimiates the flicker.<br /><br />
<br />
===4.31q===<br />
<br />
*The graphics system now supports hugely huge bitmaps and panel work areas (limited by RAM now not by Win32's GDI)<br />
*Column overlay graphs have an option to remove the margins automatically inserted in the x and y axis. This will make their range compatible with gantt/train graphs when they are displayed together<br />
*fixed a bug introduced in<br />
===4.31n===<br />
that messed up ctrl-pastes of portals when they were linked to other portals<br />
*The line taken counters introduced a 6% hit in engine performance so I've made them only active if the run is started in "Application" mode (editing tools hidden)<br />
*have done quite a bit of rewrite/cleanout of the graphing code (mostly column overlay) to try move towards a common graphing model<br /><br />
<br />
===4.31p===<br />
<br />
*viewports/popups should properly clip against each other now<br />
*There is a new system-item attribute which enables trace animation to be enabled on an item-by-item basis.<br /><br />
This means one specific item can be tracked throughout a model, or the activity of items in a defined region or time window, as the modeller chooses.<br /><br />
<br />
===4.31o===<br />
<br />
*column overlay view should properly updates its bounding box for y scale width<br />
*no longer crash on trying to deallocate counter table for an empty routine<br />
*Reworked the run initialisation and termination code, cleaning up internal names and function sequence.<br /><br />
(shared routines were not being initialised properly but it wasn't an issue until I added the routine line tracing in the previous release)<br />
*code rework: view panels do not allocate an animation manager (dont need it)<br />
*I've added some debugging to check for bitmap allocation errors. This will pop up warning messages if an image buffer fails to allocate (indicating a low memory condition or problem with the Windows API)<br /><br />
I've identified that the Windows system fails to allocate large bitmaps due to limitations in the GDI functions (even under WinNT) however there is another way to do it which should only be limited by RAM, so I'll give that a try in a subsequent release.<br /><br />
I will not be putting any effort in supporting 8 bit (256) colour systems.<br /><br />
<br />
===4.31n===<br />
<br />
*specifiable capacity of multiservers increased to 9999<br />
*models with many items visible stop and change panel much faster, achieved by flushing the animation manager before hiding the individual objects/items<br />
*Queues and dispatcher handle capacity up to 99999<br /><br />
Previous versions had an editor bug which could result in -ve lengths if large values were specified<br />
*routine list has a new column "Taken"<br /><br />
this is only visible if the routine editor is opened when the run is active<br /><br />
It displays the number of times each routine line was executed the last time the routine was executed. This is useful for determining what code just executed preceeding a breakpoint<br /><br />
All routines track this usage now, the performance hit vs. previous PL versions should be minimal (report any massive change in routine speed between this version and the previous)<br />
*The "execute command" code recognises names starting with http:, mailto: and fto: and processes them through the shell, so the default application for these types will be used.<br /><br />
This enables buttons to link to URLs and email addresses.<br />
*new routine operation "Reverse Item Direction" (in the Message menu)<br /><br />
This enables an item ID and panel to be specified. If that item is found in a spatial link on the panel or a panel underneath it, its direction is reversed and the operation returns 1, otherwise it returns 0.<br /><br />
Reversing the item means:<br />
*its time to reach the end of the link (where it had entered) is the same duration it took for the item to get to the current point in the link since it entered<br />
*the destination is the portal the item will first arrive at (so the modeller must be prepared to take the item and assign further links to it, dispose of it, or whatever.<br /><br />
*The set random seed function introduced in<br />
===4.31m===<br />
now also sets the master random seed to the specified value. This means the seed value will take effect if the run is restarted by a stop/restart exit as well as restarting with a restart dispatcher and the new seed value will persist from then on until it is changed again (by user or the model)<br /><br />
*lots of code tidyup to make compatible with latest ANSI standards on variable scope in loops, should not affect anything<br /><br />
<br />
===4.31m===<br />
<br />
*Crash fix -<br />
===4.31l===<br />
was a lemon.<br /><br />
The attribute editor was broken by the new checkbox (wasn't initialising it when it wasn't supposed to be used, causing unpredictable crashing)<br />
*Added new system attribute "Random Seed For Restart Run" (Run Engine)<br /><br />
This enables the initial random seed for the NEXT run to be set when a run restart dispatcher is used. It also enables the random seed for the current run (single or multiple) to be read (unless the modeller has set it prior to a run/restart).<br /><br />
Note: its OK to use incrementing seeds, internally Planimate scrambles the initial seed to ensure the streams for the successive runs dont trivially correlate.<br /><br />
The seed value must be an integer between 1 and 32767 (inclusive) and a hard clamp has been introduced to ensure this.<br /><br />
<br />
===4.31l===<br />
<br />
*Create standalone application is much faster (avoids database updates if an item is already in there).<br /><br />
Items included in the standalone EXE database are logged to the PLANIMAT.DBG file, as well as any error messages for icons etc. that could not be found. (the messages still appear onscreen).<br />
*Database and file copy routines have been given much bigger work buffers so they will save/transfer data faster.<br />
*have fixed paste/replace code so it also adds contained portals to the object label list if their option to do so is set<br />
*I've added a new system attribute "User Edited Model Data" which gets set when a user edits an attribute view or table view/editor.<br /><br />
The model can set and reset this attribute. It gets reset when the model is saved.<br /><br />
Tables and attribute views have an option to not set this bit when they are edited<br />
*"Only to screen" broadcasts such as panel closed should now work properly if the BC is sent under model control<br />
*fixed a locking problem introduced in i<br /><br />
<br />
===4.31k===<br />
<br />
*dials/charts support having a transparent background colour<br />
*portals have a new option<br /><br />
"Automatically Add Copies To Object List"<br /><br />
If this option is set, any copy made of the portal (by user or under model control) will be added to the object list and an index/name automatically assigned.<br /><br />
The original portal does not need to be in the object list.<br /><br />
<br />
===4.31j===<br />
<br />
*added a new portal option:<br /><br />
"Handles Parent Messages/Broadcasts"<br /><br />
If this option is set for a portal:<br />
*The portal can contain a message handler for directed messages sent to the owning portal.<br /><br />
This is the same functionality as naming the portal "_!message" but means any name can be used instead of _!message for the portal which makes paste-replacing code updates safer and easier.<br />
*The portal can contain broadcast handlers for screen-only broadcasts sent to its parent (eg: portal clicked)<br /><br />
This means the handlers for these broadcasts dont have to be right at the portal which has the broadcast targetted at it.<br /><br />
Broadcasts like "_Portal Clicked" are not normally sent "scoped" but setting this option on a portal within the one where the broadcast would normally be received enables a limited amount of scoping.<br /><br />
Only one portal in a subsystem should have the this option on (Planimate will only search the first portal it finds with this option on in a given subsystem).<br /><br />
Portals with this option on can be nested if a single handler portal gets too busy, the inner portal must also have this option on and the same rule above applies.<br />
*added check for class change at routine to make sure the 2 classes have the same # of table references<br />
*bugfix:enhanced item attribute fix in prev version to allow class changes (as long as item attribute and table references dont change)<br /><br /><br />
<br />
===4.31i===<br />
<br />
*fixed trivial bug which was causing flipped (but not rotated) icons to display wrong.<br />
*New key file handling.<br /><br />
To create a "standalone application" you will require a new key file.<br /><br />
Your existing key file will continue to function but you will not be able to create standalone applications.<br />
*Fixed a small bug with background timer handling. During simulation mode, if during the test for a "pause" a background event occured, it wouldn't be processed before the pause occured, causing the timer to stall until a "continue".<br />
*Found a very nasty bug involving a routine which, in look ahead, set some item attributes then performed an immediate message. The undo mechanism for the attribute set conflicted with the immediate message value return, causing memory corruption.<br /><br />
I have rewritten the way items allocate memory. This should eliminate this problem and will also speed up the creation of broadcast and message items.<br /><br />
<br />
===4.31h===<br />
<br />
*fixed small bug with pause key checking (main window wasn't redirecting all key events)<br />
*fixes to AVI clip end broadcast handling<br />
*BC is sent as background BC<br />
*properly stay in background mode to process side effect BCs rather than dropping out and back in (and generating system errors...)<br />
*The background timer BC is no longer disabled when pausing in editor mode anymore. Due to the event throttling this should not be required.<br />
*internal engine enhancement and cleanup:<br /><br />
These are all moving PL beyond a simulation platform and towards a real time event/data processing and visualisation platform<br /><br />
[advanced detail]<br />
*reduced the number of places where engine Contine() is directly invoked, in many cases I post the "Continue" command message to PL instead.<br />
*made background BC mode an explicit set up / teardown around the Continue() operation rather than passing of option bits<br />
*added a new interlock to prevent background updates being posted to the FEC when PL is about to go "paused". This was causing timer events to get "stuck" on the FEC until the next "Continue"<br />
*Removed some "Wait mouse buttons up" checks in the Run/simulate to paused transition code. I dont anticipate this affecting anything.<br /><br />
<br />
===4.31g===<br />
<br />
*Have now implemented rotated bitmap drawing (worked around MS's bugs)<br /><br />
At the moment automatic rotation of items is supported, this is an item class option. The "Flip Icons" option should also be on otherwise trains etc. will appear upside down when they animate right to left.<br /><br />
The direction sensing code is smarter than it used to be (makes use of each bend section vector).<br /><br />
I've not finished updating the animation manager so rotated items in queues and dispatchers may leave crud behind on the screen. Spatial links, conveyor-road and multi-server item animation should work smoothly.<br /><br />
Later versions will enable the rotation of items and objects to be set by the modeller.<br /><br />
Rotated icons are only supported under NT/Win2K/WinXP. On ME/98/95 icons are not rotated (the APIs dont exist) but the model should otherwise run.<br />
*Planimate now has two Future Event Chains (FECs).<br /><br />
When a "real time" event such as a timer tick, network broadcast or other special broadcast (see next point) is sent, Planimate switches to the second "Background FEC". This allows side effects of the background BC to be cleared without "continuing" the run, when it was paused at a pauseable 0 delay (previously it wasn't possible to tell 0 time events apart).<br />
*reworked the background timer BC handling so it doesn't post multiple events to the PL FEC if PL is busy<br /><br />
Models are easier to pause even if the real time BC is being animated<br />
*fixed the background timer BC handling to properly update displays when PL is in run/simulate mode.<br />
*The "_panel opened" and "_panel closed" broadcasts are now sent using the Background FEC. This will get rid of the annoying "continue" when a model is paused at a pauseable 0 delay and the user changes panel.<br />
*no longer set background flag on BCs sent from a background BC.<br /><br />
Creates too many side effects. Background BCs should not be scheduling other BCs.<br />
*Paint Video objects have an option to enable looped playback. There is a delay between the clip repeating, this is inherent in the media player widget.<br />
*new routine operation "Find Formatted Label" checks whether the parameter, formatted as a string, exists in the label list pointed to by the target.<br /><br />
IF it does, the target attref gets set to the label index otherwise it gets set to -1<br /><br /><br />
<br />
===4.31f===<br />
<br /><br />
This one seems more stable<br />
*I've rewritten the fine timer interrupt handler to not call any functions or use any pointers (all the fine timer interrupt does is post a wakeup event to the main Planimate thread which handles the broadcast)<br />
*I've added a display option to disable the timer tick broadcasts. Note that the timer still "ticks" if a timer tick BC entry exists in the model, but this option prevents the broadcast being actually sent.<br /><br />
Timer Tick BC's are disabled by default. Turn them on when your model is debugged.<br />
*Reworked the "pause check" code to the following rules:<br /><br />
In end user mode, the pause menu will appear if the following is met:<br /><br />
PL is not processing a background event (timer tick, network) and (item animation is occuring OR PL is not processing a broadcast)<br /><br />
In developer mode, the pause menu will appear:<br /><br />
if animation is occuring OR PL is not processing a background event<br /><br />
Actually selecting "Pause" in developer mode using the background menu disables the timer tick (display options).<br /><br />
This is to protect the modeller from getting stuck.<br /><br />
<br />
===4.31e===<br />
<br /><br />
== == This version involves a lot of fixes, some new internal stuff and loads == of rewrites and cleanups of old code. Look out for any new graphical == anomolies in particular. ==<br /><br />
* It seems the background tick is causing corruption of the process state which I've been unable to pin down. I've fixed and rewritten lots of stuff in this release but that crash bug is still there.<br /><br />
I'm separately uploading a VC build of Planimate. If the SC build crashes, try the VC build. It hasn't crashed for me yet.<br />
*time scrollers are now optional for train and gantt graph (nneds testing)<br />
*new time format: Day Of Week; Time Of Day<br /><br />
This format enables a day, hours and minutes to be specified in the form<br /><br />
DAY HHMM<br /><br />
Eg: Sun 0000, Wed 1234, Sat 2359 and is represented as the number of seconds since midnight on sunday.<br /><br />
This is a useful format for entering weekly schedules.<br /><br />
Times such as: "Tue 2400" are accepted and become "Wed 0000"<br /><br />
"Sat 2400" is also accepted and wraps to Sun 0000<br />
*Paint Buttons now cache images in memory (like object and item's do) This means they draw much faster and opens up opportunities for animating them.<br />
*Paint Buttons have a new option "Real Time Tick Update" which causes PL to update their image if their state has changed (eg: in a real time tick broadcast)<br /><br />
This enables animations to occur using paint button states without requiring a forced repaint. <br /><br />
This option should only be turned on for objects which need it as it requires some background processing.<br />
*focus in the routine editor improved<br />
*fixed key handling.<br />
===4.31d===<br />
broke it for the main window. I now do extra checking on whether the active window is a form/dialog or not in order for Windows to process the key events appropriately for modeless dialogs like the routine editor.<br />
*bugfix: trace animation is suspended once a pause is requested<br />
*BUGFIX: Fixed a very hard to find bug: If a screen change occured in the processing of a "background" broadcast such as the timer tick, the menubar and mouse states were left "busy" whilst the app was really idle.<br /><br />
This occured because the run manager was not aware they were being changed by the screen change code.<br />
*Event/pause checking change:<br /><br />
While a BC is being sent and its side effects cleared (time not moving) PL will not poll for "pause" clicks in user mode UNLESS items are animating somewhere on the screen.<br /><br />
This reduces popup of the "pause" dialog when dragging portals etc. but may make models hard to debug/stop (which is why I only do this in user mode).<br />
*Found a very obscure bug in the handling of redraws which caused the animation manager to do more redraws than necessary (object icons were being cached in the "front_icon" of the animation manager which is not appropriate as they generally dont move about, they just change state).<br /><br />
This bug was very hard to initially detect but was noticed by Planimate sometimes using more CPU than at other times for exactly the same animation.<br />
*Debug Options and Class Name dialogs now stay on top of the main window<br />
*Any broadcasts sent during a background event (timer tick) are also processed in "background" mode [not tested - should avoid broadcasting in a timer broadcast handler anyway]<br />
*Items have a new option "Auto Rotate" which rotates the item bitmap according to the direction it animates.<br /><br />
This makes use of the new icon rotation capabilites.<br /><br />
BUT<br /><br />
Unfortuantely due to a bug in Windows NT/2K/XP which Microsoft could not give a damn to fix (they've known about it for 4 years), the rotation messes up the mask if the icon is rotated exactly 180 degrees. I've been unable to find a *reliable* workaround for this (short of abandoning buggy closed source Microsoft Operating Systems) so I've disabled the rotate functionality for now. Eventually I'll do the rotation another way.<br />
**** EXTENSIVE REWRITES OF PL CORE CODE ***<br /><br />
[advanced:for technical/dubugging reference]<br />
*Animation timing delay no longer involves a message pump. This gets rid of one source of potential event re-entrancy, the timing is more stable and Planimate uses very little CPU during animation as its not spinning a PeekMessage() loop.<br />
*Animation/screen update "dirty regions" and icon saveunder/restores are now processed using windows co-ordinates not iFlow co-ords. This is to support blit-time icon transformations such as rotation and future others.<br /><br />
Dirty rectangles which mostly overlap are now merged since blitting large regions is fast these days.<br />
*Animating Icons (which Planimate items inherit from) have been rewritten. Single item animation is now much simpler and uses double math. Multi-item animation has been cleaned up and is more straightforward.<br />
*Animating icons dont need to allocate a saveunder struct anymore, they contain one. This greatly reduces memory manager activity where there is a lot of animation and will reduce the memory throughput values in the memory manager statistics.<br />
*Saveunder code (eg: dragging objects about) rewritten; handles rotated rects properly.<br />
*Animation manager algorithms extended to handle changing object icons more reliably<br />
*scroller overlay graph change: (re-enabled scale update for column overlay graph even if scroller hidden)<br /><br />
<br />
===4.31d===<br />
<br />
*added a new system attribute (Display) "Timer Broadcast Interval" which lets the modeller change the timing interval of the "_Real Time Tick" broadcast. A range of 10ms (100 times a second) to 1000ms (once a second) is now supported.<br /><br />
100 times a second will be too fast for slower systems so be careful on using the faster rates.<br />
*fixed routine editor<br />
*title<br />
*ESC key handling<br />
*buggy cancelled add of a new routine line<br />
*replace attribute routine att browsing<br /><br />
*trace animation no longer applies to "background" broadcasts like network events, background continues and the timer tick broadcast.<br /><br />
Animating these BC's isn't helpful as they are real time; the modeller can still put force a screen change in the routine handler if they *REALLY* want to trace that BC.<br />
*quite a lot of internal rework of dialog/window code (system wide) so<br />
*button focus handled properly with TAB in modeless window<br />
*keystrokes properly handled (particularly ESC) when focus is on a button etc.<br />
*application properly closes modeless windows as soon as they are closed by the user<br />
*form positioning code reworked to handle resized form and button base row placement<br /><br />
Since PL doesn't have many modeless editors yet existing dialogs should not be affected.<br /><br />
please immediately report and messed up dialogs or key handling as a result of this EXE<br /><br />
<br />
===4.31c===<br />
<br />
*fixed bug in toolkit which caused keys like ESC and ENTER to be sent twice to the application, this created a bug when pausing a model with these keys then attempting to continue, the model would immediately pause again.<br /><br />
*The clock updates without any flicker at all now even for high update rates<br />
*New System Attribute (Display submenu) "Animation Update Interval" enables a model to control how often animation updates occur (0 sets none, model advances to model events only). See note below.<br />
*Note that<br />
===4.31a===<br />
changed the way the Animation Update Interval is handled.<br /><br />
Planimate now always delays a minimum of 15ms every animation update interval regardless of whether there is item animation or not. This makes model time flow more smoothly especially if time based portal animation is being used.<br /><br />
(previous versions did not always perform this timing delay)<br /><br />
If a model spends a long time without animation which you want to skip, you can now set the animation update interval system attribute to make the model advance without showing the "Advance" dialog.<br />
*New INI file attribute in the [Display] section "DebugStepSpeed" sets how many 15ms intervals to delay between steps, default is 10 (=150ms delay between steps)<br /><br />
<br />
===4.31b===<br />
<br />
*less overhead if the real time tick broadcast is not referenced<br /><br />
<br />
===4.31a===<br />
<br />
*new broadcast "_Real Time Tick"<br /><br />
This is sent as a background broadcast to the model 10 times a second even when the model is paused, a dialog or popup is open.<br /><br />
A model can use this broadcast to update object icons and perform low overhead background activities. With portals cycling states, nice animation effects can be incorporated into a model.<br /><br />
It must not generate a model error, cause a screen change or other major event.<br /><br />
It is not a good idea to view the item animation on the panel processing this broadcast unless the animation speed is set very fast. The model will be hard to "stop" but not impossible if CTRL-T is held down.<br /><br />
If the processing of this bc takes too much CPU time the application will become very unresponsive.<br />
*new routine editor is now modeless<br /><br />
Features include:<br />
*the routine list can be resized and PL will remember its posn when it opens<br />
*multiple routine lists can be opened and left in position while the model is edited further<br />
*runs can be started with the routine editor open. PL will animate the steps of any routines executed<br />
*during animation of steps the "Pause" menu has options to force a breakpoint and show routine attributes at whatever routine line PL is currently at<br />
*step editor keeps routine list in sync if navigating between steps (new steps dont appear in the list until they are committed)<br />
*step editor remembers its position<br />
*step context menu enables jumping to the start and end of the current "Block" within the if/while/iterate/case structure<br />
*cancelling an add doesn't edit the previous step that was there<br />
*have reworked object redraw code to change object icons with FAR less overhead especially if the dimensions of the icons are not changing<br />
*portals have a new option "Monitor Occupancy Of Subsystem"<br /><br />
With this option on, the portal is kept aware of items entering, leaving and being created within its subsystem (and subsystems within if their portals also have this option on).<br /><br />
This enables the portal to indicate its "occupied" state when there are items inside.<br /><br />
It is also used to limit access to the portal if the "Use Subsystem Total" mode is selected for portal item limiting. However this monitoring also adds overhead to the simulation and hence hasn now been made optional.<br /><br />
If the model does not depend on the automatic portal state, the portal occupancy ocunt or portal item limiting based on "Use SubSystem Total" (the other modes are OK) then this option can be turned off on the portal for a performance boost.<br /><br />
This option is on for all portals in older models to retain compatability and on for new models as the portal state updates is good for beginners.<br /><br />
If this option is changed, Planimate will offer to apply the change recursively to all portals under the current one being changed.<br />
*bugfix: icon browser doesn't remember older DB name when model is saved if the DB name didn't start with a "_"<br />
*bugfix: memory leak closing a model if a table view was still open<br /><br />
<br />
===4.31a===<br />
<br />
*fixed multiple run logging (was broken from K)<br /><br />
4.31<br />
*Fixed popup window management bug so when a "keep front" popup is closed the main window should stay at front not another applications<br /><br />
(bug was trying to make a child window frontmost because of a missing virtual function declaration for BringWindowToFront() so wrong fn called )<br />
*Added new time field format: Calendar YYYY-MM-DD HH:MM:SS<br />
*data set file calendar times are annotated with the date in a readable format<br /><br />
(the number is the # of seconds since 1 jan 1968)<br /><br />
If a date conflict occurs when loading a dataset from a routine operation, the differing dates are shown in the error dialog.<br />
*table editor allows resizing to much larger tables now but if you dont have the RAM to hold it, it will exhaust your system RAM!<br /><br />
(tables occupy 8 bytes per cell if they have no cell specific formatting + about 150 bytes overhead per column)<br />
*Table views have a new option "Single Click Cell Edit" which causes a cell edit when a cell is first selected instead of having to click it twice<br />
<br />
===4.30y===<br />
<br />
*fixed crash bug when setting format of a table column to free text in a routine<br />
*text imports properly into columns formatted for free text when importing from the table editor<br /><br />
<br />
===4.30x===<br />
<br />
*Tables can be migrated to any dynamic panel that doesn't contain a table with that name, both up and down the hierarchy.<br /><br />
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.<br /><br />
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.<br />
*gantt graphs have an option to "Align Row Labels At Left"<br /><br />
<br />
===4.30w===<br />
<br />
*routine operations to set view port pos and zoom<br /><br />
These are under the "Display" submenu.<br /><br />
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.<br /><br />
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)<br /><br />
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.<br /><br />
<br />
===4.30v===<br />
<br />
*fixed Crop/Trim Label routine operation.<br /><br />
It was not properly terminating the string, possible appending random junk to the end of the trimmed label<br /><br />
<br />
===4.30u===<br />
<br />
*"Lock Drawing" is disabled automatically if an item is animated on a visible panel, in order to prevent the animation manager crashing.<br /><br />
Lock Drawing is intended to prevent graphs/charts/tables from flickering not to prevent items animating.<br /><br />
*Deferred Drawing option for Log Driven Graph displays prevents the graph from drawing incrementally. This option only works when the run engine is active<br /><br /><br />
<br />
===4.30t===<br />
<br />
*column overlay displays properly with scroll bar hidden<br /><br />
<br />
===4.30s===<br />
<br />
*gantt, train graph and log driven graph can also have broadcasts associated<br />
*For portals in track networks:<br /><br />
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.<br />
*Have implemented a new option for portals used in track networks:<br /><br />
"Act As Junction"<br /><br />
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.<br /><br />
"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.<br /><br />
<br />
===4.30r===<br />
<br />
*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<br /><br />
Other graphical views will get this functionality next version<br /><br />
<br />
===4.30q===<br />
<br />
*Table View Scroll Broadcast: The platform will no longer send redundant broadcasts if the scroll hasn't changed<br />
*data set objects are saved in this order:<br /><br />
label lists sub label lists attributes tables<br />
*sub label lists can be selected and saved into a dataset and will be reloaded from the dataset.<br /><br />
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.<br />
*fixed long standing bug with pipes.<br /><br />
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.<br />
*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.<br /><br />
This file is cleared each time planimat.exe is started.<br />
*Debug Options: Added pipe attribute tracing<br /><br />
<br />
===4.30p===<br />
<br />
*support transparent backgrounds on buttons column overlay views log driven graph views gantt views train graph views<br /><br />
so they should repaint propely when they change.<br /><br />
This comes at a price of speed; when these views are transparent much more processing is needed to redraw the background behind them. <br /><br />
<br />
===4.30o===<br />
<br />
*table horizontal and vertical scrollbars can be hidden on a view by view basis<br /><br />
Scrolling still is possible using the keys and routine control<br />
*The table column setting "Column Title Rows" can now be 0 which will not show any title rows for the table<br />
*Have Implemented GRADIENT FILLS for paint rectangles and buttons<br /><br />
This should allow some very pretty interfaces<br /><br />
IMPORTANT NOTES:<br /><br />
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.<br /><br />
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.<br /><br />
3. Picking a colour using the "Background" button also sets the 4 gradient colours to that colour.<br /><br />
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.<br /><br />
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.<br /><br />
(Same applies to table views)<br /><br />
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.<br /><br />
<br />
===4.30n===<br />
<br />
*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.<br />
*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)<br /><br />
The tuple includes _rowscroll and _colscroll attributes (use Help-&gt;Broadcast Tuple Reference for this info)<br /><br />
The demo model "Table Scroll Broadcast" is on idBase as an example of how to do it.<br />
*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.<br />
*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.<br /><br />
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<br />
*BUGFIX: on-sort broadcast would be lost or become table click broadcast on a copied table view.<br />
*BUGFIX: debug log when setting paint arrow removed<br /><br />
<br />
===4.30m===<br />
<br />
*Help menu has new option "Broadcast Tuple Reference'<br /><br />
This displays the different internal broadcast event types and the item attributes that are set when that event causes a broadcast to be sent<br />
*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<br />
*Reverse Iterate routine operation<br />
*Rearranged system attribute menu flyout<br />
*Added two new system attributes - table row and table column<br /><br />
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.<br /><br />
These attributes can determine a table from:<br />
*direct references within an attref<br />
*dynamic table references<br />
*item table references (if item is available)<br />
*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<br /><br />
<br />
===4.30l===<br />
<br />
*default panel size now 672 pixels. If you have a previous version INI file you wont notice this new default.<br />
*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.<br /><br />
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.<br />
*fixed comma separated values when the value is -ve<br />
*can read and set position of time scrollers in the graphical table views (column overlay, gantt, log driven, train graphs)<br /><br />
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).<br />
*changed way double clicks are processed<br /><br />
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.<br /><br />
-- Alot of rewrite of scroller code for the graphical views. Look out for any strange behaviour in graphical view scroll handling.<br /><br />
<br />
===4.30k===<br />
[new file format]<br />
*new change object file operation to create a folder from a filespec or label name<br /><br />
(if the folder already exists no error is given and the folder is left intact)<br />
*have reworked file operations in change objects. Operations affected are<br /><br />
[** needs testing with existing models **]<br />
*rename file<br />
*delete file<br />
*copy file<br /><br />
These used to return a result in the first data target attribute (if any).<br /><br />
They now use the error result attribute instead. Older models are converted to use this attribute instead of the data target.<br /><br />
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.<br />
*"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.<br />
*System attribute "Multiple Run Count"<br />
*is 0 for normal runs<br />
*is the # of multiple runs for a multiple-run session<br />
*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<br />
*Fixed bug in table editor, an undo caused the table to lose it row label and colour column settings<br />
*fixed bug loading model from command line when OS was inserting quotes into the filenames (affected PMB files)<br />
*showing references from table editor now hides table editor while reference is being shown then restores it<br />
*Routine operation (Label-String) to rename a label.<br /><br />
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.<br />
*table resizes and imports no longer update the table editor if its visible so they will occur much faster<br />
*table editor views properly resize when rows are added/removed to accomodate row labels<br /><br />
<br />
===4.30j===<br />
<br />
*sped up scrolling of table view when scrolling to end of very large tables<br />
*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.<br /><br />
This produced a few "invalid screen" pointer warnings followed by a crash.<br />
*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.<br /><br />
<br />
===4.30i===<br />
<br />
*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.<br /><br />
A CDF is different to a PDF in that:<br />
*instead of returning individual points, it interpolates between them according to a uniform random value (0..1) and hence the returned value is continuous.<br />
*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.<br /><br />
The following example table will produce a distribution with 25% of the values between 0 and 5 and 75 % between 5 and 10.<br /><br />
0 0 5 0.25 10 1.0<br />
*set table cell colour property now fixed (broken in prev version by a bad double-&gt;int cast)<br />
*deleting a selected viewport no longer crashes platform<br />
*new INI options for table titles added, fixed string bug in INI which noone should have noticed (yet)<br /><br />
<br />
===4.30h===<br />
<br />
*I've implemented a PLANIMAT.INI file to store defaults for modellers.<br /><br />
The file is stored in the same folder as PLANIMAT.EXE.<br /><br />
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)<br /><br />
If an INI file doesn't exist, it will be created.<br /><br />
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.<br /><br />
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.<br /><br />
=== In the future watch out for this: === If you use an older version of Planimate which knows about INI files (ie:<br />
===4.30h===<br />
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.<br /><br />
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.<br />
*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.<br />
*pasted model objects now also follow grid snap<br />
*broadcast exit gets name set to the broadcast, as for BC entry<br />
*"dont initialise run" broadcast buttons fixed, were broken in recent broadcast rework<br />
*RTF views now support CTRL-B,CTRL-I,CTRL-U for bold/italic/underline and support "Find" (CTRL-F) and bigger notes.<br />
*no longer crash on selecting column heading menu for totally empty table<br /><br />
<br />
===4.30g===<br />
<br />
*changed grid snap<br />
*paint objects are pasted at snapped lowerx/y co-ord<br />
*newly formed boxes have all 4 sides snapped to grid<br />
*routine printing reworked<br />
*pages are now printed as queued, whether in the one routine or within the _page printed notification broadcast.<br /><br />
This fixes a bug in printing different panels within the _page printed broadcast handler<br />
*when an entry is in broadcast mode, selecting a broadcast renames the entry to the name of the broadcast<br />
*z-order/multiple screen fixes for:<br /><br />
Z order fix: Edit-Labels Edit-MultiLabels Edit-Broadcasts<br /><br />
Initial Position: Table Editor initial position Objects/Items palettes<br /><br />
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.<br /><br />
<br />
===4.30f===<br />
<br />
*Create Label List From Column has been enhanced.<br /><br />
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.<br /><br />
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.<br /><br />
The target table column must have the same # of rows as the table providing the source strings.<br /><br />
<br />
===4.30e===<br />
<br />
*Fixed rectangle calc bug which caused a row of junk pixels between the status line and the Planiamte model area<br />
*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<br />
*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)<br /><br />
<br />
===4.30d===<br />
<br />
*Fixed ordering of hover scanning so topmost portals sense the hover broadcast first<br /><br />
<br />
===4.30b===<br />
<br />
*I've changed the way most tuple broadcasts are sent (eg: table click, gantt click, graph click, sort complete, button state<br /><br />
These all need retesting to ensure I haven't broken them.<br /><br />
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.<br />
*Portal Hover broadcasts now properly handle re-entrancy, previous version could easily crash as hover broadcasts are sent even during item animation.<br /><br />
Also made them process in background so hovering doesnt cause mode change flicker<br />
*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<br /><br />
(see HOVERPOP.MDL in note [#116] )<br /><br />
<br />
===4.30a===<br />
<br />
*Hover broadcasts added for portals [#116]<br /><br />
4.30<br />
*Fit panel to model area now ignores hidden objects when computing the bounding rectangle<br />
*New time format displays relative times without seconds (if seconds are present on input fields it will still read them though)<br />
*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<br />
*fixed bug in pause handling in<br />
===4.29z===<br />
(If continue flag set, model would pause after current epoch)<br />
<br />
===4.29z===<br />
<br />
*Added button action to open table editor<br />
*these currently dont get updated if tables get renamed<br />
*they dont allow access to tables not in scope<br /><br />
These are intended to help in debugging. They have a slightly smaller memory footprint than a table view and (unlike a table view) no impact on table processing speed if a view is not open.<br />
*Fixed Trace Animation system attribute (started it ok but didn't stop it)<br />
*fixed Pausing issue with broadcast buttons with the continue run option on. They no longer do a separate continue to clear zero time events if the modeller has indicated the run should continue after that broadcast.<br /><br />
<br />
===4.29y===<br />
<br />
*Have reworked the control keys<br /><br />
CTRL-B (screen history navigation) now has the following action:<br />
*if at front of history list, steps back one<br /><br />
eg: A B C D [E] =&gt; A B C [D] E CTRLB<br />
*if not at front of history list, the current screen is put to the front of the history list and the previous one is selected<br /><br />
eg: A B C [D] E =&gt; A B C [E] D CTRLB<br /><br />
The effect of this is that CTRL-B now acts like a toggle between current and previous screen viewed but in addition if its used along with CTRL-F and CTRL-D (forward/back through screen history) the screens can be re-ordered to put screens of interest into close proximity with each other when CTRL-D and CTRL-F are used.<br /><br />
eg: A [B] C D E =&gt; A C D [E] B CTRLB<br /><br />
*message dispatchers have a new option<br /><br />
"Dont Copy Back Message Item"<br /><br />
When this is selected, the attributes/carried items of a destroyed message item are NOT copied back to the original item when it leaves the dispatcher.<br />
*navigating panels in browser no longer adds them to the history list<br />
*Added show/hide table editor routine operations (under display)<br /><br />
<br />
===4.29x===<br />
<br />
*fix database model DB read (properly)<br /><br />
<br />
===4.29w===<br />
<br />
*made pausing even more agressive - continue flag will no longer be set if a pause flag is already set<br />
*fixed bug introduced in "u" which caused model DB to be ignored<br /><br />
<br />
===4.29v===<br />
<br />
*new control key shortcuts<br />
*CTRL-B or CTRL-D = back in history<br />
*CTRL-F = forward in history<br />
*CTRL-U = Flow mode (old ctrl-f)<br /><br />
<br />
===4.29u===<br />
<br />
*a number of bugs with empty tables and selection tracking and the menu options have been cleared up to prevent operations on empty tables<br />
*Implemented multi level go back on CTRL-B (back) and new CTRL-V (forward) Stack depth is currently up to 64 screens.<br />
*If a thread ends in a "pause run" exit, any "continue run" set by will be reset. This only applies if the continue event hasn't already been posted to the FEC.<br />
*(Interdyne version only) - set default DB to point to _data.db specifically since it cant create an empty interdyne.db anymore and complains.<br /><br />
<br />
===4.29t===<br />
<br />
*paste/append for cell edits. Note that this always appends the copied data at a new row and starting at column 1<br />
*Added support for Rand and Euro money formats<br /><br />
(the Euro symbol may have problems with some codepages, let me know if it doesn't appear properly on your system)<br />
*index across/down now handles incrementing calendar dates intelligently.<br />
*the input field accepts value formats like 10d, 1W, 1M, 1Y etc.<br />
*indexing by 1M or 1Y for example is recognised and the dates increment properly<br />
*indexing by units (treated as seconds) or days (eg: 100d) still works as expected<br />
*can index by a negative time period<br />
*Window option "Fit Panel To Used Area"<br /><br />
Resizes the current panel to fit around the contents, allowing for a margin which can be specified in a dialog which appears.<br /><br />
(not supported for dials)<br />
*Click-dragging in the background in object edit mode will select all objects which completely lie in the region dragged over (includes paint and views as well)<br /><br />
(not supported for dials)<br />
*Viewports support shift clicking, dragging, copying<br />
*fixed crash bug when a track loop was selected in a region and the region was deleted (these cannot be deleted in a region)<br />
*Have reworked panel code to reduce allocation overhead for paint, viewport and view management lists. This will benefit models with many portals<br /><br /><br />
<br />
===4.29s===<br />
<br />
*a newly added random distribution defaults to "units" for the parameters unless a time is specifically entered<br />
*A new unit mode 'v' can be specified in a value input field (creating attribute, specifying distribution) to force a switch to "Units" mode.<br /><br />
Previously once PL got into time mode, it wasn't possible to get it back into units mode.<br />
*fixed crash bug in modeless Table Editor (uninitialised variable) which caused crashses when double clicking or selecting "Edit Owner" on a view<br />
*fixed bug in time routines which caused fractions of seconds to be lost when in time mode<br />
*fixed Last file path option now appears in the menu<br /><br />
<br />
===4.29r===<br />
<br />
*Last file path system attribute (warning:dont try assign to labels, path may be long)<br />
*fixed table editor bug in Q (wasn't properly checking for pointer when applying updates to editor, causing crash on some models)<br /><br />
<br />
===4.29q===<br />
<br />
*Modeless table editor Editor appears in separate window, can stay open while other parts of model edited Need to implement lockouts for some edit operations during run so be careful (eg: not good idea to rename a table during a run)<br />
*User socket config - user can toggle socket between client and server mode<br /><br />
<br />
===4.29p===<br />
<br />
*Fixed bug when saving model as a stand alone application or bundle The model was not being stopped first, if the run was active it could lead to corrupted date data.<br />
*Fixed bug (introduced in<br />
===4.29n===<br />
, hover broadcasts) which caused PL to crash if a model error occurred during initialisation of the model and you used the show location button. While the location was being shown, a message was being processed which stopped the engine before it had finished initialising.<br /><br />
<br />
===4.29o===<br />
<br />
*fixed bug with DB loading introduced in n<br />
*added missing buttons to socket config form<br /><br />
<br />
===4.29n===<br />
<br />
*Now support sending a broadcast when a hover change occurs in a button<br />
*Now support saving and loading PMB files which combine models and their databases.<br />
*Fixed mess bug due to drawing triangles (arrow heads) - wrong array size<br />
*Fixed crash bug when using dynamic object deletion - was using delete object to look up its manager.<br /><br />
<br />
===4.29m===<br />
<br />
*Fixed dialog handling of non editable label fields (they became editable when added calendar field)<br />
*Added display options to enable hiding of file name/panel/status indicator in the status bar when in user mode<br />
*Default new window width/height has been increased to something more contemporary (1020 * 674)<br /><br />
<br />
===4.29l===<br />
<br />
*made it possible to use "SET" in a routine operation with the source and target being a label list reference. This allows a label list to be quickly copied (names and values).<br />
*cancelled file selection in change object file read or write returns -1 if a result variable is used<br /><br />
<br />
===4.29k===<br />
<br />
*Enhanced error trapping for change object file reads, catches more data errors rather than stopping the run. Search on "File Access".<br /><br />
<br />
===4.29i===<br />
(vc build)<br />
*fixed crash on close for a model. Model used multi label list which contained a sub label list but I was deleting the sub label list first, causing the multi label list to crash as it cleaned itself out. Didnt cause crash with the SC compiler but a good one to be rid of).<br /><br />
<br />
===4.29i===<br />
<br />
*pause animation menu enables debug options to be changed while an item is in flight - very useful for debugging graphical logic<br />
*Routine button now shows popup menu to enable selection of either viewing routine atts (like previous) or exporting routine to a file and opening it.<br /><br />'''OBSCURE BUG FIXES'''<nowiki>:</nowiki><br />
*save on exit could occur randomly due to uninitialised variable<br />
*track restriction check was broken and always would return "restricted" when it shouldn't messing up decisions in lookahead<br />
*have fixed time calculation bugs in operations like "day of week" and "month of year" when the time is a -ve number (eg: times before the current model start date)<br /><br />
<br />
===4.29h===<br />
*Adding text window to dialog box now prompts for text<br />
*if a table column is formatted for labels and the "default width" dialog is confirmed, the column title is now left-justified by default. This can be changed by editing the column.<br /><br />
===4.29g===<br />
<br />
*hover state disable option for button states<br /><br />
<br />
===4.29f===<br />
<br />
*fixed animation bugs when mouse is clicked while animation is occuring with the "Enable Mouse Clicks While Running" option on<br />
*Routine editor for DeleteRow/DeleteCol now will set the "count" to the Row Count / Col Count for the selected table.<br /><br />
<br />
===4.28w===<br />
<br />
*"_panel closed" broadcasts now get sent to all closed panels including popups and viewports, when they become hidden.<br /><br />
As with other system broadcasts, if the panel is a view panel, the broadcast is sent to the nearest owning dynamic panel.<br /><br />
<br />
===4.28v===<br />
<br />
*Popup item details are always fully written to the _PLError.Txt file<br />
*New tables default to having 2 title rows enabled<br /><br />
<br />
===4.28u===<br />
<br />
*New System Attribute "Last Stop Reason"<br /><br />
This returns a numeric code describing why the run/engine stopped LAST time. This can be very useful in handling error recovery and may make handling "just loaded" situations easier than using the "_model loaded" broadcast (but that BC is still available). Also very useful in handling restart dispatchers since the model can easily know that a "control" item will be present.<br /><br />
The current codes are as follows:<br /><br />
0 Loaded/No Previous Run no previous run, model just loaded or created 1 User Stopped Run user selected stop from menu/keyboard 2 Model Stopped Run model self stopped (exit, posted stop message) 3 Platform Required platform stopped run (closing, load/save model/scenario, editing time ref) 4 Error In Model/Engine error in model or runtime engine 5 Broadcast Option broadcast set to stop 6 UI/Portal Click Option user interaction: portal clicks, 7 Restart Dispatcher restart dispatcher restarted the run (item preserved) <br /><br />
I've added a label list to name these codes.<br /><br />
*Have implemented fine timing/profiling of a model's run. The tests give microsecond accurate measurements. These results (when enabled) appear in the report generated by the "Show Run Profile" menu option.<br /><br />
The debug option "Enable Event/Routine Profiling" causes Planimate to keep track of the count, average run time, peak run time and total run time of:<br />
*FEC events, the time scheduled events which initiate item movement, unblocking etc.<br />
*Individual routine operations, summarised by individual operation type (eg: Set, Increment, Search, Dialog etc...)<br /><br />
These stats go a long way to identifying where a model's run time is going.<br /><br />
Note that enabling profiling causes a model to run at about 60% its normal speed, this is due to the large overhead in calling the system to fetch the fine timer count.<br /><br />
Profiling must be enabled BEFORE the run is started, setting the option during the run has no effect until the run is restarted.<br /><br />
There is quite a bit to say about the operations and the relevance of their times, here are some initial observations:<br />
*the peak time for an event may be quite large. This can occur if Windows pre-empts Planimate to run another task, the system performs network activity, the event involves animation or a dialog, or data is swapped to and from the swap file during that event.<br /><br />
For meaningful results try perform profiling with a lightly loaded system, as much free memory as possible and without animation. Use the the "advance to time" feature to ensure as much CPU time as possible is spent within the model you are trying to profile.<br /><br />
Be aware those taskbar icons, especially the "fast-starts", network monitors, virus scanners and other "helpful" utilities all consume system RAM and steal the processor occasionally so they can update themselves. This can lead to huge one-off peaks for otherwise fast operations, lasting from 10 to 500ms.<br />
*Using "advance to time" on a panel without spatial links seems faster than on one with them, will have to investigate this.<br />
*the profiler quickly identified that row inserts were taking ages (20ms average) compared to everything else (20us). It turned out the insert was on a debug table with 170000 rows and 5 columns in it, ie: a 6.8MB shuffle each time.<br /><br />
An append to a big table will be faster than an insert at row 1. Same for row deletes, deleting from the end will be faster.<br /><br />
(btw:block deletion is optimised so use it instead of row by row)<br />
*Iteration/ifs/whiles will tend to have a large time since PL is spending a lot of time processing within them. The results are cumulative so a nested iteration will lead to a large iteration total time.<br />
*A large average time for "Set" could indicate Planimate has to swap to get to data (running low on memory)<br /><br />
<br />
===4.28t===<br />
<br />
*ODBC Data source can now be dynamically looked up via an attribute/label list<br /><br />
If the DSN starts with a ":" the following text is interpreted using the same mechanism as the ODBC attribute parser, hence<br /><br />
":pMyAttribute" will use the formatted value of portal attribute "MyAttribute" as the DSN name.<br />
*Table Driven Entries and Dynamic Table Column Add/Remove:<br /><br />
Table driven entry will no longer cause crash if the "_time" column is no longer valid. However it will NOT track movement of the time column once the run has started.<br /><br />
Hence if using dynamic columns with table driven entries:<br />
*Ensure the time column ends up in the original position as at the start of the run whenever columns are manipulated<br />
*Dont manipulate columns in the table unless the table is empty (no rows)<br /><br />
Otherwise the table driven entry may produce spurious items<br />
*Fixed labelling of Activity State system attribute<br /><br /><br />
<br />
===4.28s===<br />
<br />
*I've changed Dialog forms to be ownerless topmost. This means they always appear at the top of any other windows/popups but they dont have an owner so they shouldn't mess up the Z-order.<br />
*RTF notes now are placed in a stand alone application.<br /><br />
Required some rework of way RTF notes and DB file is handled, look out for any probs.<br />
*Breakpoint dialog now has a "Debug" button enabling debugging options to be changed (eg: trace animation) while still at the breakpoint/current point in the thread.<br /><br />
<br />
===4.28r===<br />
<br />
*reworked the way the attribute rename bugfix is done to prevent it messing up the model further on load<br /><br />
<br />
===4.28q===<br />
<br /><br />
************************************************************************<br />
*Have fixed issue of attref editor feeding long names to the attribute creation dialog.<br /><br />
*** In addition, upon load, any attribute names which are too long are cropped to the proper length and a warning message is given:<br /><br />
"Model Attribute "name" cropped to 20 characters"<br /><br />
These long names should not have been able to get in there and may cause some of the editors to crash.<br /><br />
Thanks to Matt for helping identify this nasty one<br />
*Fixed cell stat update problem. This was introduced around<br />
===4.28k===<br />
<br />
*breakpoint dialog has option to terminate the run<br />
*breakpoint dialog displays comment line of routine if available<br /><br /><br />
<br />
===4.28p===<br />
<br />
*added a new system attribute to limit how deep PL will scan a spatial net looking for the closest target.<br /><br />
The attribute needs to be set each time the model is loaded, it is not saved. The default is 9999999 (ie: dont limit search depth).<br /><br />
Setting this value means Planimate may not chose the shortest distance path in a spatial net if it contains more intermediate nodes than an alternative which is further in distance, and the node limit happens to be exceeded in scanning the shorter path.<br /><br />
This will be obvious in incorrect animation but should not affect the item arrival time. In other words, reducing the search depth may cause PL to chose a route which is not the "shortest". It may also cause Planimate not to find the correct route at all (if it has too many intermediate nodes) in which case PL will report a flow error.<br /><br />
<br />
===4.28o===<br />
<br />
*sped up allocation of routine change objects<br />
*sped up execution of routines in "Only During Move" mode<br />
*sped up portal code (track list management) and less allocation needed<br /><br />
<br />
===4.28n===<br />
<br />
*added extra check for the "intray" to enable the "drop item" feature to be used at a given tray even if some item classes dont have the "drop" attribute defined. As long as there isn't an outgoing flow for this class, an error wont be produced.<br /><br />
<br />
===4.28m===<br />
<br />
*no functional difference but many renames of internal modules. Im releasing this to ensure no strings have been messed up, look out for any funny titles or text in menus, forms.<br /><br />
<br />
===4.28l===<br />
<br />
*have reworked FEC management for zero time events<br /><br />
The FEC now will order zero time (immediate events) as follows<br />
*Broadcasts - have top priority (including item and system info BCs)<br />
*Moves and Unblocks<br />
*Clock resetting/restart<br />
*Button clicks during animation<br />
*Other events (0 delays etc)<br /><br />
The idea is to process as many activities as possible (eg: handling BCs) before making move and unblock decisions based on the side effects due to attribute/table changes.<br /><br />
This (hopefully) starts to bring some order into the otherwise murky world of zero time events. You still must not depend on the order of BCs being processed, unblocks and moves being performed etc.<br /><br />
Let me know if the new rules raise issues with models, particularly interactive ones<br />
*have reworked tuple allocation/memory handling. The previous version did not handle multiple tuples of the same type properly, which would have caused problems with multiple pages printed, tables sorted etc. if you used the broadcasts returned values.<br /><br />
This was required to get the table edit BC working properly.<br /><br />
<br />
===4.28k===<br />
<br />
*tables have an option to send a BC whenever any cell in selected columns is modified by any means. The bc sent includes the _row and _col of the modified cell. The routine can use this information to update data, summaries etc.<br /><br />
If a row/column/shift operation caused the change, then _row may be 0 (indicating potentially all rows are affected) but _col will always be properly set because separate broadcast will be sent for each column with this feature selected.<br /><br />
In other words, a separate BC is not sent for every cell modified but only for every column modified.<br /><br />
To use this feature:<br />
*In the table editor, use the [Table]-&gt;Advanced-&gt;Recalculate Broadcast menu to select/add a broadcast.<br />
*For each column that you want change notification, enable the "Send Recalculation BC" option.<br /><br />
The broadcast is sent to the dynamic scope of the table, with item attributes _row and _col set as described above.<br /><br />
*fixed bug in msvc handling of RTF notes<br /><br />
seems VC does not automatically flush contents of a stream when the stream is deleted. I do an explicit flush() which seems to fix it<br />
*label name drop down in attribute editor is now sorted by name for all label list types. This is independent of any setting for the label list.<br /><br />
(let me know if this causes a delay problem with very long label lists)<br /><br />
<br />
===4.28j===<br />
<br />
*Popup forms (like the popup selection list) now lock a parent popup from closing while they are up, to prevent their owning popup disappearing before they do.<br /><br />
<br />
===4.28i===<br />
[new file format]<br />
*I've implemented bulk row deletes in the internal table data structures and updated Planimate table handling to make use of it.<br /><br />
This will make deleting a large number of rows (using a single delete row operation) from a very large table very much faster than it used to be.<br /><br />
*** Look out for any problems with tables when row operations are involved.<br />
*Display option to hide dataset load/save menu items even if datasets are in use<br />
*popup panels are now properly sized when the subsystem they view has a display zoom factor set on it<br />
*Fixed a bug in window/scrollbar management which caused unnecessary margins when a panel was zoomed to a size bigger than the display screen<br />
*Fixed a bug which caused dynamic table refs replaced with standard table refs to not properly forget their P3<br />
*Paint buttons have an option to prevent them highlighting when clicked<br /><br />
<br />
===4.28h===<br />
<br />
*fixed handling of table cell-specific formatting, was not properly handling default format in the new editor when other cell properties such as colour were used<br />
*holding down control key as model loads prevents run on load, if user has an editor key only.<br />
*internal rewrite, should not affect PL have reworked window management code. Cleaned up basic screen drawing code. Forms now inherit from Screen() and support scrolling, menu bars<br /><br /><br /><br />
<br />
===4.28g===<br />
<br />
*another closing bug fixed. This one occurred when trying to close a Planimate application which had the File Load/Save options disabled. Planimate used this flag to determine if a modified model *could* be saved, and it coudln't, it considered it a failed save and refused to close.<br /><br />
I've changed it to this now: If you CLOSE PL with a model in Application mode and with the "Hide Load/Save Menu Items" option ON (the default is OFF), then any changes to the model will not be saved - even if you use an editor key.<br /><br />
While editing a model I suggest keeping this option off and only activating it when shipping to a client.<br /><br />
Heres a summary table:<br /><br />
EXE/KEY/MODE Can Save By Menu May Save On Close --------------------------------------------------------------------------<br /><br />
Full/Edit Key/Editing YES YES *3<br /><br />
Full/Edit Key/Application *1 *2 *3<br /><br />
Full/Run Key/Application *1 *2 *3<br /><br />
Interdyne Build/ NO NO<br /><br />
Stand Alone Application/ NO NO<br /><br />
Demo EXE (any mode) NO NO<br /><br /><br />
*1 Only if the load/save menus have not been disabled by turning on the "Hide Load/Save Menu Items" option.<br /><br />
*2 Planimate will offer to save any changes unless the "Hide Load/Save Menu" option is on in which case changes are not normally saved.<br /><br />
*3 IF the model uses "Save And Close" or the /SAVEONEXIT command line option is used, the model will be saved.<br />
*fixed bug in password handling, introduced in F due to a side-effect of changing the way a function is called.<br /><br />
ANY MODELS SAVED WITH F WILL NEED THEIR PASSWORDS RESET<br />
*fixed bug in right align option for paint buttons<br />
*bogus message on CTRL-SHIFT-H bug for standalone EXEs fixed<br /><br />
* Now we have the Save As Application functionality, I plan to drop support for "INTERDYNE" compilation builds.<br /><br />
<br />
===4.28f===<br />
<br />
*now properly handle closing a stand alone EXE. Previous versions would not close if the model had changed which could not be saved by the EXE since saving is not available.<br />
*now display the following message if a close box [x] is attempted on a running/animating model<br /><br />
"Cannot close, a run is in progress. Pause or stop the model first."<br />
*The "pause" menu which appears when a click occurs during animation is now suppressed if the "clicks while running" option is enabled. The right button can still be used to display the pause menu.<br /><br />
The background menu can be disabled altogether using the "Dont Show background Run Menu" option.<br />
*Updated paint button's "visible" handling to make it consistent with other objects. "Hidden" PaintButtons will now hide when running in editing mode as well as in application mode.<br />
*rearranged paint button menu to make it clearer that certain options apply to each state.<br />
*buttons can be right aligned<br />
*Have slightly reworked the random number generator code. Run results should still be the same as in previous versions.<br /><br />
*** Note *** I'm planning to switch to a 32 bit version of the current random generator (which is 16 bit), which will yield a much finer value granularity.<br /><br />
When this is implemented, model runs depending on random variation will change in behaviour due to the different random sequence. This future EXE will give a warning to this effect when an older model is loaded.<br /><br />
Let me know if you have any comments on this.<br /><br /><br />
<br />
===4.28e===<br />
<br />
*fixed RTF redraw bug which caused PL to consume CPU when an RTF note was redrawn. This is due to the new RTF note library requesting a redraw at an unexpected time, probably to implement transparency (not avail in PL)<br />
*more internal editing, window co-ordinate function names have been cleaned up, part of fixing the RTF redraw bug.<br /><br />
<br />
===4.28d===<br />
<br />
*NO NEW FEATURES OR BUG FIXES!<br /><br />
However we've put a lot of work into updating the source to work on a different Windows compiler. Model file compatability is same as<br />
===4.28b===<br />
so if you find a difference between<br />
===4.28d===<br />
and<br />
===4.28b===<br />
, please report it.<br /><br />
<br />
===4.28c===<br />
<br />
*old plain text notes will no longer save after an edit - convert to RTF notes. New ones have not been add-able for a while<br />
*porting to new compiler, look out for any strange behaviour particularly in the editors and option selection<br /><br />
<br />
===4.28b===<br />
<br />
*Implemented basic string operations for labels:<br /><br />
Append To Label - appends a formatted value/label to a label Crop/Trim Label - extracts a substring of a label name Remove Label Extention - assumes label is a filespec with an extention, removes the last "." and everything following.<br />
*have created new routine operation flyout "Label/String" and moved some of the label operations which deal with string issues there as the label flyout was getting too big<br /><br />
<br />
===4.28a===<br />
<br />
*New Display Option "Enable Mouse Clicks While Running" enables buttons to be selected while the simulation is running (not paused).<br /><br />
This works as follows:<br /><br />
A click on a button is processed whenever Windows gets an opportunity to process an event (Planimate yields to it). The button will visibly react to the click but the click message will be posted to the model FEC to be processed as the immediate next event.<br /><br />
The result of this is:<br />
*models which are routine intensive (eg: searching) will be rather unresponsive to the mouse whereas models with animation will be OK<br />
*models which have zero time logic without ANY capacity or intensive routines will take a while to get round to responding to the mouse click<br />
*The button clicks can occur and be processed before the completion of side effect actions as a result of the current operation.<br /><br />
This last point is particularly important. I may have to disable buttons which can influence a model's run (eg: broadcast) or handle them specially but this has not been implemented at this stage.<br />
*"Free Text" is now a value format mode rather than a table option. Only columns will work in free text mode, its not supported for attributes and individual table cells.<br />
*have completely rewritten table cell edit code to clean it up<br /><br />
Cell views now display and can be edited in free text mode.<br /><br />
All Table cell editing/Cell View editing needs to be validated to ensure I've not broken anything (ie: formatted value, label list, time dialog and free text) - it seems OK to me.<br /><br />
This rework will make enhancing editing of table cells much more straightforward<br />
*Compatibility Window MOVED<br /><br />
This version of Planimate will only load models saved with version<br />
===4.25s===<br />
or later (model file version 306). Keep an older EXE to translate up old models.<br />
*PROCESSOR/COMPILATION change<br /><br />
This version of Planimate requires at least a Pentium level processor or compatible.<br />
<br />
===4.27w===<br />
<br />
*data set (scenario) saves now send the broadcast _DataSet Saved<br />
*changed data set load from the command line to use the same code as the model-initiated data set load<br /><br />
<br />
===4.27v===<br />
<br />
*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<br /><br /><br />
<br />
===4.27u===<br />
<br />
*fixed bug causing crash in Find in change objects without a routine<br /><br />
<br />
===4.27t===<br />
<br />
*The "Find-&gt;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.<br /><br />
<br />
===4.27s===<br />
<br />
*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.<br /><br />
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.<br /><br />
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.<br /><br />
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.<br /><br />
<br />
===4.27r===<br />
<br />
*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.<br /><br />
The bug did not affect using the system-item attributes to set the spatial link destination.<br />
*Have increased width allowed for system commands executed as part of a file access operation<br />
*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.<br />
*New routine operation "Format Into Label".<br /><br />
This enables any formatted attribute (including the string system attributes mentioned above) to be placed into a label list and allocated an index.<br /><br />
<br />
===4.27q===<br />
<br />
*New feature: Create Standalone Application (File Menu).<br /><br />
This option enables a model and its resources to be packaged as a standalone executable which requires no other files to run.<br /><br />
When selected, it confirms that it will save the model before starting. It then:<br />
*Takes the current running EXE and copies it<br />
*adds to the copy the model (scrambled to prevent casual viewing)<br />
*adds the model's database (notes, icons etc)<br />
*adds all additional icons the model references<br />
*adds all additional BMPs/WAVs/AVIs/MPGs/MP3s that the model references<br />
*writes the result as an EXE with the name of the original model.<br />
*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.<br /><br />
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.<br /><br />
Standalone EXEs do not (currently) need a key file to run.<br /><br />
The option should be used with a model which can locate all its icon resources (use display-&gt;Show Model Info to check icon and file references). Otherwise warning messages appear (but the build continues).<br /><br />
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.<br /><br />
Sounds are only copied into the DB if the name in the reference includes the ".wav" extention.<br />
*Change to media handling<br /><br />
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.<br />
*BUGFIXES:<br /><br />
INTERDYNE ICON BUG<br /><br />
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.<br /><br />
This has been fixed with the latest InterDyne build, but this is rapidly becoming obsolete with the save-as-EXE facility.<br /><br />
Showing file references while a paint image object is in the clipboard will no longer crash<br /><br />
Newly created paint images are not counted twice in file references<br /><br />
<br />
===4.27p===<br />
<br />
*bugfix: time scale interval for a panel can now be set<br /><br />
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.<br /><br />
<br />
===4.27o===<br />
<br />
*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.<br />
*fixed crash after model merge<br /><br />
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.<br />
*fixed small memory leak which occured when arbitrary strings were loaded.<br /><br />
<br />
===4.27n===<br />
<br />
*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.<br /><br />
To keep a particular connection open over multiple change objects, each change object using that DSN must have the "Keep Open" option on.<br /><br />
Only one DSN can be kept open, a new one will override an older one.<br /><br />
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.<br /><br />
Future Planimate versions may support caching multiple DSNs.<br /><br />
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.<br />
*App Panels within App Panels can be included in flows<br /><br />
<br />
===4.27m===<br />
<br />
*Password required to switch out of interdyne mode even with editor key<br /><br />
<br />
===4.27l===<br />
<br />
*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<br /><br />
<br />
===4.27k===<br />
<br />
*fixed bug which caused the big string editor to appear for values as well<br /><br />
<br />
===4.27j===<br />
<br />
*Fixed some issues with string table cell copying<br />
*Now support long strings with line breaks for table cell strings<br />
*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.<br />
*Fixed bug in counting of redraws for panel screens<br /><br />
<br />
===4.27i===<br />
<br /><br />
Any subsystem can create an object label reference for its owning portal using a new routine operation Label-&gt;Create SubSystem Label.<br /><br />
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.<br /><br />
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<br /><br />
<br />
===4.27h===<br />
<br /><br />
I've reworked the way server connections are handled to make the IP code more robust against unexpectedly closed connections<br /><br />
<br />
===4.27g===<br />
<br /><br />
Initial test for initiating a URL read from a change object (FILE operation) no content is actually read from the web server yet.<br /><br />
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.<br /><br />
In either case INI file mappings are applied to the from file name/URL<br /><br /><br />
<br />
===4.27f===<br />
<br /><br />
(removed older release notes from end of this file)<br />
*fixed another bug in TCP/IP handling which caused broadcasts to try to send over unopened server connections<br />
*Table fill/index operations will now stop at the edge of a selected region rather than continuing to end of the table<br />
*system confirms with user before changing the width of a column after a format change occurs<br /><br />
<br />
===4.27e===<br />
<br />
*fixed bug introduced in d in IP code acting as client<br /><br />
yyyy-mm-dd date format is now formatted with leading zeros for mm and dd to ensure they are always 2 digits<br />
*broadcast buttons now support sending a broadcast to the scope of the dynamic panel they are most closely linked to.<br /><br />
This is an option of the broadcast (within the click action) and is on by default for new buttons as it encourages modularity.<br />
*paint button states are now selected by ID not by their position in the list<br /><br />
Each paint button state can be assigned an ID code. Older version models are assigned IDs 1,2,3 etc. and hence stay compatible.<br /><br /><br /><br />
<br />
===4.27d===<br />
<br />
*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.<br /><br />
It will not cope with heavy loads (or complex pages loading multiple images) as it doesn't multi-thread its processing of requests.<br /><br />
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 #.<br /><br />
Once running the server responds during edit and run mode.<br /><br />
1. At the moment, just entering the address of the machine (I'll use loopback here, 127.0.0.1, assuming local testing) will yield debug diagnostics.<br /><br />
http://127.0.0.1/<br /><br />
Eventually this will retrieve a model-default page instead and the debug will have a specific token to retrieve it.<br /><br />
2. Entering the name of a file in the current Planimate working directory (or a subdirectory thereof) will retrieve the file<br /><br />
http://127.0.0.1/index.htm -&gt; retrieves index.htm if it exists<br /><br />
The server will only serve htm,gif,jpg and txt files, for security<br /><br />
3. Entering a parameterised string as follows will trigger a Planimate broadcast (the model must be running)<br /><br />
http://127.0.0.1/bc?name=mybroadcast&amp;class=item&amp;attribute1=12345<br /><br />
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 '&amp;' to append further assignments.<br /><br />
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.<br /><br />
A demo model is provided to demonstrate this.<br /><br /><br /><br /><br /><br /><br />
<br />
===4.27c===<br />
<br />
*Implemented new time format<br /><br />
YYYY-MM-DD<br /><br />
This format is used in SQL/ODBC dates<br /><br />
<br />
===4.27b===<br />
<br />
*PAINT BUTTON<br /><br />
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.<br /><br />
For each state, the button can have the following properties:<br />
*the style of border, background, text and border colours<br />
*the button text<br />
*the font used for the button text<br />
*the tool tip text<br />
*the name of a BMP image to fill the button background with<br />
*options whether<br />
*the button text should be centred or left aligned<br />
*the button text should be top or middle aligned<br />
*the button should be visible to the user<br />
*the button should be clickable by the user<br /><br />
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.<br /><br />
I've not implemented and dealt with state ordering issues at this time.<br /><br />
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.<br /><br />
*fixed bug with ODBC diagnostic messages - the statement handle was being deleted before the debug message was displayed.<br /><br />
<br />
===4.27a===<br />
<br />
*fixes a bug introduced in 4.27 which caused a crash if a control-paste replaced the original object which was copied.<br /><br />
4.27<br />
*Log Viewer no longer crashes with log model names<br />
*Added new dynamic object operation: REPLACE (command code of 3)<br /><br />
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.<br /><br />
The new object will hence get the ID _new_id.<br /><br />
The _x,_y and _new_panel columns are ignored in this mode.<br /><br />
<br />
===4.26z===<br />
<br />
*Added routine operation for track networks which returns the number of roads a section is representing<br />
*fixed model save/load bug introduced in<br />
===4.26r===<br />
which would cause model file containing section stat views to not load if saved in<br />
===4.26r===<br />
or later.<br />
*Planimate properly detects a disk becoming filled as a model is saved and reports an error message. Previous versions did not perform the test properly since I rewrote file saving many versions ago.<br /><br />
<br />
===4.26y===<br />
<br />
*attribute report is properly written (was only writing 3 lines)<br />
*New Feature for Gantt Graph<br /><br />
I've added the option to place lines which connect the blocks in a gantt graph display. These can be used to indicate flow or relationships between the blocks.<br /><br />
To use this feature, the gantt table needs a couple of new columns:<br /><br />
_link_ganttrow<br /><br />
This specifies the row index to which a link should be formed.<br /><br />
Planimate will link to the most recent block on that row (which must appear earlier in the table).<br /><br />
_link_color<br /><br />
This sets the colour of the link line, default (if column not present) is black.<br /><br />
_link_thickness<br /><br />
This sets the thickness of the line, default (if the column is not present) is 1.<br /><br />
<br />
===4.26x===<br />
<br />
*clicking on a broadcast entry in paused-model editor mode now prompts user to produce an item (ie: act like a click entry)<br /><br />
This can be very useful when debugging a specific flow without sending the broadcast to everyone.<br />
*sub label lists "Sort By Name" option is now implemented<br /><br />
If on, the popup of labels from a sub label list is sorted alpha. If OFF the list is sorted in the order that the SUB LABELS WERE ADDED.<br /><br />
This enables a customised "menu" to be dynamically created with the items in a specific order.<br /><br />
Double check any existing sub label lists to make sure this option is ON if you want their lists to continue to pop up as sorted.<br />
*BUGFIX in _Page Printed broadcast sending<br /><br />
A bug in the way this broadcast was looked up was fixed, this bug has been there for a long time and caused Planimate to send the wrong broadcast for older model versions.<br /><br />
(this broadcast is used when printing from a change object, enabling the model to control the printing of multiple panels and multiple scrolling of a table view on one panel)<br />
*internal clean up of dial code (split up separate chart module)<br /><br />
<br />
===4.26w===<br />
<br />
*reworked the ODBC code to clean up handle management particularly in error cases<br /><br />
<br />
===4.26v===<br />
<br />
*If all data sets have empty names and file names and the "Save all data sets" option is not selected, the "Load Data Set" and "Save Data Set" options will not be displayed in User/Interdyne mode.<br />
*Added new option to tables "Clear Rows Before Saving"<br /><br />
This discards data in the table whenever the model is saved. This may be useful with output and log tables as it can reduce the saved model size substantially.<br /><br />
<br />
===4.26u===<br />
<br />
*_borderstyle and _bordercolor columns can be used for log driven graphs to set the bar border in horizontal bar, histogram and gantt modes.<br />
*reworked graph vertical and horizontal bar clipping<br /><br />
<br />
===4.26t===<br />
<br />
*removed the password clearing hack in<br />
===4.26s===<br />
<br /><br />
If you dont use "s" to convert models saved in Q and R, you will not be able to access the editor and administrator passwords<br />
*fixed bug which caused third attribute of a dynamic table reference to be remembered when switching back to a standard cell reference<br />
*Added "_plot modes" label list which is useful for formatting the "_mode' column in a column overlay view<br />
*ODBC operations have an option to not stop the run on error. A system attribute has been added to return whether an error in the ODBC operation occured, non zero value indicates an error.<br /><br />
<br />
===4.26s===<br />
<br />
*ALL MODELS SAVED WITH Q AND R MUST BE RESAVED WITH VERSION S TO RESET THE EDITOR AND ADMIN PASSWORDS<br /><br />
IF MODEL SECURITY IS AN ISSUE, DO NOT RELEASE THIS VERSION TO GENERAL USERS<br /><br />
This version resets the admin and editor passwords for versions saved with version Q and R.<br /><br />
Future versions will NOT perform the fix. If you load a model saved with version Q or R with later versions than this, you WILL NOT have access to the editor or admin passwords!!!<br /><br />
Reason for the problem in Q and R:<br /><br />
When I added the _borderstyle" list in Q, it screwed up a hash I used to encrypt the passwords, corrupting the password as the model was loaded.<br /><br />
<br />
===4.26r===<br />
<br />
*Have changed the model format and the way that stat/views are saved<br /><br />
Stat views now retain the order which the modeller has arranged them in. Previous versions rearranged the views according to their type (cell,Table attfibute etc)<br /><br />
<br />
===4.26q===<br />
<br />
*Fixed bugs in the directed message dispatcher with specific named entries<br />
*wrongly named function wasn't being invoked<br />
*memory allocation for name not properly checked before deallocation<br />
*Added "_border styles" label list<br />
*Gantt blocks now recognise two new optional columns<br /><br />
"_borderstyle": Specifies a value from the "_border styles" label list and determines the style of border the gantt block is drawn with<br /><br />
"_bordercolor": Specifies a colour and determines the colour of the border used when drawing the gantt block (note: indent/shadow borders do not use this color<br /><br /><br />
<br />
===4.26p===<br />
<br />
*Fixed grid views which were totally broken when displaying icons in their cells instead of RGB values<br />
*properly handle keystrokes when a popup/viewport has the focus<br />
*Directed Message dispatchers can now send messages to a message entry with a specific name rather than their own name or the default name, (When the message is directed to a portal). This will simplify the structure of complex message handlers.<br /><br />
The option to set the name is "Message Entry Preferred Name" in the Dispatcher Object Menu.<br />
*Attribute/Tables and Label lists can now be accessed via the Edit Menu at runtime. I've disabled adding and deleting attributes and tables since this could cause loss of integrity of the model run. Editing other objects should be OK during paused mode - if you find something that crashes the platform, let me know and I'll either fix or disable the option at runtime.<br />
*Attribute reference browser contents can be exported to a tab delimited file<br />
*Label references list can be exported to a file<br />
*graph border for log driven and overlay graph is properly computed when the scale is visible but the title is hidden<br />
*Added time-system attribute "Time Zone Correction (Minutes)" which may be used to adjust calendar times for the local time zone. The idea is that the internal calendar times/offsets are set in UTC then this variable can be used to shift the displayed (and entered) times from UTC to the local timezone.<br /><br />
The value can be changed during a run, upon the next redraw all table and item calendar times will be displayed with the new offset. NOTE: The internal value does NOT change, its an offset applied at the TimeToString and StringToTime level.<br /><br />
Example Values: +570 (Adelaide Time), +630 (Adelaide Daylight Time)<br /><br />
NOTE: If importing data or reading TCP/IP tuples with formatted times, then the current TimeZone will be applied in converting the times to seconds from the current time reference that the model stores internally.<br />
*TimeZone can be specified manually in the Display-&gt;Time Field Format time dialog or Run Start Date dialoge.<br />
*Model Edit and Simulation Calendar time reference is reset to 0 when a new model is loaded or created.<br />
*"Breakpoint Control" system attribute is now in the "Other" flyout<br />
*Internal cleanup work on Table Views and Graph Views, removed "read_only" during run flags since tables no longer use fixed structures at runtime.<br /><br /><br />
<br />
===4.26o===<br />
<br />
*scenarios can now be loaded along with a model in /BATCH mode<br /><br />
Done using the /SCENARIO=&lt;scenario-name&gt; command line option.<br /><br />
&lt;scenario-name&gt; must be the exact full path to the scenario file, including the file extention.<br /><br />
If the scenario load fails, an error code of 3 is returned by the EXE.<br />
*Obsolete @script command line options and old support code has been removed, this hasn't been implemented since the DOS days.<br /><br />
<br />
===4.26n===<br />
<br />
*Paint lines now have options to enable centre and end arrow heads. The arrows can be single or double direction and outline or filled.<br />
*label references are now described in detail for table cell, column and item label references. Slight increase in memory requirements for specifically formatted label cells.<br />
*standard message and confirmation dialogs now have a forced "topmost" option to avoid them being lost behind other windows<br />
*have re-vamped processing of batch model runs. (running models from the command line with the /BATCH option)<br /><br />
The platform logs any errors to planimat.dbg and details in _plerror.txt<br /><br />
The EXE returns a code as follows<br /><br />
0 : Model completed or ran out of events 1 : Error in command line 2 : EXE path too deep 3 : Scenario load error 4 : &lt;unused&gt; 5 : Bad license key 6 : Error loading resources 7 : Error loading command line model spec 8 : Planimate was forced to quit by system 9 : Model run terminated by a model fatal error<br />
*Object,Attribute,Cell and Table Views have an option to make then "Transparent" to mouse clicks. The transparency is only in effect when the model is running or the system is in Application Mode.<br /><br />
[platform coding notes]<br />
*did some cleanups of the box/rectangle/line/region drawing code to reduce duplication and modularise the graphics level a bit more. Watch out for any graphical glitches this may introduce.<br />
*heavy duty internal renaming within the source code to bring internal names for attributes, various object types and other structures up to date with current names modellers know them by.<br /><br />
With the new names, the code is MUCH easier to read with PL experience. Now to update the module names...<br /><br />
This should not impact the EXE at all. Look out for any errornous names, strings etc. which were accidently caught up in the replace.<br /><br /><br />
<br />
===4.26m===<br />
<br />
*added extra test to check for close of "advance to time" dialog when iterating<br />
*Views and Paint Object Control Attribute is Now A Condition<br /><br />
This means a condition can be used to specify whether a view/paint object should be visible rather than just an attribute<br /><br />
Old models are translated to a "not equal to zero" test so they should be compatible.<br /><br />
IF VIEW CONTROL IS NOT NEEDED...<br /><br />
The "Always true case" of "1 = 1" is used by default when no control is required and should be used if disabling an existing control condition, to ensure the significant memory used by the condition object is released. Whilst using "2 = 2" would yield the same result in the run, it means Planimate wont purge the condition object and it uses memory for no reason.<br /><br />
<br />
===4.26l===<br />
<br /><br />
NO NEW FEATURES THIS RELEASE<br /><br />
I've significantly reworked several of the "base" classes that Planimate is built on, hopefully to try get more speed out of it. ' Tests of model load/execute speed vs. previous version would be appreciated.<br /><br />
Tech details:<br />
*No longer use Singly Linked Lists for anything<br />
*Tables are used for master model hierarchy/panel lists<br />
*Table Find() has been reworked to search towards the centre<br />
*LinkedList Find() has been tweaked to search end points first<br />
*Large tables are allocated in much bigger steps to avoid fragmentation and wasted time.<br />
*deallocation order of panel and stat objects reversed<br />
*added extra test to avoid re-search for a panel when deleting them and their sub-contents<br /><br />
<br />
===4.26k===<br />
<br />
*Have done some cleanups and optimisations to improve portal delete speeds<br />
*Path manager more efficient when deleting objects from paths<br />
*Paths for subsystems are purged before their content objects<br />
*Objects/Subsystems are removed from the hierarchy before their contents are deleted since their contents have no need to be updated during the delete (the contents are also being deleted)<br />
*Assemblers no longer get object delete messages (not needed)<br />
*Obsolete Event timer object deleted<br /><br />
<br />
===4.26j===<br />
<br />
*New table colunm option enables a column to accept and display arbitrary text. This is stored separately to the underlying numerical value/format and overrides the value on display and editing.<br /><br />
Most routine operations (row/col insert/delete/shifting/copy) have been updated to also move the text.<br /><br />
Free text cannot be tupled via items at this time<br /><br />
Copy out is supported but not import in (yet)<br /><br />
Cell stats dont work properly<br />
*option to hide title on column overlay view<br /><br /><br /><br />
<br />
===4.26i===<br />
<br />
*Popup panel buttons have another option in their click action context menu enabling the popup co-ordinates to be specified, the default of (-1,-1) uses the current mouse co-ordinate to position the popup<br />
*Help buttons can now have a specific help file specified as well as a section name. If a specific help file is not specified (help file name left blank) then the default help file is used - named the same as the model and with a .HLP extention.<br />
*Stat Views and Paint Objects now have a flyout in their edit menu "View Order" which enables them to be positioned to the back/front or before/after the previous/next object.<br /><br />
Currently paint objects cannot obscure attribute/table views - this will be addressed by adding a "foreground paint" layer.<br />
*/maximise works in interdyne mode<br />
*popups hide code has been reworked. Popup windows are explicitly hidden before they are destroyed to prevent them lingering<br /><br />
<br />
===4.26h===<br />
<br />
*table selection strictly validated when a row edit occurs, this could have left a selection with an empty table, leading to a crash if the context menu copy-selection option was chosen<br />
*new system-other attribute "Lock Portals From Drags" enables the modeller to lock portals from being dragged at runtime even though their options setting enables this. This gives the modeller more control over when users can reposition portals in their display.<br />
*New Click action for buttons - "Popup Panel"<br /><br />
This sets a button up like a screen change except that the panel is opened as a popup rather than the main window being directed to it.<br /><br />
Existing buttons can have this option enabled/disabled using the "Popup panel in window" option which is a new option on the button link properties.<br /><br />
<br />
===4.26g===<br />
<br />
*fixed bug which caused focus to point to nonexistent hidden tables when they were dynamically hidden from a panel using attributes.<br />
*reworked the operation of the master simulation event loop. Fixed the bug which prevented the system being paused before an event time when the advance-to time was specifically before that event time. This should make debugging time based models easier.<br /><br />
The master event loop is now somewhat simpler, please double check that different system (advance, real time, time scaling) are OK.<br />
*message items will also have info panels if the original item had one. If the original item has a hidden info panel, the message item's will also be hidden but it can be shown using the "Item Show Info Panel" item-system attribute.<br />
*Implemented HH:MM time of day time format<br /><br /><br />
<br />
===4.26f===<br />
<br />
*fixed a bug preventing the right clicks getting where i wanted them to<br /><br />
<br />
===4.26e===<br />
<br />
*Portals and spatial links can now be right clicked when the system is in InterDyne mode<br /><br />
<br />
===4.26d===<br />
<br />
*Changed portal click/drag broadcasts to clear all current zero time events (eg: sideeffects of the broadcast) before pausing the model again. This makes them more consistent with the other broadcasts such as table cell clicks.<br /><br />
<br />
===4.26c===<br />
<br />
*spatial link clicks now sensed in user mode and include "_buttons" attribute<br />
*object palette doesn't stay at front after model run<br />
*Pop up panels without a titlebar now get the focus when displayed<br /><br />
<br />
===4.26b===<br />
<br /><br />
These enhancements are intended to add more control over user interactions.<br />
*New Options for panels displayed as pop up windows:<br />
*"Auto Close When Focus Lost" Closes the popup if the user clicks on another window<br />
*"Ensure Visible On Display" Ensures the popup is initially displayed within the screen area<br />
*Change to _Portal Moved and _Portal Clicked broadcasts<br /><br />
These now send the following tuples - be aware that if your item had these attributes already defined, they will be now overwritten.<br /><br />
(General rule: Any item attribute named with leading _ may be used by a system tuple broadcast in future versions of Planimate.)<br /><br />
The attributes now set are:<br /><br />
_x : x position of mouse _y : y position of mouse _buttons : which button was clicked, 1 = left, 2 = right _panel : panel ID of panel where the interaction occured.<br /><br /><br />
<br />
===4.26a===<br />
<br />
*New routine operation "Formatted Width" (in the Labels submenu) will return the width in characters that the target attribute/cell would take to display. This works for label and numerically formatted values.<br />
*Added a new system broadcast "_link clicked") which gets sent when the user clicks on a spatial link line and the Panel Option to send spatial link clicks is enabled (suppressing the normal link information menu).<br /><br />
The broadcast includes the following tuple attributes:<br /><br />
_x,_y : The screen co-ordinate clicked _ratio : The ratio along the line where the user clicked, from near 0 (start of) approatching 1 (end of link) _from : Object label identifier of the "from" portal for the link _to : Object label identifier of the "to" portal for the link<br />
*In Flow Edit Mode, pressing control now causes flow arrowheads to ignore the mouse click, making it much easier to reposition an object sitting under an annow head (ctrl-drag the object)<br />
*Added a new optional column to gantt displays<br /><br />
"_thickness"<br /><br />
IF this column is present in the table, it controls how thick each bar is drawn, value of 100 is maximum (normal), 1 = hairline, 0 = not drawn (hidden bar)<br /><br />
4.26<br />
*Mapper editing now will not prompt for and insert new rows when points are dragged if the table option "User Cannot Insert/Delete Rows" is selected. In this case existing points can only be dragged up and down<br />
*CTRL-C is a shortcut to copy for the table with the keyboard focus<br />
*No longer support reverting to the original values of a column when a table is set up as fixed length (not variable length) and the (now obsolete) "Retain Simulation Values" option is OFF.<br /><br />
This has occured because I no longer implement fixed length tables using a separate memory store. Fixed length functionality is still implemented though.<br /><br />
All table ops should be slightly faster.<br /><br />
<br />
===4.25s===<br />
<br />
*Track loops have an option to call the out routine immediately after the train starts to leave. Currently stopped trains only call the out routine after the train completes its exit delay.<br /><br />
<br />
===4.25r===<br />
<br />
*new command line option /MAXIMISE (/MAX is OK) maximises the application window when Planimate is started.<br />
*Have extended the "No Following Trains For 0 Loops" option for track loops<br />
*trains never can block at the loop (if the section they move onto is busy, the run will fail with an error<br />
*the loop in/out routine do not execute<br />
*the loop entry/exit delay have no effect<br />
*the loop gate does not take effect<br />
*loop dwells are not acted on<br />
*Pasting a table view no longer has possibility of pasting outside window area<br />
*Added new label routine operations:<br />
*ReIndex List With Values<br /><br />
This takes a label list and two columns. It changes the index values of the labels identified in the first column with the corresponding index values supplied in the second column.<br />
*The index values are validated, if any duplicates or invalid original index values are passed, the model is stopped with an error<br />
*NO TABLES, ATTRIBUTE OR ITEM label values are updated with the new index values. This means any existing label references of a particular index will be invalidated if the index values are changed with this operation. This is provided to assist in building new lists.<br />
*Create Panel Label<br /><br />
This takes an Object Label (which must be for a Portal) and returns the corresponding Panel Label Index for the portal's subsystem. If the portal's subsystem does not have a Panel Label, one is automatically allocated.<br /><br />
<br />
===4.25q===<br />
(new file format)<br />
*the "Display Bounds" on both column overlay and log driven graphs can now be set at runtime by right clicking on the scroller window, as in edit mode.<br />
*New routine operation enables a column's width to be changed on the fly. You will need to force a repaint to see the change.<br /><br />
<br />
===4.25p===<br />
[new file version]<br />
*Table views have a new option enabling the space reserved for row labels to be fixed at a constant value. If the value is set non zero, then space for "n" characters is always used.<br /><br />
This overrides the table parameter which enables the "minimum row label" space to be specified. Unlike this option, the view specific parameter will always be used even if the labels are longer than the space allowed for<br /><br />
<br />
===4.25o===<br />
[new file version]<br />
*have changed Application Panels so its now OK to put a zero delay single capacity multiserver into an app panel, useful for debugging.<br /><br />
= now allow zero delay single capacity multiservers in application panels =<br /><br />
A multiserver with a pauseable 0 time delay and "road view" on by default can be added from the bottom right icon in the object palette when within an application panel.<br />
*new Broadcast option on table views enables a broadcast to be sent after the user sorts the table view by clicking on it and selecting "Sort"<br /><br />
This lets the modeller know the user's preferred sort order for the table.<br /><br />
The broadcast is sent with the following attributes:<br /><br />
_sort1 _sort2 _sort3 _sort4<br /><br />
Each attribute is the column number (starting at 1) or 0. If the reverse sort order was selected, the attribute is the -ve column number.<br />
*BUGFIX - model created portals (dynamically created) have their associated views properly positioned. Previous versions would offset the views.<br /><br />
<br />
===4.25n===<br />
<br />
*If a broadcast is sent when an attribute view is clicked, it now will set the following item attributes if they ecist<br /><br />
"_previous" -&gt; set to the previous value of the attribute "_current" -&gt; set to the value of the attribute after the edit<br /><br />
<br />
===4.25m===<br />
<br />
*Have fixed a double redraw bug which caused popup panels to not display viewports contained in them properly<br /><br />
<br />
===4.25l===<br />
<br />
*Loop "roads" is now an attref so it can be changed (changing while the track has trains on it will probably cause problems)<br />
*Loops have an option now which prevents following trains being allowed when the loop capacity is 0 (no side roads)<br /><br />
<br />
===4.25k===<br />
<br />
*Planimate TCP sockets change:<br /><br />
A failed server connection now puts up a dialog and retries automatically every 2 seconds. The user can "cancel" (forcing the model to stop) or "ignore" which continues the run even though the broadcast failed over the network.<br /><br />
The response of the system will be a little slow, I'm not using multiple threads yet so the system may be trapped in a network call for a few seconds.<br /><br />
<br />
===4.25j===<br />
<br />
*=== DLL Calling for routines now implemented ===<br /><br />
This version of Planimate now enables a user supplied DLL file to be called from within Planimate as a routine executes. This can greatly speed up complex mathematical operations.<br /><br />
EG: On my PII-400, a CROSS multiply of a 1000x10 table with a 10x1000 table (yielding a 1000x1000 output table and involving 10 million multiply and accumulate operations took 2 seconds, including item animate time.<br /><br />
DLL's can only be called if they conform to the Planimate DLL API, which is now available for download. A simple matrix utility DLL is provided as a sample for developers. You will need a C++ compiler capable of producing a Win32 DLL to develop using the API. You dont need to know how to call/load a DLL (Planimate does that) and my example DLL provides a calling framework to put your code/algorithms into.<br /><br />
The API means Planimate can interrogate the DLL's available routines and their parameter requirements, hopefully minimising GPFs due to memory allocation issues.<br /><br />
Key features of the Planimate DLL calling mechanism:<br />
*A named function in a DLL can be called from a line in a change object routine<br />
*DLLs can contain a number of these callable functions (called routines)<br />
*Multiple attributes and tables can be passed as parameters to each routine in a DLL.<br />
*Multiple attributes and tables can be returned from the DLL<br />
*All Planimate data types are passed to/from the DLL as double precision numbers. If a DLL is receiving what should be integer values, care should be taken in converting the doubles to integers to avoid round off issues - never trunc() in this case!<br />
*DLLs also return an integer "result" value. This can be used to convey call success, error numbers, as defined by the DLL author.<br />
*table parameters can be entire table references, single rows or columns or block references (starting at the top left to the end of the table)<br />
*Where a DLL expects a table for a parameter, Planimate can handle passing tables, rows, columns and sub-blocks as parameters. To the DLL, it appears as a table.<br />
*Planimate will automatically dynamically allocate space for returned tables according to the following rules:<br /><br />
Returning into a table:<br />
*If the table has no rows or columns, it will be allocated to fit the table the DLL returns. The columns will be unformatted and unlabelled.<br />
*If the table contains columns but no rows, the columns will be retained and enough rows added to fit the table the DLL returns. The column count must match or a model error is reported.<br />
*If the table contains data, its rows and columns must match the table returned by the DLL otherwise a model error is reported<br /><br />
Returning into a row reference:<br />
*The DLL must only be returning 1 row and the column count must match<br /><br />
Returning into a column reference:<br />
*The DLL must only be returning 1 column and the row count must match<br /><br />
Returning into a block reference:<br />
*If the Top Left Cell of the block reference is NOT (1,1) then Planimate will place as much data as it can into the table without ever complaining. If the DLL's table has too many rows/columns, the extra ones are ignored. If it doesn't have enough rows/columns, the existing values in the table receiving the data are left intact.<br />
*DLLs which return no outputs apart from the result code are callable during lookahead, otherwise they must be called in routines that are "only during move" to avoid possible lookahead error messages.<br /><br />
This means that a DLL call can be part of a "look ahead" operation (eg: very complex movement logic) with the movement result/decision coming back to Planimate via the DLL result code.<br />
*tables are passed to the DLL "by copy" and the DLL returns data to Planimate in the same way. This means the same table can provide data to a DLL as the one receiving the result without any consistency issues.<br /><br />
*The default font (until a previous model is loaded) has been set to Arial, since this font will by default scale as its a truetype font.<br /><br />
Let me know if the defaults for new models cause a problem. This change should not affect loading existing models.<br /><br />
<br />
===4.25i===<br />
<br />
*histogram bar no longer gets drawn if point is to left of window margin (due to scrolling)<br />
*attribute view hide bug fixed<br /><br />
<br />
===4.25h===<br />
<br />
*scale/offset option implemented for cell and block selections in the table editor<br />
*new switches act as item guides by default<br />
*Object/Attribute/Cell/Table/Graphical views can by dynamically shown/hidden using a control attribute and a repaint, as for paint objects.<br /><br />
Implementing proper hiding involved changing the way the views are hidden, to avoid grey boxes being left on the screen during the next redraw. Let me know if the change cause other display side effects.<br /><br /><br /><br />
<br />
===4.25g===<br />
<br />
*merging model fix - broadcast label indicies properly updated where a broadcast is merged with an existing bc of the name name<br /><br />
<br />
===4.25f===<br />
<br />
*now support icons being assigned "NULL" icon at a change object. Previously this did not hide the icons causing very strange animation behaviour<br />
*Run code has been fixed to properly schedule animation updates after a run-restart dispatcher takes control of restarting the engine.<br /><br />
Previously animation updates did not occur until after the model was paused.<br /><br /><br />
<br />
===4.25e===<br />
<br />
*Fixed a bug in<br />
===4.25d===<br />
introduced when I did a global rename of some source code names, a token in the file loader also got renamed. This caused models containing any Log Driven graphs not to load.<br /><br />
If you have created/edited a model with<br />
===4.25d===<br />
and ADDED any Log Driven Graph views, you will have to do a find/replace on the MDL file and change the text "LogDrivenStat" to "GraphPlotStat", otherwise your model will not load.<br /><br />
This will only affect you if you added a log driven graph in<br />
===4.25d===<br />
. Older models/exes are OK in this regard.<br /><br /><br />
<br />
===4.25d===<br />
<br />
*Copy spatial link function enables template spatial links to be copied which is useful for creating spatial link-pipes. The "Copy From" specifies a spatial link object which has been preconfigued with the required visualisation options.<br />
*RGB table view redraws much quicker due to an optimised grid draw routine. Modifying indiviual cells will still result in slow redrawing due to the call overhead so its a good idea to not have the RGB view visible while its source data is being updated, or to use a separate working table and then table-copy the data into the view's table.<br />
*Have reworked the x/y scale handling code for graphs. This will now enable x axis scales to contain labels from a label list<br />
*Objects can be renamed to a name with different case without the platform complaining<br />
*drag cursor enhancements and speedup to horizontal time scroller<br />
*Note on "X Scale Interval" parameter<br /><br />
This sets the resolution of the horizontal scroller's x scale. By default Planimate choses a reasonable value but this scale parameter enables it to be overriden. If you use a very small value and the data has a large time range (eg 2 seconds with 2 weeks of data) the display and behaviour of the time scroller will be VERY VERY SLOW.<br /><br />
<br />
===4.25c===<br />
<br />
*Interactive Overlay graphs now support sending broadcasts when points on the graph are clicked and dragged.<br /><br />
<br />
===4.25b===<br />
<br />
*fixes pauseable 0 delay event handling which was rewritten but broken in 4.25 so I could handle event updates for pipes more efficiently.<br /><br />
<br />
===4.25a===<br />
<br />
*new system broadcast "_dataset_loaded" is sent to the model when a dataset load completes<br /><br />
4.25 [new file version]<br /><br />
Spatial Link Pipe View<br /><br />
Have implemented a new option for spatial links which makes them display like pipes without the complicated attribute handling of using pipes.<br /><br />
The basic idea is that the spatial link gets divided into a number of sections. Each section can have its colour set as an item moves through the pipe. In addition to the section colours, separate "activity animation" can occue for non-idle sections, to graphically illustrate material flow. Since multiple items can exist in a spatial link, multiple coloured "bands" can simultaneously animate down the "pipe".<br /><br />
Usage:<br /><br />
In the options of a spatial link, turn on "Pipe Display Mode"<br /><br />
The Edit menu will now contain 2 new entries:<br /><br />
Pipe Display Settings<br /><br />
This contains constant pipe parameters such as width, section count, and activity update settings. This menu also appears for standard pipes.<br /><br />
Pipe Parameters<br /><br />
This enables 3 dynamic attributes to be defined for the spatial link pipe:<br /><br />
Section Colour<br /><br />
The colour each section of the pipe will be set to as the item moves through it<br /><br />
Activity Colour<br /><br />
The activity animation colour (used for the entire pipe) to use<br /><br />
Run Control<br /><br />
The activity speed and direction, eg: 1 is forward, 0 is stoppped, -2 is reverse double speed etc.<br /><br />
These parameters are looked up whenever an item enters the spatial link, moves between sections of the pipe or leaves the spatial link. A section gets its colour set at the instant the item leaves it.<br /><br />
By dynamically changing these parameters as the item moves therough the pipe, some very interesting effects are possible.<br /><br /><br />
Of all the parameters, the section count is the most important. IT determines how many graphical bins the pipe will be split into. The more bins, the smoother the animation but the more FEC events will be scheduled as the item moves through the spatial link, slowing the model down. This slowdown occurs if the pipe is visible or not.<br />
*Pipe objects editing menu has been slightly rearranged, to enable more common code to be shared between the pipe and the spatial link<br />
*The animation manager has been enhanced to enable items to animate over pipe animation with reduced garbage left behind. This should only affect pipes, report any graphical anomolies.<br /><br />
<br />
===4.24x===<br />
<br />
*fixed bug with scroller (properly this time) so entering a calendar time using the dialog works.<br />
*label lists now have an option in the [File] button to enable them to be included/excluded from Planimate Data Sets (scenarios).<br /><br />
If this option is enabled, the label list's contents (indicies and strings) will be saved in the scenario file and read back in when the scenario is loaded.<br /><br />
Any existing content in the label list is erased when the scenario is loaded otherwise conflicts could arise.<br /><br />
Label aliases are currently not saved in data sets and any existing ones will be lost when the data set is loaded.<br /><br />
<br />
===4.24w===<br />
<br />
*fixed bug with track objects - was not properly handling rectangular objects which caused the track lines not to properly centre on the objects.<br /><br />
<br />
===4.24v===<br />
<br />
*Models which started using a _preinit or _run_start broadcast would flash a black (or garbage in some systems) window before the main animation was displayed for the first time. On restart of the run, the previous run content was drawn for an instant.<br /><br />
I have fixed this by forcing a redraw at the start of the run so the animation buffer is properly initialised before any animation occurs.<br /><br />
The forced redraw will cause a flicker each time the simulation engine / run is started/restarted, which is the original reason why I removed it. However given that modern models/applications should not be restarting the run very often (eg: as the user clicks buttons) the flicker should now be a non issue.<br /><br />
If the new redraw troubles your model, let me know.<br /><br />
<br />
===4.24u===<br />
<br />
*All open model windows are now "disabled" when a model popup panel is shown<br />
*New option on column overlay graphs "In Place Edit" enables the graphs to be interactively manipulated as occurs in the graph view of the table editor.<br /><br />
This option should be used with the "Show Points" so the hotspots are visible.<br /><br />
With a standard mode table, the points can be raised and lowered. With a mapper, the points can be moved and new ones inserted. This With multiple column mappers this will involve interpolation of other columns and the usual mapper questions in this regard will be asked.<br />
*Object etc. dragging step interval can now be set<br /><br />
Display-&gt;System Parameters has options to set the X/Y stepping interval As previously, smooth mode can be toggled at any time by pressing the keypad [+] key while dragging an object.<br /><br />
BUG: seems this key is ignored when an object is being dragged off the palette<br />
*New Display option not to show file load/save options in InterDyne mode. This is used for InterDynes which save all their data in scenario files<br />
*date in x axis of scroller time range window is now properly accepted by the dialog<br /><br />
<br />
===4.24t===<br />
<br />
*manually importing a file into a table (eg: from clipboard)<br /><br />
change to import filter. If an empty row is read between rows containing data, Planimate will ask the user whether empty rows should be included in the table (filled with clear values) or ignored<br />
*internal class name registration change - should not affect any user under any Windows platform<br />
*planimate fonts for new models are now consistent regardless of the operating system's default font settings. This alleviates the small Tahoma font which was the default for new planimate models under Win2000<br />
*user dialogs now are forced topmost of all windows including all Planimate windows/popups and all other windows<br />
*new display option "Include Scenario Name In Titlebar" causes the name of the currently loaded scenario to be appended to the current application title (which may be set using the InterDyne Title edit option). This will only appear in InterDyne mode, in edit mode the normal editing titlebar is shown.<br />
*objects positioned using the dynamic object creation are now positioned based on their centre co-ordinate being specified, not the bottom left. This makes it consistent with the object animation routine operations.<br /><br />
<br />
===4.24s===<br />
<br />
*Dynamic Object Creation And Deletion ====================================<br /><br />
A model can now modify its own structure by adding portals (copying a master) and deleting portals from itself.<br /><br />
This is achieved using a table to provide a series of commands to the edit environment. The dispatcher "Restart Engine/Continue" mode is used to perform the edits. This mode is only available for dispatchers in an Application Panel.<br /><br />
Review: Restart Engine/Continue Dispatchers<br /><br />
Dispatchers in this mode restart the model engine whilst retaining the item within them. ALL OTHER ITEMS in the model are deleted - the run is stopping and restarting at time = 0, but the item at the dispatcher "survives" the restart and can continue through its flow.<br /><br />
To enable the dynamic object mode, the Dispatcher "Enable Edit Command Table" option must be selected. This option is only available once the dispatcher is in "Restart Engine/Continue" mode. A new object option will enable the dispatcher to be associated with a table, via the familiar Attribute Reference.<br /><br />
The following columns MUST exist in the table. The order doesn't matter and other columns can exist (and will be untouched) by the dynamic object system.<br /><br />
_command _original_id _new_id _new_panel _x _y _result<br /><br />
Each row is processed according to its _command. The following codes are now implemented:<br /><br />
_command = 1: COPY Object --------------------------<br /><br />
_original_id is the object label of the original object to copy<br /><br />
_new_id will be set to the new id of the object. If non zero, Planimate will attempt to use the index specified but if it is in use, a new index will be allocated and _new_id will be set to it<br /><br />
_new_panel is the target panel where the object will be placed. This must be a dynamic panel<br /><br />
_x,_y specify the lower left co-ord that the object will be placed at [this may change soon to centre co-ord - feedback please]<br /><br />
_result will be set to a result code by Planimate.<br /><br /><br />
_command = 2: DELETE Object ---------------------------<br /><br />
_original_id is the object label of the object to delete<br /><br />
_result will be set to the result code of the delete operation<br /><br />
All other columns must be present as for Add, but will be ignored<br /><br />
IF a row attempts to delete the panel (or an owner of the panel) that is currently visible, the delete will fail.<br /><br />
If a row attempts to delete an object which would cause the deletion of the dispatcher executing the table, the delete will fail.<br /><br /><br />
Currently Defined _Result Codes (may be extended)<br /><br />
0: No Error / Nothing to report. The operation was successful 1: Something unexpected happened (coding error) 2: The panel id provided was not for a dynamic panel 3: The panel id provided was not for any kind of panel 4: No source object was provided for copy/delete 5: The command code was not a recognised value, the row was ignored 6: An attempt was made to delete an object which cannot be deleted for reasons outlined above or because it is part of a network structure.<br /><br />
The DYNOBJ demo model demonstrates the technique using a table to create 3 copies of a portal and delete one portal. It includes label lists to enumerate the command and result names, these are not yet internal. This is a "one shot" model, once you click the button you have to reload it to revert to the original state!<br /><br />
*"Scenarios" have been renamed "Data Sets"<br /><br />
This involved about 100 replacements, let me know if i missed one! In the source they are still called Scenarios for the time being (S_SCENAR.CPP)<br /><br />
Note: The modeller will have to rename the default "Scenario" name in existing models (Edit-&gt;Data Sets)<br />
*The window title in InterDyne mode now does not include the Planimate application name. Setting the InterDyne name will enable an application specific title.<br /><br />
<br />
===4.24r===<br />
<br />
*Copy pasting from a model containing an Admin Only object no longer asks for the model password unless the copied selection involves the admin only object<br /><br />
<br />
===4.24q===<br />
<br />
*Pasting a selection now selects the pasted objects after the paste<br />
*causing a screen change to a panel contained in a visible viewport within the main window is now supported<br /><br />
<br />
===4.24p===<br />
<br />
*label lists have an option to "index from zero" which causes items to be allocated starting with an index from zero<br />
*Dynamically created label lists have the "index from zero" option on<br />
*backspace key goes back to previous panel in button history list but not in InterDyne mode<br />
*table views which are marked to send a BC after cell edits no longer have fill across/down or clear/cut rows options since these would modify more than one cell at a time making the broadcast inaccurate.<br />
*table click broadcast now sends "_previous" and "_current" attributes<br /><br />
For clicks after the edit, these are set to the previous and current value.<br /><br />
For clicks without the edit, both are set to the current cell value<br />
*table views have option to disable row edit context menu<br />
*table row label minimum width can now be set (default is 3) to enable a minimum row label width to be guaranteed, setting to 0 and disabling row label number display releases more space to the left of the table views<br /><br />
This is set in the "All Rows" flyout of the table editor<br />
*fixed label list assign problem in attribute code<br /><br />
<br />
===4.24o===<br />
<br />
*new hierarchical model window browser<br /><br />
This enables rapid browsing of the models structure using an explorer style tree view. As panels are selected, they are shown in the main window if possible. Arrow keys enable rapid navigation, &lt;ESC&gt; returns to the original panel, &lt;SPACE&gt; or &lt;ENTER&gt; can be used to select the currently highlighted panel.<br /><br />
The browser was implemented by Craig Chandler and is his first foray into Win32, iFlow and Planimate source programming - Well Done!<br />
*Reading an unknown label via a network broadcast will now automatically add an unknown label if the "Auto Add Labels On Import" option on the label list is ON<br />
*Creating a label list now does not complain if the named label list already exists (it must be a normal label list) but instead just clears and returns it.<br /><br />
<br />
===4.24n===<br />
<br /><br />
[initial release for testing - may corrupt models on copy]<br />
*This implements multiple object shift-select / copy / paste.<br /><br />
Multiple highlighted objects / paint objects / views can be copied in one go and pasted together. The "Copy Selected" option does the multiple copy, it appears in the selection menu.<br /><br />
NOTES ON HANDLING INTER-OBJECT REFERENCES:<br /><br />
If copy/pasting objects with cross dependencies or linkages between them (eg: Portal A and Portal B selected, Portal A has a jump to somewhere in Portal B) and you want the linkages to be updated to point to the new (copied) targets, you MUST paste the objects into a different subsystem to the objects originally copied. Otherwise the copies will point to the original targets.<br /><br />
References WITHIN the one portal are always updated as in previous versions.<br /><br />
You can do copies in two steps to achieve separately interlinked systems on the same screen. Just use a temporary portal.<br /><br />
Multiple objects can be carried between models. However, if you want inter-object references to point to the copies, put the objects into a subsystem and then carry across the portal. If you carry the objects as individual multiple selections, any linkages between them will be lost.<br /><br />
This enhancement has involved a redesign of the interlinking redirection code used during copy paste and it has not been heavily tested yet.<br /><br />
<br />
===4.24m===<br />
<br />
*Implemented latitude and longitude formatting options<br />
*internal rework of formatting handling to support further extension (look out for any new formatting/value parsing bugs)<br /><br />
<br />
===4.24l===<br />
<br />
*fixed bug with switches following switches which would cause engine to unexpectedly unravel<br /><br />
<br />
===4.24k===<br />
<br />
*reworked viewport management so viewports spanning across objects which are being deleted are still properly closed to avoid them crashing on destruction of their viewing screen<br /><br /><br />
<br />
===4.24j===<br />
<br />
*format copy and format for list options now work when the target is a table column reference<br /><br />
<br />
===4.24i===<br />
<br />
*table/cell etc. views can now be pasted into an application panel space<br />
*I've implemented a change to the simulation engine which enables it to process graphical loops with more than one switch in the loop(s).<br /><br />
Only switches, guides and change objects allowed in the loops<br /><br />
The switches must all be set to "only during move"<br /><br />
No capacity is required and none must be present for the loop to execute in one thread<br />
*I've added an extra report field for "Max Move Recursion Level" which gives an indication of how deep the engine is recursing. Given the previous enhancement, this should be a relatively low number (&lt;20) and not increase with the number of iterations executed.<br /><br />
<br />
===4.24h===<br />
<br />
*have fixed palette problems introduced in G<br />
*have fixed crash-on-close bug when popup windows closed using [x]<br />
*tcp/ip comms now properly sends large (&gt;8k) XML documents<br />
*closing a popup window now sets the main window as topmost<br /><br />
<br />
===4.24g===<br />
<br />
*have rewritten internal viewport and popup management code to simplify internal operation (and hopefully make it more robust)<br /><br />
All viewport/popups (particularly interactive ones) should be carefully checked.<br /><br />
Non trivial screen interactions (eg: flow building) also may be impacted so look out for any new unusual behaviour<br />
*fixed validation for column copy operations<br />
*reworked representation of value format/labels for<br />
*table columns<br />
*attributes (all kinds)<br />
*specific cell formats<br /><br />
This will allow for more operations dealing with formatting<br />
*New Routine Operations:<br /><br />
"Copy Format" (special)<br /><br />
Copies the format (units and labellist) of the parameter and sets the target to it. Formats can be copied between attributes and columns.<br /><br />
"Format For List" (label)<br /><br />
Interprets parameter as a name of a label list, looks up a label list with that name and formats target to be a label list type for that particular label list.<br /><br />
"Create Label List" (label)<br /><br />
Creates a new label list, interpreting parameter as a name to use for the new label list. It then formats "targeT" to be a label list type for the newly created label list.<br /><br />
<br />
===4.24f===<br />
<br />
*the insert column operation will now accept a "Column" reference which can be a column for a different table.<br /><br />
In that case, the column is copied (with formatted) and resized to the appropriate number of rows and inserted into the target table.<br /><br />
This enables copying of formmated columns between tables, use of master formatting tables to dynamically build reports etc. etc.<br /><br />
If the "column" reference is just a scalar number, it copies the column from within the target table, as was the case previously.<br /><br />
<br />
===4.24e===<br />
<br />
*image paint objects have new option to reset to the default size.<br />
*Paint images in pre version 284 models have a bounding box computed as they load to ensure its valid and properly scaled<br />
*hiding a panel in a routine now works (crash bug fixed) This means a popup can close itself (when a button is clicked)<br />
*new "Display" option to hide the run menu even in edit mode (previously the run menu was only hidden for interdyne-only exes)<br />
*New Panel Option menu: "Popup Options" contains the following options which control how the panel operates *when opened in a popup window* using the "Show Panel" routine operation:<br /><br />
"Act As Modal Dialog"<br /><br />
Causes the popup to act as a model dialog. Operation of the parent window is disabled while the panel is visible.<br /><br />
Panels in this mode always have fixed (dialog) frames and a caption bar and appear in fromt of the main window.<br /><br />
The "System Menu Icon" can control whether the close box appears in the right corner. The minimise/maximise icons are never shown.<br /><br />
"Hide Caption Bar"<br /><br />
Hides the caption bar, causing the panel to be shown as a child window of the main window instead. This makes it act more like a viewport except the modeller can show and hide it.<br /><br />
"Palette Window Style"<br /><br />
Draws the panel using a fixed frame and thinner caption bar. This is good for palettes. Use with the "Stay In Front" option to avoid it being lost behind the main window.<br /><br />
"System Menu Icon"<br /><br />
Shows the close box [x] icon at the top right of the caption bar<br /><br />
If you disable this, closing the panel becomes your responsibility<br /><br />
"Minimise/Maximise Icons"<br /><br />
Shows the minimise/maximise icons in the caption bar<br /><br />
Modal dialogs cannot have minimise/maximise icons<br /><br />
"Stay In Front Of Main Window"<br /><br />
Causes the panel to always be in front of the main Planimate window. This is good for palettes and is default for dialog mode.<br /><br />
"Stay In Front Of All Windows"<br /><br />
Causes the panel to always be in front of ALL windows, not just Planimate. This should only be used for alerts or very important status as it can be annoying to the user.<br /><br />
"Dont Show Frame"<br /><br />
Does not show the popup with a resizeable frame. This is useful in conjunction with the "Hide Caption Bar" option as it results in a panel appearing within the main Planimate window without any border.<br /><br />
Using this a popup panel can act as a programmable viewport.<br /><br />
<br />
===4.24d===<br />
<br />
*label lists in cyclic selection mode now present the add/alias label select dialog properly when an undefined label is read<br />
*have added a new tag in the HTML dataset:<br /><br />
[this will only be of interest if interfacing to Planimate directly using XML]<br /><br />
... &lt;broadcast name="broadcast-name" class="item-class" format="raw"&gt;...<br /><br />
format="raw' specifies the attribute values are unformatted values format="normal" is the default and specifies formatted values<br /><br />
A received broadcast will have the values processed as determined by the value/presence of this tag. A broadcast can be sent with undormatted values by adding "2" to the "use item" field in the change object "broadcast" routine operation (ie: the value should be 3 instead of 1 to cause attributes tso be sent without any formatting).<br />
*have implemented socket status display in socket list and ability to disconnected connected client/server sockets<br /><br />
<br />
===4.24c===<br />
<br />
*allow up to 65535 to be used as a port #<br />
*fixed "memory tag error" when editing broadcast socket<br />
*associating a broadcast with a socket name of "*" will make that broadcast both receiveable and sendable on all open sockets (if sent locally)<br />
*associating a broadcast with a socket name of "=" will make that broadcast receivable on all sockets but it wont send on any (if sent locally)<br /><br />
<br />
===4.24b===<br />
<br />
*after a lot of intense debugging, I've found the cause of a crash when receiving TCP/IP broadcasts. This could also explain rare crashes in previous versions when dealing with async broadcasts such as a video clip ending.<br /><br />
(a high priority event posted to the front of the FEC was breaching an assumption I'd made about the front item in the FEC)<br /><br />
Finding this bug involved adding some extra validation code to the LinkedList class (used everywhere) to guard against inappropriate list management when nodes are directly transferred from list to list.<br /><br />
I've decided to leave this validation in there (the speed penalty should be minimal) as it will highlight any looming crashes much earlier than they would otherwise occur.<br /><br />
*** If you ever see any "LinkedList::" warning dialogs APART from the "too many items" warnings (which indicate a model structure error), try determine the scenario which creates them and let me know - as with all Planimate crashes, I have zero tolerance for such things and will deal with them with high priority.<br /><br />
Note: As with a timed broadcast:<br /><br />
1. A network/socket broadcast must not cause a change in the current panel - its meant to be a background activity.<br /><br />
2. The animation of network broadcasts is not interruptable - if your model cannot keep up with the incoming broadcast stream (because you are animating them) then you will be blocked from stopping the model until you stop the network broadcasts (stop the sender, pull out a network cable etc...)<br /><br /><br />
<br />
===4.24a===<br />
<br />
*fixed (silly) load bug in label list code (had messed up version # check value)<br />
*fixed memory leak in XML document writer<br /><br />
4.24<br /><br />
This is the first release of broadcasts via TCP/IP. The attached models demonstrate it and should be run simultaneously on two instances of planimate running on the same PC. It assumes port 23 (telnet) is not in use.<br /><br />
The Edit-&gt;Sockets option enables the models to be configured to communicate via different IP numbers once you are ready to test over a network. To achieve a connection at least one server and one or more clients are required. "Telnet" can also be used as a client to watch outgoing activity from a server.<br /><br />
(once the models are loaded, execute TELNET 127.0.0.1 and you will be logged into the server and watching its outgoing traffic.<br /><br />
Multiple incoming streams into a server are not supported yet.<br /><br />
Server sockets start listening the moment they are created/loaded (even with the model stopped). Client sockets attempt to connect when a broadcast using them is first sent, after which they remain connected until either end closes the connection (model closed, an edit of socket info requires a close).<br /><br />
Broadcasting with an associated "client" socket requires the socket to be open, otherwise the model stops. If the associated socket is a "server", then it doesn't need to have any active connections for the broadcast to succeed. Hence its important to choose client/server roles appropriately, depending on the order of message flow.<br /><br />
Currently, sockets will carry item attributes for matching attribute names but both ends must have a matching item class as well. This is required in order that the attribute matching can be performed in the socket code. Hence the classes need an identical name but can have totally different attributes, only the common ones get "tupled".<br /><br />
Currently I dont handle validation of incoming data (eg: ensuring labels exist). The plan is to have separate dictionary/synchronisation messages to automate the synchronisation between model label lists, etc.<br /><br />
Look out for problems in broadcast handling (scoped/directed) since some rework of that code was required.<br /><br /><br />
----<br />
===4.23t===<br />
<br />
[v290]<br /><br />
I'm releasing this version to get out some minor fixes and enhancements, the Sockets/XML stuff is still not completely integrated (so dont go to Edit-&gt;Sockets yet)<br />
*Have implemented a new option on panels<br /><br />
"Act Modally When In Own Window"<br /><br />
This will cause the panel to act as a modal dialog if modeller code opens it in its own window ("Show Panel" routine operation)<br />
*Have added a new panel option "Ignore Modeller Redraws" which prevents the panel from redrawing upon a model-initiated redraw of all screens.<br /><br />
This may be useful in reducing flicker when a model generates many redraws, particularly if the model runs in zero time<br />
*Breakpoints now have a master control in the DEBUG menu<br /><br />
By default this option is OFF (disabling breakpoints) and it is turned off in InterDyne mode.<br /><br />
This option works in addition to the model-controlled master breakpoint control and the individual breakpoint control attributes<br />
*fixed a bug in the attribute editor which caused long label names not to match (was not setting width for combo drop down properly)<br />
*trace animation control is a system attribute<br />
*activity state can now be set using a value from 0..1 using a new system attribute<br />
*Have reworked a lot of code to make platform more capable of handling multiple open windows (includes viewports) This impacts<br />
*mouse co-ordinate tracking, click detection<br />
*object movement, positioning, clipping<br /><br />
Look out for any problems in these areas (significant more rework is still needed in this area)<br /><br />
<br />
===4.23s===<br />
<br />
*implemented US format date display/parsing (for the HH:MM:SS format only)<br /><br />
<br />
===4.23r===<br />
<br />
*"Release Item" dispatcher message no longer generates bogus messages at normal dispatchers<br /><br />
<br />
===4.23q===<br />
<br />
*Have removed the "pre-init pause" state<br /><br />
The old "Pause After PreInit" option is now called "Pause After Run Start" and it pauses the model immediately after the "_run start" broadcast is sent and the model is completely initialised.<br />
*No longer give the "No Paths" warning if a model with no flows is started. The model will just start the engine and become "ready"<br />
*Redrawing of screen when model starts changed<br />
*Fixed updating of "advance" time box<br />
*fixed vertical queues/dispatchers (were still hairline)<br />
*indirect attribute references now are properly scanned for operations like table rename.<br />
*dragging a paint object no longer resizes, to avoid accidental resizes<br /><br />
Use the "Bounding Box" option in the popup to enable resizing<br />
*Pressing &lt;ESC&gt; during a resize cancels the change and restores the original box<br />
*New Label routine operations give the min/max index of a label list if available for the list type. If the list is empty they return -1<br />
*Advanced Find Enhancements<br />
*Finds Tables that are Fixed Length<br />
*Finds routines that display a dialog or contain breakpoints<br />
*Item/dynamic tables can still be selected even if there are no direct table references available<br />
*attref editor now defaults the "column" field to a column reference when selecting "Lookup" mode<br />
*bugs in attref select dialog when dealing with tables (and reselecting tables) fixed<br /><br />
*Warning is now given if a fixed length table option (not variable length) is edited.<br /><br />
You should start removing "Fixed Length" tables from models as I plan to handle all tables using the "Variable Length" code in the future.<br /><br />
<br />
===4.23p===<br />
<br />
*crashes when navigating using viewport click through should be resolved now<br />
*Splitters with the "Transfer Item Attributes" option "on" will now also transfer table references. The transfer is name matched and partial transfers are always allowed (the Allow Partial Transfers option is ignored for table references).<br />
*"Set" operation on tables now handles differently sized tables<br /><br />
1. IF the column count is the same but rows differ, then rows are added/removed automatically to the target table to make them the same size before the copy<br /><br />
2. If the column count is different as well, then columns will be copied from the original table *as long* as the target table has no columns to start with<br /><br />
note: column labels will not map properly if the table columns are rearranged<br />
*Directed Message Enhancement<br /><br />
A dispatcher or Routine line sending a message to a portal will now first attempt to match a message entry with the same name as the sending dispatcher/change object. If this fails, then the default entry (_!message) is looked for, as previous. If this also fails, then the platform looks for a Portal called _!message and forwards the message to it. Within this portal, specific entries may extract the message.<br /><br />
This enables<br /><br />
1. Many message types to be directed at a portal and then individually handled within via separate entries.<br /><br />
2. Message handling to be encapsulated in a hidden portal (must be called _!message) rather than having to have message entries/flows right at the top portal, which may be visible to end users.<br />
*Dispatcher and Queue capacity increased<br /><br />
Note: performance will decrease with more than a few thousand items in a queue or dispatcher<br />
*New dispatcher mode: Wait For Specific Release<br /><br />
Items entering the dispatcher wait there until a routine oeration message -&gt; "Release Item" is used to release them from the dispatcher.<br /><br />
The "Release Item" routine operation takes 2 parameters<br /><br />
"Item Index" the Item ID of the item you want released from the dispatcher<br /><br />
"Scope Panel" If non zero, this specifies a dynamic panel which will define the dynamic scope under which the release will work. IF 0, the release will work for any dispatcher in the model.<br /><br />
Using this value cuts down the search space in looking for dispatchers to release the selected item from.<br /><br />
the operation sets a target attribute to 1 if the item was found and released, otherwise it sets the target to 0<br /><br />
*Attributes are checked for any references before the "update references" dialog is displayed<br />
*The "Display" menu contains a "Purge Attributes" option which deletes all unreferenced portal attributes (and any views) from the model.<br /><br />
(attributes referenced in Billboard tables are not purged)<br /><br />
Use this option with care (back up your model) as it needs beta testing<br /><br />
<br />
===4.23o===<br />
<br />
*sort alpha option now selectable for sub label list<br />
*log driven graphs can now have a "_mode" column. This is interpreted on-the-fly and enables the graph's mode to be changed on an overlay by overlay or even a point by point basis<br /><br />
A value of 0 leaves the graph in its last state, which will be the default (edit) mode at the first row.<br /><br />
The graph mode is global to all the overlays. If you want each overlay to have a different style, then you must specify the appropriate value in the _mode column for each point in each overlay.<br /><br />
The _mode values are mapped as follows:<br /><br />
0: no change 1: no plot 2: smooth 3: stepped 4: horizontal bar 5: histogram 6: area 7: gantt style<br />
*row/column operations on tables now validate for -ve row counts<br /><br />
<br />
===4.23n===<br />
<br />
*Fixed redraw bug during animation due to the change in redraw handling (was incorrectly handling redraw of the non-client area of the main window)<br /><br />
<br />
===4.23m===<br />
<br />
*fixed crash bug caused by error reporting code when a matched row lookup failed on a column which includes cell specific formatting<br />
*LabelList for attref element in Label mode can be viewed/changed with a new "List" button, avoiding having to change it back to value and back to label list<br />
*I prevent redraws during file dialog boxes being open. This should prevent missing paint BMP messages while browsing directories, but will lead to messy screens if the file dialog is moved. To implement this i had to change the event polling code which could lead to other reentrancy problems.<br />
*no longer get a refs scan error if adding a portal attribute while editing a file access target<br />
*editor for attrefs referencing an entire labellist now works<br />
*Meta Panels are now called Application Panels<br />
*implemented code for restart dispatcher (restart dispatchers are only available in Application Panels)<br />
*minor rework of background menus to make mode selection easier<br /><br />
<br />
===4.23l===<br />
<br />
*combofield in attref editor now properly holds long labels<br />
*have cleaned up handling of string buffers for long labels etc. as it was too complex<br />
*Changing a routine steps mode does not automatically re-edit the target unless the new mode expects a different target type<br /><br />
<br />
===4.23k===<br />
<br />
*more tweaks to default button/field handling in attribute reference dialog<br />
*&lt;Dynamic&gt; attribute references are annotated with the table selection index/attribute name<br />
*"Step" button in routine calculation edit enables steps to be inserted, duplicated and deleted.<br /><br />
Inserting a control operation (IF/While/Iterate) etc. also inserts the corresponding end-op, changing an existing operation to a control operation or duplicating a control operation does not insert a correspoinding end-op<br />
*crash on deleting a table from 4.23H has been fixed<br />
*Y scale width for gantts and train graphs can be now edited. Its an option in the Scale Parameters<br /><br />
<br />
===4.23j===<br />
<br />
*shared routines can are now selected, setup and made private using the "Sharing" button in the routine editor.<br />
*New combo box drop down is used in attribute reference selector. This holds the names of the possible selections for portal/item/routines instead of having to use the browse button<br /><br />
Typing a partial name and pressing down arrow autocompletes and enables selection of matching completions<br /><br />
The [Add] button when present enables a new attribute to be added. IF the name typed in the field does not exist, the new attribute dialog will be preloaded with that name<br />
*Routine editor tab ordering changed<br /><br />
The comment field is selected by default if it is empty<br /><br />
A single [tab] from the comment field takes you to the OK button<br />
*Change to click on GANTT and TRAIN GRAPH<br /><br />
row1/row2 clicks were one less than expected, now they count from 1<br />
*I have rewritten the code which positions combo-boxes (drop downs) so it is compatible with normal fields. This means combo-boxes in dialogs would be out of alignment but I have implemented an automatic translation which will get applied the first time an old dialog appears during a run.<br /><br />
If the dialog is edited instead, the offset isn't applied since the editor cant tell apart combo and normal fields - you will have to fix the alignment of combo boxes yourself.<br /><br />
<br />
===4.23i===<br />
<br />
*Routine editor now requires selection of a calculation type upfront before the routine object is added<br /><br />
Selection of a type falls into selection of the target (if one is needed)<br /><br />
The default target type is more appropriately initialised and previous types are used where possible<br />
*Have rearragned routine calculation selection flyouts into a more logical order (followup to review), new Numeric and Message sub menus to reduce the size of the Special submenu<br />
*If an object has no flows entering it, item attribute names for all item classes are added<br />
*Set Item Transit Time / Item Transit Target are now available as calculation operations (Spatial Link)<br />
*Meta panels no longer need to be named with prefix _META, they track their type internally<br />
*Speed up in switch between dynamic and meta/application panels<br /><br />
4.23H<br />
*Fixed crash bug with spatial links<br /><br />
If a spatial link was deleted while an item was still on it, the pending FEC event for that item would crash the platform once processed.<br />
*Have started adding some defaults handling for the att-ref edit dialog.<br /><br />
Currently defaults for portal/item/routine etc references and tables referenced (cell/row/col/table) are retained, though the rules for more complex types and interchange of defaults between similar types will be extended.<br />
*row colours in tables can now use the new colours in the palette<br /><br />
4.23G<br />
*Warning bug when navigating to paint owning screen fixed (was redrawing excessively)<br /><br />
Please report any missing redraws when editing paint objects.<br />
*Left click on an attribute view now performs in place edit as it used to<br />
*Track logic fix:<br /><br />
Sections were not being properly reset to "idle" after a loop entry delay completed, causing them to miss unblock messages and resulting in stuck trains<br />
*Track Sections Names<br /><br />
A new button "Update Names" in the Section Details dialog automatically sets the "internal" name of each section of track to one derived from its two end points. This assists in debugging where sections are identified by the internal name, not the full name generated from their two end points.<br />
*Have reworked way panels are deleted when a model is cleared/subsystem is deleted. This was done because the previous method was unreliable and could leave corrupted viewports during the deletion process which would crash the platform if a message had to be displayed during the deletion process.<br />
*messages reported in the "pause at event" debugging mode are now also logged<br /><br /><br /><br />
<br />
===4.23f===<br />
<br />
*Writing a table with the fixed width column option now writes a totally empty cell if a column is formatted with a width of 0<br />
*Have increased custom colour count from 16 to 48 These are arranged in 3 banks of 16<br /><br />
The colour palette editor now properly updates the system when a colour palette is loaded<br />
*Gantt graphs now only show labels that are members of their label subset rather than showing them all<br />
*Fixed a bug when adding to sub label list - the list was incorrectly validating for duplicates when the Local Index option was on for a sub label list<br /><br />
<br />
===4.23e===<br />
<br />
*To remove ambiguity from tupling names, I've changed<br /><br />
"Tuple Get" to "Put Tuple Into Item" "Tuple Set" to "Get Tuple From Item"<br /><br />
This makes the data flow more explicit but also swaps the point of view for the operation from the item to the table.<br /><br />
This makes more sense to me because the parameter specified along with the operation is the table, not the item.<br />
*Fixed attref scan bug in<br />
===4.23d===<br />
<br />
*Fixed labelling of file write "No delimiters" in dialog<br /><br />
<br />
===4.23d===<br />
<br />
*Paint images can be stretched and scaled<br /><br />
Large images are now scaled down automatically rather than the system complaining about them..<br /><br />
Reselecting the image reverts to the original size<br />
*Paint images and avi objects now show the name of the target in their editing context menu<br />
*Ctrl-right click in paint mode always shows paint background menu even if a paint object is under the mouse<br />
*Have implemented right mouse button (extended keyboard) windows key for panel background<br />
*double clicking on a message dispatcher also flashes box around message entry to assist in locating it<br />
*can copy and paste most view types into panels and dynamic screens<br /><br />
(views pasted into dynamic screens will only paste if they conform to the scoping rules. Panels can contain views of any model data regardless of its location.<br />
*Off screen object location<br /><br />
control clicking on an object palette icon displays a popup if there are any objects of that kind on the screen. The popup names the objects and gives their co-ordinates (centre). Any objects off the screen are flagged with a '*'.<br /><br />
Selecting an object will highlight it with a flashing box. If the object is outside the current screen, a message is given and if confirmed, the object may be dragged into the current window area.<br /><br />
This enables review and retrieval of objects which have "fallen off" the modelling area due to changes in window size or positioning by model code.<br />
*Meta panels can now contain queues, dispatchers, in trays and out trays Meta panel switches can now block items in queues<br />
*Breakpoint control<br /><br />
Subsequent breakpoints in the same thread can now be disabled using a checkbox in the breakpoint dialog. They are automatically re-enabled upon "continue" of the run<br /><br />
In addition the model can read and set the "Break Point Master Control" system attribute which provides convenient control of any breakpoint(s) in the model. This works in addition to modeller defined breakpoint control attributes, enabling breakpoints at complex conditions or at certain stages in a long loop to be activated.<br />
*MAJOR REWORK of all object, view and paint object context menu handlers<br /><br />
Removed old code, all menus are now "one shot" (they dont stick around after one action. I did this to make the internal handling consistent between these objects as it was previously very messy.<br />
*Paint objects can be shift clicked and dragged along with other objects<br />
*you have to be in paint mode to shift click paint objects but the selection set is common<br />
*The paint Other Options -&gt; Show All Hidden option is now fixed.<br />
*ANY selected objects can now be aligned and distributed using the new options in the Selection Click menu. This menu only appears when an object in a selected set is clicked with the LEFT button. The Right button always shows the individual object's context menu.<br />
*BUGFIX to item tables and tuples - the validation was preventing a Tuple SET<br />
*Migrating a routine attribute to a portal attribute now updates references in that routine to point to the portal attribute<br /><br />
<br />
===4.23c===<br />
<br />
*multiple broadcasts with the same name no longer added<br />
*Update interval handling has been reworked again, implementation is now simpler and more robust<br />
*can handle unusual circumstances without clock advancing forward, eg: Table Driven Entries which are subsequently "cancelled"<br />
*Interactive View broadcasting was broken - if not all sent attributes had a matching item attribute, the received attributes may be scrambled.<br />
*overlay graph click now sends the original table column for _col, not the overlay column #.<br />
*billboard tables were not properly being terminated when the engine was stopped. This was causing a memory leak and possibly strange values in the table when stopped.<br /><br />
<br />
===4.23b===<br />
<br />
*fixed crash due to not properly handling item cloning for itemtables<br /><br />
<br />
===4.23a===<br />
<br />
*Fixed crash bug when a table with custom cell fonts was sorted. Sorting of formatted tables will now be much faster as well.<br />
*Implemented new table column option "Write Using Fixed Width"<br /><br />
When this option is turned on, the column is written/exported using fixed width formatting. With this option on the column width (if non zero) field and the column alignment (Left,Right,Centre) take effect when the data in that column is written.<br /><br />
If shorter than "width", the column is padded with spaces. If wider than "width", the column is cropped.<br />
*Button broadcasts no longer cause the _Run Pause / _Run Continue broadcasts to be sent when they are processed unless the "Continue Run" option is selected.<br /><br />
4.23<br />
*ITEM TABLE REFERENCES<br /><br />
Itemc can carry references to table in a model so it can be referenced anywhere in the model.<br /><br />
To use an item table reference:<br /><br />
In the Item Edit menu, create a named table reference for the class, say called "test".<br /><br />
From now on, when editing a routine with that item flow involved and you select a table, you will now have "&lt;item&gt; test" available, enabling use of the item's reference to supply the table as well as the original tables and &lt;Dynamic&gt;.<br /><br />
Before you can use the reference, you have to point it to a table. Using a routine "SET", assign the reference as follows:<br />
*make "Target" a TABLE attref with the item table reference you want to set up (eg: &lt;item&gt; test)<br />
*make "Set To" a TABLE attref with the table you want to point TO<br /><br />
To actually use the reference, set up your cell/column/etc reference as normal but select the &lt;item&gt; table reference from the table list instead of a normal table.<br /><br />
You can clear an item table reference (so it points to nothing) by using the CLEAR operation with the target being set to a TABLE attref with the item table reference you want to clear selected. This will not clear the table itself, just the item's reference to it.<br /><br />
A item table reference only allows reading of the table<br /><br />
Clicking on an item with CTRL shows any item table references and what they are pointing to.<br /><br />
Column labels will be looked up on the fly but cannot be browsed in the editor, you have to enter the name manually.<br /><br />
---<br />
*tables can now be deleted even if references exist to them. This will assist in migrating tables around a model where a higher level table is to be deleted.<br /><br />
ITEM Table references<br /><br /><br />
SET and CLEAR now implement for target which is an item table reference<br />
*vertical queues and dispatchers no longer display as hairlines if the overflow indicator is hidden<br />
*dynamic file name now supported for file operations file size, delete and save image<br />
*routine comments are now included in routine descriptions generarted via the Model Info menu option.<br />
*Log Driven Graph views now can send a broadcast when the graph is clicked<br /><br />
The following item attributes will be tupled to:<br /><br />
"_command" currently 1 for a click "_time" the x co-ord value (normally this is time) "_y" the y co-ord value<br />
*Grid View Graphs can now send a broadcast when clicked<br /><br />
"_row" the row clicked "_col" the col clicked<br />
*Overlay Graphs can now send a broadcast when clicked<br /><br />
"_command" 1 for a click on a point "_row" row, col of the point clicked "_col" "_x" graph x co-ord of point clicked (snapped to point) "_y" " y "<br />
<br />
===4.22w===<br />
<br />
*fixed bug causing delay box to appear on run start when it shouldn't<br /><br />
<br />
===4.22v===<br />
<br />
*reworked the way Planimate tracks when a window is "Busy" and locked from further events. Have co-ordinated the handling of multiple windows/ viewports to prevent events getting to a window when they should not.<br /><br />
This was causing crashes if model runs were continued via a viewport background menu<br />
*"run realtime" mode now is much more transparent in operation and does not present the "pause" run menu when processing a realtime update<br />
*font can be selected for attribute and cell views<br />
*"edit order" can be specified for cell views<br /><br />
this moves the edit window in a predefined order between cell views on a panel as they are edited<br />
*the system attribute "Run In Real Time" can be used to turn on and off the realtime run mode of the engine (where the clock gets stepped along by the realtime clock)<br /><br />
Note on the Realtime Mode<br /><br />
Realtime mode involves sending a "continue" message to the engine 2 times a second. A model can use the "_Run Continue" broadcast to capture this event and perform a "background" task. This task/thread will be executed even if the user is editing a cell/attribute. It must not perform any time consuming activity and must not generate a dialog. It should be heavily validated to ensure the realtime task will not stop the model with a message under any circumstance.<br />
*new display option "dont show background run menu" does not display the background menu in simulate mode.<br /><br />
<br />
===4.22u===<br />
<br />
*fixed major slowdown bug in T due to extra redraw in print check code<br /><br />
<br />
===4.22t===<br />
<br />
*"Simulation Model" to "Application" conversion enhancement<br /><br />
To make it easier to convert simulation models into applications, a new display option has been added which reduces the need to replace all scheduled entries by broadcast entries.<br /><br />
When the new "Modeller Starts Scheduled Entries" option is turned on, all scheduled entries will no longer automatically post events when the engine is started. This will enable the model to sit at "Time Zero" as long as the modeller wants.<br /><br />
When the modeller wants to start the simulation run, the new routine operation "Start Scheduled Entries" can be used which will cause all scheduled entries to start processing their schedules, as used to happen automatically when the run engine was started.<br /><br />
The "Start Scheduled Entries" operation only takes effect once during a given run of the engine, and only takes effect if the "Modeller Starts Scheduled Entries" option was "on"<br />
*Find and replace implemented in the routine editor<br /><br />
The Replace menu appears when you right click on a line in the routine editor. It by default is applied to the line clicked to the end of the routine, this can be changed.<br /><br />
An original and new attref can be specified in the replace dialog, all instances of the original attref are then replaced by the new one.<br /><br />
Two important special cases are handled which makes the replace powerful<br /><br />
*If the original and new attref are both "Value" mode attrefs, then all instances of the "Value" attref are replaced, including those used to specify rows/columns in table cell lookups, matched cells, row lookups etc.<br />
*If the original and new attref are both "Table" then all attrefs referencing the table (in any mode) are updated, not just "Table" mode attrefs<br />
*new value format to display fixed with integers with leading 0s<br />
*new option for file write prevents any delimiters being written between columns. this can be useful when packing together table columns<br />
*New routine operations<br /><br />
"Set Column Tuple Name"<br />
*Enables the tuple name of a column to be changed, much like changing the title of a column. This resets the tuple caches so tupling will find the new column. However, as is the case for inserting/deleting columns, using constant column labels to identify the column requires the engine to restart.<br /><br />
"TableView Row Scroll", "TableView Col Scroll" "Set TableView Row Scroll", "Set TableView Col Scroll"<br />
*These give the modeller access to the current scroll offset of a table view. To identify which table view, the modeller must specify both a table object and a model panel identifier. Only one tabular view of a particular table on a particular panel can be accessed.<br /><br />
"TableView Rows", "TableView Cols"<br />
*These give the modeller access to the number of rows/columns that the table view last displayed. This can change on different PCs due to differerent display drivers, font scaling and panel zoom. It is important to the printing enhancement (below) since it lets the printing code know how many rows/columns were actually rendered, so the correct scrolls can be computed<br />
*New system broadcast "_panel printed" is sent after a modeller-initiated print of a panel is complete for that panel. It will tuple through two item attributes:<br /><br />
"_page" - current page number in print job, starts at 1 "_panel" - value from the panel label list identifying the panel the modeller is currently printing<br />
*Enhancement to printing (making use of the new routine operations) enables a page to be repeatedly printed under model control. The model can re-submit a page in respose to the "_Page Printed" broadcast after making adjustments to the scroll of table views on the page<br /><br />
I have developed a model which demonstrates how to print a large table over many pages, let me know if you want it.<br /><br />
<br />
===4.22s===<br />
<br />
*fixed bug in dispatcher - was not properly deregistering broadcast usage<br />
*moveable viewport (testing)<br />
*rework of way animation update interval events are posted to prevent "clock creep" without losing update interval scheduling<br />
*holding control while clicking on a section on a track changes the delete option to delete ALL tracks on the current panel<br /><br />
<br />
===4.22r===<br />
<br />
*migrate to owner option for routine attributes (in Attribute menu in the editor) makes the routine attribute a portal attribute<br />
*switches now have an option to make them visible during the run<br /><br />
<br />
===4.22q===<br />
<br />
*have fixed simulation pause/continue handling so it properly detects a run completion. This was broken in the rewrite earlier and an extra "continue" was always required when an exit wanted to "stop" a run<br />
*Have put an extra check into the code which posts async events (eg: video completion) to prevent it crashing the platform if a video completion occurs at an unexpected time (eg: during an error dialog)<br />
*new system time attribute "Real Time Of Day" gives the number of seconds that have elapsed since midnight on the current REAL day, as read from the pc clock.<br />
*The following system attributes were not properly being named, due to the missing "Activity Bar Colour" name in an internal table:<br /><br />
"Clock Visible" "Background Run" "Item Owning Item ID" "Have Current Pending Events"<br /><br />
Any code using these will need to be corrected.<br /><br />
I am surprised noone noticed this, all 4.22 is affected.<br /><br />
<br />
===4.22p===<br />
<br />
*format for the Week, Day (from 1) has been changed to keep it distinct from time modes which number from 0<br /><br />
Times are now formatted like: W1 D2 12:34<br />
*The "Find" tool now makes a distinction between finding exits which stop the run and exits which pause the run<br /><br />
= The "Pause Once Ready" option has been renamed to "OLD: Pause After PreInit" since it has absolutely nothing to do with the current "Ready" mode of models.<br /><br />
*** It should be OFF unless you are relying on users interacting with models during the engine PreInit stage which is obsolete these days.<br /><br />
I would like to phase this option out. Advise if this is a problem<br />
*The Find system now finds table columns with matchine names/titles and also table columns set for "Clear At Start"<br /><br />
<br />
===4.22o===<br />
<br />
*reworked scenario loading, fixed problems in prereading multiple tables<br /><br />
<br />
===4.22n===<br />
<br /><br />
[new file format]<br />
*Table cell click broadcast now sends the broadcast when the space bar is pressed with the table having focus (instead of editing the cell)<br />
*New option on table views "Send Broadcast After Edit"<br /><br />
This enables the table to be edited normally but sends the cell click broadcast (including the _row and _column) after the cell has been edited.<br />
*implemented new time format "Week, Day (from 1) which formats relative times in weeks, days, hours and minutes.<br /><br />
This gives output like 1w 2d 12:34<br /><br />
Weeks are counted from 1 Days are counted from 1..7<br /><br />
NB: This is intended as an output format and does not have strong input validation at this stage<br /><br />
<br />
===4.22m===<br />
<br /><br />
[new file version]<br /><br />
This release implements portal security<br /><br />
A portal option tags a portal and its subsystems as "Only For Administrators" You only need to set the option for one portal and it will be in effect for all subsystems within it.<br /><br />
This prevents the portal from being viewable unless an administrative password is provided. This is set in the Edit-&gt;Admin Password menu. The default password is "admin" (you will need to enter this to change it) and with this default, Planimate automatically grants admin access when the model is loaded (so there is no protection by default).<br /><br />
If the admin password is changed from its default, the admin protection is activated (after the model is reloaded). When an attempt is made to access a protected subsystem (either by direct clicking on a portal, following a jump button or a model initiated screen change), Plnimate will prompt the user to provide the password.<br /><br />
The protection does NOT apply to panels associated with a protected portal, so these may be linked to without the user needing the admin password.<br /><br />
<br />
===4.22l===<br />
<br /><br />
Major Recoding<br /><br />
[no functional/file format changes from "k" but alot of code has been rewritten to support upcoming enhancements]<br />
*FEC event handling has been streamlined for high priority 0 time events. Should make things slightly faster<br />
*A multiserver with a zero delay now schedules a priority event which is posted ahead of any other events at the current time. This makes it much more likely that the next thread to execute after the item reaches the multiserver is the item leaving the multiserver.<br />
*All SAVE code has been reworked so I can now intercept the saved model data stream. This will enable me to implement on-the-fly scrambling of the model file, to prevent users looking at the model code<br /><br />
<br />
===4.22k===<br />
<br />
*new options and behaviour for attribute stat/views and buttons<br /><br />
= If you run in InterDyne mode and use the Pauseable 0 Delay object, this change impacts your models!<br /><br />
When paused, if any current time events are pending AND the system is in InterDyne mode, then attribute views and buttons will not respond to user interaction<br /><br />
UNLESS their new option<br /><br />
"Can Send When Events Pending" (for buttons) "Can Edit When Events Pending" (for attribute views)<br /><br />
are on.<br /><br />
This builds on the premise that a model does not normally pause until all zero time events have been processed, but can be forced to pause using a "Pausable 0 Delay" - in which case new broadcasts and attribute changes could impact badly on an incomplete process.<br /><br />
By default, the platform now blocks these broadcasts/changes, for safety, but these options above allow the new behaviour to be overridden at which point the modeller takes the risk for ensuring integrity.<br />
*new system attribute "Have Current Pending Events" returns true if the FEC has any events scheduled to occur at exactly the current time - meaning that there is some unfinished activity at the current epoch which has not yet occured - either because the user has paused the model or as a side effect of activity in the current thread (eg: unblocking).<br /><br />
This is intended to enable modellers to check whether other 0-time activity is in progress when a new broadcast is initiated by the user interacting with the model. The modeller may want to provent this second broadcast from proceeding in such circumstances.<br />
*Platform change: In InterDyne mode, the paused background menu will now enable just "Continue" if the FEC has pending events at time 0.<br /><br />
This enables users to continue a run they paused (enabled by a Pauseable 0 Delay) without having to use the main menu "Continue"<br /><br />
In addition, the pause popup which occurs while a run is in progress will now only show "Pause Run" - again in InterDyne mode at time zero.<br /><br /><br />
<br />
===4.22j===<br />
<br /><br />
[new file version]<br />
*Date time dialog no longer has the NULL checkbox - still accepts "-" and &lt;del&gt; for entering a NULL time<br />
*implemented date/time editor for cell and attribute views<br />
*added ability to send a broadcast when an attribute view (stat) is edited. Unlike table etc. broadcasts, setting this broadcast does not stop the click from editing the attribute, but causes the named broadcast to be sent once the edit is complete. The modeller can use this to trigger an update once a field is edited.<br />
*sort alphabetic option now available for sub label lists (so dialog lists will be sorted)<br />
*Scenario loading is now prevalidated before the load starts. Made the table column error message more friendly<br />
*new calendar time format : Day of Week<br /><br />
eg: Mon, 1 Jan 2001<br />
*the 3 system_UI broadcasts are no longer tagged as in use by the platform (they never were) and can be removed from a model if not used. They are no longer present by default<br />
*fixed more pausing bugs which "i" didnt properly address<br /><br />
<br />
===4.22i===<br />
<br />
*Table/Gantt/Train Graph click broadcasts<br /><br />
previously these were sent to the dynamic scope associated with the VIEW. They are now sent to the scope associated with their source table.<br /><br />
This makes them safer when systems are copied<br />
*Loading integrity issues<br />
*new descriptive message appears when a loaded model is too "new" and the load is avoided.<br />
*new main menu "model info" option - just gives version info of model without loading it<br />
*Error Handling for modeller debugging<br />
*the error dialog enables routine attributes to be browsed if a routine attribute was active at the time of the error<br />
*on model errors, item and routine attributes are written to the _plerror.txt file<br />
*calendar window now used when entering calendar times in tables<br /><br />
This replaces the freeform editor and enables a date/time to be selected using a calendar. The window consists of a number of fields into which numbers may be typed or arrow keys used to change values.<br /><br />
When the down arrow button is clicked, a month calendar appears. The month and year can be directly selected within this dialog and the appropriate month calendar will be shown from which a date can be selected.<br /><br />
The check box is used to signify that the date is a Planimate "null" date.<br /><br />
For keyboard users, the date/time window has many shortcuts:<br />
*arrows move between fields<br />
*esc cancels edit (or closes month view if open)<br />
*enter accepts edit<br />
*tab moves to next field<br />
*space moves to next field, stops at the enable checkbox and toggles it<br />
*F4 opens the month view<br />
*"-" or &lt;backspace&gt; clears the "enable" checkbox, marking it as a null time<br />
*numbers are interpreted directly (even for month fields)<br />
*"/",":" moves to next field so you can type: 25/12/2000 10:23:40 and it will be interpreted correctly<br />
*ctrl-c copies date to internal buffer (also into clipboard)<br />
*ctrl-v pastes the last copied date (from internal buffer only)<br /><br /><br />
*new routine operation - "Breakpoint"<br /><br />
This is useful for debugging routines, loops<br /><br />
It puts up the standard error dialog so attributes can be browsed, but otherwise enables the model to continue<br /><br />
An attribute associated with the breakpoint can be used to control if the breakpoint fires or not. This can be tied to a local variable (ie: only fire breakpoint under certain conditions).<br />
*rounding of time changed<br />
*times are now rounded down to the nearest second both for calculation and display - previously the display was being generated by rounding half seconds up.<br /><br />
Times before the model start run time reference (ie: -ve numbers) are also now rounded down, previously they would be rounded up.<br /><br /><br />
*attempting to extract date etc. of a null time now yields an error message<br />
*FIX - engine now properly animates side effect broadcasts sent as a result of a broadcast triggered by a button. Previously the broadcasts etc. were occuring but not being animated as the animation system was sensing the upcoming "pause" once the zero time activities were completed.<br />
*FIX - a button initiated broadcast was not properly handling the "continue" option until some interaction was made with the model.<br />
*background menu not shown if at time 0 in interdyne mode<br /><br />
<br />
===4.22h===<br />
<br />
*fixed a resource/memory leak in viewport handling implemented in<br />
===4.22g===<br />
<br /><br />
<br />
===4.22g===<br />
<br /><br />
VIEWPORT FIXES<br />
*if multiple viewports somehow attempt to display the same panel or subsystem (which is not allowed at the moment) one will display a blue background instead of the system crashing.<br /><br />
Also catches the case of subsystems with viewports in them viewing each other in a circuit (the hall of mirrors...)<br />
*chaging subsytem due to an interaction within a viewport now is valid and no longer crashes the platform<br />
*multiple viewports on the one panel are now reliable and interactive deletion of one actually deletes the correct one...<br /><br />
With these bugs fixed/trapped, I am no longer aware of any method of crashing the platform (or generating an "Unrecoverable Error" dialog) but no doubt modeller creativity will find a way before i know it :)<br /><br /><br />
<br />
===4.22f===<br />
<br /><br />
INTERNAL REWRITES AND CLEANUPS, MORE INTERNAL VALIDATION<br />
*have rewritten basic graphical rectangle handling. This had to occur to remove old code which is part of the reason Planimate does not fully support multiple windows on a model.<br /><br />
As a result, graphs, gantts and traingraphs now work properly in a viewport.<br /><br />
The code rewrite affects: horizontal time scroller, vertical scrollbar on tables, table graphs, gantts and train graphs, log viewer, icon selector, the palettes, "stat" view displays in general, paint objects.<br /><br />
They've tested out OK but look out for any new problems in displays. No changes have been made to engine algorithms or file formats.<br />
*have added a new diagnostic check to catch possible source code errors with window management. Apart from ViewPorts, I'm not aware of any means of generating these.<br /><br />
These are now reported as "Application Warnings" and must be taken extremely seriously as they mean something has happened that I never expected. These are not modelling errors (though they may be triggered by one) - they are errors in the Planimate application itself which I place top priority in fixing<br /><br />
These messages are also logged to PLANIMAT.DBG<br />
*fixed memory corruption when a subsystem containing a train graph was copied and subsequently deleted. This would cause a crash soon after.<br /><br />
<br />
===4.22e===<br />
<br />
*A paused model at time 0 now displays state as "Ready". The old "PreInit Paused" state (where the engine pauses once attributes have been initialised, when the "Pause When Ready" display option is on) is now called "Init Ready".<br /><br />
I'd like to phase out this "Init Ready" state<br /><br />
*** PAUSE WHEN READY should be off for usual InterDyne applications.<br /><br />
Is anyone using the "Pause When Ready" state? Please contact me.<br />
*CTRL-S now saves model when paused (this will stop and restart the run)<br />
*Train graph tables can now have a "_thickness" column to drive the thickness of lines. This will probably be required as dotted lines drawn as single pixel lines are very thin<br /><br />
<br />
===4.22d===<br />
<br />
*lower margin for train graph is now computed similarly to the top margin, this should avoid large gaps at the bottom for small graphs<br /><br />
*have changed the code which draws dashed/thick lines It now uses a different API calls which enables me to draw thick AND dashed lines.<br /><br />
Apart from not drawing thick lines, the previous api call had a bug if the first line drawn was not dashed.<br /><br />
<br />
===4.22c===<br />
<br />
*NEW FILE VERSION<br />
*Enhanced the "find" system<br /><br />
The "Advanced" button in the dialog enables you to find specific instances of objects configured as specified.<br /><br />
Clicking on an object name and selecting "Bring To Front" now actually highlights simulation and paint objects.<br />
*click Broadcasts for Gantt and Train Graphs now implemented... not tested much yet, demo model to follow<br /><br />
<br />
===4.22a===<br />
<br />
*NEW FILE VERSION<br /><br />
IMPORTANT<br /><br />
This version will require FULL testing as I have made many coding changes especially to broadcasting, table editing and run control.<br /><br />
There is no intentional change to how the system operates (except where noted below) so let me know if something unexpected happens with this verison.<br />
*Have implemented a capability which enables a modeller to set up a table view to send a broadcast when a cell is clicked instead of editing the cell.<br /><br />
The "Cell Click Broadcast" option in the Table View Edit popup (click outside table cell aread to get this) enables the broadcast to be associated.<br /><br />
When sent, the broadcast will carry two attributes which can be captured by having item attributes "_row" and "_col" on the receiving item.<br /><br />
These will give the row and column clicked/doubleclicked by the user.<br /><br />
The broadcast is only sent if the table is clicked while the model has been started. I dont intend having an option to start the run automatically see the next note.<br /><br />
= I am re-considering the validity of the "Handle Without Initialising Run" button broadcast option and would ideally like to phase it out.<br /><br />
The overhead in initialising/shutting down large models makes models using this feature feel very sluggish to users. With modern modelling techniques there should be little or no need to "stop" a model run, in fact the intention is that in InterDyne (User) mode, the model will never need to be in a "Stopped" stage from the Users point of view.<br /><br />
Please contact me (Rick) or Doug to discuss this if it interests you as it will impact on our evolving designs.<br />
*Random error message in dialog label fields has been fixed (was not properly testing for existence of label)<br />
*have altered system so load/save are still available during a running model. Selecting these stops the model then restarts it once complete.<br /><br />
If a model is loaded via the menus while one is running, the one loaded is automatically started.<br /><br />
&lt;this is all part of the move to abolish the interdyne-stopped mode of the system&gt;<br />
*Reworked viewport display code to prevent crash if a viewport triggered an error message during its display (eg: missing paint image) which caused a re-entrancy problem.<br />
*reworked the way the "protect from edit" column options and "In Place Edit" table view options are implemented. The cell menus and row menus are now more appropriate for these modes<br />
*Rewrote the broadcast system to merge all the broadcast sending code.<br /><br />
System needs testing to ensure broadcasts sent under the many differnet contexts (buttons, change objects, exits, dispatcher) and broadcast options act as expected. See above note on "Handle Without Initialisation" as well.<br /><br />
4.22<br /><br />
This is a mostly untested beta release<br /><br />
= Have rewritten the master event processing loop in the engine to support future developments, more consistent error trapping and clearer internal structure, including better zero time control, and real time model operation.<br /><br />
Every model depends on this code and could be impacted by the changes if i've missed something. In particular the control structures which hangle Pausing and the stopping of runs (normal or errored) have been changed. Please test thoroughly before commiting to it.<br />
*a new option on multiserver "Pauseable 0 Delay" configures the multiserver to enable a pause of the model, even at zero time (which was disallowed except for debugging in<br />
===4.21u===<br />
)<br /><br />
This enables a modeller to specify "pauseable points" in a long processing sequence which runs in zero time in a very controlled manner.<br /><br />
Multiservers in this mode will shortly have a distinguishing appearance so the modeller can be alerted of their prescence.<br /><br />
Selecting this option<br />
*zeros the dalay of the multiserver for all classes<br />
*resets its capacity to 1<br />
*instructs the engine that a pause is OK at this object (if one has been requested by the user clicking during the run)<br />
*the "Run Realtime" display option now makes the model auto-continue to keep track with realtime, no matter what is active (popup, dialog etc). This can lead to real problems if a dialog is active, for example, so consider the "Run Realtime" mode experimental.<br /><br />
I'm not aware of any models relying on it in its previous form, let me know if you were using it since engine operation in this mode is in the process of being reworked.<br />
*The new system attribute "Batch Run" is true if Planimate was loaded with the /BATCH command line option<br />
*The new system attribute "Item Owning Item ID" returns the ID of any item which OWNS the current item if it is a message item. If the current item is not a message item, -1 is returned.<br />
*A model initiated scenario load/save will now prompt the user with a file selection dialog if the file name label contains a '*'. If the file name label contains an extention, it is used instead of the default SCN extention.<br /><br />
<br />
===4.21x===<br />
<br />
*spatial links properly update co-ords for moving portals even when their lines are hidden<br />
*new button action "Load Model" enables a model name to be specified which will be loaded when the button is clicked.<br />
*copy cell for individual cells<br />
*reordered formatting options for table column editor to match order in attribute editor<br />
*rewrote model exit/saveas code to support switching models<br /><br />
<br />
===4.21w===<br />
<br />
*Colour palette now can be saved and loaded from disk<br />
*Copyright on opening banner page updated - new _!SYSTEM.DB<br />
*item details popup now wider<br />
*now sort broadcast labels at entries etc.<br /><br />
<br />
===4.21v===<br />
<br />
*New option for portals enables them to respond to clicks in interdyne mode (sending the clicked broadcast) without having them respond to drags<br />
*create sort index now sets identical rows to the same index value<br /><br />
"identical" means the source cell values are the same, not the formatted strings.<br /><br /><br /><br />
<br />
===4.21u===<br />
<br />
*A new table operation: "Create sort index from column"<br /><br />
This fills a table column with an index indicating the alphabetic order (ascending) of the FORMATTED text in the specified sort column.<br /><br />
By then sorting over this index column (using a regular sort), a table can be effectively sorted alphabetically regardless of label index.<br /><br />
Constructing the formatting strings may take a while for long tables so it may be useful to keep the index column around for rapid alphabetic sorting, only regenerating it when the strings change.<br /><br /><br />
Combined with the "create label list from column" option, this gives the modeller a lot of power to do their own re-indexing without having to write to files.<br />
*NEW mode for dispatcher: SEND SCOPED BROADCAST<br /><br />
This mode enables a dispatcher to send a specific broadcast to a hierarchy of subsystems. The top is specified using a portal in the object list.<br /><br />
Unlike a change object broadcast, the broadcast is sent immediately, whilst the item waits in the dispatcher. The item only leaves the dispatcher once all listening entries have produced their broadcast items and they have flowed as far as they can before encountering capacity (which ends their epoch).<br /><br />
A modeller can now be assured that all listeners for a broadcast have received and had a chance to process it without having to put an explicit delay in the originating items path.<br /><br />
The broadcast is scoped to the subsystem under the object which is specified by the attref set up when editing the dispatcher.<br /><br />
If an index of 0 is used, the broadcast is sent globally. However if possible use a scope to make your model scalable. <br /><br />
Broadcast dispatchers have a solid dashed baseline.<br />
*EVENT processing change<br /><br />
The system will now only "pause" once all events at the current time have been completed. This means all side effects from an operation will be applied at the time the model is paused.<br /><br />
For debugging, this can be overridden via the debug options<br />
*ALL DEBUG OPTIONS are turned off when the system is switched to InterDyne mode. They stay off if switched back to editing mode.<br />
*Queue and dispatcher drawing has been enhanced. If the "Dont Show Overflow" option is Off, OR the maximum size equals the screen size, then the numerical "overflow" icon will never be required to show. Their size now reflects this, meaning less screen space is wasted by these objects.<br />
*fixed crash if an error occurs during model initialisation which attempts to show modeller a screen that had not been initialised yet and send that screen a _Panel Opened broadcast.<br /><br />
Panel Opened broadcasts are no longer sent after an error has occured<br />
*Dynamic spatial link operations now properly validate that the "from" and "to" portals are on the same screen, to prevent the model becoming corrupted by spatial links attempting to connect through screens<br />
*Now give a reason for not loading a scenario based on a different time reference from within a routine rather than trying and causing a platform crash<br />
*NEW DEFAULT OPTIONS<br />
*switches default to assume no blocking<br />
*routines default to execute only during move<br />
*stat hide names is off for attribute stats (so names are initially shown)<br />
*Have changed scenario handling to map the default scenario name (SCENARIO.SCN) through the INI file mapping system so it can be overridden in an INI file to a modeller specified default, including a folder<br />
*Busy cursor now displayed when running in interdyne mode<br />
*cyclic selection now an option for sub label lists<br />
*dialog fields associated with a name sorted label list are now also sorted<br />
*have installed some default palette colours in the user custom colours area. These can still be overridden as required.<br /><br />
<br />
===4.21t===<br />
<br />
*Runtime system now pauses before the next event when running to "realtime", "animation starting" or stepping through events.<br />
*Have prevented ghost "delay" boxes from appearing when: #1 A _Model Ended broadcast sets off a "stop" exit again #2 An error occurs during processing of the _Model Ended broadcast when the model was otherwise running in time advance mode<br />
*Run realtime option now implemented for relative time mode models as well the time the model is started becomes time 0<br />
*delete label operation added<br /><br />
removes a label definition from a normal label list (no effect on sub or other label list types)<br />
*added optional "_style" column to traingraph display (holds linestyle value) and fixed handing of the optional "_color" column to properly map the colours.<br />
*Draggable portals now respond to click in interdyne-stopped mode by starting the model to pass the click to the model. Like buttons, portals have an option to prevent the model staying "running" once the portal click completes. However, this may really slow down interaction - if the run has to be started and stopped for each portal click. I dont recommend working this way<br />
*scenario load/save now available in interdyne stopped mode<br /><br /><br />
<br />
===4.21s===<br />
<br />
*system attribute to show/hide clock<br />
*fixes the use of dynamic tables in sort operations (was not realising the parameters for the sort dependend on a dynamic table)<br /><br />
<br />
===4.21r===<br />
<br />
*table columns copied during runtime get empty tuple label names since there is little point copying the original columns label name<br /><br />
<br />
===4.21q===<br />
<br />
*Added new option to fields in dialogs "User Can Add Labels"<br /><br />
If a field is a "label list" selection type field, AND the label list concerned is not "Only Modellers Can Add" then the dialog will accept strings typed in which do not match known labels and confirm with the user that they want to really add them.<br /><br />
I've tightened up validation if the string entered is not known AND the "User Can Add" option for the field is off. In this case, a message appears prompting the user that the label string must be set to something already recognised.<br /><br /><br />
<br />
===4.21p===<br />
<br />
*Added Bitwise X-OR operation<br />
*Rearranged order of value format modes<br />
*added column # to column menu and column format copy<br />
*Bug fix to dialogs - I was validating the row index for cell references in fields incorrectly<br />
*Change to undo handling in tables to properly undo formatting changes in cells<br /><br />
<br />
===4.21o===<br />
[NEW FILE FORMAT]<br />
*New "special" routine operation supports printing of multiple panels under model control. The modeller can specify which panel (panel label) or portal (object label) to print.<br /><br />
Many panels can be queued for printing using this routine operation. The actual rendering and printing is started once the routine ends.<br /><br />
Each panel can only be queued once within the one change object (to prevent flawed logic from blowing up the printer spooler...)<br /><br />
<br />
===4.21n===<br />
[NEW FILE FORMAT]<br />
*Have rewritten spatial link dynamic colour handling<br />
*colours once set persist across runs<br />
*saving the model saves the link colours<br />
*the link colour can by set during editing<br /><br /><br />
<br />
===4.21m===<br />
[NEW FILE FORMAT]<br /><br />
I have rewritten the way cell-by-cell table formatting is represented and stored.<br /><br />
Now support editing of cell formatting including<br />
*text and background colour, font and units (which overrides the column units)<br /><br />
This is a first release after many changes to the table code, so take care to backup previous model versions.<br /><br />
<br />
===4.21l===<br />
<br />
*Error handling on value entry tightened, dialogs and attribute stat edits dont take on a value if it causes a validation error<br />
*form error handling improved<br />
*if an error in an input field occurs, the dialog takes the cursor to the error field and stays open rather than accepting<br />
*Crash bug fix:<br /><br />
If a newly created table column was named with a long name (&gt; 20 characters) the column tuple name would be set to a name &gt; 20 characters. If item attributes were now updated from the table, an item attribute could end up having a name &gt; 20 characters which would overflow the internal buffers allowed for an item name in the name processing code.<br /><br />
I have added a check to prevent a long title being made a column tuple name and stopped the crash which caused us to find this (column label update) but existing item/column tuple names may still have names &gt; 20 characters - if you notice any, make them shorter. <br /><br /><br />
<br />
===4.21k===<br />
<br />
*increased formatting width for multilabels to 63 characters (the limit for normal labels)<br />
*enhanced label list export and import mode options<br />
*system attribute:visible panel ID # returns the panel index of the currently visible/frontmost panel<br />
*PANEL objects such as paint buttons can now reference tables and attributes on the portal hierachy which owns the panel, not just the "top" dynamic screen<br />
*Gantt y scroller now updated properly, should work reliably<br />
*Cell stats also dont show zeros when column configured as such<br />
*activity color for status bar now programmable/readable as a system attribute<br />
*Directional spatial links implemented<br />
*an option during edit of the spatial link<br />
*a new routine operation enables creation of a directional spatial link<br /><br />
the runtime link enables two spatial links to exist between a pair of objects if they are directional in opposite directions.<br />
*Unreliable "continue" after pause now fixed<br /><br />
<br />
===4.21j===<br />
<br />
*label lists have a new option "Auto-Add Labels On Import" which will make them silently accept new labels without asking the user. This enables specific label lists to automatically accept labels while others ask the user for confirmation<br />
*label list import dialogs now show the list nam (in dialog / in title of dialog)<br />
*right justify option on table columns right justifies title text on primary and second title lines<br />
*dont show zero option on table column leaves zero entries blank in the display (including 0 labels)<br />
*have implemented option in change object to enable "dynamic file names" as for the scenario load/save. The file name option in the menu enables you to specify an attref whose formatted value is used as the file name.<br /><br />
This works in combination with INI file remappings and the user-browse option which are applied and display the looked-up name.<br /><br />
In this mode, the Edit-&gt;Files Referenced will always display the LAST file accessed by the change object.<br /><br />
<br />
===4.21i===<br />
<br />
*if the table cell selection is moved (with keys) or dragged beyond the rectangle of its parent window, the window scrolls to show the selection. Note: this is the window scrolling, not the table.<br /><br />
I have also installed this scrolling into the "show object" code which flashes a box around an object to show it.<br />
*Table selections are not lost when the window is scrolled/redrawn.<br /><br />
Table view selections remain when changing and returning from another panel<br />
*Have reworked naming of object / panel label lists. Its no longer called "Exporting" to avoid confusion with data export/import.<br />
*Attref editor allows length attribute names (20 characters) to be typed as well as browsed<br />
*when a column tuple name is renamed, you get to confirm if references should be updated<br /><br />
<br />
===4.21h===<br />
<br />
*model info includes more in table descriptions including column details<br />
*have changed the pause code to handle a pause exit while processing the _run start broadcast<br /><br />
I removed an update i think was not needed anymore. Look out for other pausing problems particularly with menus or dialogs.<br />
*fixed silly bug in the "date only" code which was causing dates entered into input fields to yield a silly error message dialog box<br /><br /><br />
<br />
===4.21g===<br />
<br />
*"migrate to owner" implemented for attributes as for tables<br />
*new "Date Only" time field suppresses display of time fields in dates<br />
*have added checks to prevent very long file read elements (&gt;256 characters) from crashing system. This occured when a tab delimited file was accidently read using comma delimiting, creating long strings for each read element.<br /><br /><br />
<br />
===4.21f===<br />
<br />
*Enclosing double quotes are now stripped for non-label data as well as label data, enabling import of double quoted values, times etc.<br /><br />
The "Remove Enclosing 's" option must be OFF for the double quote filter to operate, otherwise the single quote filter takes precedence.<br /><br />
NB: In all cases, any embedded "s are converted to 's since planimate cannot handle a " in a label field.<br /><br />
<br />
===4.21e===<br />
<br />
*Sound files are now registered as used in the Files Accessed list<br />
*A label list can be constructed from the formatted contents of a table column using the "Create Label List From Column" operation.<br /><br />
This opens up interesting possibilities with multi-label formatted strings since they can be converted into "normal" labels and used for display, selection etc.<br /><br />
I do not do any duplicate handling, so if "foo" appears twice in the source column, it will be allocated 2 separate label indicies.<br /><br />
Indicies are allocated from 1 unless there is already something in the target label list. I suggest starting with a cleared out list.<br />
*New Table routine operation: "Table Sort Dialog" displays the "Sort" dialog for the nominated table<br />
*Any multi-column dialog now supports clicking in column titles to sort them. This is useful with the Edit-"Files Accessed" list as it sorts and groups all files with the same name together.<br /><br />
As with column widths, none of the editors retain the sort order, but it may be useful to browsing.<br /><br />
The editors should work OK with resorted lists, look out for any unexpected behaviour.<br />
*Update to attribute reference tracking attributes referenced in dialogs now also report the change object if the dialog is in a routine and the attribute modified flag is properly set for read only fields<br /><br /><br />
<br />
===4.21d===<br />
<br /><br />
BUGFIX - the continue run system attribute now works again, was broken by a change in C<br /><br />
<br />
===4.21c===<br />
<br />
*SCENARIO LOAD AND SAVE can now be initiated by the model<br /><br />
New "Special" routine operations enable a routine to save/load a specified scenario.<br /><br />
Scenario number must be from 1 to 8 and corresponds to a scenario in the Edit-&gt;Scenarios list.<br /><br />
The Filename should be set to a label list with an entry containing the name of the file. The extention must also be included in the name.<br /><br />
The name is mapped through the INI file mapping system so an INI file can override the file name if required.<br /><br />
If the filename is "-" (no quotes), the file name set up for the scenario is used instead. If a given scenario set is only being saved to one file, its better to use the default name, it can then be easily changed by using Edit-&gt;Scenarios.<br /><br />
When loading a scenario, the scenario number doesn't really make a difference (it still has to be valid) but is provided so that the default scenario filename for that scenario number can be used (by using a name of "-" in the routine) .<br />
*spatial link color can now be changed (new calculation mode)<br /><br />
changes color of any link between two objects. If the link does not exist, nothing happens.<br /><br />
A redraw is required after this if the link colour is not being set for a link added in the same routine/epoch. In these cases, an automatic redraw *is* scheduled.<br />
*Year of date calculation operation decodes the year of the given time.<br /><br />
If running relative time, first year is 1 If running calendar (most models these days) its a 4 digit year.<br />
*viewport properly applies scroll when changing the panel zoom level<br /><br />
note: If viewport scrollbars are visible, the viewport may change the scroll if viewed at a high zoom out level. If scrollbars are visible, any scroll set up by the user is retained.<br />
*have increased the minimum viewport size to avoid small viewports being created which can no longer be edited (they get completely consumed by scrollbars)<br />
*routine editor retains window scroll as rows edited [this should cut down the mumbling and swearing... :) ]<br />
*default width used by stat views and table columns updated updated for the newer time and calendar modes to show the time fields instead of cropping them.<br />
*dial and paint image display<br /><br />
if an image fails to load ONE error message is displayed and details are logged to the planimat.dbg file<br />
*I now prevent image redraw of viewports at inappropriate times (while model loading)<br />
*routine operation menu now has separate sub section for spatial link operations<br />
*have significantly increased ODBC command buffer space (now 16k)<br />
*tupling to/from an item carried by another should now actually work<br />
*write to file operations now have "quote all" option to quote all fields (including titles) useful for comma separated files<br />
*Columns and rows of tables written to file now support formatting and the quote all option as well<br />
*A new system broadcast _VIDEO STOPPED gets sent to the model when a video clip finishes playing<br />
*have reworked broadcast system slightly so button click broadcasts put the engine into "simulate" mode while their event is being processed. It should be OK but look out for any problem with button broadcasts.<br /><br />
<br />
===4.21b===<br />
<br />
*reading a tuple doesn't mark the table as modified in the references<br /><br />
<br />
===4.21a===<br />
<br />
*fixes crash bug caused when a table is edited, the active panel changed and a key typed (eg: ctrl-s)<br /><br />
The focus was being left on the now hidden table<br />
*fixes crash bug with bend points. Copying a bend point did not properly copy some new management structures leading to a crash when the copied object using the bend point (spatial link) was deleted.<br /><br />
saved models are OK<br /><br />
4.21 [new file format]<br />
*=== IMPORTANT ===<br /><br />
The system will now complain whenever a model is loaded which does not have both "strict attrefs" and "strict lookaheads" display options turned on. The model will still run, but the warning will always appear when its loaded.<br /><br />
These options were introduced before the conference last year and must be kept ON to assure integrity of the latest lookahead capabilities of the simulation engine.<br /><br />
The options were provided to keep older models running. These models used a different set of rules which the current engine runs only with its safety checks disabled. The time has come to abandom compatibility with the old rules.<br /><br />
The October conference notes include material on dealing with lookahead.<br /><br />
Generally its a case of setting change objects to "only during move" and switches to "assume no blocking" - unless you need to block an item at a switch in which case you have to deal with lookahead issues.<br /><br />
Also see release notes for<br />
===4.18i===<br />
<br /><br />
If you have problems converting your model, please seek assistance from Rick or Tony.<br />
*ADDED: Panel label list<br /><br />
Similar to an object label list except dynamic and panel screens can be added to it. As for objects, they must be uniquely named and numbered.<br /><br />
You export a dynamic screen or panel using its properties menu. The &lt;ADD&gt; button in the panel label list editor adds the current panel.<br /><br />
I've updated the "make screen visible" to now work with a label from a panel label list as well as a model object label list. This means you can now make panels visible by model control.<br />
*Viewports in panels now implemented. A viewport in a panel can view a dynamic screen.<br />
*viewport option enables contents to be directly edited<br /><br />
when activated, the viewport gets a 2 pixel margin so its edit menu can still be accessed, since lcicks within the viewport are passed to the subsystem being viewed.<br /><br />
NOTE: many edit operations within a viewport may still fail (add panel, flow editing etc).<br /><br />
I have only provided direct click viewports to enable viewports with user draggable objects to be used in InterDynes. Dont expect too much from them.<br />
*viewport scroll can be set numerically to help tweak exact settings when the scrollbars are hidden.<br />
*scrollers no longer impose view limit if the redraw is due to printing. This should mean printouts of gantts etc work as expected.<br />
*new performance measures appear in the run profile<br /><br />
Evts/model minute gives a measure of how dense the events in a model are occuring. This will depend on model structure, update intervals settings, complexity of model dependencies such as unblocking etc.<br /><br />
Evts/real minute gives a measure of how quickly the model is running and will be CPU and system dependent as well as model dependent.<br /><br />
nb: real time is measured from when the model is started and includes any time spent paused<br />
*item attribute selection dialog has a new column which summarises the options. The letters used are as followed and are underlined in the editor (and can be used as shortcuts):<br /><br />
clea[R] at start (R for reset...) [C]onstant Include in [P]opups Include in info p[A]nels [I]nteger rounded Re[T]ain on paste/replace Range Chec[K]ed [S]cenario - Used in at least one scenario<br />
*have done some serious rework to label subsets and the base label list code.<br /><br />
Sub label lists now have an option to include the "-" entry which maps to 0. This can be included even if the parent label list does not have a '-' entry, for example object and panel labels.<br /><br />
Local indexing code has been cleaned up a bit to handle the 0/"-" index which is a special case.<br /><br />
Object, Panel and Sub Label Lists share common selector code now, let me know if something is amiss with the selection process.<br />
*Cell properties now shift with cells when tables are sorted (not with fixed length tables though - these are being phased out since VLTs do it all now)<br /><br />
The table block operations should now preserve cell properties.<br />
*A new column option enables reset of cell properties when a cell is edited or pasted over. Using this, cell properties can be used to indicate edited (or in this case unedited) data - once the cell is edited, it loses its specific property and becomes default in appearance.<br />
*Cell properties now support the "use default" background colour (255 * 256) + text color<br />
*added "play once" option to the video/AVI playback object (the new as-yet undocumented paint object...)<br />
<br />
===4.20x===<br />
[new file format]<br /><br />
Added table cell properties<br /><br />
This is a new attref address mode enabling colour properties to be programmed and read for tables on a cell by cell basis.<br /><br />
These are set using colour values computed as follows:<br /><br />
property = background_colour_index * 256 + foreground_colour_index<br /><br />
(foreground is the text color)<br /><br />
(see CELLPROP.MDL for a simple example)<br /><br /><br />
I've added an option in the table editor, in the [Table]-&gt;Advanced submenu to clear all cell properties for a table<br /><br />
Cell properties override any row/column colour settings. But you can keep a cell's default background/foreground by using 255 for the colour index.<br /><br />
Current limitations:<br />
*as for row colours, cell colours do not update the window unless an explicit repaint of the table is forced<br />
*no edit time way of setting cell specific colours, its been implemented for a run time requirement<br /><br /><br />
<br />
===4.20w===<br />
<br /><br />
BUGFIX<br />
*dynamic spatial link deletion bug fix<br /><br />
Fixed bug in the handling of dynamic spatial links during runtime. <br /><br />
The bug: If Portal A is the origin of a link to Portal B and the link is deleted FROM B as a "B &lt;-&gt; A" specific delete (not an "All from B" delete), A's link instance table is left with a dangly pointer.<br />
*new "Debug" option "Dynamic Spatial Links" logs the creation and destruction of dynamic spatial links<br />
*have made significant change to the way objects are deleted to ensure spatial links/tracks/pipes are removed from a subsystem before the portals, I was not strict enough on this before<br />
*have added a number of new system integrity checks (the "System Error" dialogs) to check model structural integrity.<br /><br />
If you *EVER* see a "system error:Code xx" dialog, let me know. They should never appear.<br />
*Linked list Add(2) message now reworded and it only appears once<br />
*fixed memory leak in ODBC parser<br /><br />
<br />
===4.20w===<br />
<br />
*added new Video paint object which will place a mediaplayer into a model window. This has options to auto-play (when shown) and to show and hide the scroller and menu buttons.<br /><br />
NOTE: there is a bug which causes events to occasionally be lost (i think its a re-entrancy issue) which will make Planimate stop responding to the mouse in the main window. If this happens, go to a different portal, click and return. The keyboard and menu still work.<br />
*added ctrl-shift-i to show the item menu if an item class is selected<br />
*selecting the "Bounding Box" line in a paint object now initiates a resize command, this may be easier to get to than the object corners for small objects. The new mouse arrow cursors come in useful here.<br /><br />
<br />
===4.20v===<br />
[beta]<br />
*rewrote a lot of code to handle object co-ords as floating point, particularly the positioning of objects. This is to support spatial links and handle the link distances consistently, even when the objects are very close together on the screen.<br /><br />
Positioning the objects with the mouse does not set to floating point resolution, only positioning them directly in the model code.<br />
*fixed table stat titles - should stay hidden now<br />
*paint object attref scanning<br /><br /><br />
<br />
===4.20u===<br />
<br />
*the new exit model save on exit mode never asks to confirm save, even if the modeller edited the model. The autosave will occur silently.<br />
*now set the "model modified" bit when viewports edited<br />
*rearranged the Table -&gt; "Table" menu and added a "Paste over" entire table<br />
*Added more file operations to the change object -&gt; file menu<br />
*delete file<br />
*rename file<br />
*copy file<br />
*Default button [OK] handling added for condition and multi-condition editor<br />
*Switch now goes into its editor when a mode is selected<br />
*slight improvement to file menu in change object (shows more details of configuration, remains "sticky" to enable a number of edits to be performed)<br />
*now support appending to table in change object file read<br />
*can hide title of table objects (I still allow a few pixels to click along the top to get the edit menu)<br /><br />
<br />
===4.20t===<br />
<br />
*fixes the version string (was not updated in s)<br />
*fixes bug in gantt if more display rows than label rows<br /><br />
<br />
===4.20s===<br />
<br />
*column titles for tables no longer run into the second title row<br />
*auto edit down/edit across in table edit no longer locks up at the last cell<br />
*have reworked label and attref management so labels are referenced inside attrefs can be tracked down.<br /><br />
Click on the line in the label references dialog which indicates the # of attrefs referencing it and it will open a list showing where they are.<br />
*fixed some stop/restart run handling, particularly where a run restart was attempted from a "no init" button broadcast. The run wouldn't restart until next time it was run/restarted.<br />
*billboards properly re-initialise attribute values when they are regenerated during a run (nb: on screen display is still not updated if the table is visible during the refresh)<br />
*Added new routine operation to force a repaint/update of the screen<br />
*Button-type paint objects can now be associated with an attribute to control their visibility. If the control attribute is 0, the object will be hidden during the run. If it is 1, the object is visible. Do not use other values, I may decide use other masked values for other functions!<br /><br />
NB: In stopped/edit mode, all buttons are visible In stopped/interdyne mode, buttons associated with attribute are hidden<br />
*gantt graphs can now have a dynamic # of rows, based on the number of elements in the label list labelling the rows. Row Offset still operates.<br /><br />
To use this, set the # Of Rows to 0. This isn't as useful now since i've also added gantt y scrollbars...<br />
*gantts no longer crash when a _color column is used (was placing colour value into wrong variable)<br />
*gantt y scrollbar option added<br /><br />
This is only useful for gantts associated with a label list and enables scrolling of the gantt over all members in the list, limiting the display to the row limit. The offset still applies, enabling members in the list to be skipped, I may change this later so i suggest leaving the offset 0.<br />
*new exit mode is like stop and quit except the model is also saved, useful for batch runs which modify tables in the models which you want to retain.<br />
*new options in the track menu enable loop in routines/out routines to be applied to all loops in the current screen<br />
*viewport option in background menu enables a window to another subsystem to be placed on a screen. The view can have its own zoom and scroll set, and a mouse-over message. Double clicking on the view opens that subsystem (if enabled).<br /><br />
I dont check for circular views yet, so dont try it...<br /><br />
Still has a bug when animation starts (missing redraw)... more to come on this.<br /><br /><br /><br />
<br />
===4.20r===<br />
[new file format]<br />
*when a table column tuple name is changed, references to the column in routines are now updated<br />
*have added an option to label subsets which enables duplicate items to be added to them<br /><br />
This makes them useful in labelling gantt graphs where labels need to be repeated for rows. The option is only useful where sub label lists are built on the fly.<br /><br />
This option should be used with the "Locally Index" option since this causes the sub label list to return unique indicies (from 1) for each member, even if the member is a repeated label.<br /><br /><br />
<br />
===4.20q===<br />
<br />
*New display option "User Can Bend Spatial Links"<br /><br />
enables user to see, move and add/delete bends to spatial links during the run<br />
*Have added 4 new value formats<br /><br />
Fixed format, with one and 2 decimal places, with and without commas<br />
*have added extra validation to value formatting code, if ever get a system error message, contact me immediately with details<br />
*If a table is being edited with the "Edit Down" or "Edit Across" mode, the auto-edit stops when a cell formatted with a label list with "Cyclic Selection" option "on" is encountered, instead of incrementing the cell behind the scenes.<br />
*Fill down/across editing no longer leaves trails of boxes<br />
*copy/pasting an exported portal now also exports the portal when it is pasted into the model<br />
*Added "Shift Paste" for model objects<br /><br />
Holding down shift while selecting "Paste" puts up a dialog enabliong multiple copies of the object to be pasted. The spacing and columns for the pasted array can be specified.<br /><br />
<br />
===4.20p===<br />
<br />
*Have now implemented the "local index" option for label subsets<br /><br />
When this option is on, it causes labels in a subset to be indexed from 1 with no gaps even though their parent indicies may be arbitrary.<br /><br />
The order and hence index of the items in the sublist is determined by the order in which they are added to the sublist, whether by the list or by the model.<br />
*Parser for relative times now handles -ve time eg: -1:23, -10d<br />
*pause click handling for entry in item click mode now fixed<br />
*no longer crash if showing references for a message entry with a copy of a linked dispatcher in the copy paste buffer<br />
*Have added option to broadcast button which prevents the model being initialised if the run has to be started just to handle the broadcast<br /><br />
This prevents<br />
*attribute clearing<br />
*table clearing initialisation<br />
*the run from proceeding and causes the run to stop again once the broadcast has been processed<br /><br />
The release ZIP includes an updated SYSBROAD demo model<br />
*A new system attribute "Handling broadcast only" is set to non zero if the current run is being performed as result of a broadcast without initialisation.<br /><br />
This enables a model to catch when a broadcast button has been clicked *during* a run vs. when clicking it initiates the run.<br />
*Have fixed graph scale display to properly handle the default grid and scale intervals when in time of day modes.<br />
*The scale interval can now be overridden in the scale parameters menu<br /><br />
As with the other scale parameters, setting it to zero selects the auto default<br /><br /><br />
<br />
===4.20o===<br />
<br /><br />
fixed bug in 'n' which caused routine attribute initial values to be corrupted after a model run<br /><br />
<br />
===4.20n===<br />
&lt;new file version&gt;<br /><br />
Given the incredible number of changes I've made to the code, this version will need some serious testing.<br /><br />
=== === Note: Updating to this version of planimate may require some changes === to your models. The changes involve how attributes are initialised === and are intended to draw a clearer distinction between attributes === which are inputs to the model, counters and outputs. === === The system will guide you through the changes required. It will === be useful to have your previous version of Planimate available === so you can use it to browse your model during the conversion === process. ===<br /><br />
DETAILS:<br />
*===!!! ATTRIBUTE change [IMPORTANT] !!!===<br /><br />
I've made a change to the way attributes are handled. This is part of a consolidation to clean up the usage of attributes and optimise performance of the engine.<br /><br />
The "Retain Simulation Values" option is now the default behaviour for portal attributes and no longer is an option. That means all portal attributes persist between runs.<br /><br />
If the intention is to re-initialise an attribute, the "Clear" value option must now be used.<br /><br />
Upon loading an older model, I've implemented the following translation:<br /><br />
If the "Retain Simulation Values" option was "on", nothing changes.<br /><br />
If the "Retain Simulation Values" option was "off", and<br />
*the attribute is marked "constant during run", nothing changes<br />
*the "clear at start" option is enabled, nothing changes<br /><br />
BUT if neither clear at start nor constant during run were set, then Planimate now needs a way to return the attribute to its initial value each time the run is started.<br /><br />
Since I dont know if the modeller is doing a "Clear" of the attribute in a routine using the clear value, I cannot just set "Clear At Start" and use the last value of the attribute to set the clear value.<br /><br />
The loader hence has to ask the modeller to select an initialiser for the attribute, in order that the attribute can be set to the same initial value each time the run is started.<br /><br />
When required, the loader will present a dialog showing the attribute, its last value, its clear value and its comment. It will offer a number of options.<br /><br />
The options presented are:<br /><br />
1. "Previous Att Value" - use the value the attribute was at when the model was last saved to initialise the attribute every run. This turns on Clear At Start with this value.<br /><br />
2. "Previous Clear Value" - use the clear value to initialise the attribute. Turns on Clear At Start. This will usually be the best option for counters, accumulators and performance measures since the clear value will probably be zero, even though it was not used.<br /><br />
3. "Assume Its Constant" - assume the attribute is a user input or configuration information and wont be changing during the run. The "Constant During Run" option will be turned on.<br /><br />
This is the SAFEST option since the model will behave as it used to unless it needs to modify the attribute from its saved value, in which case it will complain (cant modify constant attribute).<br /><br />
If the model complains, the reason the attribute is modified can then be investigated and the question asked:<br /><br />
IS the attribute<br />
*an input or constant to the model (which should hence be constant)<br />
*a counter (which then can be initialised by using the clear value) OR<br />
*an output (whose value at the start of the model doesn't matter and both the constant and clear options can be left off.<br /><br /><br />
*Added a mechanism to access OBJECT ATTRIBUTES<br /><br />
There are 4 standard object attributes, Count In, Count Out, Occupancy and State. Most are supported by most of the objects.<br /><br />
Each object attribute for an object can be associated to a target using an attref. I stronly suggest only using Portal attributes, not table cells!<br /><br />
When the object's attribute changes (eg: its state or occupancy is changed by something) the attribute will reflect the change. I handle unblocking from this change.<br /><br />
To avoid confusion and unexpected results, I validate against multiple objects (or multiple attributes of the same object) logding information into the SAME Portal attribute. I dont validate this with tables, if you go straight to a table cell, you are on your own.<br /><br />
Its much better to go to a portal attribute and then publish the portal to a billboard, if you really MUST get the data into a table.<br /><br />
*changed attribute reference editor (Attref) to select "OK" as the default button after some of the buttons (such as "browse") are used<br />
*reworked palette display to stop them doing unexpected things to window ordering when redrawn, including dismissing some popups before a selection could be made<br />
*removed extra redraw of conveyor and multiserver (road) items during screen redraw.<br /><br />
Apart from slightly slowing down the redraw, this would cause a re-entrancy problem in the animation manager which would cause an unexpected popup if double clicking into a portal containing a busy conveyor and cause an internal integrity check to quietly log an error to the planimat.dbg file.<br />
*have cut back use of the "disable stat" option, it now only applies to object stats. This saves significant memory for each portal attribute<br />
*have fixed reference scanning so attributes used to index a table lookup etc. are not marked as "modified" even though the destination may be modified. This tended to confuse reference browsing.<br /><br />
<br />
===4.20l===<br />
<br />
*added second title row option for tables<br /><br />
with this option enabled, a second row of column titles is displayed<br /><br />
This enables units etc. to be shown under a column title This field is always centred<br /><br /><br />
<br />
===4.20k===<br />
<br />
*reading the calendar time is now valid in relative time mode,<br /><br />
you get the # of seconds since 1 jan 68<br /><br /><br />
<br />
===4.20j===<br />
<br />
*fixed dialog result code handling (broken when i added the /BATCH command line option<br /><br />
<br />
===4.20i===<br />
<br />
*I now force an application redraw when saving an image, which enables the image to be saved even if the planimate window as hidden (and hence ignores normal windows redraws)<br /><br />
<br />
===4.20h===<br />
<br />
*changed redraw code when run starts<br />
*a screen clear which shouldn't be needed has been removed, this should reduce flicker when model starts which was very noticeable when the model responded to button broadcasts<br />
*The model is now first drawn immediately after preinit end completes<br /><br />
This means that animation on the _run start broadcast will no longer leave black trails and not redraw properly.<br /><br />
Animation on _preinit start _preinit end _model loaded<br /><br />
will leave strange trails since the model is not ready to display yet and these events are intended for advanced internal initialisation only and the user should not be exposed to them in normal circumstances<br /><br />
*fixed a serious memory leak in the grid view<br /><br /><br />
<br />
===4.20g===<br />
<br />
*implemented "save to image" change object file operation which saves the current window to a BMP file<br />
*now handle '-' in Time Of Day time format (HHMM)<br />
*removed the "/TIMEOUT" command line option it wasn't properly supported in windows<br />
*added the "/BATCH" command line option<br /><br />
This suspends showing the about box or any dialog boxes which would be encountered when running a model.<br /><br />
In particular:<br />
*message boxes are OKed and logged to PLANIMAT.DBG<br />
*confirm boxes (ok/cancel) are cancelled (the negative) and logged to PLANIMAT.DBG<br />
*"yes-no-cancel" boxes like the save dialog are "No-ed" and logged to PLANIMAT.DBG<br />
*Model error dialogs are not shown but the _PLERROR.TXT file is still written<br />
*Model generated dialog boxes are not shown and the result 0 is returned to the model<br /><br />
<br />
===4.20f===<br />
<br />
*fixed loader to handle loading from database for InterDynes the previous way i was reading the model info was breaking it<br /><br /><br />
<br />
===4.20e===<br />
<br />
*Added "BREAK LOOP" routine operation Look out for problems with routine code<br />
*Added new command line option<br /><br />
/INIFILE=FILE.INI causes FILE.INI to be always processed as the default INI file, overriding any specified in any loaded models.<br /><br />
<br />
===4.20d===<br />
<br /><br />
*** IMPORTANT BUG FIX<br />
*Columns of tables were being rounded when data exported or edited. This means any data processed through B will need review.<br /><br />
The problem occured because of a change made to the formatting code (added display rounding at a lower level) and the export/edit routines were not deselecting it.<br />
*CTRL-B now works in interdyne-stopped mode as well<br /><br />
<br />
===4.20c===<br />
[new file version]<br />
*Have added "ELSE" routine operation<br /><br />
IF handling was heavily modified, so keep a look out for anything unexpected in IF handling, in the editor and at model run time.<br /><br />
<br />
===4.20b===<br />
[new file version]<br />
*BUGFIX<br /><br />
Interdyne mode keyed EXEs could randomly crash on startup because I wasn't initialising the window title string at the right time during system startup<br />
*VALUE FORMATTING and rounding code rewritten<br />
*Values (table column display) are now rounded after being scaled when a "minutes only"..."days only" type time format is used.<br /><br />
They are also rounded for the value and money formats.<br /><br />
BUT the rounding is NOT performed for the mixed time and calendar modes<br />
*routine errors in initialising now report the routine line number properly<br />
*paint mode ctrl click enables more object mode editing on objects<br />
*new "Null" system attribute enables dialog results etc. to be thrown away without having to create a dummy attribute<br />
*have added extra debug info when database read errors occur<br />
*ctrl-shift O toggles object palette ctrl-shift F toggles class palette<br />
*new attribute reference mode:<br /><br />
Matched row index<br /><br />
Like a matched cell or row, but returns the row # of the match rather than looking up a cell or returning a complete row.<br /><br />
If the match fails, it returns 0<br />
**** change made to track object detail item attribute ***<br /><br />
for a section, returns: 0 = single road section 1 = first road of a multi road section 2 = second road of a multi road section<br />
*ctrl-b (back to last page) supported in InterDyne mode<br /><br />
<br />
===4.19x===<br />
<br />
*The colour palette now can customise the 16 custom colours. Use the Colour Picker to set the colours of the 16 custom colours.<br /><br />
Select one of the custom colours and use the palette on the right to set it.<br /><br />
Remember these 16 colours are global to the model<br />
*Fixed 2 bugs in the scroller code for log driven graphs:<br />
*The scroller no longer puts large left margins on calendar time values (I was "snapping" to whole values which isn't appropriate for a calendar time value)<br />
*The scroller uses a different method to retain its position when the time frame changes (as occurs when a model with a different run and edit time reference starts/stops)<br />
*reworked the way the delay box is shown to prevent it getting stuck visible if an error occurs while processing a broadcast while a model with a delay box is paused.<br /><br />
<br />
===4.19w===<br />
<br />
*Label List Selection now includes a field where a label can be typed, the list will scroll to the closest match.<br /><br />
Shortcuts: use &lt;TAB&gt; to get to the field, SHIFT-&lt;TAB&gt; to get back to the list in label popups which also have the "add" buttons, &lt;SPACE&gt; when the list has focus to select the highlighted item<br /><br />
*The label list "Only Modellers Add" option now takes effect<br /><br />
If you want a user to be able to be add to a label list, this option must be off. If on, labels cannot be added to the list in InterDyne mode.<br />
*Bug Fix: Attempt to Expand A Route on an item with no route assigned was causing a crash. It now properly reports the error.<br /><br />
<br />
===4.19v===<br />
<br /><br />
"Friendly Error Dialogs"<br />
*This display option causes Planimate to display a less detailed dialog when an error occurs. This dialog explains that an error which cannot be recovered from has occured.<br /><br />
If the system is in InterDyne mode, the program will close when the dialog is closed. Why? When a model error occurs, the integrity of the model's tables and persistent attributes is indeterminate. So the only safe thing to do is exit, restarting the model may not be enough if the modeller is relying on retained attributes or manipulating tables which cannot be recreated by the model.<br /><br />
A [Details] button in this dialog also enables the error details to be reviewed in notepad, making it simple to copy/paste and email the information.<br /><br />
If the "support" email address (added in the last version) is set, it is also included in the error report, for the users convenience.<br /><br />
***!!!***<br /><br />
All model errors are now logged to _PLERROR.TXT, even if the "Friendly Error" option is not selected. If an item was involved, its attributes are also written. So this should be useful to developers as well.<br /><br />
The system attempts to create the _PLERROR.TXT file in the model working directory. If this fails (eg: the directory is read only) then the file is created in the TMP folder as indicated by Windows.<br /><br />
In any case, the "friendly dialog" opens the file automatically if the [Details] button is pressed, wherever it may be.<br /><br />
<br />
===4.19u===<br />
<br /><br />
The new features in this version mean I can build a generic "InterDyne" EXE which is not specific to any given project like "FAID"<br />
*New Menubar option: EDIT-&gt;InterDyne Info<br /><br />
Can set two strings saved in the model<br /><br />
"Window Title" - the title that will appear in the window when in Interdyne mode. The model name may not be desirable especially if its a self contained InterDyne like FAID. If left empty, the model name is used<br /><br /><br />
"Support Email" - An optional field, if set<br /><br />
1. It gets shown in the second about box (Help-&gt;About) under the load version info<br /><br />
2. It will get shown in the "friendly interdyne error dialog" which will be appearing shortly (giving a user encountering an interdyne failure somewhere to go)<br />
*fixed copy/paste bug which would cause a crash when copying routes<br />
*wasn't handling copy paste buffer route redirection properly<br />
*the second about box (Help-&gt;About)<br /><br />
displays the version of planimate which saved the model and the date last saved, as read from the first line of the model when it is loaded.<br /><br />
(this is not updated if the model is saved, only when a model is loaded)<br />
*New Time Modes<br /><br />
Time (Minutes), Time (Hours), Time (Days), Time (Weeks)<br /><br />
These scale and display the time interval accordingly, they do not show units. Values entered are scaled accordingly. Internally, the attribute is always seconds.<br />
*bug in form date description fixed (year was getting munged on display)<br /><br />
<br />
===4.19t===<br />
<br />
*Paint inheritance fixes<br />
*When a paint screen is first inherited from a screen, any screens inherited from it will now also get the new objects<br />
*Added a "Delete All Visible" option in the "Other Options" menu<br />
*Fixed the move all and delete all "other" options to support inherited screens<br />
*Text button actions were not properly updating/reverting to base class<br /><br />
<br />
===4.19s===<br />
<br />
*PAINT INHERITANCE -----------------<br /><br />
The paint layer of a dynamic or panel window can now inherit objects from one or more other paint screens. This enables a layout to be replicated in many screens (dynamic or panels) in a model and then edits made to the master will be automatically applied to the inherited objects.<br /><br />
When you add a paint object to a screen which is being inherited from, you get an option enabling you to propagate it to all the inherited screens.<br /><br />
INDIVIDUAL CUSTOMISATION<br /><br />
The most important feature of the paint inheritance system is that individual inherited paint objects can be customised. If the master of the customised object is edited, the edits are still passed on but the customisation remains in effect. This means the colour of a button can be changed on a specific panel. If the master has its text edited or position changed, the customised object will also be altered but its colour will remain as set.<br /><br />
If a paint object is deleted, you can chose to have any objects inheriting from it also deleted or to have them become independent.<br /><br />
Inherited objects can also be made independent or reverted to their master (losing all customisations).<br /><br />
Inherited objects can be deleted on individual screens, they will not reappear anymore on that screen.<br /><br />
Special note for Button Actions:<br /><br />
Button actions can be customised per-instance of each button, in which case the master button should NOT have an action assigned to it. If the master does have an action assigned to it, it will be assigned to all buttons next time any characteristic of the master is edited.<br /><br />
MULTIPLE INHERITANCE AND CASCADING INHERITANCE<br /><br />
A given panel can inherit from more than one screen. This enables separate management of say "background graphics" and "navigation buttons". In addition a screen which has inherited from another screen can itself be inherited from. This enables cascaded inheritance, where each level adds new detail.<br /><br />
INHERITANCE STRUCTURE VS MODEL STRUCTURE<br /><br />
The paint inheritance structure is not tied to the model hierarchy, the only rule imposed is that inheritance loops cannot be created (A based on B, B based on C, C based on A...).<br /><br />
COPY PASTING ISSUES<br /><br />
It is recommended that the master paint screen(s) be carefully positioned within the model if inter-model copy/paste is anticipated. If a screen containing inherited paint objects is copied to a different model without the master being copied, the objects lose their inheritance relationship. Its a good idea to put master screens in a panel since the panel can be repositioned in the model as the need arises.<br /><br />
Copy pasting within a model retains the inheritance relationships.<br /><br />
USER INTERFACE<br /><br />
In paint mode:<br />
*The background menu has an "inherit from" option to select from where paint content should be inherited.<br />
*Screens which are inherited from include a summary line in this menu<br />
*Objects which are inherited include an "Inherits From" line which names the panel from which the object inherits.<br /><br />
Selecting this option enables the paint object to be reverted to the master, disassociated from the master or the user to navigate to the master<br />
*Objects from which other objects inherit include an "Inherited &lt;n&gt; times" line which shows how many objects inherit from the object.<br /><br />
Selecting this option enables all inherited objects to be reverted to the object, all inherited objects to be disassociated from that object or navigation to the panels which contain the inherited objects.<br /><br />
Note that there could be objects in the copy/paste buffer which cannot be navigated to.<br /><br />
---<br /><br />
*BUGFIX the "stop and restart" control bit implemented in r was not being initialised, causing the model to sometimes restart once complete without the modeller intending this.<br />
*BUGFIX added a check to prevent crash due to an immediate message changing a route<br /><br />
*** USE IMMEDIATE MESSAGES DURING LOOKAHEAD with care - they must not *** change anything except item attributes<br />
*Assigning a dynamic route from an empty table no longer keeps an empty route assigned to the item, the route is purged<br /><br /><br />
<br />
===4.19r===<br />
<br />
*Range check attributes properly initialised to zero when loading older models, they were initialised to garbage before<br />
*CHANGED FILE FORMAT for paint in preparation for paint inheritance Please check carefully that models saved with this version reload and paint objects work as previous.<br />
*Implemented a new exit stop mode "Stop Current Run And Restart"<br /><br />
This lets a run be restarted without having to have the option "Restart when model stops" on<br /><br />
<br />
===4.19q===<br />
<br />
*fixed table matched column copy<br /><br />
(it was prevented from working if the # of columns in the tables differed which was the whole point)<br /><br />
<br />
===4.19p===<br />
<br />
*table column tuple name can now be as long as attribute name<br />
*no longer ask to modify the tuple name when a column title is modified if the title is longer than a valid tuple name<br />
*table sort dialog handles long column names without overlapping buttons<br />
*Range checking has been implemented for attributes<br /><br />
For each attribute a minimum and maximum value (numeric) can be specified.<br /><br />
If the attribute is set beyond its limits (the check includes round off margins) then the model will stop with an error, this can catch integrity issues at their origin rather than them being hidden in the model.<br />
*Fixed crash: If a broadcast with item is made to a broadcast entry with no leaving paths, it would cause a crash<br /><br />
4.19O<br />
*added an extra condtion to track logic<br /><br />
last road check for a loop in lookahead is NOT performed if the train has a non zero booking id<br /><br /><br />
4.19N [new file version]<br />
*=== Dynamic ODBC statements ===<br /><br />
ODBC statements can now reference portal and item attributes. These may be used to construct an SQL request with dynamic parameters.<br /><br />
SQL commands are now structured as follows:<br />
*Quoted text elements are treated as literal strings and processed without modification. They may contain any character except the quote itself.<br /><br />
eg: "Select * from authors"<br />
*Single quotes enable a single character including the " to be inserted<br /><br />
eg: '"'<br />
*The &amp; is an optional (recommended) separator<br />
*Portal attributes references are preceeded by P, P. or P: and may included quoted text so spaces can be handled<br /><br />
eg: pAttribute p.Attribute p:Attribute_1 p."Attribute 1" P."Attribute 1"<br /><br />
These get converted to the formatted value of the attribute<br />
*Item attribute references are preceeded by I, I. or I: and may included quoted text so spaces can be handled<br /><br />
eg: iAttribute i.Attribute i:Attribute_1 i."Attribute 1" I."Attribute 1"<br /><br />
These get converted to the formatted value of the attribute<br /><br />
Statements may have line breaks etc. within them.<br /><br />
Example statement<br /><br />
"Select * from " &amp; i.TableName &amp; " where Author='" &amp; i.WantedAuthor &amp; "'"<br /><br />
In this example, Item attribute "TableName" will provide the name of the table Item attribute "WantedAuthor" provides an author name<br /><br />
The [TEST] button in the editor will now include the translated query in the query test output window.<br /><br />
Since the item attribute can not be read at edit time, "*" without the quotes is always substituted for item attributes.<br /><br />
SQL statements in old models are automatically wrapped in quotes to keep them valid.<br />
*scroll bar colours made more neutral<br /><br />
4.19M [new file version]<br />
*table driven entries are now usable without a class column<br /><br />
If a _class column is not present, the entry will produce an item of the first flow type leaving it<br />
*pasting into a table with a highlighted region now uses the top left corner of the region as the insert/overwrite top left point, not the current cell. This makes things a bit more consistent<br />
*Exit can now stop and close the model<br />
*customissable dialog title line<br />
*spatial link system now gives an error if a movement to the origin is attempted<br />
*fixed bug in routines introduced about v<br />
===4.19e===<br />
: round and trunc would give error if applied to a column<br />
*Both strict lookaheads and strict attrefs options are now on by default for new models and should be turned on for old models ASAP (may require some work on the model)<br />
*Added new time formats to support HH:MM:SS time display/input mode<br /><br />
Times are accepted in either format in both the new and existing time format modes. The new modes enable the default to be set for display/export purposes.<br />
*Resorted the format names in the attribute editor<br />
*The icon cache is refreshed when the image mover is dismissed. This can also be used to refresh the image cache if icons are externally changed.<br />
*the pipe has a new option enabling the run control attribute to be based in the target portal instead of the source. This makes implementing blocking easier.<br />
*handling of selection of portals when in interdyne mode changed Portals which are user draggable can now be clicked and dragged in interdyne mode - only if the model is started<br />
*a new broadcast _Model Loaded is sent to the model when it is first run once it has been loaded, it gets sent just after _PreInit Start which means you have to be careful what you do with it; if you need to interact with any objects (apart from Change) you should use it to set your own flag and handle it after _Run Start when all objects have been properly initialised.<br />
*file/odbc read mouse cursor update reworked - the wait cursor should come up more consistently<br />
*the table editor handles double clicks like on screen table panels<br />
*double clicking a new change object defaults to editing the routine<br />
*"Show progress file" option obsolete and removed<br />
*internal "Journal" code handling obsolete and now removed<br />
*(unused) "User View" support code removed<br />
*nb: deleting a spatial link deletes any items on it<br /><br />
<br />
===4.19l===<br />
<br />
*Added ODBC option which causes labels to automatically be added to label lists rather than prompting the user<br /><br /><br />
<br />
===4.19k===<br />
<br />
*added "Item Last Track Road" system item attribute<br /><br />
returns road # item was last on from the track section it just left (1 or 2)<br />
*reworked item parameter storage / undo mechanism<br /><br /><br />
<br />
===4.19j===<br />
<br />
*fixes the "invalid structure size" printing problem<br /><br />
<br />
===4.19i===<br />
<br /><br />
Track change<br />
*changed the Double Overtake handling to enable use of the other track when the normal track is unavailable due to full restriction.<br /><br />
Previously the other road would not be taken in this case<br /><br />
*crash fixed when an item with a route assigned but with no steps is clicked upon<br /><br />
note that this is an unexpected condition, routes should never be empty<br /><br /><br />
<br />
===4.19h===<br />
<br /><br />
bugfixes<br />
*no longer crash if a broadcast with item attributes cannot carry any attributes to the target item class<br />
*occupancy of objects (read by attref) now initialised properly<br /><br /><br /><br />
<br />
===4.19g===<br />
<br />
*fixed problems with adding new row operation (was initialising un-required parameters)<br /><br />
<br />
===4.19f===<br />
<br />
*new calcn parameter attrefs default to constant 1, not a portal attribute<br /><br />
<br />
===4.19e===<br />
= NEW FILE FORMAT, COMPATABILITY WINDOW MOVED =<br /><br />
<br />
===4.19e===<br />
has had major changes so commit to it with care<br />
*file compatability window moved<br /><br />
EXEs from now on will only load models saved with Planimate 4.11L or later<br />
*new file version<br />
*Major rework of calculation/routine code<br /><br />
I have rewritten the routine management to allocate parameter attref space as required by individual routine operations. This involved reworking some 6000 lines of code, I took the opportunity to tidy up the code as well.<br /><br />
I've extensively tested it all with every test model I have.<br /><br />
This will reduce memory and disk requirements for routine-intensive models.<br /><br />
One model has shrunk from 17 to 12.7MB (MDL file size) and 50 to 35MB (initial memory allocation size)<br /><br />
It also creates opportunities for adding new calculations which have more than 3 attref parameters.<br />
*I have slightly reworked every module in iFlow and Planimate to enable me to more effectively use precompiled headers to speed up compilation of Planimate. This should not affect operation in any way.<br /><br />
<br />
===4.19d===<br />
<br />
*secondary section bookings<br /><br />
These provide a secondary place to book sections. Unlike primary bookings, the booking id is not tested against the entering item, any item attempting to enter a section with a secondary booking will be blocked UNLESS it is accepted by the primary booking in that section.<br /><br />
This provides a mechanism to cast "booking shadows" which will prevent unbooked items from grabbing a section which will be required by an upcoming booked item.<br /><br />
<br />
===4.19c===<br />
<br />
*rewrite of screen management<br /><br />
The Planimate window is now managed differently to enable clipping of objects outside the model area to be properly implemented.<br /><br />
This was a major rewrite of the window/scrollbar display handling.<br />
*buttons describe click action<br />
*paint objects describe bounding box<br />
*file browser window title in change object now reflects read/write operation<br />
*file read option "Automatically Add Labels" added to change object file operations<br />
*reading into a Variable Length Table using the change object now clears the table (deleting all rows) before reading<br /><br />
This will prevent trailing data being left in the table<br />
*Attribute stat display change<br /><br />
Can add attribute stats to any subsystem within the scope of the attribute<br />
*Cell stats now reflect the font and colour of the table cell they are associated with<br /><br /><br />
<br />
===4.19b===<br />
<br />
*font metrics fix<br />
*fixes alignment issues with train graph labels<br />
*item info panels<br />
*animate along with the item<br />
*new item attribute edit option "include in info panel" will include the attribute as a separate line in the info panel<br />
*the system attribute "Item Show Info Panel" enables the panel to be hidden/shown on an item by item basis<br /><br />
<br />
===4.19a===<br />
<br />
*fixed verison #<br />
*cleaned up RGB grid display (was caching nodes for no reason)<br />
*can now add a grid view from a panel<br /><br /><br /><br />
4.19 (new file format)<br />
*New "Grid" display for tables<br /><br />
This displays a table as an array of rectangles. The contents of the rects can either be from icons/BMPs, using a label list to map index values to images, or the colour can be directly interpreted from the cell value, as an RGB value.<br /><br />
The number of rects is determined by the dimensions of the table. This can change during the run.<br /><br />
The size of each rect is determined by the table dimensions and size of the grid display object, as set by the modeller.<br /><br />
The system requires the rects are of equal dimensions which may not be an exact multiple of the width/height of the rectangle of the view, so the system will keep the cell array centred within this rectangle.<br /><br />
(set the mode using the options...)<br /><br />
In image mode:<br /><br />
A label list determines the name of the image. If the index does not resolve to a name, the cell is painted using the background colour of the grid display (which may be transparent if set to "None"<br /><br />
With in place editing enabled - a click toggles cells between 0 and 1<br /><br />
In RGB mode:<br /><br />
Given R, G and B range from 0 to 255, the colour of a cell is determined as follows:<br /><br />
value = red + green * 256 + blue * 256 * 256<br /><br />
In hex, the value is packed as follows:<br /><br />
BBGGRR, so FF0000 will give a blue pixel<br /><br />
If the value is set to &gt; 0xFFFFFF or &lt; 0, the cell is painted using the background colour of the grid display (which may be transparent).<br /><br />
With in place editing enabled - a click toggles cells between 0 and 0xFFFFFF (black and white)<br />
*The Encode RGB makes it simple to translate R/G/B values to the proper value<br />
*added Hexadecimal value format mode (makes working with RGBs easier)<br /><br />
----<br />
===4.18y===<br />
<br />
*screen flicker when run starts has been reduced &lt;please report any new problems with this&gt;<br />
*redraw during model load stages reduced to prevent database errors<br />
*scrollbar size bug for table graph when scrollbar is not full width and table is cleared now fixed<br /><br />
<br />
===4.18x===<br />
<br />
*crash during model reload should be fixed (clock position was being updated at bad time during load)<br />
*unblock algorithm change completed to properly flush the unblock history list if something move, to ensure that if something moves as result of an unblock, other unblocks will be properly performed.<br /><br />
<br />
===4.18w===<br />
<br />
*have changed unblock algorithm for portals.<br /><br />
It stores portals which were previously explored to avoid repetition.<br /><br />
Previously this history was managed hierarchically, which meant that the same branch would be re-explored completely if reached during unblock from different places (eg: multiple portal entries)<br /><br />
Now I only purge this unblock history list once the unblock completes. So a given portal will only be unblocked once in a given unblock call.<br /><br />
= much faster operation when tracks form circuits or multiple entries/exits are used.<br /><br /><br />
<br />
===4.18v===<br />
[new file version]<br />
*Dial chart scale background colour can be set. This enables the scrolling chart mode to be used over different colour backgrounds without the scale being drawn using the panel background colour.<br />
*internal clean up of dial code, please report any new problems with dials<br />
*ODBC error handling for Read() extended to catch more error conditions<br /><br /><br />
<br />
===4.18u===<br />
[new file version]<br />
*Table column titles can span multiple lines<br />
*the # of lines can be set from the Table button<br />
*The fonts used by tables for their contents and labels can be set on a table by table basis. The table will track the global setting if the local font is set to the same font/size as the global font (the default case)<br /><br /><br />
<br />
===4.18t===<br />
<br />
*File access (change object)<br />
*CANCEL on the user file dialog no longer elicits an error, the file oeration is simply not performed<br />
*The user file dialog uses the extention of the file specified by the modeller as the default, so initially only files with the same extention will be shown. This can be overridden in the usual file dialog manners.<br /><br />
<br />
===4.18s===<br />
<br />
*Help buttons: The section name can also be a numeric context identifier. This can be used where ambiiguities are a problem or there is no index<br /><br />
<br />
===4.18r===<br />
2<br />
*supports /DEBUGODBC command line option - enables ODBC debugging<br />
*larger ODBC command buffer<br /><br />
<br />
===4.18r===<br />
<br />
*support longer ODBC commands (4096 chars now)<br />
*dont try load models with these long strings in earlier EXEs<br />
*reworked exit code to clean up sending of the "_system close" broadcast<br /><br />
<br />
===4.18q===<br />
&lt;new file format&gt;<br />
*horizontal scroller reworked for gantt and train graphs:<br />
*scroll settings can be accessed with the right button when paused by clicking in the scroll window<br />
*scroll settings now set start and width rather than start and end times<br />
*Initial width now acts as a width limit (you can stretch the scroller past this but it will revert to the limit when the data is changed by the model)<br />
*formatting for -ve money now displays as ($xxx) Planimate will still import -$xxx formats but they will be displayed using the new format<br />
*help menu has new menu item for model specific help<br />
*For development version - this looks in the HELP folder for a .HLP file with the same name as the MDL file currently loaded<br />
*For interdyne version - this looks in the HELP folder for a .HLP file with the same name as the EXE<br />
*new button mode enables a help button to be assicated with a section in the model help file. The model help file is located as described above<br />
*new command button - print<br />
*the default options for exporting a table to the clipboard can now be configured (in the File menu in the table editor) and will be retained.<br /><br />
The defaults for all old models are formatted and column labels on, row labels off.<br />
*implemented note option to hide notes in interdyne mode (for development notes)<br />
*status bar flow/class edit operations are now properly disabled when a run is started<br /><br /><br />
<br />
===4.18p===<br />
<br />
*fixed bug with the new cursor handling which caused the mouse cursor to disappear it was over a disabled button (eg: in the dialog editor)<br />
*added a new display option "Do Not Defer Stat Updates"; when selected stat displays are updated with every change to an attribute. This will produce more flicker but is desirable when an item is animating along a flow which changes values in zero time<br />
*removed the check for variable length tables when loading a cell stat It was unnecessarily purging the stats; they are OK on VLTs now.<br /><br /><br />
<br />
===4.18o===<br />
[new file format]<br />
*clock bug fix - it no longer makes the main window active if the main window is disabled<br />
*the pointer over note cursor is the background cursor rather than being indeterminite<br />
*note z-order on mouse down properly reflects its position over buttons so buttons behind notes dont see the click<br />
*note can be closed by clicking on the note button<br />
*the advance timebox now centres relative to screen, not planimate window. It shouldn't appear offscreen anymore<br />
*new option to send broadcast to model when exitting system<br />
*the broadcast is already sent if the model is running when a close is performed, this option will start the model if it is not running to give it the opportunity to do any finalisation<br />
*ability to set table text row colour, just like the row background colour<br />
*change object file operations have an option to show the file browser to confirm the file which will be read/written<br />
*the selected file name is not retained<br />
*a confirm is required for non append file writes to an existing file<br />
*The model error dialog no longer will show the browse/item/pending events buttons if the system is running in interdyne mode, to protect the user from the unknown...<br />
*routine change object has new icon when one or more lines may be evaluated "only during move"<br /><br />
NOTE: you will need the latest _!system.db for the new change object icon<br /><br /><br />
<br />
===4.18n===<br />
<br />
*fixed bug in animation management<br /><br />
was not handling hide/redraw of change object when an item is sending an instant message and trace animation is on<br />
*reworked screen visibility handling<br /><br />
to prevent invalid items left in the animation manager when the model is run minimised. A screen determines whether its contents are visible dynamically rather than tracking visibility with a state variable<br />
*new icon for change object with during move option or marker<br />
*attref code cleanup, should be slightly faster and smaller memory footprint for models<br />
*fixed crash if fill intermediate steps used on an empty dynamic route<br />
*clock no longer keeps focus as much as it used to<br />
*clock now lives in the menubar<br /><br /><br />
<br />
===4.18m===<br />
<br />
*optimised way screen containment is verified<br />
*matched attribute copy for broadcast - can now broadcast item to different class without the error. Matching attributes are copied<br />
*added a new "Scoped broadcast operation" - broadcast to a subhierarchy at the object you target the broadcast at<br /><br />
<br />
===4.18l===<br />
<br />
*add label now returns the label index added, not ordinal index. -1 is returned if the add fails or is aborted<br />
*New operation "Test Label" tests whether a given index value is in use by a given label list<br /><br />
Puts 1 if yes, 0 if no into the target<br />
*can now have comments between select and case statements<br />
*Routine editor dialog can be scaled in size<br /><br />
I haven't written an editor for these fields yet - if you are comfortable using REGEDIT then read on...<br /><br />
Planimate now retains persistent user options in the registry, at this location:<br /><br />
HKEY_CURRENT_USER\Software\InterDynamics\Planimate\Settings<br /><br />
The parameters are read when Planimate starts and written/created when Planimate exits. So dont bother editing them whilst Planimate is running.<br /><br />
The parameters:<br /><br />
EditHeightScale EditWidthScale<br /><br />
range from 20 to 100 and scale the size of the routine list dialog.<br /><br /><br />
<br />
===4.18k===<br />
<br /><br />
reports which route is being explored when the model is interrupted in the middle of a long guess intermediate steps operation<br /><br /><br />
<br />
===4.18j===<br />
<br /><br />
Have reworked route assignment handling; can now support setting the current route step during lookahead. So you dont need to follow a route step assignment routine with a delay before the train enters the network.<br /><br />
<br />
===4.18i===<br />
<br /><br />
Added more model struturing rules. These will force existing modellers to come to terms with how Planimate handles movement decision making in their models. However its an essential step in keeping the modelling environment coherent.<br />
*New option: Strict AttRefs In Lookahead<br /><br />
Its off for old models, again I suggest turning it on as it removes a potential source of modeller error.<br /><br />
Turning this option on has this effect:<br /><br />
A switch in Blocking Mode following a routine which is marked "Only During Move" will now report an error.<br /><br />
This protects against unexpected results if the routine before the switch was setting an attribute required by the switch - but because the routine is executed "Only During Move" and the switch requires the change during lookahead, the change would not be seen by the switch.<br /><br />
The modeller needs to think about how the switch is being used. If its acting to route an item, simply setting the switch to "Assume No Blocking" will avoid the new error message.<br /><br />
This enables the switch to defer its decision to when the item actually moves - but means the switch cannot act as a gate.<br /><br />
If the switch must act as a gate, then the preceeding routines must be executed in lookahead - so "Only During Move" must be turned off. This in turn requires that the preceeding routines dont perform operations which cannot be performed during lookahead, like table operations. Otherwise the system will report errors. The solution is then to split the "movement" and "lookahead" activities into separate routines.<br /><br />
<br />
===4.18h===<br />
<br />
*fixes route reallocation problem (during lookahead) which caused a gpf (introduced when i reworked the route stuff)<br /><br /><br />
<br />
===4.18g===<br />
<br />
*Fixed a bug which caused Planimate to misbehave badly when running models without the "Strict Lookahead Messages" options on<br /><br />
it would report bogus routine lookahead problems<br /><br />
<br />
===4.18f===<br />
<br />
*many routine operations that quietly did not execute during lookahead will now also stop further operations from executing during lookahead.<br /><br />
I've done this to force modellers to come to terms with routine operations which can be done during lookahead vs. ones which cant - and set up routines appropriately (Run Always or Only During Move)<br /><br />
I strongly suggest turning on the "Strict Lookahead Messages" display option and dealing with the problem objects it reports. It will be on by default later on anyway...<br />
*I have made available dwell and departure intervals for timetabled train items, these can be read and set within loop entry routines and portals.<br /><br />
Unlike previous versions, they are also available at the portal where a route ende<br /><br />
TT_TEST.MDL demonstrates their use in implementing loop delays in portals<br /><br />
<br />
===4.18e===<br />
<br />
*fixed "Delete spatial link" - was making bogus reference to P:attribute<br /><br />
Interdyne build changes:<br /><br />
-&gt; No run menu -&gt; No log menu -&gt; release notes option hidden -&gt; hardcoded title -&gt; fit to model window on load<br /><br /><br />
<br />
===4.18d===<br />
<br />
*reworked ctrl-paste code to avoid problems with direct references to the thing being replaced within the thing which is replacing it<br />
*removed the "screen" pointer in dialogs :- dialogs can now only reference attributes within scope<br /><br /><br />
<br />
===4.18c===<br />
<br />
*bug fix: bad undo management if decoding a single element multi label to attributes<br />
*LOOKAHEAD changes<br /><br />
I've changed lookahead undo management significantly so that:<br />
*iterations, whiles, selects, ifs etc can now be performed (and undone) during lookahead<br />
*multilabel tupling can be done during lookahead<br /><br />
I've also reworked the error line display when a routine error occurs so it will support upcoming features.<br /><br />
This means that the platform will support executing much more complex routines during lookahead (before any item moves) - this will be required soon for the messaging during lookahead enhancements.<br /><br />
IT also means that EXISTING models will run slower if they have routines which contain iteration etc. which are NOT set to "Only During Move" execution.<br /><br />
Previous versions of Planimate would quietly skip the iteration (etc) during lookahead but versions from now on will actually execute it - unnecessarily<br />
*since an older model could not benefit from using complex routines during lookahead (they were automatically skipped).<br /><br />
SO: Make sure routines are "Only During Move" unless they are required during lookahead - because an object immediately downstream of them depends on their outcome - eg: a gating switch, variable capacity, route assignment etc.<br />
*In conjunction with above, I've added a display option "Strict Lookahead Messages"<br /><br />
Turning this on causes Planimate to stop with an error if the model attempts to execute a routine during lookahead which contains something which cannot be "undone" (eg: table operations) which means the routine doesn't get executed.<br /><br />
Whilst this situation doesn't compromise model integrity (I dont allow decisions to be made if the lookahead detects "dirty" attributes, and you are forced to add "capacity"), I think we should enforce some discipline and have this option "on" so modellers correctly mark their routines as lookahead or move only.<br /><br /><br />
<br />
===4.18b===<br />
<br /><br />
GANTT enhancements<br />
*Gantt graphs now only show rows for indicies which are associated with a label. So they will properly show a subset when driven from a label subset.<br /><br />
They still properly handle the row count and offset, the offset now determines which label # (by count) to start at<br />
*A new gantt option "Draw From Top" draws the gantt from the top rather than bottom-up<br /><br />
COPY ROW operation - expects a source and target row reference. It will copy data from columns with matching tuple names. This enables tupling between 2 tables without an intermediate item<br /><br /><br />
<br />
===4.18a===<br />
<br />
*loops now place trains "thrown" into them in an extra road which disappears when the train leaves<br /><br />
4.18<br />
*Item direction can be set, intended when using the "throw" capability so trains move off in the right direction<br /><br />
The ITEMDIR model demonstrates it<br /><br />
*Significant changes to engine to support re-entrant lookaheads<br /><br />
(including messaging from a routine... more details to follow)<br /><br />
<br />
===4.17v===<br />
<br />
*Now support user colours in table row colour indexing<br />
*Multiple window handling [experimental]<br />
*"Open In Window" (Portal object menu -&gt; other) now does not crash when exitting and it animates items better than before (still some non-permanent redraw problems if you wiggle things while its animating)<br />
*You can open *ANY* panel or subsystem in a separate window by holding the unlikely combination of CTRL-SHIFT-ALT while doing whatever you would do to open the subsystem/panel<br /><br />
(click on button, double click on portal etc)<br /><br />
Note - currently sub windows do not handle ANY mouse clicks, so you cannot burrow leaving a trail of windows, do it by working your way out instead.<br />
*Now validate the source/target for a blockmove is actually within the source/target table [check]<br />
*A user cancelling the new add label dialog now properly returns -1 rather than crashing<br /><br /><br />
<br />
===4.17u===<br />
[new file format] 30/5/99<br /><br />
New table operations<br />
*rebuild billboard table<br /><br />
brings billboard up to date after the controlling label list has been modified<br />
*set column target<br /><br />
target must be a column ref, the columns' title is set to the formatted string of the attribute<br /><br />
<br />
===4.17t===<br />
[new file format] 25/5/99<br /><br />
LABEL LIST routine operations added<br />
*Add Label - lets user add an arbitrary string to a label list. An index is automatically assigned to the new label<br /><br />
The target must be a settable attribute formatted for the label list you wish to add the label to. It will be set to the label index which was assigned to the label, or -1 if the operation was cancelled or a label name which already exists was entered.<br />
*Re-Index label list operation added<br /><br />
This enables a label list to be re-indexed (in alpha order) under model control<br /><br />
=== I DO NOT UPDATE ANY ATTRIBUTES OR TABLES WITH THE NEW LABEL INDEX === VALUES so any existing values in such places formatted for this label list will be effectively scrambled.<br /><br /><br />
bug fixes:<br />
*stat operations (portal copy etc.) were crashing if an item class attribute stat was on the screen - fixed<br />
*bug in database search code introduced in version P was causing database errors due to bad lookups if there were no system databases in the working directory - fixed<br /><br /><br />
<br />
===4.17s===<br />
<br /><br />
FIXED crash bug from R on some machines<br />
*A field in the scenario management structure was not being initialised, causing random crashes on model load/new operations<br /><br />
<br />
===4.17r===<br />
<br /><br />
= scenario management<br /><br />
New scenario management system<br />
*8 scenario slots have been allocated, Edit Scenarios enables you to name the slots and give default file specs<br /><br />
If the name is empty, the slot is unused.<br />
*Tables and Attributes have a scenario button / option to enable selection of which scenarios they will be saved into<br />
*When selecting save scenario, the user picks the scenario type to save<br />
*In addition, the edit scenario dialog enables a "save all data" option to appear in the scenario save dialog<br /><br />
(this replaces the display option "Include All In Scenario"<br />
*SCENARIO SAVE/LOAD can occur at any time:<br /><br />
Loading and Saving a scenario occurs whilst the model is "initialised" and ready to run.<br /><br />
If the model isn't running, it is started and stopped after the scenario operation completes.<br /><br />
So, for scenario data to be saved/loaded properly when the model is STOPPED (not paused), the targets must be:<br />
*variable length tables with "Clear At Start" off<br />
*fixed legth tables with the "Retain Values After Run" on and "Clear At Start" off<br />
*attributes with "Retain Simulation Values" on and "Clear At Start" off<br /><br />
Otherwise the values will be cleared/forgotten as the model is started/ stopped<br />
*redraw of multiservers when paused fixed<br />
*out shelf now handles unblocking when its capacity limit attribute is changed<br /><br />
<br />
===4.17q===<br />
<br /><br />
! column insert/delete/append operations now added for tables<br />
*column insert can copy an existing column, or use 0 to not copy any existing column<br />
*I dont suggest using column labels with any table which will have dynamic column changes<br /><br />
*redraw of loops during run fixed<br />
*added new panel option to show loop names during the run<br />
*added option on table import dialog to enable resize # of columns<br /><br />
turn off to prevent the system offering to resize the columns in a table when importing data<br />
*reading the route step count of an item without a route no longer causes a error, it returns 0<br />
*new routine operation to insert a single step and delete all steps from an item route<br /><br />
The route location index needs to be an object index<br /><br /><br /><br />
<br />
===4.17p===<br />
<br />
*changed the new "copy to clipboard" command<br /><br />
It now has a parameter, to control writing options<br /><br />
The value can be:<br /><br />
0 - use defaults (row &amp; column labels, formatted values)<br /><br />
or a sum of the following codes:<br /><br />
1 - write row labels 2 - write column labels 4 - format the values<br /><br />
For example, a code of 6 writes formatted values with column labels only<br /><br />
IMPORTANT:<br /><br />
<br />
===4.17o===<br />
models will use the default of "1" which you probably dont want.<br /><br /><br />
note: For the "paste from clipboard" option, the dialog will have the options set as were applied when the "Paste from clipboard" operation was performed in the table editor. The defaults are<br /><br />
row labels, column labels &amp; formatted values<br />
*no longer start without key file (undone change in<br />
===4.17n===<br />
)<br /><br />
*INTERDYNE VERSION EXE - shipped as INTERDYN.EXE on demand<br />
*Starts expecting to find a model called INTERDYNE<br />
*This model must be encoded using the PLENCODE utility<br />
*The model should be inside a DB file such as _DATA.DB<br /><br />
Differences for the INTERDYNE EXE<br />
*Only runs in interdyne mode, can never switch to edit mode<br />
*Does not show the planimate about box on startup<br />
*Can not load/save models except the (encoded) one it reads at startup<br />
*Does not put entries into the registry<br />
*Title of application is "Planimate (runtime)"<br />
*PLANIMAT.DBG does not get written<br />
*Most of the coding changes to this version were to support the "interdyne" builds, there should have been no problems introduced into the "planimate" build<br /><br /><br />
<br />
===4.17o===<br />
<br />
*New table calculations enable reading and writing the target table to the clipboard.<br /><br />
The system clipboard is updated as the item moves through the change object.<br />
*Importing into a variable length table (VLT) may change the number of columns; this is supported as long as you dont use column labels with such a table<br />
*model runtime importing into a fixed length table no longer can change the number of columns (which would have compromised integrity)<br /><br />
Note: as with all system clipboard operations, the system clipboard is only written to when you ALT-TAB away from planimate <br /><br />
<br />
===4.17n===<br />
<br />
*Planimate now runs in interdyne mode if it doesn't find a key file (can load, not create, save or edit)<br />
*Upon startup in interdyne mode the file pick dialog appears; a model must be selected otherwise the system exits<br />
*"New Model" removed from menu in interdyne mode<br />
*tool tip text can now be associated with buttons (any click-action paint object)<br />
*When the mouse is over a paint object with a click action OR a tool tip, the cursor becomes a hand<br />
*As the model is running the mouse cursor changes to a arrow/wait cursor to indicate something is going on<br />
*Planimate logo panel does not display if the system starts in interdyne mode<br />
*Option in Edit-&gt;Schedules to purge all unused GLOBAL Schedules<br /><br />
USE THIS if you have been merging models together... if any used schedules then they may be multiplying like rabbits after each merge!<br />
*FIXED BUG in table driven entry<br /><br />
The table driven entry failed to work if at least 1 item attribute was not being tupled<br />
*message item icon transfer bug fixed - icon was being lost if the message item was carrying items<br />
*cloned items (used for messaging) are now reported in the debug log<br />
*bug fix - Selective drop option of intray would *lose* items which weren't meant to be dropped... oops!<br /><br />
<br />
===4.17m===<br />
<br />
*have fixed name string handling to avoid crash caused by an attribute name which exceeds 16 characters (the new attribute dialog allows 20 character attribute names but the table column name code was not ready for this...<br /><br />
I will be increasing the standard name length slightly at some stage<br />
*New display option enables hiding of the run control buttons from the button bar<br />
*Have enhanced the way the ODBC DLL is loaded. Planimate no longer complains if ODBC is not installed... until you try and use it... and even then the error is non fatal.<br /><br />
SO... you no longer HAVE to have ODBC installed to run Planimate<br /><br />
If you are hacking it with the ODBC DLLs in the same directory as Planimate, I *STRONGLY* suggest that you remove them now to avoid future problems.<br /><br />
If ODBC is installed normally, you need take no action, this version should work fine.<br /><br />
I now keep the DLL loaded (after its first use), so ODBC operations should be faster. <br /><br /><br />
<br />
===4.17l===<br />
<br />
*scenario save/load no longer messes up the loading due to the table column headings<br />
*added new system attribute which lets model access the current mouse position<br /><br />
(check out the CHASEY model for a demo)<br /><br /><br />
<br />
===4.17k===<br />
1/5/99 *** new file version<br />
*fixed setup bug in facility stoppage editor which would cause crash when editing stoppages using agents<br />
*fixed copy bug when messaging agents (introduced in<br />
===4.17i===<br />
)<br /><br />
<br />
===4.17j===<br />
<br />
*in trays have a control attref to determine whether an item gets dropped off<br /><br />
4.17I<br />
*Agents have now been further merged with items<br />
*the item/agent option for an item class can now be changed on the fly for an item/agent. This means an item can act as an "agent" at an in tray in one instance and in another instance it can act as an item (and itself get picked up)<br /><br />
A new system-&gt;Item attribute "Act As Agent" determines how any agent-sensitive object (in tray, out tray, facility) will treat the item. The default setting of this attribute is that of the items class (set during edit of the class)<br /><br />
For proper operation, you must ensure that any change made to this system attribute is seen during lookahead - if set in a routine just before the object, the routine must execute during lookahead. Otherwise the item may be let in as an item when in fact you wanted it to enter as an agent.<br /><br />
ANYAGENT.MDL demonstrates how a single item class can act as both an item and an agent<br /><br />
4.17H<br />
*new broadcast broadcast sent when a portal is clicked<br /><br />
_Portal Clicked<br /><br />
If the broadcast is not caught, the normal Attribute/Table browser appears<br />
*item attributes can now be updated from table tuple names (in table menu)<br />
*continuation system attribute (assign to 1) sets continue mode so a user event broadcast (eg:portal click) can continue the run.<br /><br />
Equivalent to the user button "continue" option<br /><br />
LINKS model demonstrates how portal clicks can be processed during a run and the creation of dynamic spatial links<br /><br />
4.17G<br />
*dynamic spatial links added<br /><br />
Spatial links between portals can be added and removed on the fly<br /><br />
When adding, if a link already exists (in either direction) a new one is not added<br /><br />
When deleting, link(s) in either direction are removed. No error is given if no links were in place between the 2 portals.<br /><br />
DYNSPATIAL model demonstrates them (as well as the "proper" way to enumerate over a label list)<br /><br />
warnings:<br />
*removing a spatial link with an item on it will cause a possible crash since the FEC event is not yet purged and the link for it is gone...<br />
*dont yet validate creating a spatial link between portals on different screens...<br /><br /><br />
<br />
===4.17f===<br />
<br />
*splitter edit - turning on partial attributes transfer option now turns on transfer attribute options, rather than it turning off again unexpectadly<br />
*Renaming a table with a long title no longer will propagate the long title into the table's tuple name (it will be cropped)<br />
*button blitting fixed when zoom is not 100% (button contents would shift up/down as it was moused over, depending on the zoom)<br />
*a subsystem can be made visible via a routine operation using the owning portal's export index<br />
*tuple operations to carried item implemented<br />
*Button bar now does not display unlinked buttons in interdyne mode<br /><br />
The "up" button no longer appears in interdyne mode<br />
*click handling on portals now handles background portals properly<br />
*portals can now be dragged in model pre-init (check for side effects with other objects being clicked in preinit mode)<br /><br />
<br />
===4,17e===<br />
<br /><br />
Several new experimental enhancements<br /><br />
* drag portal during pause option - enables user to reposition portals in paused mode<br />
*spatial links now update as portals are moved but modeller still has to force a cache refresh!<br />
*internal broadcast "_Portal Moved" is sent to the portal's subsystem after it is dragged<br /><br />
* New 12 hour time format mode (supports import/export of 12:30 PM)<br /><br />
* fixed z-ordering problem for objects vs. their stats<br />
*the objects were being drawn in reverse order to their views<br /><br />
I have made things consistent by now drawing objects in forward order so new objects (for a given object type) obscure older ones (as one would expect)<br /><br />
* I have relaxed some of the clearing of fields when switching from cell to column/row modes. This will help retain settings when changing between attref modes but may cause unexpected stuff to appear in the fields (usually 0s) if you go Cell-&gt;Row-&gt;Column since the fields are not forcibly re-initialised to 1 upon entering the different table mode.<br /><br />
Let me know if it troubles you<br /><br />
* Broadcast and dialog buttons automatically start/pause the run if clicked when the model is stopped. Experimental<br /><br /><br />
*** IMPORTANT CHANGE for agents and carried item access<br /><br />
* carried item indexing has been changed<br /><br />
0 = first (as before) 1..n = first to last (1 used to access the second item)<br /><br />
[needs testing]<br /><br />
<br />
===4.17d===<br />
<br />
*implemented label list operations (SUBLABEL.MDL)<br /><br />
<br />
===4.17c===<br />
<br />
*carry attribute selection shows all item attributes regardless of type<br /><br />
Track bug fix:<br />
*loops with steps at them were not properly advancing the route step pointer when looking ahead<br /><br />
<br />
===4.17b===<br />
<br /><br />
note:<br />
===4.17a===<br />
incorrectly tagged models as 227, they should be v228 but wont cause a problem unless they loaded with a pre<br />
===4.17a===<br />
EXE<br /><br />
Validation changes<br />
**** ROUTE ASSIGNMENT CHANGE<br /><br />
Route assignments which fail a match on a non zero index now stop the model with an error rather than continuing silently. Use index 0 to unassign a route.<br /><br />
Change objects with empty route assignment tables will have the route assignment table removed on load to prevent model run errors<br />
*Fixed bug loading dialog templates (they were being saved with the wrong version #<br />
*Have reordered the way broadcast events are posted to the FEC (from change objects sending broadcasts). They now are now put following events at the same time rather than in front of them. This will help make broadcasts occur in the order generated - but dont let your logic depend on it!!!<br /><br />
Remember the zero time FEC event ordering rules - dont assume any order for FEC events occuring at the same epoch of time<br />
*Have fixed item messaging so the messaged item icon is retained even if the messaged item is carrying other items.<br /><br />
<br />
===4.17a===<br />
[new file version - to support saving of custom colour palette]<br />
*cleaned up portal state editor, deletes states properly<br />
*alternate entries and exits get clipped to the screen on creation<br />
*added another 16 colours to the colour palette<br /><br />
these are initially all white - at the moment you must edit the model file directly to edit them<br /><br />
find the section as follows:<br /><br />
Colors 16 ffffff ffffff ffffff : (total of 16 RGB colour values) ffffff ffffff<br /><br />
You can edit the 16 values. The colour information is coded in hex as follows:<br /><br />
BBGGRR<br /><br />
Let me know if any problems emerge with colour handling. Since there are now 16 less free palette slots, bitmaps which looked fine in 256 colour mode may now look less detailed. Switch to hi-color. <br /><br />
4.17<br />
*Change Object Calculations: added trig functions, moved square and sqrt to "trig" sub menu<br />
*added validation to all scalar evaluations - if a calculation yields a non-rational number (eg: sqrt(-1) ) an error will be flagged and the model stopped, rather than putting the value into a table where it would wreak havoc with the import filter etc.<br />
*exporting a section now uses the name generated by its connection points rather than its internal "track" name<br /><br /><br />
SECTION BOOKINGS ----------------<br />
*a particular road of a section can be booked for an interval by a train. This booking is made using a booking id, a new system attribute of items.<br /><br />
New calculation operations support:<br />
*adding bookings to a section<br />
*reading back all bookings from a section<br />
*clearing a sections bookings<br /><br />
Sections are read and written using a VLT which must have the following columns:<br /><br />
"_book id" identifier of the item which the section is booked for. an integer &gt;= 1. Only the item whose system attribute "booking id" matches will have access to the section during the booked interval<br /><br />
"_from" "_to" Specify the time range over which the section is booked<br /><br /><br />
BOOKING.MDL demonstrates setting up a booking, reading back the bookings and them in action.<br /><br />
Sections which are currently in a booked state will report this in their pause click popup. A model can also read back the booking tables for any section using the read booking operation mentioned above.<br /><br />
There is no lookahead in the track logic for impending bookings, they come into effect immediately and prevent further access to the track. Where foreknowledge of a booking is required (to prevent starting a service) interrogate the sections booking list by reading it back OR talk to me about implementing a lookahead readback on a section.<br /><br />
<br />
===4.16x===<br />
<br />
*have sped up splitter operation by caching item tupling information<br />
*added label list dump to model info<br />
*have enhanced debug log:<br />
*the log start time now determines when debugging logs start<br />
*new options enabling logging of every switch decision and message send/ returns<br /><br /><br />
<br />
===4.16w===<br />
<br />
*control paste (bulk replace) of portals has been enhanced<br /><br />
now any messages coming into or going out of the replaced regions will be retained - that is any message entries within the region connected to a dispatcher outside the region or vica versa will remain associated as well as there is a corresponding object<br /><br />
This also applies to wormhole entries and exits<br /><br />
<br />
===4.16v===<br />
<br />
*crash bug when browsing message entry references fixed (had broke in<br />
===4.16t===<br />
)<br />
*I've reversed the internal searching code in the train graph view.<br /><br />
This will make viewing of huge tables (&gt; 50000 rows) possible now as long as the train ids tend to increase over time<br /><br />
(cyclics should not be affected)<br />
*Dial display/update when stat is hidden<br /><br />
I've rewritten the way dial's track their visibility, so please report any new problems with the appearance (or lack of) of dials.<br />
*I now cache item&lt;-&gt;table tuple mappings. Models using them heavily will run faster<br /><br />
<br />
===4.16u===<br />
<br />
*broadcast description code buffer fixed (could cause crash when browsing references<br /><br />
<br />
===4.16t===<br />
<br />
*attribute reference browser has been enhanced<br /><br />
<br />
===4.16s===<br />
<br />
*Copying and pasting or control pasting a portal also copies all of the stats on its screen and pastes them relative to the new portal<br />
*Added new system attributes enabling a subsystem to access its owning portals graphics without having to use a label list<br />
*unreferenced label lists, broadcasts,, item classes and label subsets and multilabels are purged on model copy/paste to avoid proliferating junk between models<br />
*item attribute name browser only shows item attributes for flows which enter the change object concerned<br />
*New button in tuple edit dialog generates a report of the item classes and the attributes&lt;-&gt;table columns which will be tupled<br /><br /><br /><br /><br />
<br />
===4.16r===<br />
<br />
*crawling portal fix<br /><br />
Portals with customised states no longer attempt to retain their X-CENTRE when their image changes at end of run.... the bottom left corner is always the pivot for scaling and state changing.<br /><br />
This means *IF* the model moves a portal during a run to keep it centred as it gets scaled, it will also want to re-initialise its position at the start of the run as the portal may have shifted when the model restarted (and its image changed/rescaled).<br /><br />
If just the state/scale is changed, the position will be retained, unlike<br />
===4.16q===<br />
<br />
*fix bug with directed broadcast error appearing<br />
*was looking up wrong list with the index<br />
*added portal "show in background" option<br /><br />
portal image can be shown BEHIND dials/stats so nice overlay effects can be performed<br /><br />
I dont background the mouse focus yet so you wont be able to get to your dials without moving the image<br /><br />
<br />
===4.16q===<br />
<br /><br />
fixes portal/stat offset introduced when a panel is resized containing portals which have the "Move Views With Portal" option on<br />
*NEW ERROR<br /><br />
A directed broadcast sent to a panel without at least 1 listener is considered an error<br /><br />
<br />
===4.16p===<br />
<br /><br />
fixes queue rectangle bug introduced in O<br /><br />
<br />
===4.16o===<br />
[new file format]<br /><br />
Completes update started in<br />
===4.16n===<br />
<br /><br />
Portals with customised state images and the "retain state" option on will retain their image and any scale factor when the model is stopped and also when the model is saved/reloaded<br /><br />
Combined with the use of BMPs for state icons, this makes Portals very powerful visualisation objects.<br /><br />
When a portal reverts to a different icon upon stopping or starting the model (due to re-initialisation of its state and scaling) it is kept centred automatically, unlike when the user changes its state which pivots on the bottom left point. This looks less disconerting.<br /><br />
<br />
===4.16n===<br />
<br />
*have made changes to object (eg portal) positioning. This MAY impact current models if the size of the icons positioned differed from the default "idle" state icon<br /><br /><br />
1. All position set and get commands work with the CENTRE of the object - midx, midy. This has not changed from before<br /><br />
2. Changing an objects icon will use the lower left corner of the object as the pivot for the new image. The MidX/MidY is now updated - if the new icon is of a different size, the centre has changed.<br /><br />
This is different from before where object x/y were not being updated to reflect the new centre<br /><br />
3. Changing the xscale/yscale of an object uses the lower left corner as a pivot. Its simple to keep the object centred by saving and restoring the midx (and/or midy) as I do in the SHIPVIEW demo<br />
*Have added new object attributes<br />
*Width and Height give the current object's image dimensions (with scale applied)<br />
*STATE enables user defined portal states to be read and written remotely without having to do it within the subsystem. I used this to simplify the SHIPVIEW model<br /><br />
STATE also enables the state of any other object to be read, dont rely on this yet as it will probably be changed/enhanced!<br /><br />
*cleaned up path management code<br />
*empty path databases no longer created for screens during object scanning (and old ones will get purged next time you go to flow mode)<br />
*internal splitter path management cleaned up<br />
*added code to scan paths for objects to provide info to the routine editor<br />
*removed crop of all object y co-ords to 8 - this was used to guarantee old DOS objects weren't under the DOS status bar and is obsolete (they had to be offset-left to hide them before)<br />
*changed object image scaling to update object bounding box<br /><br /><br />
<br />
===4.16m===<br />
<br /><br />
Bug fixes<br /><br />
Two very similar looking but different bugs in the animation manager<br />
*an animation manager bug which caused items leaving a queue to interfere with each other and leave behind crud, exposed if the items were wider than standard (and hence overlapped) (I was not maintaining z-order properly when moving single items)<br />
*an animation manager bug which caused objects which changed their icon size to interfere with nearby icons in queues (I was not hiding the foreground icons properly)<br /><br /><br />
RUN STOPPING<br /><br />
When planimate is executing a while/iterate/search it occasionally polls the system for stop events. This poll was being done every 20000 iterations, i've dropped it to every 6000.<br /><br />
To stop such an operation, you must press &lt;ESC&gt; (dont hold it), make sure Planimate is foreground - the mouse is not polled.<br /><br />
A slow system may take a few minutes to get to it but it eventually will ask whether you want to stop the run.<br /><br /><br />
<br />
===4.16l===<br />
<br /><br />
Bug fixes<br />
*icon palette crash with null icon selection fixed<br />
*import filter<br /><br />
Now treats quoted empty field the same as an unquoted empty field<br /><br /><br />
<br />
===4.16k===<br />
<br />
*Billboard Table (option when creating a table)<br /><br />
Enables viewing of a number of attributes for a number of portals in a tabular manner, the columns are the attributes, the rows are the objects<br />
*in the Table-Edit -&gt; Table menu associate a new billboard with an object label list<br /><br />
(initially it binds to all model objects, I suggest you crete a sub label list with the objects you want to view)<br />
*an "_object" column maps each row to a specific object<br />
*Create columns with names of the attributes you wish to view. The format will be automatically retrieved from the first row (first object)<br />
*if the number of rows does not equal the number of entries in the associated label list, the billboard will be automatically regenerated<br /><br />
This means you can sort (during edit) the _object column to your liking and the order will be retained until the associated label list is changed<br />
*The billboard contents are only active/up to date while the model is actually started. During edit they do not track the portal attributes or formats.<br />
*if a column has an empty label, it is left un-bound - it does not get mapped to any attributes.<br />
*DO NOT write to the _object column or any of the bound attribute columns - these parts of the billboard are intended read only and will be enforced as such.<br /><br />
*Cell stats add now in view menu<br />
*Cell stats can be added to VLTs, those beyond range of table during run will not update and cannot be edited<br /><br />
During the run, cell stat will remain bound to the same row regardless of any row insertion/deletion (not the case during edit where they attempt to track their original row)<br /><br />
<br />
===4.16j===<br />
<br />
*bug fix for directed broadcasts<br /><br />
<br />
===4.16i===<br />
<br />
*reformatted condition list dumps<br /><br />
<br />
===4.16h===<br />
<br />
*animation fix: set up of item movement vector was incorrect for items animating in block mode<br />
*properly disable recent list in menubar during model run<br />
*display option enables optional formatting of attrefs as<br /><br />
p.Attribute instead of pAttribute<br />
*portal attributes can be defined on-the-fly while editing an attref<br /><br /><br />
<br />
===4.16g===<br />
<br />
*table driven entry bug fixed: they were not validating against blocked items properly, causing item count mismatch errors<br /><br />
<br />
===4.16f===<br />
<br />
*increased formatting width for condition attrefs (when shown on "if" etc<br />
*multi-condition has "Report" button which writes the condition description to a file and opens notepad to view it<br />
*Routine also now writes "report" to a file opened by notepad All conditions are expanded<br />
*fixes bug reporting item mismatch which caused a crash due to a badly timed redraw<br /><br />
<br />
===4.16e===<br />
<br /><br />
* NEW FILE FORMAT *<br />
*DIRECTED MESSAGE mode in the dispatcher lets you direct a message to a given message entry. You can also direct a message to a portal as long as it contains a message entry called _!message<br />
*bug fix when loading spatial nets which are exported<br /><br /><br />
<br />
===4.16d===<br />
<br />
*instance object unblocking optimised<br />
*no longer have FEC check for duplicate posted events, each object tracks if it has an outstanding unblock event<br />
*fixed object click handling<br />
*debug trace enhancements - events selected in the debugging memory currently written to the Planimat.DBG file<br />
*extra profiling counters added<br />
*directed broadcast calculation operation<br /><br />
enables a broadcast to be sent to a single subsystem location<br />
*broadcasting an item no longer loses its carried items<br /><br /><br />
<br />
===4.16c===<br />
<br /><br />
= MORE ANIMATION ENHANCEMENTS =<br />
*I have rewritten the way objects display as the model runs. They now draw through the animation manager (as do items) which means they can be drawn transparently and animated very smoothly. So big transparent portals are now possible.<br />
*Multi-icon support<br /><br />
The icon system now supports selecting a series of icon images (ICN or BMP) for an item or object. The animation engine will then change the image as the item/object animates, enabling rolling and walking effects as things move.<br /><br />
The icon palette still selects a single icon, you set up an animating icon sequence using a naming convention as follows<br /><br />
&lt;name&gt; &lt;@&gt; &lt;index&gt;<br /><br />
where &lt;name&gt; is the image name, &lt;@&gt; is the "@" symbol and &lt;index&gt; is a 2 digit index starting at 01<br /><br />
For example, the new BMPDEMO model uses:<br /><br />
TRI@01, TRI@02, TRI@03 up to TRI@08<br /><br />
The icons must be consecutively numbered and the first in the sequence (@01) must be selected in the icon palette. The system loads until one fails (in this case TRI@09 would fail) which then sets up an 8 icon sequence.<br /><br />
The images may be of different sizes, but remember their origin is the bottom left corner.<br /><br />
The stepping between images is controlled by new item/object attributes described below<br />
*New system item &amp; object attributes, icon scaling<br /><br />
As these attributes are intended for run time assignment their settings are not currently saved with the model and in fact cannot be edited directly, only via a calculation.<br /><br />
Item X Scale, Item Y Scale<br /><br />
These enable an item's image to be scaled in the x and y direction. They are specified as a percentage, normally 100. Be wary of large values, you will run out of memory and probably kill win95.<br /><br />
Item Image X Step, Object Image X Step Item Image Y Step, Object Image Y Step Item Image Time Step (ms), Object Image Time Step<br /><br />
These control how stepping through images is performed (for multi-icons)<br /><br />
If X step is non zero, the x co-ordinate divided by the value is used to index an image, the default of 8 changes the image every 8 screen pixels. Likewise for Y (by default this is 0)<br /><br />
The Time Step value uses the system real time clock to step images at a specified time interval (20ms is a good start) so the image will change at a regular interval no matter how fast the item is moving.<br /><br />
Note: Time stepping cannot be used to animate items or objects which are not actually moving. Yet.<br /><br />
= Consolidation of decision and comparison code<br /><br />
Different code was being used to evaluate<br />
*comparison of values in conditions<br />
*comparison of values in routine lines<br />
*comparison of values in a binary search<br />
*comparison of values for unblocking<br /><br />
This could result in different evaluation if a condition comparison is made vs. a routine line comparison, due to the way round off was being handled. Round off gets introduced when values are computed through any kind of calculation, so a calculation which should yield 15 may in fact yield 14.99999999999999 as far as the system's representation is concerned.<br /><br />
To make reliable value comparison possible, equality testing is now done in a consistent manner, as follows:<br />
*Values are considered equal if either<br />
*the magnitude of both is less than 1.0e-12<br /><br />
(an arbitrary "small number" I have chosen)<br />
*the magnitude of the difference between the 2 values is less than the value with the greatest magnitude scaled by 1.0e-10<br /><br />
This means that there is a fixed 10 digits of precision *in comparisons* made between values, so for example:<br /><br />
10,000,000,000.0 and 10,000,000,000.1 will be considered equal<br /><br />
whereas<br /><br />
10,000,000,000.0 and 10,000,000,005.0 will be considered different.<br /><br />
This means that values can be safely compared for equality regardless of their absolute magnitude. The previous approach used a fixed "delta" of 1.0e-12 which meant that comparing 2 very large values became unreliable as the inherent precision of double arithmetic is limited to about 15 digits.<br /><br />
Note that the internal values are still stored in full precision to avoid extra roundoff error being introduced.<br /><br />
Finally, be careful when doing comparisons:<br />
*Dont assume exact equality unless you are indexing, checking a search result etc.<br />
*use range bounds to trap values which are computed and may not exactly match what you expect. To check if a bin is empty, check<br /><br />
bin_level &lt;= 0.0<br />
*If you are comparing a computed bin level to a threshold, dont subtract the two and compare the result against zero, let the system compare the 2 values directly so it will be able to determine an appropriate precision for the comparison.<br />
*Avoid repeating a comparison,<br /><br />
eg if (a &gt; b) action if (a &lt;= b) action<br /><br />
instead use a select-case (I know else would be nice). I've not noticed failure of this but given the vagaries of floating point you cant be too careful.<br />
*NEVER EVER repeat a critical comparison if the value has been processed in between, with the assumption that the comparison will turn out the same both times.<br /><br />
eg you make a decision to do something based on raw bin level<br /><br />
you convert the level to a percentage<br /><br />
you then re-check the percentage to determine if you should do the thing you originally decided to do via the raw bin level.<br /><br />
This is just asking for trouble and will wreak havoc if the second decision doesn't fire even though you were convinced it should because the first one fired and you have scaled your decision critera properly.<br /><br />
For a given value do your decision making (eg: threshold check) in one place and store the decision result separately for later stages to use.<br /><br />
In fact, in general you should avoid re-testing something you have already tested, store the test result the first time, use ONE select case to catch the possibilities, etc.<br /><br />
----<br /><br />
For those that want to know, here is the algorithm I use:<br /><br />
const double COMPARE_MIN_MAG = 1.0e-12; const double COMPARE_PRECIS = 1.0e-10;<br /><br />
// determine greatest magnitude between the 2 values<br /><br />
double v_scale = max(fabs(v1),fabs(v2));<br /><br />
// if both are very small (or 0)<br /><br />
if (v_scale &lt; COMPARE_MIN_MAG) return 0; else { // the difference<br /><br />
double dv = v2 - v1;<br /><br />
// the threshold we assert equivalence at<br /><br />
v_scale = v_scale * COMPARE_PRECIS;<br /><br />
if (dv &gt;= v_scale) // v2 is greater return -1; else if (dv &lt;= -v_scale) // v1 is greater return 1; else return 0; // values close enough to consider equivalent }<br /><br /><br /><br />
<br />
===4.16b===<br />
<br /><br />
To top off the introduction of full colour icons I have completely rewritten the Animation Manager in Planimate. The AM co-ordinates the display of the icons as the model runs. The new manager handles updating of the icons much more efficiently, important since larger icons can now be animated.<br /><br />
The main noticeable change (apart from faster, smoother animation) will be that OBJECTS CAN NOW BE TRANSPARENT. This is made possible since the Animation Manager now manages their images as well.<br /><br />
Also items now flip peoperly<br /><br />
Technical Details (for those interested):<br /><br />
The old AM used to hide and reshow icons very often during repaint, especially when they overlapped. Whilst the user doesn't see this (it happens off screen) it wasted time and poses a problem with bigger icons (which not only take longer to draw but are more likely to overlap).<br /><br />
I've added a mechanism where the Simulation Engine can give the Animation Manager hints about what is happening with the icon, This enables the manager to perform many optimisations as it redraws the icons in their updated positions. The "hints" include:<br />
*Animate this icon to a new position then hide it (eg: item entering a server)<br />
*Animate this icon and keep it at front, it will animate again soon (eg: item animating through a string of switches or change objects)<br />
*Animate icon with others in a block (eg: items on conveyors, roads and tracks)<br />
*Move this icon to a new position but dont bring it to the front (eg: items shuffling through a queue, repositioning an object)<br />
*Change the icon of this object, leave it at its current location/z-order (eg: object changing its state)<br /><br />
The manager code performs all these operations whilst<br />
*maintaining z-order of icons (newer items appear at front) Enables items AND objects to be animated very smoothly even when they overlap with each other.<br />
*keeping block animating items (eg: items on roads) in front of items in queues etc, objects etc, which they can animate over<br />
*sorting block animating items by the object they are on (makes overlaps between roads look nice and layered)<br />
*maintaining backing store integrity (so an item under any other item can move out and not leave any "dirty bits" behind it. Important now very large icons can have transparent parts.<br /><br />
In addition I had to implement re-entrancy management to prevent an internal redraw while animation was underway (eg: window resize) which would otherwise confuse the animation manager.<br /><br />
Let me know how it goes.<br /><br /><br />
<br />
===4.16a===<br />
<br /><br />
After 10 years of living with 16 colour icons, I have FINALLY rewritten the animation handling in the system, so now...<br />
*iconic objects and items can be rectangular and of *any* size your machine can handle<br />
*full colour bmps can be animated both as item icons and object icons (using the new "Animate Object" routine operation)<br />
*The palette browser also shows BMP images (reduced to fit the palette) but they will appear full size when selected<br />
*the icon editor has been banished... its a separate EXE now. yep it still only handles the 16 colour icons<br />
*The icon mover now takes the icon editor's place in the menu bar. It can display and move BMPs into folders and DB files.<br /><br />
BMP files<br />
*can now be selected for object and item icons<br />
*I support 8 bit and 24 bit BMPs, others should work too<br />
*Transparency is supported as follows<br /><br />
Any pixels that are "Planimate Grey" which means<br /><br />
RED = GREEN = BLUE = 0xBC (hex) or RED = GREEN = BLUE = 188 (decimal)<br /><br />
will be mapped as transparent... so you can have nice irregularly shaped items (and soon objects during run)<br /><br />
If this causes your "silverware" scans to appear with holes in them (where pixels match the transparent colour) either edit the image to avoid the transparent colour or you can force an image to never be transparent by ENDING its name with a # symbol (the hash)<br /><br />
SEARCH ORDER<br /><br />
I dont store in the model whether a particular image is a BMP or ICN (the old 16 colour icons). For any given image name, the system first attempts to load a BMP with that name, following the usual search of the working directory, system directory and _*.DB files therein.<br /><br />
If that fails, it will fall back to looking for a .ICN file. So FOO.BMP will always be loaded in lieu of FOO.ICN, even if you pick FOO.ICN from the palette.<br /><br />
!!!*** VIDEO MODE NOTE ***!!!<br /><br />
To enable arbitrary colour BMP display I've had to abandon palette management. Things will still appear in 256 colour (8 bit colour) mode but it will get ugly as more complex images are used and transparency doesn't work.<br /><br />
So make sure you are running High Colour (16 bit) or True Color (24 bit) if your system can support it. If not and you have a desktop, consider upgrading your video card. If you are stuck with an old notebook, 16 colour icon operation should still be OK.<br /><br />
In making this all possible I've rewritten or modified the following subsystems, please take care particularly with your precious image DBs:<br />
*DataBase management/saving/updating (to greatly speed up updates when the big BMPs are moved in/out/renamed)<br />
*File copying routines (used by database)<br />
*BMP loading / display (though paint BMPs should work as before)<br />
*Item icon draw/animation<br />
*Planimate Object bounding box / boundary management (so non square objects are possible)<br />
*Display Object coordinate mapping (fixed the animation trails left when animating while zoomed)<br />
*The icon palette/pickers/mover &amp; their current directory management<br />
*Image animation routines (speed up &amp; optimise)<br />
*PRINTING needs to be tested when stopped and running<br />
*the icon editor (now stands alone) but I had to rewrite parts of it so I could build it with the new toolkit<br /><br />
ALL of my testing has been under NT4 SP4 so if you experience crashes or strange displays:<br />
*note your video card type and display mode settings<br />
*try a different video mode<br />
*check if you are running out of resources (a real possibility under 95/98 regardless of how much RAM you throw at it)<br />
*check if you have the latest driver for your video card<br /><br />
This EXE should be file format compatible with<br />
===4.15t===<br />
(which of course wont load the BMPs you can now select for object/item icons...)<br /><br /><br />
SOON TO COME:- the original request that inspired this rewrite... run time scalability of portal icons in width and height.<br /><br />
<br />
===4.15t===<br />
<br />
*item/class attributes now merge (on inter model copy)<br /><br /><br />
<br />
===4.15s===<br />
<br />
*activity state system attribute added<br /><br />
shows an activity bar in the status bar,<br />
*Value of 1..100 controls length of bar, 0 to reset (no bar)<br />
*automatically reset at start and end of run<br />
*otherwise its totally up to modeller how it gets used<br /><br />
Since this updates even when running without animating, use carefully to avoid model slowdown<br />
*fixed fast anmiation bug after button click<br />
*animation flushing added after mouse/key/menu events to fix stray state icon problems when pausing and initiating messages<br />
*broadcast label re-indexing on model merging now implemented<br />
*merged broadcast labels should no longer be scrambled<br /><br />
<br />
===4.15r===<br />
<br /><br />
NO MORE FLICKER<br /><br />
I have completely rewritten the way animation updates are applied to the screen. I now use the backing store (active while the model is running) to eliminate all flicker when objects are repositioned, images repainted etc.<br /><br />
To make this work, I've placed "Flush" operations at strategic points in the system. IF your model does not update as it should and it worked with version Q, let me know, I may have missed one.<br /><br />
This involved finding and plugging some redraw re-entrancy bugs which were lurking in the system, apparently harmless until the update order became critical with the new implementation. I think its all fixed now, screens will redraw quicker *BUT* the cost is that nothing will appear until everything has been rendered into the backing store.<br /><br />
OBJECT MOVEMENT<br /><br />
There are now 3 ways to move an *OBJECT* as the model runs<br /><br />
1. Current Portal X/Y system attributes<br /><br />
This is the least efficient as you'll usually have to message into the portal to get it move. It wont flicker but will still require redraw processing for each move.<br /><br />
Its good where an object knows where it wants to move to as you dont have to export its identity into the object label list.<br /><br />
2. Object Attribute (new attref mode) - Object X/Y position<br /><br />
This enables the x/y pos of an object to be set in a routine, where the object can be pointed to remotely. By applying all object movements in one routine you can reduce the redraws required. All the changes can be made in one redraw "hit"<br /><br />
3. Object "Animation"<br /><br />
A new special Calculation - "Animate" enables an arbitrary object to be smoothly animated to a new X/Y position. The object will move at the default system icon animate speed.<br /><br /><br />
<br />
===4.15q===<br />
<br />
*implemented dependency tracking for dynamic tables referenced using a constant attribute (but no speed up in table lookup)<br /><br />
<br />
===4.15p===<br />
<br />
*removed comment text from calculation erea for comments<br />
*clipping display option (default off) enables objects to be positioned off screen and to stay there even when screen area resized. Otherwise they are brought back into view.<br />
*the time advance dialogs no longer continue the run if they are cancelled<br />
*fixed byg causing attref scan errors (condition pasting) <br /><br />
<br />
===4.15o===<br />
<br />
*fixed rectangle update on graphical dial bug<br /><br />
<br />
===4.15n===<br />
15/11<br />
*object attribute access now implemented as attref mode<br />
*stat views update in pre-init mode<br /><br /><br />
<br />
===4.15m===<br />
<br />
*object type now indexed from 1<br /><br />
<br />
===4.15l===<br />
<br />
*new file mode: file size read<br /><br />
deposits result into first attribute in the targets list<br />
*returns size of file (0..2Billion) or -1 if file does not exist<br />
*new calculation - object type, new label list "object types" to support it returns object type for given object reference<br />
*conditions are retained when switching between IF to CASE to WHILE<br />
*conditions can be copy/pasted within a model<br />
*menu bar option to toggle drag mode (in Window menu)<br />
*image dials now have an option which causes them to auto-resize to the current iamge boundaries rather than scale the image to fit the box<br />
*Have relaxed the clipping of stats so portals and stats can be positioned off-screen, let me know of any anomilies with it <br /><br />
<br />
===4.15k===<br />
<br />
*arrival time can be set for items on a route<br />
*"Item Time Until Arrival"<br />
*used in conjunction to section running time to compute the running time<br />
*IMPORTANT BUG FIX TO SENSOR ENTRIES<br /><br />
the previous implementation was moving items from sensor entries immediately the entry was sensing a change in its target. If this occured in the middle of a routine... the routine would lose access to its routine attributes<br /><br />
The fix was to schedule an event for the sensor entry which will execute once the current event has completed.<br /><br /><br />
<br />
===4.15j===<br />
<br /><br />
Portal reposition option - moves portal stats when portal repositions<br />
*you can drag a portal without repositioning the stats by holding down shift after starting the drag<br />
*label list operations (partial)<br /><br />
new "label list" attref element mode<br />
*to address entire label list for new label lists<br />
*label clear operation - clears all entries of label list without any validation/update of tables (existing data loses label) useful if planning to import<br /><br />
other operations coming...<br /><br /><br />
<br />
===4.15i===<br />
<br />
*GANTT and TRAIN GRAPHS<br />
*optional "_color" column now added, if present the colour as specified is used<br /><br />
if not the original colour mapping algorithm is used, which maps states to colours but avoids the background colour<br /><br />
*TABLES<br /><br />
to get things consistent I have reworked the row colour code so colours range from 0..15 (as for tables/graphs)<br /><br />
255 should be used for no colour<br /><br />
To avoid problems with old models, I've added the "Index colours from 1 not 0" option which gets set for old tables using row colours, and things work as before.<br /><br />
Do not use this option with new models, I'm imposing the discipline of indexing colours from 0 as one day the colour values will become RGB values anyway ranging from 000000 to FFFFFF (hex) - around 16 million<br />
*CHANGE TO CONDITION EVALUATION<br /><br />
if a condition is performing an AND and the previous value is false, I dont bother evaluating the second argument, result will always be false<br /><br />
This allows condition to contain test such as<br /><br />
att &lt;= table row count AND table_cell[att][1] != 0 without the second operation giving an error if the first one fails<br /><br /><br />
<br />
===4.15h===<br />
<br /><br />
As I have yet to receive any feedback on version G I'll assume its bug free :)<br />
*implemented new option "Hide Item Click Details" which hides all item click menu options except attributes.<br /><br />
CTRL key overrides for debugging<br />
*some extra item click displays added<br />
*Facility now has complete state and stoppage editor<br />
*log driven graph enhanced<br />
*can have many graphs connected to same table with them plotting different ranges of overlay ids<br /><br />
The STOCKPILE demo model shows this<br /><br />
The AUSMAP demo model shows whats now possible.<br /><br />
Its a graph, not a BMP! Sorry I lost the pen-up command around Tasmania when importing the vector data.<br /><br />
BTW: a pen up can be achieved by plotting a line with 0 width<br /><br />
<br />
===4.15g===<br />
<br /><br />
This is an intermediate release for testing. Much code has been modified with graphing, all graphs need good testing.<br /><br />
Do not commit to this version without recourse to roll-back to a previous one<br />
*log driven graph<br /><br />
dynamic graphing capability, driven from columns in a table<br /><br />
to be documented, currently the following columns are recognised. Note that not all are required and they can appear in any order:<br /><br />
_overlay overlay #, 1,2,3 etc. _x x points - these do not need to be increasing! _y y point<br /><br />
_label<br /><br />
if these are present, they enable color/width etc to be changed on the fly for each line drawn in a given overlay<br /><br />
_color use the new colour label list, 0..15 _width line width _style _yoffset<br />
*default label lists added for colours, line styles and boolean codes<br />
*table import filter has new options<br />
*strip trailing spaces (from labels)<br />
*remove enclosing '<br /><br />
Removes enclosing single quotes and strips any junk outside of single quote pairs, first character must be ' for this to activate<br />
*new facility state edit dialog (not stoppage yet)<br /><br />
<br />
===4.15f===<br />
<br />
*Wormhole entry/exit mode:<br /><br />
Wormhole exits "teleport" items to their associated wormhole entry, enabling items to be moved across the model without having to flow up and down the entire hierarchy, or having to hack using broadcasts<br /><br />
The relationship is one to one. It can be copy/pasted as long as the portal copied contains both wormhole entry and exit within its hierarchy.<br /><br />
Unlike messages and broadcasts, woemhole exits support blocking and unblocking... a blocked wormhole entry will cause its wormhole exit to appear blocked to an approaching item.<br /><br />
*separate pipe options control load monitoring and load limiting selection<br /><br />
IF load limiting is not needed, turning it off will speed up operation<br /><br />
*fixed problem when dealing with message items and portal item counting<br />
*sensor entrys no longer produce item until the main run starts. They can be disabled for an interval after that (specified in seconds)<br />
*fill intermediate steps can be interrupted with &lt;ESC&gt; key<br />
*new Display-&gt;System Parameters menu<br />
*will have engine tuning parameters added, initial one Maximum Track Fill Search places a limit on how deep system will recurse in attempting to fill intermediate steps. 50 is probably a more reasonable number. If this is too low, Planimate will be unable to fill the intermediate steps and the track logic will complain of unreachable steps<br /><br /><br />
<br />
===4.15e===<br />
<br />
*This implements the Sensor Entry<br /><br />
See SENSEENT.MDL for an interactive demo<br /><br />
This entry compares a target attref (can be a portal attribute or table cell) against a trigger level.<br /><br />
When the target crosses the trigger, an item is produced by the entry. The entry does not produce another item until a "reset" condition fires, this enables hysterisis to be implemented.<br /><br />
The entry has a very complete paused-click menu which shows everything you'd want to know about its current state<br /><br />
An option enables selection of "immediate move" which will cause immediate activity when an attribute is changed while the model is paused<br /><br />
*Implemented "stay paused" checkbox in model error dialog to assist in debugging<br />
*Does not appear in interdyne mode<br />
*After an error model integrity will have been lost and continuing the run mhilst possible (useful for some debugging) will not be reliable and any results should not be trusted<br />
*A new _!SYSTEM.DB is included with this version, it includes new icons for new object states (new entry modes, broadcast change object) and smaller default icons for assembler, splitter and multi-server<br /><br /><br /><br />
<br />
===4.15d===<br />
<br />
*fixes bug in intermediate loop filling and adds more validation to error conditions in the intermediate loop fill routine<br />
*avoid using the new entry mode "Sensor" its not implemented yet<br /><br /><br />
<br />
===4.15c===<br />
<br />
*added route read capability; model can read route information FROM an item into a table.<br />
*added "Fill Intermediate Steps" command<br /><br />
This performs the route "guess intermediate steps" on-the-fly on the current item route<br /><br />
An option specifies whether loops get filled in as well. This is very useful as you can then use the "route read" operation to read the completed route back into a table, fill in the timetable times and then re-assign it as a route to the item<br />
*CHANGE to Fill Intermediate Steps:<br /><br />
Have added validation which complains if a loop appears in a route without the endpoints of the track it is on around it. This would cause the auto-route builder to build incomplete routes since it cannot handle encountering a loop without the endpoints.<br /><br />
DYNROUTE has been updated to demonstrate the new capabilities<br /><br />
&lt;notice how timetable times for automatically guessed portals/loops are zero; modeller needs to interpolate these somehow, this model does not implement this)<br /><br />
<br />
===4.15b===<br />
<br />
*Fixes track bugs (bad error reporting for timetable route assignment)<br />
*Sort broadcast list<br />
*Added broadcast tracking when broadcast is sent from a change object and its sent via a constant or label reference<br /><br />
<br />
===4.15a===<br />
<br />
*route timetable times are now used to compute section running and loop waiting times<br /><br /><br /><br />
4.15<br />
*implemented data handling for target "object detail" Eventually this will enable specific roads/sections to be specified along with an object label reference.<br />
*route assignment from a table implemented<br /><br />
A table can load a route into an item using the "Assign Route From Timetable" option<br /><br /><br />
The following columns are required in the source table<br /><br />
"_location" : portals and loops on the route "_arrival" : arrival time (calendar) "_departure" : departure time (calendar) "_dwell" : minimum dwell time at loop<br /><br />
These will be interpreted by the track logic in future versions. Currently they are available as system/item attributes as follows:<br /><br />
"Item Time Until Arrival"<br /><br />
Gives the time which must elapse before the item needs to arrive at the next step in its route. (When an item is inside a station, its step pointer is already advanced to the next step). If the timetabled time has already passed or no route is assigned, this will yield 0.<br /><br />
"Item Time Until Departure"<br /><br />
Gives the time which must elapse before the item should leave the current object in its route. This is unavailable if the currnet object was the last step in the route (the route has completed). If the timetabled time has already passed or no route is assigned, this will yield 0.<br /><br />
"Item Dwell Time"<br /><br />
Gives the minimum time which the item must spend at the current object, even if its behind on its timetable. If no route is assigned, this will yield 0. <br /><br />
Model DYNROUTE.MDL demonstrates some of these<br /><br />
<br />
===4.14r===<br />
<br />
*reworked way turned around trains signal loop entry delays<br /><br />
<br />
===4.14q===<br />
<br />
*scenario tables include column headings (as a comment)<br />
*"RANDOM" distribution patterns no longer get clipped at lower bound 0<br />
*Random seed increment can be set for multiple runs (using 0 uses the same random seed for all multiple runs)<br />
*Cell stats now apply view rounding as set for their source table columns<br />
*cleaned up debugging option flags remote debugging via TCP implemented [for debug builds only]<br />
*memory allocation now shown in run profile, and run profile can be reviewed in edit mode<br />
*reworked trip auto completion algorithm<br />
*use more preallocated tables<br />
*does not invoke search algorithm if the next step is directly reachable (no steps need to be guesses)<br /><br />
This will *greatly* reduce model start times and memory swapping in models with densely connected tracks<br /><br /><br />
<br />
===4.14p===<br />
<br />
*fixed train direction code<br /><br />
<br />
===4.14o===<br />
<br />
*extended run profile report<br /><br />
= reworked FEC code handling, removed old code<br /><br />
*** PLEASE REPORT ANY RUN ANOMALIES COMPARED TO V<br />
===4.14n===<br />
<br />
*added code to re-evaluate train direction when it stops at a loop (because the loop was a step in the route)<br /><br />
<br />
===4.14n===<br />
<br />
*registry handling implemented<br /><br />
model now saves most recently loaded/saved model list<br />
*added "Run Profile" option in the Display menu<br /><br />
displays runtime engine statistics, focussing on aspects which influence model speed performance and memory usage<br /><br />
<br />
===4.14m===<br />
<br />
*can broadcast an item from a change object (broader.mdl)<br /><br />
<br />
===4.14l===<br />
[new file version]<br />
*fixed crash bug when exiting (palette deletion order)<br />
*fixed attribute editor so reselecting label mode shows label list<br />
*reordered saving code so item attributes get saved after all label lists (including class lists) have been defined<br /><br />
Now item attributes formatted as multi-labels should reload properly<br />
*multi label list can now reference sub-labels and object labels needs testing<br /><br /><br />
<br />
===4.14k===<br />
<br />
*fixed crash bug with bmp display dials<br />
*fixed ordering problems on deleting label lists<br />
*dial displays update properly in edit of attributes this invoved some re-implementation of stat display handling<br /><br /><br />
<br />
===4.14j===<br />
<br />
*implemented change calculation command (Special) to reset spatial link caches/positions on all panels<br /><br />
Use this to force update of spatial net details after the portals have been repositioned<br />
*row specific table row colours<br />
*a table option sets the row (like row labels)<br />
*an option selects whether column colour overrides row colour<br />
*row colours range from 1..16, 0 = keep default<br /><br />
I've not implemented dynamic redraw on just a colour change (this would slow down displays considerably)<br /><br />
*Cyclic selection option on label lists<br />
*enables "yes/no" type labels to be toggled by clicking in the table cell rather than having to make selection from list<br /><br /><br />
<br />
===4.14i===<br />
<br />
*Implemented dynamic table references by attrefs<br />
*This enables a table in an attref to be lookup up on the fly using names in a label list<br />
*can be used to implement "3d" tables<br /><br />
DYNTABLE.MDL demonstrates it<br />
*rounding option now works for item attributes<br />
*Fixed serious bugs with table copy/paste/undo/row insert which would corrupt memory in instances where empty tables had rows pasted into them<br /><br /><br />
<br />
===4.14h===<br />
<br />
*Implemented Label Subset lists<br />
*These are label lists which contain a subset of another label list's contents. Useful for providing selective access to members of a label list in user fields<br /><br />
<br />
===4.14g===<br />
<br />
*Planimate will now find data in _*.DB files in the working directory as well as in the system directory. Files in the wd are searched first<br />
*can now browse into databases when browsing BMP paint<br />
*Go Back button action (like ctrl-b) now available<br />
*Stat displays now hide properly when panel stat/table hide option is on<br />
*Undo implemented on table edits (not if columns get changed though)<br /><br />
<br />
===4.14e===<br />
<br />
*The fix in<br />
===4.14d===<br />
made things worse with the hide paint option. This version finally fixes it. Any models loaded which have version 212 will have the "hide paint" option turned off on all panels<br /><br />
(the file version is now 213)<br /><br />
<br />
===4.14d===<br />
<br />
*fixed panel options bug introduced in 'c'<br /><br />
new panels would have random options enabled<br /><br />
<br />
===4.14c===<br />
<br />
*track fix<br /><br />
a section become unavailable as a train in a loop enters loop exit delay will allow the train through<br />
*fixed user button to set panel<br />
*section capacity editing disabled<br />
*I'll be dropping support for multi-lane sections in an upcoming version. Use spatial links instead if its a road<br /><br />
<br />
===4.14b===<br />
<br />
*Log Viewer cleanups<br />
*no longer crashes on exit if selection was in progress<br />
*no longer crashes if class filter selection<br />
*printing works<br />
*handles loading currently logged data from a model which is paused<br />
*handles loading data from model which has been restarted<br />
*menubar rearranged<br />
*export option now added, export header format cleaned up<br />
*user button to set panel zoom<br />
*fixed bugs in attribute selection<br />
*selecting label unit format did not update properly<br />
*routine attribute dialog failed because widget not initialised properly<br />
*dialog z-orde code reworked, report any new strange behaviour with ordering<br />
*"godzilla clock" bug fixed (clock got bigger as maio window was zoomed smaller because I was using it to measure the clock's font metrics)<br /><br /><br />
4.14<br />
*Change to ATTRIBUTES<br /><br />
An attribute (Portal,Item,Routine,Class) no longer has a Distribution Pattern dialog as part of its definition.<br /><br />
This distribution was used to give the attributes *initial value* a random variation. This was itself limited in that the distribution used to initialise an attribute could not reference other attributes to specify its constants.<br /><br />
For item attributes, similar functionality can be achieved (with more flexibility) using the "Random" operation in a change object<br /><br />
For portal attributes which you want to initialise to a random value at the start of a run, the system "_Run Start" broadcast can be used to trigger a routine<br /><br />
This change will reduce model size slightly, decrease the model's memory footprint and speed up model run starts. Model run time will probably not be affected much.<br />
*Attref copy now copies latest field changes and closes the attref dialog (applying the changes)<br />
*Gantt graph debugged<br />
*its now functional<br />
*lines extending past ends of graph are properly cropped rather than drawn to their end point which would be very confusing<br />
*min y value and max y value can be used to extend the graph range (eg: min y can go -ve to get more space for the lowest labels)<br />
*Can adjust zoom scale on a panel by panel basis<br /><br />
This scales in addition to the overall system zoom factor, so individual panels can have special zoom settings. Good for large high resolution report panels; no need to zoom out to see them but they will still print properly.<br /><br />
Please keep the nominal screen zoom factor to 100% and only change where really required. Users can then use the master zoom to make the model accomodate their displays.<br /><br />
NOTE: Running animation with an overal zoom NOT at 100% places much higher load on the CPU due to co-ordinate scaling and bitmap stretching<br /><br /><br />
WARNING: Running with very high zoom factors (overall &gt; 500) and very large panels is a great way to exhaust virtual memory and lock up your system!!!<br />
*DISPLAY OPTIONS - some are now set on a panel-by-panel basis<br /><br />
Many panel/screen specific display options have been removed from the global display options and added as properties which can be configured individually to each panel.<br /><br />
The options are now configured by the "Options" menu reached by the panel background menu <br /><br /><br />
<br />
===4.13s===<br />
<br />
*Problems when editing RTF notes fixed<br />
*prevent selection of another panel while an RTF note is being edited<br />
*Inplace edit RTF notes do not become active when the background is clicked<br />
*Added queue "stop on full" option<br /><br />
This is *VERY* useful for debugging - it pauses the model and shows the panel where the queue is located. The item is left in the queue so it can be inspected (if capacity follows the queue the item will move when the model continues)<br /><br />
Single item queues with this option on can be used to catch unexpected conditions in a run and unlike the exit, they enable the problem item to be examined<br /><br />
<br />
===4.13r===<br />
<br />
*Table driven entry implemented, check TABLEENT.MDL for details<br /><br />
basically the entry feeds from a table, 2 columns must be provided _time : time of event (calendar) _class : class of item to produce (new _item class label)<br /><br />
Events can be posted/unposted to this table on the fly (including in paused mode) and the entry will act correctly<br /><br />
A scheduled item with a time &lt; Simulation time will be produced at the current simulation time<br /><br />
An Entry Option allow optional logging (demonstrated in the model)<br /><br />
Obviously the tables need to be VLTs for this to work...<br /><br /><br /><br />
<br />
===4.13q===<br />
<br />
*bug fixes to model merge<br /><br />
<br />
===4.13p===<br />
<br />
*copy/paste ordering rearranged so trip ids are pasted in sequence<br /><br />
<br />
===4.13o===<br />
<br /><br />
more fixes<br />
*Auto track time fill option now turns off as well<br />
*Train graph views load in panels, can be added via background menu<br /><br /><br />
<br />
===4.13n===<br />
[new file format]<br />
*Fixed label list selection bugs<br />
*can now add train graph again<br />
*added item classes to label lists<br /><br /><br />
<br />
===4.13m===<br />
<br />
*Implemented reading via ODBC (in change object)<br /><br />
Model ODBCREAD and BOOKSALE.MDB demonstrate reading some records into a table.<br />
*"Refs" button is back into the attribute dialog<br />
*panel background colour now sets<br />
*bug when using keyboard in combo boxes in new attribute editor fixed<br /><br />
<br />
===4.13l===<br />
<br />
*hide bend point option added<br />
*gantt display row offset can be specified<br /><br />
a value &gt; 0 specifies how many rows to offset the display by<br /><br /><br />
<br />
===4.13k===<br />
<br /><br />
NEW DIALOGS:<br />
*new attribute create/edit dialog<br />
*new table creation dialog, enables commonly set options to be set as a table is added<br /><br /><br />
TABLE EDITING ENHANCED:<br />
*Use the right button to get the cell menu (even when in paused mode)<br /><br />
Note that the options in this menu change depending on what is selected and in the copy/paste buffer<br />
*left button dragging in a table now forms a selection, shift-dragging extends the current selection<br />
*can drag past edges to scroll the table<br />
*rows or columns are selected when you click in their heading, shift clicking extends the selection as for cell selection<br />
*table column name and title now can be longer<br />
*importing into a new column also sets the column name when the title is set. If a name exists, its not changed<br />
*Clipboard export problems (errors on alt-tabbing) fixed (memory allocation issue) - manifested itself under NT4<br />
*Delete row does not give an error if row count is 0 and row is 1, makes clearing a table always work without having to insert a row<br /><br />
ie: Delete row 1 for RowCount(); will not complain if RowCount() is 0<br /><br />
MISC<br />
*routine: inserting a select also inserts a case as well as end select line<br />
*object icon handling<br />
*when a smaller icon is drawn after a larger one, the original icon is properly erased<br />
*tables will not do complete redraws as routines execute (triggered by inserting or deleting a row); they will be updated once the routine completes. Same applies to file import.<br /><br />
This means you wont get trapped on a screen importing a 10000 row table with a table view updating as each row is added<br /><br /><br />
<br />
===4.13j===<br />
<br />
*train graph test<br /><br /><br />
<br />
===4.13i===<br />
[new file format]<br />
*table format width was not being initialised when first used, now fixed<br />
*scenario save<br />
*the display option-&gt;Include All Data In Scenario option now only saves portal attributes which are not marked constant<br />
*pipe activity colour is now an attref for each pipe<br /><br />
(ie: you can dynamically change pipe animation colour)<br /><br /><br />
<br />
===4.13h===<br />
<br />
*y scale includes 0 option for normal graphs added<br /><br />
(no longer need to have fake 0 point in data to get y scale starting from 0 when auto-scaling)<br />
*4 digit year option on date writes to file<br /><br />
<br />
===4.13g===<br />
<br />
*comma delimiting option now available for reading tables<br />
*new pipe advanced option<br /><br />
in advanced mode 3 extra attributes enable<br />
*limiting of amount loaded via a separate load limit attribute which gets decremented to 0<br />
*accumulation of amount loaded/unloaded<br /><br />
into 2 separate attrefs which can be set independently of the actual bin the pipe uses (hense each pipe's activities can be monitored)<br /><br /><br />
<br />
===4.13f===<br />
<br />
*scenario load: 0 row table read now supported<br />
*fixed the loader bug which caused load error if an exported pipe was being loaded<br />
*exported pipes now appear in the multiple export object add list<br /><br />
<br />
===4.13e===<br />
<br />
*button bar now hidden by default (display option) and completely implemented<br /><br />
the navigation buttons take you to the first panel found with the names as follows:<br /><br />
"Navigation" "Interdyne" "Inputs" "Outputs" "Run Settings" "Information"<br /><br />
Names may be preceeded by "_". "!" or " ", they will still match as long they are the same (case insensitive) from that point on.<br /><br />
note: This is an initial implementation; more options will be added as priorities see fit.<br />
*scenario import table bug (vlts) fixed<br /><br /><br />
<br />
===4.13d===<br />
<br />
*object labels are sorted by name<br />
*object export name default does not include leading "_" or "!"<br />
*fixed scan count bug with section times running<br />
*initial tool bar added (most buttons not yet functional)<br /><br /><br /><br />
<br />
===4.13c===<br />
<br />
*removed debugging for trip step generation<br />
*Added new colour selection dialog from Mark<br />
*Implemented extensive load validation to attempt to reconstruct models which were partially loaded and subsequently saved (corrupting the dynamic hierarchy)<br /><br />
<br />
===4.13b===<br />
<br />
*attempting tuple append on a fixed length table is now flagged as a row index error instead of corrupting the system<br /><br />
note: You can still TUPLE INSERT on a fixed length table, the row index must be in the valid range; all rows at and after the insert point get pushed down and the last row gets lost<br /><br />
<br />
===4.13a===<br />
<br /><br />
*Routine attribute renaming should now only alter the local routine<br />
*Multi label read implemented<br />
*handles reading either symbol delimited or fixed width (the multi label width parameter determines the max number of characters read per element, the last can be &lt; this value)<br /><br /><br />
4.13<br /><br />
New Track menu option Network details:<br />
*enabling the "Generate Automatically" option shows fields where section running and control info can be bound to a table named by Location Table<br /><br />
For each section, "From" / "To" columns of the table are interrogated. Out Time/Back Time specify the names of ITEM attributes which will determine which table column to use to get the running time<br /><br />
Track 1/Track 2 (Control) specify the name of table columns to use to get this information, since it cannot be item specific yet<br /><br /><br />
The generated lookups from the last run may be inspected using the Track-&gt;Section Details view but they cannot be edited if the "Generate Automatically" option is on<br /><br />
*New "Find" utility being developed by Mark is in the Display menu The search can have '*' and '?' included and will implicitly find strings contained within other strings<br /><br />
eg: searching for CDE will match ABCDE and ABCDEFG<br /><br />
The search is case insensitive.<br />
*this EXE is built using optimisation; you should notice the system runs quicker. With my new setup I can now run optimisation without waiting half the night for a build!<br /><br />
<br />
===4.12t===<br />
<br />
*Test version for new compiler<br />
*had problem loading its own model (the version number needs to be advanced by 1)<br /><br />
<br />
===4.12s===<br />
<br /><br />
*route's have an option to guess intermediate points; this helps where a route has obvious steps but will report any ambiguity requiring either extra steps to be included or a complete route definition (with this option off)<br />
*trip assignment at change option has new option<br /><br />
local : works as before, enables a local, arbitrary route/index selection<br /><br />
global: uses the global route list and the index defined with the route<br />
*automatically tracks changes to the route list<br />
*new explicit "delete" button to remove the trip assignment<br />
*pipes now track moving portal<br /><br /><br />
<br />
===4.12r===<br />
<br />
*Fixed switches so they can now handle an item of the same class visiting them just after an item has moved but before the move has completed. Queues and Splitters in loops with switches highlighted this problem since they push the item out before returning (and completing) the move which caused the first item to enter them - ie. they work recursively.<br />
*Button message dispatching changed from direct call of function to posted message dispatch, to reduce "winding in" of the process when buttons are used to continue a run - should not be noticeable in any way<br />
*Dispatcher now "forgets" target when switched back to "Normal" mode<br />
*Entry "User Click" options changed<br />
*no longer puts confirm message for creating item without continue<br />
*fixed path validation bug when click/continue option used<br />
*does not report "no paths" when click on a normal entry which has finished its schedule<br /><br />
<br />
===4.12q===<br />
<br /><br />
TABLES: GREATLY sped up block row insert and deletes<br />
*A new message "_system close" is sent to paused/ready model when user quits/closes planimate<br /><br />
Planimate must process this message without user intervention<br />
*can read arbitrary file length into VLT<br /><br />
nb: table does not shrink if less data is loaded than required but it will expand to fit total rows read<br />
*reading into a block offset is supported, the table is padded with rows to achieve the required block row offset<br /><br />
eg: if a block read is started at table row 1000, an empty table will have rows 1...999 inserted before row 1000 (the first read row)<br />
*fixed bug with 24hr time display - rounding caused silly time displays for times at 59 minutes and more than 30 seconds<br /><br />
10:59 59<br /><br />
This did not compromise internal data integrity<br /><br />
<br />
===4.12p===<br />
<br />
*24:00 is now a valid Time Of Day<br />
*Portal's have a new option to avoid them being ctrl-paste updated (good for the odd control subsystem on a screen with many generic stations)<br />
*right button click in preinit/paused in table view now handled by the table view rather than showing the background menu<br />
*gantt bar labels are now omitted when they are too wide for the bar (ie. many events in the view)<br />
*scenario extention message added<br /><br />
<br />
===4.12o===<br />
<br />
*Terminology changes<br />
*"Run Pre-Init" -&gt; "Run Ready"<br />
*"Exported Object List" -&gt; "Objects List"" need a name for the "Export..." object option?<br /><br />
*model can set sys att "Run Start Time Reference"<br />
*this forces a restart of a model; invoke with care!<br />
*model can set sys att "Advance To Time" to initiate/stop a fast advancement<br /><br /><br />
*fixed bug which caused "time left" box to remain on screen when error occured during run<br />
*scenario can now load into VLTs<br />
*RTF note exporting: no longer appends to file (which would "lose" the appended text anyway - use gather notes to append together.<br /><br />
default export/import file name is now the note name<br /><br />
run gets<br />
*"Up To Owning Screen" user button adds current screen to the "Go Back" list<br />
*double click on name in status bar goes to owner for panels as well<br />
*display option to hide "Animation Starting" message<br />
*display option to override table/attribute scenario setting and include them all when scenarios are saved<br /><br />
(the individual setting for each object is not lost and will return if this option is switched off again)<br />
*append row in table now sets values to CLEAR<br /><br /><br /><br />
<br />
===4.12n===<br />
<br />
*splitter editor bug fixed (again)<br />
*gantt min/update interval and scroller updating now work properly<br />
*new value formatting modes:<br /><br />
1. Value x,xxx.xxxx Like "Value" except commas delimit every 3rd digit<br /><br />
2. Time Of Day HHMM A four digit time, from 0000 to 2359<br /><br />
Modified value parsing algorithm to handle new modes more reliably<br />
*now handles k,m,b in short in place edits for unit modes<br /><br />
* please report any interpretatin anomalies or unexpected value mode changes.<br />
*"duplicate" row menu option added for user mode<br /><br />
<br />
===4.12m===<br />
<br />
*fixed crash problem with gantt on non visible screen at start of run<br />
*still problem with<br />
*gantt min update interval not working (nothing draws if its non zero)<br />
*scroller forgets setting upon redraw<br /><br /><br />
<br />
===4.12l===<br />
<br /><br />
BIG SPEED UPS!<br />
*rewrote internal table structure handing<br />
*row insertion, deletion and table growing much quicker (using many more block memory moves rather than element by element copy)<br />
*tables can grow much bigger (8192 elements vs. 8) before incremental rather than binary growth increment is used<br />
*preallocate Planimate tables as they load, rather than having them reallocate dynamically<br />
*the combination of these changes ==&gt; *** S P E E D ***<br /><br />
Please report any anomolies immediately - all else same as v.12k<br /><br /><br />
<br />
===4.12k===<br />
<br />
*fixed loading of gantts in panels (oops)<br />
*implemented "Real time" mode<br />
*the display option "Run Model In Realtime" causes the scheduler to fast-forward the model until the model's calendar time equals the "real" calendar time (from the PC clock); the model is then animated in "real time"<br />
*its useful to have an update interval of 1 second in this mode<br /><br />
(the clock window is updated nonetheless)<br />
*this mode wont be much use in relative time mode <br /><br /><br /><br />
<br />
===4.12j===<br />
<br />
*fixed crash with old graph code<br />
*fixed gantt redraws on wrong panel<br />
*can now add gantt from panel background menu<br />
*password and no edit field now properly handled for labels<br />
*click on bar in new gantt (for popup) implemented<br />
*table columns have a new option item to flag inclusion in this popup<br />
*start/end times of event are always shown in the popup<br /><br />
<br />
===4.12i===<br />
<br /><br />
note: this version seems to crash on a lot of models I load. I've probably broken something with the "old" graph views. Please report crashes and what was happening<br />
*new gantt display (add via the "Add View" button in table/graph views<br />
*needs testing<br />
*usage docs to follow<br /><br />
basically, it requires these labelled columns<br /><br />
_time -&gt; determines x axis, should be ascending _position -&gt; determines row # _state -&gt; 0 = inactive, 1..15 map to system colours for now _id -&gt; unused _label -&gt; shown in the bar if that option selected<br /><br /><br />
_time,_position &amp; _state are required to get a display, the others are optional<br />
*click on bar for info on row to follow v.soon<br />
*some scale parameters (eg min/max values do not alter things as it currently always auto-scales itself<br />
*model option to restart on stop<br />
*model will still go to stop state if an error occurs, or a stop occurs/is selected while the CTRL key is down (to avoid getting trapped in a running model)<br /><br />
This option is most useful with "Pause at pre-init" and "Run on load" as the user does not get exposed to the stopped model under normal circumstances<br />
*password option on dialog fields (displays '*' for each character)<br />
*Read only option on dialog fields<br /><br />
nb: For list box fields, the password option is ignored and the read only option does not prevent a selection being made, it just gets ignored when the dialog is ok'ed.<br />
*fixed bug with spatial link: was rounding co-ords which caused running times sto be slightly &gt; than expected (about 1%)<br /><br /><br />
<br />
===4.12g===<br />
<br />
*fixed bug with graph displays not being drawn properly where the graph range was between 2 graph x points<br /><br />
the problem was made worse by not handling drawing beyond graph's last point when the first graph point was plotted - caused bars in the gantt display<br />
*right button on table cell now brings up ctrl-left menu<br />
*table row edit menu<br />
*added append row<br />
*implemented "User Cannot Add/Delete Rows" option (was previously the "User Can Add Row" option and was not implemented<br />
*scroller range edit now uses format of target column<br />
*File remapping support<br />
*The Edit-&gt;Files Accessed option enables review of files accessed during runtime (via change object read/write file) and bitmap images<br />
*The Edit-&gt;Initialisation File option enables an ini file to be associated with the model<br /><br />
When the model is loaded (or this option is selected) the ini file is loaded<br /><br />
currently ini file only supports file name remapping and must be of form:<br /><br />
[FILES] &lt;from-name&gt; &lt;to-name&gt; : :<br /><br />
names are quoted, example:<br /><br />
[FILES] "TEST1.DAT" "c:\rick\sv\data\test1.dat" "TEST2.DAT" "d:\moredata\test2.dat" "c:\rick\data\test3.dat" "d:\moredata\test3.dat"<br /><br /><br />
<br />
===4.12f===<br />
<br />
*item attributes have options<br /><br />
"Include In Item Panels" -&gt; controls whether attribute will display in item panels (not yet implemented)<br /><br />
"Include In Item Popup" -&gt; controls whether attribute will display in item clicked pop up list<br />
*By default this is on for old models and off for new attributes<br />
*A leading '!' overrides this and hides the attribute anyway<br /><br />
This means you dont have to name private attributes with a preceeding '!' which will make tupling management etc. easier<br /><br /><br />
BUGFIX: external copy of date formatted fields copies entire date<br /><br /><br />
<br />
===4.12d===<br />
<br />
*Attref display reworked:<br /><br />
Now use a prefix letter without a ':' - use capital on attribute name for clarity:<br /><br />
so<br /><br />
pAttribute -&gt; portal iAttribute -&gt; item cAttribute -&gt; class Attribute -&gt; routine local<br />
*"Real Time" system attribute translates the real calendar time into a planimate time offset<br />
*routine attribute copy/paste offered when routine lines are copied to a routine without any routine attributes<br />
*routine attributes can be defined on-the-fly by selecting "Add New" when browsing attribute names<br />
*graph scroller<br />
*handles right click (to set start/end/step/resolution)<br />
*responds to keypad keys left/right/home/end<br />
*new button editing<br />
*can clear push stack for screen change<br />
*can review/change options for broadcast and screen change button<br />
*can reselect menubar commands<br />
*"Start/Restart" button added<br /><br />
fixes:<br />
*object label list index editing updates targets as for label lists<br />
*missing routine attribute dialog bug (once attribute deleted)<br />
*changed "!=" notation to "&lt;&gt;"<br /><br />
fixes (also in l):<br />
*pipe redrawing if model started on other scrn<br />
*track handling of blocked train<br />
*conveyor gap handling (in<br />
===4.11m===<br />
)<br /><br />
<br />
===4.12c===<br />
<br />
*removed PV object code from EXE - models containing PV objects will fail to load<br />
*fix to track logic / switches (was not resetting switches BEFORE unblocking)<br /><br /><br />
<br />
===4.12b===<br />
[file version 196]<br />
*ROUTINES can now have local attributes defined and referenced via R:attribute. These are private attributes to the routine<br /><br />
Routine attributes get set to the initial (edit) value whenever the routine is invoked<br />
*Attribute and table "Refs" now mark items which potentially modify them with a '*'<br /><br />
Let me know of cases I've missed<br />
*Can add all objects on a given screen to the export list from the Exported Objects dialog<br /><br />
misc fixes<br />
*z-ordering bugs with attribute edit dialog fixed<br />
*"VScreen() null message" when selecting portal entry in paused mode fixed<br /><br />
<br />
===4.12a===<br />
<br />
*fixed bug with sequential switch becoming blocked<br />
*fixed crash bug when copying model with table column formatted for "model objects"<br /><br />
note: exported objects do not get their export details copied<br />
*fixed crash bug when copying model with trips in it... (no one found this?)<br />
*new broadcasts are indexed from 1, not from the system broadcast ids<br />
*fixed a bug introduced recently which would cause shuttle conveyor used at t&gt;0 to give an error<br /><br />
anyone using shuttling conveyors? Under consideration for removal<br />
*switches now load with the right icon for their mode<br /><br />
Note: In this version I rewrote the way the Future Events Chain (FEC) gets events placed in it to make it more efficient. After running some debugging metrics I noticed the FEC could do with some optimisations.<br /><br /><br />
&lt;file version same as<br />
===4.11k===<br />
&gt;<br /><br />
I have completely rewritten the way the Planimate engine handles looking ahead and "resetting" of switch states as it explores options. I did this to:<br />
*abolish "Reset scan" loop bugs when portals or tracks are tightly connected back to back (using multiple portal entries/exits) - the reset scan mechanism could not follow the specific entries that the items had taken using the previous structure<br />
*attempt to cut down the search overhead (the old way, after an item had moved, the engine had to do another search of the tree just explored to "reset" switches. Models should be noticeably faster now<br /><br />
again remember that using the "Non blocking" switch option on switches you dont expect to block items makes a big difference to performance... more so now.<br />
*fix the long standing bug in the engine which manifested in the following object arrangement:<br /><br />
b e--- / \ / |&gt;---a c \ / \ d f--- <br /><br />
a,c are switches, b, d are change objects, e, f are servers<br /><br />
If c depended on an attribute which is set differently for b and d, and a explored both a-b-c and a-d-c paths (as happens with "any avail") then c would stick to the setting it got for the first test made, which may not be the appropriate one for the path actually taken<br /><br />
This is now handled properly<br />
*consolidate the way lookahead is handled in the various places it gets invoked<br /><br />
*REDRAW bug fix for attribute stats with user button messages<br /><br />
<br />
===4.11k===<br />
<br />
*Important Enhancement to broadcasts<br /><br />
The system now defines and sends some broadcasts which the modeller can use:<br /><br />
PreInit Start<br /><br />
Sent when the model is about to enter pre-init stage, just before it would pause if the modeller has selected "Pause After Pre-Init".<br /><br />
Note this is always sent, even if the model does not pause at pre-init<br /><br />
A good time to do initial calculations and table imports, before the user gets to see the model for the first time (assuming run on load is enabled)<br /><br />
PreInit End<br /><br />
Sent when the system is leaving pre-init stage. If the model paused at pre-init, it is sent when the user selects continues the run.<br /><br />
A good time to do final cleanups to attributes which are used to post initialise objects, eg: pipe total delay and interval, conveyor<br /><br />
Probably not required often<br /><br />
Run Start<br /><br />
Sent when the system is about to actually start running - objects have been fully initialised, pending events are scheduled for entries etc.<br /><br />
A good time to "throw" items into place, preload other items into queues etc.<br /><br />
Run Pause<br /><br />
Sent when the system is about to go into pause mode, because the user or an event has initiated a pause or there are no more events.<br /><br />
A good time to update tables and displays that the user will be exposed to<br /><br />
Run Continue<br /><br />
Sent when the system is resuming a run. Note this is also sent at the start of the run after the "Run Start" broadcast.<br /><br />
A good time to validate any changes made by the user dueing pause mode <br /><br />
Run End<br /><br />
Sent when the model is stopping, either because the user has selected stop or a stop condition has been reached at an exit.<br /><br />
NOT sent if an error causes the stop or an exit triggers a stop using the "Stop All Runs" mode.<br /><br /><br />
Note: a broadcast during pre-init (either triggered by the events or the above buttons) should avoid putting items into objects with capacity as initial item loadings and state (stoppage) for these objects has not been determined - this is done just before the "Run Start" broadcast is sent<br /><br /><br />
*increased label width to 63 character (+ 1 internal terminator)<br /><br />
Label selection list now dynamically resizes to the longest label<br />
*Handling of long labels in dialog fixed (combo box was clipping them)<br />
*"Comment" calculation type added (in "special")<br />
*Calculation display is wider, may need to shrink comment area to see it all now<br />
*table shows owner in "Table" button menu, can go to owner by selecting that option. Solves "Where is this table defined" problem<br />
*now include owning change object name in routine dump<br />
*routine exports (TXT file) now get appended<br /><br /><br />
<br />
===4.11j===<br />
<br />
*Track Logic Change<br /><br />
The lookahead mechanism now resets switches in portals on the other end of track sections which are explored during "lookahead" meaning that it now should be valid to have a switch immediately at a portal with many sections feeding it. The switch should no longer "stick" to the decision made for the first item which tests it.<br /><br />
Note: Cyclic switches will probably not work properly here since the cycling sequence will not be retained.<br />
*Pipe line display sped up<br />
*fixed bug with table redraw when the "Edit Original" option is used on a table view<br /><br />
<br />
===4.11i===<br />
<br /><br />
----------- P I P E S -----------<br /><br />
Designed by InterDynamics Pty. Ltd.<br /><br />
Implemented by Riccardo Macri<br /><br />
(C) 1998 InterDynamics Pty. Ltd.<br /><br /><br /><br />
Pipes are the third type of "spatial" connection which can be formed between portals. They compliment track and spatial links for items by providing links for attribute value flow.<br /><br />
The pipe's logical operation and its on-screen representation are quite distinct, hence changing the display properties does not affect the model run results, nor the model run time when advancing without animation.<br /><br />
Logical Model -------------<br /><br />
* The pipe connects a "Source Att" in the "Source Object" to a "Target Att" in the "Target Object". These will typically be portal attributes of the source and target portals. By default the pipe looks for an attribute called "pipe" but this can easily be changed in the Pipe's Object menu.<br /><br />
* "Total Time" determines the time between a quantity being collected from the source and deposited at the target (assuming "Run Control" is at 1, more on this later).<br /><br />
* "Time Resolution" determines how often the pipe "samples" - in effect determining the flow granularity. If the Time Resolution equals the Total Time, the pipe does the transfer in one big "bite".<br /><br />
* "Load Rate/Hour" determines the overall flow rate at which the pipe draws from the source attribute - with the proviso that the pipe will not draw the source below zero.<br /><br />
The pipe is composed of a number of "logical bins" in series, each bin stores a quantity representing its "level". The number of bins is computed by Total Time / Time Resolution - the finer the time resolution, the more bins.<br /><br /><br />
[source]--&gt;[ ][ ][ ]...bins...[ ][ ][ ]--&gt;[target]<br /><br />
Events get generated at intervals of "Time Resolution", at every event the pipe:<br />
*shifts its contents one bin towards the target (implemented such that the number of bins does not affect the speed of the shift)<br />
*"dumps" the last bin into the target attribute (incrementing it)<br />
*"loads" the first bin from the source attribute (decrementing it by the load amount). The load amount is computed by:<br /><br />
Load Rate/Hour -------------- x Timn Resolution 3600.0<br /><br />
Hence the load amount is less for smaller time resolutions, since more loads are occuring per hour.<br /><br />
The load amount gets clamped to prevent the source attribute being made negative - ie. the "demand" cannot be met. In addition, an object option "Load Integral Values" forces rounding of the load amount, so the pipe always contains an integral quantity without any fractions.<br /><br />
Note: If the load amount per sample is less than 0.5 and the integral values option is on, nothing will be loaded!<br /><br /><br />
Note: Decreasing the Time Resolution (yielding higher resolution) means more events need to be scheduled to keep the logcial pipe updated, this will impact on model performance.<br /><br /><br />
Graphical Representation ------------------------<br /><br />
The graphical display of the pipe has been designed to efficiently display the state of the logical pipe without impacting on model results. In addition run speed is not impacted by complex displays if they are not visible.<br /><br />
The pipe is drawn using a number of straight "sections", bend points may be used to shape curves. Parameters which affect the display are collected in the "Display Settings" sub menu. These include:<br /><br />
* Display Resolution: This determines the amount of sections into which the pipe is "sliced" for display purposes, in effect determining how granular material flow in the pipe *appears*.<br /><br />
It must be at least the number of bends in the pipe (otherwise the pipe cannot be accurately drawn) but typically a display resolution of at least 100 yields a much smoother result.<br /><br />
* Border Thickness: Determines the thickness of the border lines of the pipe<br /><br />
* Pipe Width: Determines the width of the pipe. Interesting effects occur with very wide and bendy pipes!<br /><br />
* Activity Update: Determines the interval (in ms) over which "activity" highlights in the pipe are moved. These are different coloured bars which "chase" down the pipe to highlight material movement.<br /><br />
The time is in terms of *real* milliseconds, independent of model run speed.<br /><br />
* Activity Spacing: Determines the spacing of the "activity" highlights in the pipe.<br /><br />
Nice smooth activty effects can be attained using:<br />
*large display resolution (200)<br />
*wide activity spacing (15)<br />
*fast activity update (50ms)<br />
*a model "Display Update Interval" which yields at least 10 screen updates a second (this depends on the models complexity, CPU and most frequent scheduled event).<br /><br />
Note that this will give a smooth effect even for a pipe with a single logical bin - in more detail:<br /><br />
If there are more bins than sections, some sections will show the average states of a number of bins<br /><br />
If there are more sections than bins, some sections will share the same bin<br /><br />
* Nominal Load Rate<br /><br />
This gives the pipe a reference from which compute its bin "occupacy" level. This in turn is used to colour the sections when updating the pipe display.<br /><br />
Pipe Colours<br /><br />
These are in a separate sub-menu<br /><br />
Border Pipe border lines Empty Colour used for section if bin level virtually 0 (&lt; 1.0e-12) Low Colour used for section if bin level &lt; 0.25 of nominal Medium Colour used for section if bin level &lt; 0.75 of nominal Full Colour used for section if bin level &gt;= 0.75 of nominal Activity Colour used for the chasing "activity" bars<br /><br />
Note: The display settings "Set To Defaults" / "Set From Defaults" options respectively Set Defaults / Apply Defaults for the pipe graphical setting AND colour selections. The defaults are used for newly created pipes during the current session.<br /><br /><br />
FINALLY: The "Run Control" Attribute ------------------------------------<br /><br />
This is the most powerful parameter in the pipe. The default value of 1 causes the pipe to operate as described above. Changing the value affects things as follows:<br /><br />
*Setting it to 0 suspends pipe operation. The pipe gets stopped<br />
*Setting it to 2 DOUBLES the speed of the pipe... the sampling interval gets halved, causing the SAME loads to occur twice as fast. So the pipe doubles its flow rate.<br />
*Setting it to 0.5 HALVES the speed of the pipe... the sampling interval gets doubled, causing the pipe to halve its flow rate.<br /><br />
And now the surprise:<br />
*Setting it to -1 REVERSES the operation of the pipe - the target becomes the source, and the source becomes the target. The pipe now flows material backwards.<br /><br />
Any +ve or -ve real value can be used to scale the pipe's operating speed.<br /><br />
The "activity" animation also gets scaled / reversed to highlight the change in the pipes update rate.<br /><br />
*Whenever* this attribute is changed, any pending update event for the pipe is removed and a new one scheduled for the newly calculated update interval (or none if the pipe is stopped, with a 0). <br /><br /><br />
Attribute Reading -----------------<br /><br />
The pipe uses 7 attribute references which specify its operational parameters. Some of these are only read at initialisation time, others are read on-the-fly.<br /><br />
Only read at pre-init:<br /><br />
Transit Time Update Interval Nominal Load Rate<br /><br />
Read/updated on-the-fly<br /><br />
Source Att Target Att Load Rate/Hour Run Control<br /><br /><br />
----------------------------------------------------------------------------<br /><br /><br />
<br />
===4.11h===<br />
<br /><br />
** New file version 193<br />
*Implemented ranges on column/row operations like Sum, Avg, Min, Max<br /><br />
For old models these are initialised to 1..RowCount or 1..ColumnCount as appropriate if the source is a column or row respectively<br /><br />
These enable sub-regions of a row/column to be worked with<br />
*Broadcast Buttons<br /><br />
Broadcast buttons send a specific broadcast messages, causing interested broadcast entries to immediately produce an item (of the type of the flow leaving them).<br /><br />
No continue is required, the item is produced once the button is clicked and its event is processed to completion (end of its processing thread).<br /><br />
A "Broadcast/Continue" button continues the run once the broadcast message has been processed.<br />
*Matched row *** AND COLUMN *** access to tables<br /><br />
The MATCHED CELL attref mode enables dynamic location of rows and columns in a table, rather than using direct indexing.<br /><br />
For the row: A "key column" is searched for a specific "key value". The match is the row which will be used. If the match fails, an error occurs. This match is *by value* so its important that the format of the key column and key value be the same (ie. same label list)<br /><br />
For the column: A string match is sought between the table column label and the label of the attribute addressing the column. (If the attribute is not formatted for labels, its treated as a normal index). In effect it implements a mapping between a label list (eg: _Model Objects) and the column labels of the table.<br /><br />
If the label is not located in one of the table columns, an error occurs <br /><br />
NOTE:<br /><br />
Using the attref COLUMN INDEX mode, a model can determine whether a label matches any column of the table without an error - instead 0 is returned. This is in addition to using COLUMN INDEX to determine the index of a column label selected from that table.<br />
*"Dont Show Pause Messages" display option<br /><br />
prevents the model from complaining about "no events" and announcing that it has become "paused" which is very useful for interactive models which respond to message buttons<br /><br />
*Paused click on portal -&gt; Cached Links option now shows each link and the computed distance to it<br />
*Objects can directly reference the object index of their owning portal this works up hierarchy until it finds an exported portal, if none then 0 is returned<br />
*Table printing bugs fixed<br />
*Was not properly recomputing rectangle boundaries during the print. Things were made worse if the screen was at zoom of &lt; 100% before the print.<br /><br />
note: some differences will still occur due to possible different printer device fonts. I lock the table boundaries and the display code fits as many rows/columns as it can depending on the current font metrics. Even different zooms will yield different results especially for non truetype fonts which only render at discrete resolutions.<br />
*conveyor now reads running time attributes when item first enters<br /><br />
This gives the model an opportunity to set up conveyor delays, as long as it occurs before the conveyor is used.<br />
*unless items are preloaded into it or fill gaps option on shuttle conveyor is on.<br />
*When adding a spatial link between portals the system prompts you to provide a name for the portal in the model object list<br /><br /><br />
<br />
===4.11g===<br />
<br /><br />
** New file version 192, major changes, migrate to with care **<br /><br />
=== NEW OBJECTS ===<br />
*Spatial links<br /><br />
A new type of connection between portals, added like a track but they work very differently.<br />
*No capacity limit, entering item never blocked<br />
*Item leaving spatial link must never be blocked<br />
*Item does not need a trip, you set a System-Item attribute to a *final* destination (via a global label) and the item takes the shortest path there<br />
*section times not specified on the links, you set a total run time on the item and the animation is performed such that the item arrives at the final destination in the specified interval<br />
*items can have spatial link details set up through a message item<br /><br />
*New table addressing modes<br /><br />
MATCHED CELL:<br /><br />
Instead of addressing a table by Row/Col, one specifies<br /><br />
Key Col, Col and Key Value<br /><br />
The Key Col column is searched for the value Key Value then that row is used to address the cell at column Col<br /><br />
MATCHED ROW<br /><br />
Instead of specifying a row directly, one specifies Key Col and Key Value,<br /><br />
The Key Col column is searched for the value Key Value and that row is then the target row for the operation<br /><br />
In both cases:<br />
*If more than one row matches "Key Value" then any may be returned... dont expect any preference<br />
*If no rows match "Key Value" then the model stops with an error<br /><br /><br />
Its intended that these MATCH modes are used where its assumed all expected keys/labels will be in the table, and the labels will be changing order meaning row order cannot be relied upon.<br /><br />
Performance will be slower than using CELL and ROW due to the search so only use where label lists are changing and the tables cannot be kept in index order.<br /><br />
*New Attref mode enables column label index for any table to be determined<br />
*in "Column Index" mode you pick a table then set the column reference to "Column Label" mode<br /><br />
At runtime it will return the index of that column<br /><br />
Useful in searching across table rows rather than down<br />
*tables/mappers are now always addressed using Row/Col even if they have a single column. Old models with single column tables may have a zero "column" attribute which will need to be fixed.<br />
*placing (via meta panel) an item at a Portal will actually pass the item on to a Queue in the Portal called "_!Catch" - modeller must create this<br /><br />
This enables Portal object location to act as both a spatial link location and a target for placing initialising items<br />
*Model can query # of objects which are in the object label list (system attribute) - will be useful when remote access of object attributes is implemented<br />
*tweaks to formatting width for set calculations<br /><br />
fixes<br />
*Queues now properly give error when thrown items cause them to "overflow"<br />
*log viewer exit fixed<br />
*printing when paused (backing store re-enabled), not font probs yet<br />
*dialog centering<br /><br /><br />
<br />
===4.11c===<br />
<br />
*fixed "attribute" bug with endifs<br />
*now expects _PL_KEY.KEY for key files (_SV_KEY.KEY still works)<br />
*reworked label handling so object/route/broadcast label formatted columns can be imported<br />
*help files now expected in a sub-directory called HELP, not SV_HELP<br /><br /><br />
<br />
===4.11b===<br />
<br />
*about box precludes other events<br />
*about box only shown briefly if loading a model<br />
*spaces in path now handled when launching model directly from explorer<br />
*bugs handling long names fixed with database<br />
*dial message introduced in previous version fixed<br /><br />
<br />
===4.11a===<br />
<br />
*fixed about box problem (was not looking in database)<br />
*fixed bug in editing first object label introduced in last version<br /><br />
4.11<br /><br />
*** THIS VERSION OF PLANIMATE REQUIRES A NEW _!SYSTEM.DB OR IT WILL NOT RUN ***<br /><br />
* dial redrawing reworked<br />
*fixed dial display updated to attribute value when ctrl-pasting in portal and retaining values<br />
*avoid flicker between previous and current value (bad for image views) when first redrawing scrn in paused mode<br /><br />
* New object mode specific icons for entry, exit, change, switch, meta portal also dispatcher<br /><br />
* cell ctrl-click menu has option selection to select auto across/down for multiple value table entry<br /><br />
problem with ghost boxes being left<br /><br />
* "none" object added to object list selection<br /><br />
* now have "about" box for planimate!<br /><br />
* fixed memory leak in StringList (DeleteAll was not releasing string memory) mainly a problem when browsing icons<br /><br />
* fixed: lost table row/column property selection in calculation when a table gets renamed<br />
*object label list reindexing/sorting<br /><br />
* paint: removed save visible/load painting options since they do not properly save font usage info, causing problems on load. Use portal copy/ paste and the "Other Options"-&gt;"Copy All Visible" options to move paint info from panel to panel.<br /><br />
* icon for loop can be specified from the track menu, no need to hack the system.db file<br /><br /><br /><br />
<br />
===4.10i===<br />
<br />
j 22/12/97 '''New Features<br /><br />'''Enhancements '''* When Routine editing, Endifs, End loops, End selects are automatically added when the opening statement is added.<br />* Prev/Next buttons in routine edit dialog.<br />* File extensions now include descriptions.<br />* Paint image is now BMP by default.<br />* "'''Back'''" option (Under Window in Menu Bar) or '''Ctrl''-''B '''goes back to the last screen. This is only a one level back, selecting back again gets you back where you started. Useful when a hot jump takes you somewhere you dont want to be<br />'''* F2 '''key edits table cells<br /><br />'''BugFixes<br /><br />
Known Bug '''Minor memory leak, source not yet identified.<br /><br /><br />'''Planimate<br />
===4.10h===<br />
18/12/97 Planimate<br />
===4.10h===<br />
18/12/97 '''New Features<br /><br />'''Enhancements '''* Implemented renaming of attrefs when a portal, item or class attribute is renamed for portal attributes, only attrefs in scope are renamed for item, all item attrefs (for any class) referencing the given name are renamed.<br />* Implemented copy/paste of calculation lines (replaces the block move). Copy buffer is retained between change object edits but cleared when model run or refs scanned for any reason (find refs, delete attribute)<br />* A new "Add item" at the bottom of the routine list enables paste (right button menu) or quick add (double click) <br /><br />'''BugFixes '''* Fixed dispatcher mode dialog<br /><br /><br /><br /><br />'''Planimate<br />
===4.10g===<br />
08/12/97 Planimate<br />
===4.10g===<br />
08/12/97 '''New Features<br /><br />'''Enhancements '''* <u>New dialog based routine step editing (instead of the pop up list)</u><br />* <u>Gathering RTF notes</u>.<br />* Clicking in "icon area" in status bar brings up item class list<br />* Default field/default button/field selection of many dialogs reworked.<br />* Shortcuts / rework of attribute, table, label, multilabel dialogs, plus return to list after editing content.<br /><br />'''BugFixes '''* More dialog ordering bugs fixed (dist pattern).<br />* Built using a different compiler header/library (report any unusual behaviour in previously fine dialogs).<br /><br /><br /><br />'''New dialog based routine step editing (instead of the pop up list) '''You can use the Arrow Keys to highlight a line in the calculation list in the Routine Editor, then use the space bar to select the Line for Editing. A new dialog is now displayed, with new buttons and features.<br /><br />
Attribute reference dialog contents can be copy/pasted into each other.<br /><br />
Use the Copy Button if you wish to retain a reference for pasting. Subsequent Attribute selection Dialogs provide a paste Button.<br /><br />
(Once this is proven we will support multiple copied attrefs).<br /><br /><br />'''Gathering RTF notes '''There are new editing options in the context menu for the RTF Note Editor. A “'''Gather'''” operation has also been added to the Database editing utilities. You can now select all the RTF notes you want to bring together into a single RTF file.<br /><br /><br />'''Planimate<br />
===4.10f===<br />
20/11/97 Planimate<br />
===4.10f===<br />
20/11/97 '''New Features<br /><br />'''Enhancements '''* Pasted and ctrl''-''pasted portals retain customised pentry/pexit names if the portal name does not change.<br />* Space bar now selects current item in multi''-''list as well<br />* Step column wider in routine list<br />* No longer treat single column tables differently in editor (so column label can be used).<br />* Navigate menu in window menu, CTRL''-''N as shortcut to the screen list.<br /><br />'''BugFixes '''* Crash bug fixed, portal entry/exit ctrl''-''paste failed due to name matching problem.<br />* Variable length table resize ''-'' scroll gets reset so should not get empty window.<br />* Pasting new table (after copying using Selectall/copy in the table button dialog) ''-'' extra button now properly labelled as "Paste" not "Copy".<br /><br /><br /><br />'''Planimate<br />
===4.10e===<br />
11/11/97 Planimate<br />
===4.10e===<br />
11/11/97 '''New Features<br /><br />'''Enhancements '''* <u>Editing changes</u><br /><br />'''BugFixes '''* Splitter no longer includes extra items when "no items produced" which would cause crash if selected (cant have no''-''select items in list).<br />* Proper repaint when screen properties are changed.<br /><br /><br /><br />'''Editing changes '''Accelerator / hot key enhancements (now started). Many dialogs now have working arrow keys in lists (focus set to list at start)<br /><br />
Table editing is now modal, shortcut keys on buttons and arrow keys work together. <br /><br />
The Space bar now has a role to play: It enables edits on the current cell of a table. You can no longer use the Enter key to edit table cells ''-'' only buttons can receive it. In a List Pick Dialog, Space moves item to other side. In an Item pick, Label pick etc: space selects highlighted item.<br /><br /><br />'''Planimate<br />
===4.10d===<br />
29/10/97 Planimate<br />
===4.10d===<br />
29/10/97 '''New Features<br />Screen Visible system attribute.<br /><u>Play Sounds in Planimate</u><br />'''Enhancements '''* Spawn now avoids DOS box<br />* Entry: Pause''-''click with continue option ''-'' no message shown in this mode, model immediately continues after user clicks on it.<br /><br />'''BugFixes '''* None<br /><br /><br />'''Play Sounds in Planimate '''Now you can have the user, or the system play a sound while working or running a model.<br /><br />
There is a new '''Button Click''-''action '''to play a sound. This play is asynchronous to the model run, so if you need to stop it before it is finished, use another button and click action with an empty name to enable the user to stop any playing sound.<br /><br />
File option in a Change Object can now be set to play a sound (async or sync is optional).<br /><br /><br />'''Screen Visible system attribute. '''Screen Visible system attribute. This new system attribute can be either Read or Set. To Read: Ask the model if the screen is visible: returns 1 if visible, 2 if it is not This way you can detect what the user is looking at, and perhaps alter the animation to suit them. To Set: Assigning a value of one to the screen visible attribute makes the screen visible! You might think of using this to jump to screens if errors or interesting behaviour occurs.<br /><br /><br />'''Planimate<br />
===4.10c===<br />
23/10/97 Planimate<br />
===4.10c===<br />
23/10/97 '''New Features<br /><br />'''Enhancements '''* Portals can have names exported (no throw into portal though)<br />* Ctrl''-''paste of hierarchy over hierarchy with exported objects will attempt to transfer the export name/ids to the copied objects, where the systems match in structure and name. Unlike 'retain attributes' this works beyond the first level of the copied system<br /><br />'''BugFixes '''* Load bug fixed: long export names corrupting memory<br /><br /><br />'''Planimate<br />
===4.10b===<br />
22/10/97 Planimate<br />
===4.10b===<br />
22/10/97 '''New Features<br /><br />'''Enhancements '''* Can select/browse trip and object labels<br />* Only on move is now the default for change objects in a Meta Panel.<br />* Assume no blocking for all switches in a Meta Panel.<br /><br />'''BugFixes '''* Correct object export name shown in label formatted column<br />* System Label list title is more useful.<br /><br /><br />'''Planimate<br />
===4.10a===<br />
20/10/97 Planimate<br />
===4.10a===<br />
20/10/97 '''New Features<br /><br />'''Enhancements '''* Splitter can now transfer some item attributes and item icon<br />* Splitter avail in MetaPanel<br />* Added "Up To Owner" button action<br />* Longer export names supported (and default name)<br />* Object palette handled properly, does not stay at front<br />* Started adding support for "Object location" index (might be useful in loops?)<br />* Can edit export info within the export list, separate show and show/exit options<br />'''BugFixes '''<br /><br /><br />'''Planimate 4.10 18/10/97 Planimate 4.10 18/10/97 ''' '''Important notes: '''* Compatibility window moved to 176 (last dos version) keep an older 3.90 ''-'' 4.07 EXE to convert older mdls.<br />* Removed track monitoring/limit/crews.<br />* Removed time tables.<br />* Removed all signal handling (Demand''-''Pull Assemblers), old models with signals cannot load, use old EXEs to remove them.<br /><br />'''New Features '''* New name for the software product ''-'' '''''Planimate''™ '''* New System Label Lists:<br />'''_Model Routes '''label list enumerates all defined trips<br />'''_Model Objects '''label list enumerates all exported objects (The object’s index is used for place operations).<br />'''_Broadcasts '''label list enumerates all created Broadcasts.<br />* <u>META Panels</u><br />* <u>Capacity Switches</u><br />* <u>ITEM Placement</u><br />* <u>New system attributes</u><br />* <u>BROADCASTS</u><br />* <u>New Exported Objects List</u><br />* <u>Set Password for Editors</u><br /><br />'''Enhancements '''* Entry: increased default limit &amp; digits allocated increased default time range (10 "relative" Planimate years) default item interval now every minute<br />* Loading an older format model marks it as unsaved<br />* Status bar now prevents change of screen during animation, and in Interdyne mode<br />* “/saveonexit” command line option ''-'' saves model if not saved on exit.<br />* "Simulation paused" changed to "Model run paused"<br />* <u>Calendar time calculations: / system attributes</u><br />* <u>Enhancements to simulation engine</u><br />* <u>Interdyne Enhancements:</u><br />* <u>Internal engine change - optimisation to Move()</u><br />* <u>Model Control: Pause/Stop enhancements</u><br />* <u>Stack checking implemented for the key engine operations</u><br /><br /><br />'''BugFixes '''* Fixed entry bug (new defaults were overflowing instance short int).<br />* Fixed unblock bug (was doing error check wrong way around).<br />* Table editing rework''-'' system adds tables/mappers to correct screen when clicking on portal, and system handles change of screen during table/mapper edit properly.<br />* Cannot now select meta portal into flow.<br />* References for tables now works.<br />* Dial lines should appear now on print, still needs more fixes on half oval.<br />* Deleting last column in a table is tolerated by graph views ''-'' an empty (no column) table will save/reload with one column in it though.<br />* Table read (edit and run) supports empty cells, and uses the cell's clear value<br />* Hid "View" selection in subsystem, menubar &amp; prevent mode selection in status line.<br />* Item count now resets to 0 for exit once count limit reached.<br />* Printing now redraws screen once done.<br />* Item descriptions during mouse''-''drag over the palette changed.<br /><br /><br />'''META Panels '''META Panels A Meta Panel is an environment where configurations/changes to the model can be made rather than meshing these into the dynamic model itself. You can use a Meta Panel to distribute items and broadcasts around a model (and co''-''ordinate using <u>broadcasts</u>) In a Meta Panel, only a subset of objects from the standard Object Palette is available. <br /><br />
No queueing capacity is allowed other than at Splitters. <u>Capacity switches</u> handle the traditional problems now. Meta Panels are triggered into activity by using broadcast entries to listen for Broadcasts from elsewhere in the Model. You Add Meta Panels using the Object View Background menu in Dynamic subsystems. Meta Panels can be hierarchically arranged, as you do with regular Portals.<br /><br />'''Technical note: '''A meta panel is a portal prefixed by name _META. A normal portal cannot become a meta panel and vica versa. A meta panel follows all the usual scoping rules for attribute/table access.<br />''' IMPORTANT: '''DONT use normal (scheduled arrival) entry mode in meta panels. It wont be supported later on, and your model will fail. '''Only '''use <u>broadcasts</u>. If your dynamic model continually needs to activate a meta panel, it should not be a meta panel...<br /><br /><br /><br />'''Enhancements to simulation engine '''Capacity Switches<br /><u>Internal engine change - optimisation to Move()</u><br /><u>Model Control: Pause/Stop enhancements</u><br /><u>Stack checking implemented for the key engine operations</u><br /><br /><br />'''Capacity Switches '''If a switch will not ever be blocked (indicated to it by the "Not Blocked" switch option) then it can safely defer decision making until an item actually moves into it ''-'' no lookahead is required past the switch by the object behind it. This means all tuple, dialog and table operations can be executed in the change object behind the switch and NO CAPACITY is required between the change object and the switch for the switch to make the right decision. In fact loops can be formed between switches (with no blocking on) and change objects without intervening queues, etc. Don’t have more than one switch in this kind of a loop.<br /><br /><br />'''Internal engine change - optimisation to Move() '''If the destination of an item movement is the same object from where the item is leaving, things are handled more effectively (recursion is avoided) which enables arbitrary length loops to be set up with the new "<u>capacity switch</u>" capability.<br /><br /><br />'''Model Control: Pause/Stop enhancements '''Should be more reliable. If the user selects "'''Stop'''" but animation continues, the engine is attempting to complete the current event. This can be interrupted by clicking again, the option is now shown as "'''Terminate'''" and aborts the model without completing the current event's processing.<br /><br /><br />'''Stack checking implemented for the key engine operations '''Gives descriptive error message (not error code!) Lookahead limit raised (from 10 to 1000!) but when its reached an error message is shown rather than switching to an iterative algorithm (which did not guarantee execution order). <br /><br /><br />'''ITEM Placement '''You can now “Place” an Item into an object, using the new Exit Object Mode “Place Item into Object”. This option is only avail for exits in a meta panel In this mode, the "<u>Location</u>" system''-''item attribute should be set up to point to a target. Appropriate use of the <u>Exported Object List</u>, and its corresponding '''_Model Objects '''Label List will enable you to “Point” to the correct object.<br /><br />
Items can only be placed at time 0 for now. Dont forget to assign trip/step when putting item into track objects.<br /><br /><br />'''New Exported Objects List '''New Exported Objects List A new list option called '''Exported Objects '''is now available from under Edit in the Menu Bar. This list is a collection of those objects Exported by the Modeller into this list. Items may be “<u>placed</u>” into these exported objects at the beginning of the model run. This option is only available for exits in a <u>Meta panel</u>. This enables the modeller to '''customise the startup state of a model''', right down to specifying part''-''completion of processes (including track section traverses) and setting values on any item attributes that may be required to be set at the very beginning of the run. Apart from the Portal, which is a special case, only objects with a delay capability or capacity are exportable. Exportable objects are: Server Multi''-''Server Queue Dispatcher In Tray Out Tray Splitter Assembler Track Object Portal Items cannot yet be placed into Portals, however they are useful for identifying '''Route Steps'''. The '''Object Edit Menu '''now has a new option, called '''Export''', where you may export an object, giving it a specific name to be displayed in the '''Exported Objects List'''.<br /><br /><br />'''New system attributes '''These system attributes enable you to “Place” an Item into an object, using the new Exit Object Mode “<u>Place Item into Object</u>”. (This option is only available for exits in a <u>Meta panel</u>).<br />''' Location '''Set this by making reference to the <u>_Model Objects</u> label list.<br />''' Item Total Delay '''Set first, so item knows what delay is involved<br /><br />'''Item Delay Left '''Set ONLY after setting Item Total Delay, engine needs it to compute effective item entry time.<br /><br /><br />'''BROADCASTS '''A very powerful enhancement to modelling. We have a new mode for Entries (broadcast '''receiver''') and Exit (broadcast '''sender'''). The Broadcasts themselves are collected into a list of Broadcasts. This list is available from under Edit in the Menu Bar. Broadcasts may be created from this list, or you can define them “on''-''the''-''fly” when you create a Broadcast Exit. A broadcast occurs every time an item is sent into a Broadcast Exit. A "clone" of the item (known as a '''Broadcast Item''') gets sent to EACH broadcast entry associated with (ie. listening to) that broadcast. Apart from its own Item ID number, it is identical to the exiting Item. Unlike a <u>Message Item</u>, the model can do whatever it likes with the Broadcast Item, it doesn't get returned to the source of the Broadcast.<br />'''Start thinking in terms of using broadcasts to co''-''ordinate model''-''wide activities (like initialise, prepare user reports, load from files). '''Combined with <u>Meta Panels</u> this feature is intended to can help get the model administration out of the dynamic model, so that animations are more congruent.<br /><br />
Anticipate addition of some useful default broadcasts like:<br />* model finished pre''-''init<br />* model being paused<br />* model being continued<br />* (user defined) table / attribute has been edited<br />* return to Planimate from alt''-''tab<br />* other ideas??<br /><br /><br />'''Calendar time calculations: / system attributes '''Days in Month ''-''&gt; returns # of days in the month for the given date/time<br />''' Advance Month '''''-''&gt; can advance a calendar time value +/''-'' months (keeping the same date) NB: You will have problems if the date is say Jan31 and you advance to Feb, because you will end up in March instead. This is not currently detected so he careful. Later version will probably stop the model run when this happens. <br />''' Form Time: '''Translates 3 attrefs (date, month, year) into a calendar time<br /><br /><br />'''Interdyne Enhancements: '''* Objects named with leading '_' are hidden in Interdyne mode. Use of '''_!''' and '''<nowiki>!_</nowiki>''' are also ok to keep names hidden during edit.<br /><br />* Implemented model password saving/loading. Interdyne key users can edit their model by entering '''Ctrl''-''Shift''-''H''', and providing the password (temporary only) if one was set by the builder.<br /><br /><br />'''Set Password for Editors '''Set the InterDyne editing password using the EDIT''-''&gt;Password option. If a password is already set, it must be entered before a new one can be entered. If an empty password is entered, empty (initial) password is assigned.<br /><br /><br />'''SV<br />
===4.09f===<br />
03/10/97 SV<br />
===4.09f===<br />
03/10/97 '''<br />'''New Features '''None<br /><br />'''Enhancements '''* Gantt time display can have different colour.<br />* Label content in gantt bar is centred.<br />* Times are not shown if not enough space.<br />* Can copy one overlay's graphical settings to all (copies colour, thickness, style, not y offset).<br />* Can set an overlay’s properties as default for new overlays.<br /><br />'''BugFixes '''None<br /><br /><br />'''SV<br />
===4.09e===<br />
02/10/97 SV<br />
===4.09e===<br />
02/10/97 '''New Features<br />* None<br />'''Enhancements '''* Model Routes can be addressed as a label list &lt;not the steps, the trips themselves&gt; NB This is a beta implementation, so do not use until further development is completed.<br />* Reference tracking improved ''-'' You can click on Message Entries to show references. The reference list now shows a large number of objects properly, selecting one shows you the object.<br />* Reference tracking improved ''-'' You can double click on Message Mode Dispatcher to go to the screen containing the Targeted Message Entry.<br />* Gantt time label option enhancement ''-'' When a graph display is in "Gantt" mode, a new option appears enabling showing of times before and after gantt bar. Also, label text is no longer drawn outside of bar boundaries, to prevent overlap problems.<br /><br />'''BugFixes '''* Blocked Message Entry message now includes item ref of the item which is blocked.<br />* Wait cursor shown on save model<br />* Fixed problem where many items moving from an object to a dispatcher produced an error reporting the message entry being blocked<br />* The Log Viewer can now be closed, using the Close Window Object, at top left of Window.<br /><br /><br /><br />'''SV<br />
===4.09c===<br />
20/09/97 SV<br />
===4.09c===<br />
20/09/97 '''New Features<br />* <u>Different update interval for different screens</u><br />'''Enhancements '''* Can relocate Table column during table edit (CELL stats for the column are lost however).<br />* Table sort available by clicking in table view title in stopped/user mode (if option user can sort is enabled)<br />* Table sort sped up (check), row swapping of row labels was inefficient.<br />* Improved section debugging display when attref error occurs<br />* Advance options added to paused background menu<br />* Advance for interval option added in run menu ''-'' enables stepping forward by a time increment even in calendar time mode.<br />* Screen background colour can be set in the "screen properties" background menu.<br /><br />'''BugFixes '''* <u>Fixed shared routine allocation</u><br />* Fixed dialog z''-''order handling (should not lose dialog/editor behind SV window) and control bugs eg: options dialog from table editor enabled table editor to be closed.<br />* Gantt (horz bar) display can now handle display when the y scale min/max values are reversed from usual.<br />* "Interactive dials" clip to dial value boundaries when dragged by the user.<br />* Keys function when palettes in front.<br />* Dialog fields with label lists have width set so labels will never be cropped (which would cause selection failure)<br />* Labels for all dialog widgets can now be empty, widget wont be deleted<br />* Palette/window title bars work properly when dragging objects off palettes ''-'' the palette used to be called "SimView".<br />* Relocating the column used for row labels is properly handled.<br /><br /><br />'''Fixed shared routine allocation '''Fixed shared routine allocation so "local" attributes from point where routine *invoked* can now be accessed Limitation: If a shared routine is *not* ever used, the engine still must initialise it ''-'' and it will use the point of reference of the screen where it is defined. This will cause a problem if the routine depends on a localised subsystem attribute which does not exist at the scope level of the routine, it will then complain.<br /><br /><br /><br />'''Different update interval for different screens '''Different update interval for different screens can be set The run menu option is the "master" and scales whatever value is set for the current screen/panel, under its Properties option (Object View Screen Background Menu). ie: '''Screen’s animation update interval = Screen animation update scale value x Master animation update interval. '''By default, dynamic screens get a value of 1, (Panels get a value of 0). Hence if the master is say "5 minutes" then all dynamic screens will get refreshed every 5 minutes per the simulation time clock, all panels will not. E.g.<br /><br /><br /><br /><br />'''SV<br />
===4.09a===<br />
12/09/97 SV<br />
===4.09a===<br />
12/09/97 '''New Features<br />Change to Track Section Availability/Speed Scheduling<br /><br />'''Enhancements '''* <u>RTF note editing improved</u><br />* Increased density of time display (esp. around one''-''&gt;two day width) and included heuristic to avoid repeating date display multiple times.<br />* Many cleanups to time formatting / label formatting code, report any strange formatting problems. Eventually will support wider labels/format areas, this is first step<br />* Time entry filter supports times entered (&amp; imported) as HH:MM:SS, but they will be shown as HH:MM SS.<br />* New Calendar time mode: "Calendar HHMM", original mode called Calendar HH:MM. Shows/parses times as HHMM with no colon, no seconds shown.<br />* Paint mode “Hide” works for objects again (useful for large paint objects, NB: hide state is temporary and not saved).<br /><br />'''BugFixes '''* Real Time Scaling and Animation Update Interval work properly together. Animation update events were preventing accurate real delays from occuring.<br />* Run Menu time values properly updated when model first loaded<br /><br /><br /><br />'''Change to Track Section Availability/Speed Scheduling '''We no longer have one individual schedule per section. Now an attribute reference dealing with Track Availability and Speed Restrictions can be associated with a Track Section in the new '''Section Details '''Option under '''Track '''in the Menu Bar. This enables references to be constructed by referring to table data, just like we do with Section Running Times. As per the previous schedule setting options, the attref value works as a '''percentage '''of SPEED, as follows:<br />'''Value State '''0: section unavailable. 1..99: available but with decreasing speed slow down. 100: available, no restriction.<br /><br />
IF a constant of 100 is entered for the control, the section is always available, and it shows as &lt;none&gt;<br /><br />
The Section Times dialog is now the Section Details dialog:<br /><br />
You can now select a different item class without leaving the Dialog. Track Ordering is now performed in this Section Details dialog. The Edit Section Times/Edit Section Control button toggles selection of Section Time or Line Control editing when a line is selected.<br /><br /><br />'''RTF note editing improved '''* Right context menu now includes separate "'''Select'''" and "'''Edit'''" options.<br />* Left context menu (during edit) is same as selecting "'''Edit'''" from right context menu.<br />* Resize/drag bug fixed, does not forget position/size during editing.<br /><br />* You can no longer to add "old" text note, these are becoming obsolete and will not be supported in future SV versions.<br /><br /><br /><br />'''SV 4.09 10/09/97 '''SV 4.09 10/09/97<br />New Features<br />Multi Label List (in Edit menu)<br /><u>New tuple operations:</u><br /><br />'''Enhancements '''* Paint objects no longer move to front when clicked on, an explict menu option is added to do this.<br />* Save/load model names no longer converted to all uppercase.<br />* Flipped icon property now cloned to message items.<br /><br />'''Bugfixes '''None<br /><br /><br />'''Multi Label List (in Edit menu) '''Multi Label List (in Edit menu) Multi label lists enable a number of label lists to be collected together into one cell/attribute value. They offer:<br />* memory efficient storage of multiple data elements in a single cell,<br />* ability to present contatenated strings (eg: in gantt label),<br />* powerful data move capability between multi labels and item tuples,<br />* another dimension in tables since data originally stored in several columns can now be packed into one, as long as it is discrete and has a label list associated with it.<br /><br />
Their disadvantage to current multiple columns:<br />* slower to process<br />* can only be decoded / encoded from an item tuple (you cannot directly address a component of a multi label as an attref)<br />* cannot import formatted multi labels yet<br /><br />
Multi labels work by packing the digits of a number of label list indicies together to form a number. This is automatically done, all the modeller has to do is nominate which label lists and how many digits each label list needs to represent all its possible index codes. Up to 6 digits are supported per label list. A total of 14 digits are available. Hence, its possible to have 14 single digit label lists combined together into a single cell (each single digit label list can hence have 10 states) For presentation, SV contatenates the label strings together. For each label list comprising the multi label, a formatting width limit can be specified as well as an additional "separator" character which may be a space, a character or left empty (no gap between labels)<br /><br /><br />'''New tuple operations: '''Decode MultiLabel To Tuple This takes the target attref (a label or multilabel) and places the label list indicies for each label list into an item attribute matching the name of the label list.<br /><br />'''Set MultiLabel from Tuple '''This builds a multi label (into target). The target's label list type is examined and for each component label list, a value is fetched from an item attribute matching the name of the label list.<br /><br />'''For these to work: '''* A given label list must only appear once in a multi label definition.<br />* Support for repeated label lists will be added later, the problem is that the multiple label lists will map to one item attribute without some extra detail (eg: location_1, location_2) added to them<br />* The format of the item attribute must be of the label list which it is named after. This is a "type check" to avoid accidently moving an index into a different label list's index range<br />* Clicking in a multi''-''label cell is supported for editing, importing of multi labels in a formatted manner is not.<br />* If a base label list (used in a multi label list) is edited (eg: indexes changed), the system will properly update all columns and attributes formatted using a multi label list that includes that label list.<br />* If the multi label list itself is edited (eg: label lists added, sizes changed), no attempt is made to retain value integrity of any columns and attributes formatted using that multi label list.<br /><br /><br />'''SV<br />
===4.08e===<br />
24/08/97 SV<br />
===4.08e===<br />
24/08/97 '''BugFix Fixed bug in gantt y column display (was not getting name from correct column).<br /><br /><br />'''SV<br />
===4.08d===<br />
22/08/97 SV<br />
===4.08d===<br />
22/08/97 '''<br />'''Enhancements GANTT improvements '''* Label colour can be set for gantt, separately to bar colour.<br />* Gantt now shows column title next to bars instead of normal y value numbers.<br />* A given label is shown only once when a number of consecutive rows have the same value, using the space available to all of those rows.<br />* Bars extending off the right of the window are now drawn instead of missed. If the table ends with an "open" bar, it will now be drawn all the way to the right (maximum time).<br />* The initial scroller width (upon load) can be specified.<br /><br /><br /><br />'''SV<br />
===4.08c===<br />
15/08/97 SV<br />
===4.08c===<br />
15/08/97 '''<br />'''New Features<br />New dial display modes:<br /><u>New graph mode: GANTT</u><br /><br />'''Enhancements ''''''* <u>Auto-Run Features</u><br />* <u>Inter-model copy/paste</u><br />* <u>InterDyne Mode Changes</u><br />* <u>Label list fill region option </u><br />* <u>New Font Selections</u><br />* <u>Only During Move routine option</u><br />* <u>Right button implementation &lt;still in progress)</u><br />* <u>RTF Note Enhancements</u><br />* <u>Table column menu change</u><br />* <u>Table copy has changed</u><br />* Printing while paused now supported<br />* Can now duplicate and delete ranges of lines in the routine editor<br />* Iterations are interrupted after an error is reported rather than continuing with junk data<br />* Dialog editor now functional<br />* New Click action to toggle flow display<br />* In InterDyne mode, the "in place edit" option now takes effect to prevent editing <br />* During a model run the "constant during run" option also takes effect to prevent editing<br />'''<br /><br />
Bug Fixes'''<br />* Table Row Index values of '0' were being treated as 1 and not reported as errors ''-'' '''this has been fixed and may expose bugs in existing models.<br />* Condition detail dialog no longer can get hidden behind condition editor<br />* Reworked reporting of routine error line numbers ''-'' should always give line number now<br />* <u>Unblocking bug fix</u><br />* <u>Chart recorder line drawing reworked</u> '''<br /><br />'''Chart recorder line drawing reworked '''The Chart Recorder Line is now drawn without using an "XOR" pen so that it won’t disappear on some display drivers/printer drivers due to scaling For wrap around charts the grid will be erased at points of the old trace as it gets replaced by the new one ''-'' the grid gets refreshed as the chart wraps around. This doesn't pose a problem for scrolling charts<br /><br /><br />'''RTF Note Enhancements '''SV will now show an opening RTF note, as long as the following conditions are met:<br />* its called "main"<br />* a paint object exists on the top screen for that note<br />* a normal text note called main does NOT exist<br /><br />
In place edit for RTF note implemented, with this paint option on, user can click on note and edit its contents. To end the note edit, right click in the note and select "End Edit", or simply left click on the model background (outside of the note), or press Esc, and wait for the DB file to be updated. To collapse the note, '''CTRL''-''click '''in it<br /><br /><br />'''Inter-model copy/paste '''Model merge: (inter''-''model copy/paste) To avoid carrying over unwanted information, only "used" label lists will be merged in during a copy of a subsystem or object from one model to another.<br /><br /><br />'''InterDyne Mode Changes '''* The object cursor is not shown in interdyne mode, just the arrow<br />* The clock is now shown on model load, if it was visible when the model was saved<br />* Hot keys to flow/edit/interact mode are now disabled when in the Interdyne mode<br />* System reverts to object mode when switched to interdyne mode<br />* A new "Stopped" title/prompt appears in the window title area when in Interdyne/stopped mode<br /><br /><br />'''Auto-Run Features '''The Display Option "'''Run on Load'''" option has replaced with "'''Run on program start'''" With this option turned on, the model run will start automatically, as long as the system is in '''InterDyne '''(user) mode<br /><br />
The '/RUN' command line option causes SV to auto run all models loaded. This is useful when a model is also specified on the command line. <br /><br /><br />'''New graph mode: GANTT '''The Table/Mapper Graphical View now has a new graph overlay feature: <br />'''Y''-''Offset '''''-'' enables a given overlay to be offset relative to the other lines in the overlay. This avoids having to build the offset by setting the cell data. This is important for new Gantt mode <br />''' New graph mode: GANTT '''Each column (overlay) is interpreted as one row in a Gantt chart. The row is determined by the new Y''-''Offset value. A cell's value no longer determines the y''-''position of the bar. Instead, it is printed '''inside the bar'''. If the column is label''-''formatted, the string is printed inside the bar. The bar is drawn only when there is a value greater than zero in the Cell. A value of 0 causes no bar to be drawn<br /><br /><br />'''New Font Selections ''' Note Link Font: the font used for all note''-''links is [* note]<br />''' Graph Labels'''<nowiki>: the font used for all GANTT bar string contents</nowiki><br /><br /><br /><br />'''Label list fill region option '''The Label list '''Fill Region '''option available when editing label lists ''-'' will map indices between labels to the <u>lower </u>label. e.g. for the following Label List:<br />'''Label Index '''Foo 1 Bar 5 Nellie 10<br /><br />
For Attributes formatted to use this list, the following values will be mapped to labels as follows:<br />'''Value Label '''1 Foo 2 Foo 3 Foo 4 Foo 5 Bar 6 Bar 7 Bar 8 Bar 9 Bar 10 Nellie 11 Nellie etc. Nellie<br /><br /><br /><br /><br />'''Table copy has changed '''Table copy has changed: When creating a new table, a "Paste" button will appear in the table name dialog '''if a table has just been copied'''. To copy a table select the '''Select All/Copy '''option in the '''Table '''button menu in the table editor. This enables a table to be copied to anywhere in the model with all formatting retained<br /><br /><br />'''Table column menu change '''"Title" is the title for the column<br />'''"Name" '''is the internal name (used in setting up tuple transfers) The '''"Labels" '''item appears when the column is being formatted via a label list and enables the list to be directly changed<br /><br /><br />'''Right button implementation &lt;still in progress) '''Right button implementation &lt;still in progress&gt; Many context (edit) menus now appear immediately on the right mouse button including interact menu when still in flow mode. Left button allows in''-''place edit of all attribute, table and cell stats while in edit mode...<br /><br /><br />'''New dial display modes: '''New dial display modes: Image display, control knob and label list Dials associated with stats with 'in place edit' can now be interactively dragged/turned etc. If you use this feature, you have to ctrl''-''click on the Dial Image to manipulate it rather than move it TIP: if the original attribute's rounding option is set to "Round Units" (in the distribution pattern dialog for the attribute) then the dial will "snap" to integral values when dragged! You will find that you cannot take advantage of this feature with Table Cells, due to their being unable to have a rounding value set for them (individually).<br /><br /><br />'''Unblocking bug fix '''Switches which open on the default condition now work An optimisation in the code caused a bug in switches that used the following kind of condition checking method:<br /><br />
Cond 1 = 0 True if A = B (Blocks if True) Cond 1 = 0 True if C = D (Blocks if True) Default = 1 Opens the Switch<br /><br />
In this case, the switch could block even when the B or D values moved away from equivalence to the A or C values respectively, which results in falling thru to the default (open) condition.<br /><br />
Technical detail: Switches with a condition where an attribute must match a constant (att = v) invoke an optimisation which prevents them being unblocked (time consuming) unless the attribute they depend on becomes set to the value it is being matched against in the switch's condition. This failed to work properly where the switch was blocked on the condition being "true" and open on the condition being false. The unblock was not done on the the attribute *no longer being equal* to the test constant. Now an unblock is performed both when the test attribute becomes equal and not equal to the test value. The extra unblock message will slow model runs to some degree (but it will still be faster than unblocking all switches whenever the attribute changes. A benefit does arise however ''-'' since an unblock is sent when an attribute becomes != to the test value as well as when it becomes =, conditions testing for "attribute != value" can now also be optimised using this mechanism.<br /><br /><br />'''Only During Move routine option '''Only During Move routine option has now been adjusted. SimView traces through a flow at least twice when moving an item, once to determine its viability (including exploration of switch options) and once to actually move the item. When Only During Move routine option is set to "on", SimView only executes the routine when the item is '''actually moving through the change object''', not when searching for viable paths. In previous versions, if a change object’s routine was not executed, then the model was considered "dirty", and a switch downstream of the change object that depended upon an attribute would produce and error message, due to uncertainty whether the attribute might be changed inthe dirty routine. Now when using the adjusted Only During Move routine option, the model is not considered dirty, and hence a switch downstream of the change object can now depend on an attribute. <br />'''<nowiki>*BUT* </nowiki>'''the modeller must remember that the routine is not invoked from the switches decision''-''making point of view, and in fact the Only During Move routine option MUST NOT change any attribute which would otherwise change any downstream switches decision.<br /><br /><br />'''SV 4.07 U and V SV 4.07 U and V 9/7/97 '''File Format 173 Sample Model: OBJ.MDL <br /><br />'''New Features ''' None<br /><br />'''Enhancements '''* <u>SVW should now handle long Model file names.</u><br />* <u>Safe Look Ahead Options modified</u><br />* <u>Table Editor: column menu is more descriptive</u><br />* <u>Column menu new option: Copy Format</u><br /><br />'''Bug Fixes '''* <u>Printing works in SVW!</u><br />* <u>SVW icon printing colours fixed</u><br />* <u>Bitmap refresh when paused </u><br /><br /><br />'''Safe Look Ahead Options modified '''The "During Move" Run Option, which appears in the change object menu after you define a routine in a change object, has been enhanced. This option reduces the need to place objects infront of switches etc. merely to “work around” safe look''-''ahead protection. The default behaviour (Run Option “Always”) for a look''-''ahead has not changed. This will continue to protect new and inexperienced users. Whenever a routine manipulates multiple values (row, column, tuple, block), or performs a control calculation (IF, Loop etc.), the safe lookahead feature detects that the look ahead has lost integrity, and no downstream decisions, nor icon, trip or capacity assignments which refer to attributes are allowed. In this case SimView will complain, and stop the run. You need to separate these kinds of routines, and downstream decisions or capacity assignments by placing capacity between them. But now you can selectively by''-''pass the safe lookahead mechanism, by setting the "During Move" option, which appears in the change object menu after you define a routine in a change object. Previously this option functioned to prevent unnecessary CPU''-''intensive tasks being performed during a look ahead (i.e. large searches). To do this the During Move option flagged the remaining look''-''ahead as being “dirty”, and evaluated no further calculations. Hence the look ahead lost integrity.<br /><br />
The operation of the Change object “Run Option” now provides an additional useful mechanism. Now, with During Move selected, '''only this routine itself '''will not be evaluated during the look ahead step. All other routines in the thread (i.e. in other change objects between this one and the next capacity) are now evaluated. When this option is On, a routine will no longer cause an error if an attribute is referenced immediately downstream of the change object. Decisions and assignments based upon these calculations can now be made in the same look''-''ahead. This option reduces the need to place objects infront of switches etc. merely to “work around” this safe look''-''ahead protection.<br /><br />
IMPORTANT: You (the modeller) become responsible for ensuring that downstream objects don’t expect that change object's calculations to occur. You will need to ensure that the routine you wish to “isolate” from the look ahead contains no calculations you later rely on in the same look ahead. If you get this wrong, unexpected things will happen at switches and multiservers, and there is no way the system can debug this accurately for you. This change will not affect earlier models, since they will have been built under the strict rules.<br /><br />'''Printing works in SVW! '''Second Time Lucky!! The Print dialog now appears, and you are able to print the screen when the model is not paused. If you try to print when the model is paused, you will get no print out, and unpredictable results.<br /><br />'''SVW icon printing colours fixed '''Dithering of SV icons is now handled, when printing to B&amp;W printers. Use the sample file OBJ.MDL to test your printer's handling of SVW objects.<br /><br />'''Bitmap refresh when paused ''' There was a bug where if you forced a screen redraw when the model was paused, the bitmap layer would not be refreshed. This is now fixed.<br /><br />'''SVW should now handle long Model file names. '''Still undergoing testing with other kinds of file names, like images, dat files etc. Please report any difficulties to InterDynamics.<br /><br />
NOTE: This marks a further departure from the DOS version. The DOS version will load a model created in SVW with a long file name, however when saving, the BAK file only uses the 8 character name you see in the status bar.<br /><br />'''Table Editor: column menu is more descriptive ''' Table Editor: column menu is more descriptive<br /><br />'''Column menu new option: Copy Format ''' Enables the current column's formatting to be applied to a range of columns.<br /><br />'''SV 4.07 S and T '''New File Format 176<br />New Features<br /><u>Enhancements</u><br /><u>Bug Fixes</u><br /><br />'''New Features '''Printing<br /><u>Track Loop Object Controls</u><br /><u>Shared Routines in Track Loop Objects</u><br /><u>Table title can be set separately to its name</u><br /><br /><br />'''Enhancements '''Portal state saved on save model<br /><u>Screen resize options are now off by default</u>.<br /><u>Routine editor retains current line display when editing lists longer than the window</u> "<u>Windows" icon shown in multi-column lists no longer appears</u><br /><br /><br />'''Bug Fixes '''Two bug fixes:<br /><br />
The Shared Routine selection dialog is now wider, enabling the user to read the entire routine name.<br /><br />
Trip/attribute assignment titles no longer appear in menu list. This was causing crashes<br /><br /><br />'''Printing '''Printing in SVW is finally with us! You can print the current screen to a printer’s page, by selecting File/Print, from the menu bar. The image is rendered at the Print device’s resolution, and produces high''-''quality lines and images. Bitmap colours are dithered when printing in black and white. Icon Colours are rendered as either black and white, on a B&amp;W printer, and look much better on a colour printer. <br /><br /><br />'''Track Loop Object Controls '''The release of items from Track Loop objects can now be controlled by the modeller, using a condition list gating mechanism. (Simlar to a multi''-''condition switch). There is one gate for each direction out of a loop. These are represented by the “Up Decis”, and “Dn Decis” Loop menu options. NB: The Up direction is aligned with the start and end points of the track object itself. Up is the same as Forward, which is a movement from the start point to the end point of the track, as indicated in the Track Object Menu. An item travelling along the Track object having begun from the start point, is travelling Forward, Up the track. Each Loop Decision Gate enables the modeller to overlay a higher level of decision making concerning item movement along tracks. There is a hierarchy of assessment in the Track Loop object. Consider a train Item moving Up the track: Prior to moving an item from the loop, the system assessesfirst the Up Gate, then the Up Decis, and finally applies the internal track movement logic rules. The modeller now has a sophisticated means of controlling the movement of trains. For example, three''-''way junctions, themselves containing more logic are now more conveniently set up and incorporated into a train network. Also, rules can be created, which will force an item with a clear track ahead to wait until a higher priority item elsewhere in the system moves past.<br /><br />'''Shared Routines in Track Loop Objects '''Track Loop objects can now call and run shared routines whenever an item enters, or departs the Loop. The running of the shared routine ocurs regardless of the direction of movement, so you need to ensure that you include a direction identifier in your routine, if a different set of calculations is to be performed depending on the item’s direction. NB: A shared routine can be called by a loop object, but you cannot edit the shared routine via this loop reference. You will need to link the shared routine to a routine option in a change object, in order to edit the routine.<br /><br />'''Table title can be set separately to its name '''Tables now have a title field, where you can enter a longer, more descriptive title for the table. Tables now have a title, and an internal Name. The internal name is referenced when doing table lookups, and the title is displayed in Views of the table.<br /><br />'''Portal state saved on save model '''Current Portal states are now saved when you save a model. Thi smeans that the next time you load the model, the icons representing the portals will be the same as the ones displayed when you saved the model.<br /><br />'''Screen resize options are now off by default. '''Screen resize is now always applied to current screen only. The Recurse/Panel/Dynamic options are now off by default and enable propogation of change to sub panels/sub systems.<br /><br />'''Routine editor retains current line display when editing lists longer than the window '''The Calculation/routine list editor now returns you to the current line’s scroll position. This is convenient when editing a calculation list that has more lines in it than fit into the list window display area.<br /><br />'''"Windows" icon shown in multi-column lists no longer appears '''A more appropriate icon will replace this eventually.<br /><br />'''SV4.07R 16/6/97 '''File Format 173<br /><u>BUGFIXES</u><br /><br />'''BUGFIXES '''- Col 1, 2nd or 3rd Key sort Bug<br /><br />'''- Col 1, 2nd or 3rd Key sort Bug '''Tables that were being sorted during runtime with column 1 selected as the 2nd or 3rd sort criteria resulted in inconsistent results in the second column. Now fixed.<br /><br />'''SV4.07Q 10/6/97 '''File Format 173<br /><u>BUGFIXES</u><br /><u>ENHANCEMENTS</u><br /><u>NEW FEATURES</u><br /><br />'''NEW FEATURES '''- Basic Table Column Edit Protection<br /><u>- Bulk Copy / Paste of Paint Objects</u><br /><u>- Custom Column Backgrounds and Text</u><br /><br />'''- Custom Column Backgrounds and Text '''Table column background and text colour can be specified, overriding the table's default. This new option is available in the column edit menu of the table edit dialog. <br /><br />'''- Basic Table Column Edit Protection '''Table columns can now be protected from direct editing by the user. A new option 'Protect from Edits' is available in the column edit menu of the table edit dialog, under 'Options'. Once this option is selected for a column, cells in the column will be unresponsive to Mouse clicks or the Enter key, thus preventing the user from being able to directly edit the column. This is a useful option if you expect to have inexperienced users who may try to edit columns which are not intended for editing ''-'' e.g. calculated columns.<br />'''NB: This feature has Limitations! ''' You can still force an edit on to a protected column using these advanced editing options:<br /><br />
a) holding the Shift Key while selecting one or more cells, then clicking in the selected area and choosing 'Cut' or Clear'. b) using the Ctrl Key when clicking on a cell, and then choosing 'Paste' or 'Fill/Index Down/Across'. c) Clicking on a Row heading and choosing ANY option except Copy. d) Shift''-''Clicking on a Column Title, and and choosing 'Cut' or Clear'.<br /><br />
All the above will be available to users who read manuals, and c) and d) will be available to the inexperienced user.<br /><br />'''- Bulk Copy / Paste of Paint Objects '''You can now copy an entire paint layer, and choose to either merge or replace upon pasting into another dynamic screen or panel. The bulk copy option is available from the Paint View background menu 'Other Options' option, called 'Copy All Visible'. Having copied all visible objects, you would normally go to another screen, and then you select the Paste Object option. Upon doing this from the background menu, you will be prompted to choose whether to merge or replace the objects.<br />''' Merge Option '''The Merge option will leave all existing paint objects as they are, and paste in all of your copied objects. NB: 'Duplicate' objects are not identified as such in the merge. If you find any objects that are identical you might want to remove one of them.<br />''' Replace Option '''The Replace option will remove all existing paint objects in the screen and paste in all of your copied objects. <br /><br />'''ENHANCEMENTS '''- Label List alphabetic sorting<br /><u>- Label List Listings now continuously Sorted</u><br /><u>- New Attribute, Table and Mapper Stat View Defaults </u><br /><br /><br />'''- Label List alphabetic sorting '''Label list item sorting during editing has been sped up. Previously, large Label lists took a long time to appear.<br /><br />'''- Label List Listings now continuously Sorted '''The list of Label''-''lists is now kept sorted after cross''-''model merges and list renaming. Selecting a Label list and then Cancelling the selection will force a re''-''sort of the current list of lists.<br /><br />'''- New Attribute, Table and Mapper Stat View Defaults '''Attribute and Object Stat, and Graph Stat displays have the following display defaults:<br />''-'' Single Indent Border style, <br />''-'' Black border colour,<br />''-'' Light Gray Background colour,<br />''-'' Bright Blue Text colour.<br /><br />
Table Stat Displays have the following display defaults:<br />''-'' Single Indent Border style, <br />''-'' Light Gray border colour,<br />''-'' White Background colour,<br />''-'' Dark Blue Text colour.<br /><br />'''BUGFIXES '''- Cell Stat Row Zero reference<br /><br />'''- Cell Stat Row Zero reference '''Selecting a Cell stat view in a panel resulted in a Cell Stat with a Row index of zero. Now fixed.<br /><br />'''SV4.07P 3/06/97 '''File Format 172<br /><u>ENHANCEMENTS</u><br /><u>IMPORTANT NOTICE</u><br /><u>NEW FEATURES</u><br /><br />'''NEW FEATURES '''- Export your Routine Calculation list to a text file.<br /><br />'''- Export your Routine Calculation list to a text file. ''' The Routine Editor now contains an 'Options' Button. The option enables you to export the entire Routine to a wide format text file for which you provide the filename. <br /><br />
Each export requires its own filename. The entire calculation is provided, including comments.<br /><br />
The full description is now also given when choosing Display/Show Model Info/Object Details, but without the comments fields.<br /><br />'''ENHANCEMENTS '''- 'Control' statements are fully validated during model startup<br /><br />'''- 'Control' statements are fully validated during model startup ''' If/While/Select/Iterate must now all be matched by their corresponding 'End..." statements. This is checked at the beginning of a model run. In previous releases, this was not enforced, so some models may require slight adjustments to add the End statements. This is easily done by using the 'Show Object' button on the error message to move to the location of the object. A Case statement must not be placed between the "Default" case, and End Select lines.<br /><br />'''IMPORTANT NOTICE '''- Cell Stats are no longer enabled if a table is variable length.<br /><br /><br />'''- Cell Stats are no longer enabled if a table is variable length. ''' The use of cel stats on variable length tables has proved problematic, and the feature has been removed. Cell stats may still be applied to fixed length table cells. Upon loading an older model that contains cell stats on VLT's, SV will notify you, and its default action will be to remove all the cell stats connected to VLT's. If you would prefer to retain your cell stats by converting your VLT into a fixed length table, you will need to do this PRIOR to using this version.<br /><br /><br />'''SV<br />
===4.07o===<br />
31/05/97 (Not released) '''File Format 172<br /><br /><u>BUGFIXES</u><br /><u>ENHANCEMENTS</u><br /><br /><br />'''ENHANCEMENTS '''- Calculation Editing <br /><br /><br />'''- Calculation Editing '''Added "Insert New", which enables a new calculation line to be inserted into an existing set of lines. Reworked list editing (in DOS only) ''-'' focus now remains on the last''-''edited line, enabling further editing by pressing the Enter Key.<br /><br />'''BUGFIXES '''- 'While' calculation not reporting a missing "attribute" reference <br /><u>- Copy / Paste across models - Font Manager Error corrected</u><br /><u>- Default in Case Statement is fixed and can now be used.</u><br /><u>- Unexpected interruption of a run without animation.</u><br /><br /><br />'''- Copy / Paste across models - Font Manager Error corrected '''Copy Across Models was being prevented in many cases due to font management problems. The model merge (dos and win) code has been reworked, and font management under DOS improved.<br /><br />'''- Default in Case Statement is fixed and can now be used. '''''-'' Default in Case Statement is fixed and can now be used.<br /><br /><br />'''- 'While' calculation not reporting a missing "attribute" reference ''' Has now been fixed.<br /><br />'''- Unexpected interruption of a run without animation. '''On long model runs, with lots of searching, SV sometimes detected an extra keyboard presses or mouse click when checking for these, and paused the run, giving the 'Interrupted During search' message. <br /><br />
Now fixed.<br /><br />'''SV4.07N 27/05/97 '''File Format 172<br /><u>BUGFIXES</u><br /><u>ENHANCEMENTS</u><br /><u>KNOWN BUGS</u><br /><u>New Features</u><br /><br /><br />'''New Features '''- Embed a MDL file into a DB file (In Prototype).<br /><u>- New control logic options in Change Object:</u><br /><u>- New Database Admin option (EDIT-&gt;Database) </u><br /><br /><br />'''- New Database Admin option (EDIT-&gt;Database) ''' This feature is for SVWin Only ''-'' DOS users still have to use the external utility F_Dbase.exe.<br /><br />
The formerly external utility for managing the contents of your DB file (images, notes and icons) has now been brought into the SVW interface, with added capabilities. Identification of the type of DB item (BMP Image, Text note, Icon) is provided to assist in identifying items to be exported or removed. You can import/export/delete database items as before, and you can now also merge database items from another database, with the following options:<br />''' ''-'' Review Copy List before proceeding '''Displays a list''-''picker dialog containing the contents of the chosen 'source' database file. This enables you to select those items you wish to merge into your current DB file. If this option is not checked, then the dialog does not appear, and all items from the 'source' DB file will be copied in to your current DB file.<br />''' ''-'' Copy Existing items only '''This option modifies the action of the merge, so that it becomes an 'update' action, rather than a full merge. With this option selected, the only items copied from the 'source' DB file will be those that are already present in your current DB file. Any items not currently in your DB file will not be imported. If this option is selected AND the Review option is also selected, then the List Picker dialog will display only those items that exist in both your current DB file and the 'source' DB file.<br /><br />
Either or both of these options may be selected, yielding four possibilities in use.<br /><br />
NB: Merging from a large DB file can take some time. Allow about 1 minute per MB before panicking.<br /><br /><br />'''- Embed a MDL file into a DB file (In Prototype). ''' Sample Model: RUNMOD.MDL, and _HIROAD.DB<br /><br />
You can now embed a whole MDL file inside a SHARED DB file, using the enhanced features of the new database editor in SVW. This is in prototype only, but it is intended to evolve towards enabling a single DB file to be distributed, rather than an MDL and DB file. The sample file provided (_HIROAD.DB) contains its own MDL file emdedded into it. This model can be extracted using the command line option for launching a model. e.g. C:\SimView\SimViewW _HIROAD NB: _HIROAD is a shared DB file and hence must be located in the same directory as your SimView exe file.<br /><br />
You can therefore launch a Simview model that is contained in a shared library, from within a currently loaded Simview model. The MDL file itself need not be apparent, since SimView will find inside the shared DB file and automatically extract and load it. Once it has been extracted and loaded, you can place it onto the disk by saving it. Refer to the sample model RUNMOD.MDL for an example of this feature in action.<br /><br />''' Accompanying notes: '''You can create a shared DB file by saving a model with a preceding underscore (e.g. _MYMOD.MDL). The _MYMOD.DB becomes a shared Library, when it is located in your SimView directory. Edit the Database for _MyMod.DB, and import a MDL file. This model can later be exported using the database editor, or launched using a command line, as described above. If you want to have icons and images for this model available, then the most efficient thing to do is to merge them into the shared DB file. (Notes are not available at this point in time).<br /><br /><br />'''- New control logic options in Change Object: ''' Sample Models: GARBOT.MDL WHILEY.MDL<br /><br />''' ''-'' IF / END IF '''Provides simple conditional execution of a calculation statement. You can 'nest' these if necessary. Be sure to include an 'End If' Line after the conditionally executed statement. This option is useful for user dialog prompts.<br /><br />''' ''-'' SELECT/CASE/DEFAULT/END SELECT '''Provides complex conditional execution of a range of calculation statements. Can also be 'Nested'. Be sure to include an 'End Select' Line after your series of Case Statements. This option is also useful for delivering a variety of user dialog prompts.<br /><br />
KNOWN BUG: The Default statement is not yet working properly, so for the time being you need to use a specific Case line to define all possible default situations. This will be corrected in the next release.<br /><br />''' ''-'' WHILE/ENDWHILE '''Enables arbitrary looping, basing the loop break''-''out on a condition rather than having a number set in an iteration. It enables a 'reverse' search/iteration capability, if you include a decrement calculation within the loop. This option is useful for user dialog prompts, the results of which can be evaluated within the loop, offering the capability to return the dialog to the user until various conditions are satisfied, before moving along to the next step in the model run. Be sure to include an 'End While' Line to set the end of your Loop.<br /><br /><br />'''ENHANCEMENTS '''- Model and DB file load time has been improved.<br /><br /><br />'''- Model and DB file load time has been improved. '''''-'' Model and DB file load time has been improved.<br /><br />'''KNOWN BUGS '''- Copy / Paste across models - Font Manager Error<br /><br />'''- Copy / Paste across models - Font Manager Error '''Copying a Portal across models may cause a GPF on pasting, multiple pasting or saving after a paste, if the Source model contains an object which uses a font which is not included in the current machine. This may also occur if a default font assignment includes a font not on the current machine. Improvement in validation will correct this in the next release. (Copying across models is one of the most complex areas of the software).<br /><br />
The short term solution is to identify which object or default font assignment in the source model uses a font not resident on the current machine, and change to a resident font before doing the copy/paste procedure.<br /><br /><br />'''BUGFIXES '''- 'Attref Scan Count Inconsistent' message.<br /><u>- Current Directory </u><br /><u>- Shifting buttons during zoom </u><br /><br /><br />'''- 'Attref Scan Count Inconsistent' message. '''In Calculation editing, re''-''selecting a "function" mode such as Condition List or Search would not purge previous condition tests cleanly. This gave the "AttRef scan count inconsistent" message, which went away when SV was restarted.<br /><br />'''- Shifting buttons during zoom '''Buttons sometimes shifted their positions on the screen after the screen was zoomed out. This was due to font scaling issues when zoomed out, and should now be fixed<br /><br />'''- Current Directory '''If you browsed to load a model, and changed to another directory, then decided to cancel, the System decided the current directory was changed, and any bitmap image files being referenced lost their links, and an 'Unable to Load Image' message was posted. This is now corrected.<br /><br />'''SV4.07M (Not released) '''SV4.07M (Not released)<br /><br />'''SV4.07L 20/05/97 '''File Format 171<br /><u>Bug Fixes</u><br /><u>Enhancements</u><br /><u>New Features</u><br /><br />'''New Features '''- New Click Action for a Button or Paint Object.<br /><u>- Time Functions </u><br /><br />'''- Time Functions ''' Newly added as calculations in the Change Object, Time Functions return a value reflecting the nature of a date value, like System Attributes can do. The returned value is applied to an Attribute. Functions available for any given Date (or Value): Time of Day (Seconds) Hour of Day (count from 0 to 23) Hour of Day+1 (count from 1 to 24) Day of Week (Sunday = 1 ''-''&gt; Sat = 7) (NB: If you are using relative time rather than calendar time, your model run always begins on a Sunday). Day of Month (Count 1 ''-'' 28,29,30,31 as reqd) Month of Year (count 1 ''-'' 12) Week of Year (count 1 ''-'' 53) (NB: First and Last week of the year may not be a full 7 days, since weeks are always counted from Sunday to Saturday).<br /><br />'''- New Click Action for a Button or Paint Object. '''The System Command button option can invoke either DOS or Windows commands. This feature enables the user to execute a System command by clicking on a button. The model doesn't have to be running. With this feature, if the modeller can create a WinHelp file to accompany their InterDyne, then they can provide full context''-''sensitive help commands on any screen of the model. The user, upon clicking a "Help" button placed on the screen they are in, gets to see exactly what he/she needs to see in this WinHelp file. In other words, a help file can now be invoked from within SV at the click of a screen button, and can launch the Help file with a direction as to what Topic to open up on (context sensitivity). This is big news for those trying to provide step''-''by''-''step instructions in the InterDynes ''-'' now they can use a WinHelp file to supply the help data ''-'' either as a Help Topic in a Help file, or perhaps as a series of cue cards.<br /><br /><br />'''Enhancements '''- Optimised file copy (in database) for Windows<br /><u>- Optimised SVW file reading (in loader)</u><br /><br /><br />'''- Optimised file copy (in database) for Windows ''' DB files get updated *much* quicker.<br /><br /><br />'''- Optimised SVW file reading (in loader) ''' models and tables will load quicker.<br /><br /><br />'''Bug Fixes '''- Fixed bug: bad table row/column with empty <br /><br /><br />'''- Fixed bug: bad table row/column with empty ''' variable length table caused crash.<br /><br />'''SV<br />
===4.07k===<br />
20/05/97 '''File Format 170<br /><u>- KNOWN BUG:</u><br /><br /><br />'''- KNOWN BUG: '''- Copy/Paste across models was causing problems. <br /><u>If you try to use the status bar navigation feature</u><br /><br />'''If you try to use the status bar navigation feature '''If you try to use the status bar navigation feature while a model is running (i.e. without first pausing the run) then you risk crashing SimView <br />''-'' it will produce a linked list error.<br /><br />'''- Copy/Paste across models was causing problems. ''' The cause of this has now been found and corrected.<br /><br />'''SV<br />
===4.07j===<br />
19/05/97 '''File Format 170<br /><u>- BUGFIX: </u><br /><u>Enhancements</u><br /><br /><br />'''- BUGFIX: '''crash upon loading new model (font manager problem fixed)<br /><u>crash upon stopping model run</u><br /><br />'''crash upon stopping model run '''crash upon stopping model run &lt;when using the background menu to stop while animating&gt;<br /><br /><br />'''crash upon loading new model (font manager problem fixed) '''<br /><br />'''Enhancements '''- Auto-Purging of Redundant Parameters and References<br /><u>- Improved error reporting</u><br /><u>- More Font Categories Added </u><br /><u>- New Table column formatting option: round column value, </u><br /><br /><br />'''- More Font Categories Added '''Fonts can be chosen for graph legend and log viewer overview.<br /><br /><br /><br />'''- Improved error reporting ''' SV now reports the location for attribute referencing errors for attributes referenced in shared routines and dialogs.<br /><br />'''- Auto-Purging of Redundant Parameters and References ''' In support of the new run''-''start attribute reference integrity checking, the following features are now in place. Distribution pattern details now get purged for unused classes at servers / multiservers Setup/teardown delay details get cleared if a server's More Options option is turned off.<br /><br /><br />'''- New Table column formatting option: round column value, ''' Once selected, a rounding value can be selected from the list.<br /><br />
A positive value rounds to decimal places, A negative value rounds to factors of 10.<br /><br />
The underlying value is retained as a full double''-''precision number.<br /><br /><br />'''SV<br />
===4.07i===<br />
changes '''- Version gap closed: <br /><u>Enhancements</u><br /><u>New Features</u><br /><br /><br />'''New Features '''- Zoom in/out added, still under test but its improving. <br /><br />'''- Zoom in/out added, still under test but its improving. ''' Look for it under Window in the Menu Bar. Now works when in paused mode.<br /><br />
A window's scroll position is saved as you move between model screens and panels. Upon returning to a screen, it will be shown at the same scroll position as it was when you left it.<br /><br /><br />'''Enhancements '''- Attribute Reference Checking<br /><u>- Delete portal bug: </u><br /><u>- Item's track loop "stop" bit can now be read or set.</u><br /><u>- Queue/Dispatcher Resource Problem in SVW</u><br /><u>- Row delete validation added/fixed</u><br /><u>- Table sorting: </u><br /><br />'''- Row delete validation added/fixed '''''-'' Row delete validation added/fixed<br /><br /><br />'''- Queue/Dispatcher Resource Problem in SVW '''The Queue/Dispatcher overflow count icon was using resources inefficiently in SVW, resulting in poor runtime performance of models with a large number of queues and or dispatchers. The overflow icon handling has been redesigned to avoid this and your models should work better now under SVW.<br /><br />'''- Item's track loop "stop" bit can now be read or set. '''An Item's "stop" track control variable can be assigned/read If set, it forces train to stop at next loop until the next train through the loop crosses. This has limited workability at present, but further enhancements planned will be able to make use of this capability.<br /><br /><br />'''- Delete portal bug: ''' (Was crashing on trying to save a model after deleting a portal) Now fixed. This occurred when the Portal being deleted was not informing panels owned by panels that it was being deleted. This would cause the model to lose integrity after a portal referenced by a panel owned by another panel was deleted.<br /><br />'''- Table sorting: '''SV now defines a table as the target in a sort calculation and thus enables you to reference a table Column Label as a value to use in the sort. NB Currently this only applies to Ascending Sorts <br />''-'' you will still need to use a Constant, Portal or Item attribute with a negative value to be able to do Descending sorts.<br /><br />'''- Attribute Reference Checking '''Attribute References are checked at the beginning of a model run. Errors in portal attribute references are reported at this time. Prior to this version references were checked during the model run when the reference is actually used. Some models may now complain at run start if they contain references pointing to non''-''existent attributes ''-'' even if the particular reference was never made during previous runs.<br /><br />'''- Version gap closed: '''This and future versions of SV will only read models with file versions &gt; 150, this corresponds to SV 3.9V NB: This means that models saved in the last official release version of 3.8V will no longer load. You will need to use version<br />
===4.07g===<br />
or earlier, back to Version 3.9V to "save''-''forward" your model. If you do not have one of these versions, then InterDynamics will be happy to do the save''-''forward for you.<br /><br />'''SV<br />
===4.07g===<br />
30/04/97 '''File Format 168<br /><u>- Agents can pass items carried over to message Entry</u><br /><u>- Enhancements </u><br /><br /><br />'''- Enhancements <br /><u>- Agents can pass items carried over to message Entry</u><br />
*Agents can pass items carried over to message Entry ''' (and back again).<br /><br />''-'' Sample Model ''-'' DRWHO.mdl<br /><br />
The message item feature has been enhanced to enable an agent to pass across to its message''-''item agent, all items it may be carrying. These items can be delivered to an In Tray by the message''-''item agent, who then 'returns' empty''-''handed back to the original agent, who carries on with no items.<br /><br />
Similarly, a message''-''item agent can collect items, and upon its 'return', pass them across to the original agent who then sets off now carrying these items.<br /><br />
You could use this feature to carry around a batch of items, then pass them over to a central processing location, where they are unloaded into a Tray, processed at this location (item attributes changed etc.), then collected again by the message''-''item agent, and then passed back to the original agent.<br /><br />'''SV<br />
===4.07f===<br />
29/04/97 '''File Format 168<br /><u>New Features</u><br /><br /><br />'''New Features '''- Iteration in Change Object <br /><br />'''- Iteration in Change Object '''<br />''-'' Sample Model ''-'' MRMAGOO.mdl<br /><br />
In the 'Special' group of change object calculations you can now select 'Iterate'. This feature enables you do do iterations inside a change object, where previously you had to build a graphical loop in SV with paths, capacity and switches etc. You can have calculations in your change object prior to an iteration calculation ''-'' for use in initialising the loop variables, for example.<br /><br />
ALL calculations AFTER an iteration are included in the iteration loop. This means you currently cannot place calculations below an iteration calculation that are not intended to be a part of the iteration. In future there will be an 'End Loop' marker, enabling final calculations to be included in the same change object after the iteration is completed.<br /><br />
For an Iteration calculation you can set three variables, any of which can be attributes:<br /><br />
Index Using: This is the attribute whose value is indexed First Value: Starting value for the Index Attribute Last Value : Ending Value for the Index Attribute<br /><br />
The index step is ALWAYS a value of 1.<br /><br />
HINTS: You can adjust the current value of your index attribute during the progress of the iteration, to create a different index step. You can set your index attribute to a value that enables you to break out of your iteration loop when necessary. This enables conditional branching, but you still need to use switch objects to do this (as you do now anyway).<br /><br /><br />'''SV<br />
===4.07e===<br />
26/04/97 '''File Format 166<br /><u>FOR ADVANCED TRAIN NETWORK MODELLING</u><br /><br /><br />'''FOR ADVANCED TRAIN NETWORK MODELLING '''- New track type designation - 'Only Forward Traffic'<br /><br /><br />'''- New track type designation - 'Only Forward Traffic' ''' To further support uni''-''directional traffic models, this option on a track object sets the track object to think of itself as only carrying traffic one way. The 'Forward' direction starts at the portal shown in the 'From' line of the track's menu. When SV looks for a track to use to send a train on its next trip step, it will only consider tracks which 'begin' from this portal. This includes Tracks that are bi''-''directional, (the default setup), and tracks set to 'Only forward traffic' who begin (the 'From' designation) at this Portal.<br />''' Behaviour in Lookaheads: '''An 'Only Forward' track will be ignored when the Track Logic does its lookahead through a portal, checking for ONCOMING traffic, (see previous version release note) and recognises that this track only moves traffic away from the portal. Loops placed in a track object with this option enabled will be used for overtaking if their capacity is &gt; zero. Zero length loops will provide a 'signal point' where a train may wait until the next track section clears. (NB: Section running will still recognise these sections as separate, and require a time for each).<br />''' Special Behaviour: '''If you specify a trip in the opposite direction to this track's forward direction, and include one of its loop objects as a step in your trip, then SV will recognise that you wish to have a train move along this track in the opposite direction ''-'' thus enabling you to 'force' some bi''-''directional traffic flow over this track.<br /><br />
Use this option carefully ''-'' the fact that it is enabled is not indicated in the Track Object's main menu ''-'' you need to check under the 'Options' line in the track's menu. The fact that it is used should be noted in your model. <br /><br />'''SV<br />
===4.07d===<br />
24/04/97 '''File Format 166<br /><u>FOR ADVANCED TRAIN NETWORK MODELLING</u><br /><br /><br />'''FOR ADVANCED TRAIN NETWORK MODELLING '''- New Advanced Track Logic Option in Portal - 'Oncoming Train Check'<br /><br /><br />'''- New Advanced Track Logic Option in Portal - 'Oncoming Train Check' '''This option is enabled by default. SV Track Lookahead Logic normally includes this option. You now have the choice to turn it off.<br /><br />''' Background: '''When SV wants to move a train on to a track, it must first test further down the line, to ensure that no conflicts will arise that prevent the train being able to leave the track object at the other end. It is necessarily conservative. If the train in question is on a trip whose steps extend beyond the portal at the other end of our track, then SV will look at the next track object used in the next trip steps for any oncoming traffic. The assumption here is that if a train is on this next section moving toward the portal at the other end of our current track, then a deadlock is possible. SV will wait until the oncoming train is off its track before moving the current train on to our track. With the introduction of Multiple Portal entries and exits, we can now build 'one''-''way' tracks, which can be threaded through a series of portals. Generally, such tracks need not interact with any other independently''-''threaded tracks. Trains on such tracks are only expected to have their progress blocked due to a lack of capacity immediately ahead of them. Hence we often do not need to test for oncoming traffic. Disabling this feature now prevents this check for oncoming traffic (as if the trip ends at the next portal). Use this option carefully ''-'' it is embedded deeply in the portal's menu structure (like the other advanced options). The fact that it is used is not obvious, and should be noted. <br /><br /><br />'''SV<br />
===4.07c===<br />
21/04/97 '''File Format 166<br /><u>- New Feature:</u><br /><br /><br />'''- New Feature: '''- New 'hidden' Calculation - for parallel port interface hacking<br /><u>- New 'Special' Calculation - round to "n" </u><br /><u>- New System Attribute: "Week Of Year"</u><br /><u>A modeller can edit a zero width table directly</u><br /><br /><br />'''A modeller can edit a zero width table directly '''A modeller can edit a zero width table directly (just click on the cell). no need to expand the width, edit &amp; return to zero. Reselecting units will still reset the column width.<br /><br />'''- New System Attribute: "Week Of Year" '''Usage for RELATIVE time mode: gives # of weeks since start of run (like Week)<br /><br />
for CALENDAR (Absolute) time mode: gives week within current calendar year<br /><br />
NB: As far as the system is concerned, Weeks are always measured from Sunday to Saturday, no matter what day the year starts on. Hence for 1997, (1st of Jan was a Wednesday) week 1 will have 4 days, then Sunday (5th of Jan 1997) will be the beginning of week 2. <br /><br /><br />'''- New 'Special' Calculation - round to "n" ''' if n is a positive value, SV rounds to n decimal places if n is a negative value, SV rounds to n multiples of 10<br /><br />
e.g. n=3 =&gt; 1.34567 becomes 1.346 n=0 =&gt; 1.34567 becomes 1 n=0 =&gt; 1.567 becomes 2<br /><br />
n=-3 =&gt; 1234.56 becomes 1000 n=-3 =&gt; 1678.56 becomes 2000<br /><br />'''- New 'hidden' Calculation - for parallel port interface hacking '''NB: These are provided for hacking purposes only! The options appear only when the "calculation mode" menu is brought up with the control key held down, they are in the "special" sub''-''menu.<br />''-'' 'Port Read and Port Write' ''-'' inp and outp routine calcs Both take a single parameter, being the port number, in decimal. For most PCs the parallel port is at 378h (hex) which translates to 888 in decimal (so the status and control registers are at 889,890) Port Read reads the current port register. It works also during lookahead, so a switch can depend on the port value. It does not unblock though, so if the port value changes, the model wont unblock an item. Port Write is a little strange, it actually writes the value in "target" (on the left of the =) to the given port. CAUTION! Be careful what port you write to... things can go screwy quite easily if you hit the wrong port. This should work under Win95 and DOS Sv. It will fail if you run SVW under WinNT. Only rudimentary testing has been done, so please report back to us immediately if it doesn't work.<br /><br /><br />'''SV<br />
===4.07b===<br />
2 18/04/97 '''File Format 166<br /><u>Bugfixes</u><br /><br /><br />'''Bugfixes '''fixed Insert Row bug<br /><br />'''fixed Insert Row bug '''fixed Insert Row bug<br /><br /><br />'''SV<br />
===4.07b===<br />
18/04/97 '''File Format 166<br /><u>FOR THE INTERDYNE USER:</u><br /><br /><br />'''FOR THE INTERDYNE USER: '''Runtime Table import now enables adding of labels to label lists, or assignation of aliases. This makes importing data files easier during run time.<br /><br />'''SV<br />
===4.07a===<br />
11/04/97 21:16:33 '''File Format 166<br /><u>Enhancements</u><br /><br /><br />'''Enhancements '''reworked field handling so in place edit fields can scroll for<br /><u>reworked sorting of widgets in run time user-built dialogs</u><br /><u>safe lookahead option always on (no longer in menu)</u><br /><br />'''safe lookahead option always on (no longer in menu) ''' This means that some older models may complain when run in this and later versions. Use the new runtime error dialog to flush out these situations. Use capacity between the change object and the following switch. Reason is that SV does not store results of Row or column operations (where many cell values are changed) for use in downstream evaluation. Basically, you need to "commit" these kinds of changes before making decisions with them.<br /><br /><br />'''reworked sorting of widgets in run time user-built dialogs ''' Radio button group assignments were getting mixed up.<br /><br /><br />'''reworked field handling so in place edit fields can scroll for ''' attribute/table cell/table edit<br /><br /><br />'''SV4.07 11/04/97 21:16:33 '''File Format 166<br /><u>- IT'S ALSO PROBABLY TIME TO WRITE UP TUPLES</u><br /><u>- New Features </u><br /><br /><br />'''- New Features '''- New Global Clear Contents Table Option<br /><u>- VARIABLE LENGTH TABLES</u><br /><u>NB: VARIABLE vs FIXED LENGTH TABLE BEHAVIOURS</u><br /><br />'''- VARIABLE LENGTH TABLES '''New options in a table enable the modeller to select a different kind of table behaviour. A Variable Length Table will grow (in Rows only), and shrink during the model run, if you insert or remove rows (and Tuples)<br />''-'' Sample Model ''-'' VLT_01.mdl<br /><u>- New Global Clear Contents Table Option</u><br /><u>NB: VARIABLE vs FIXED LENGTH TABLE BEHAVIOURS</u><br /><br /><br />'''NB: VARIABLE vs FIXED LENGTH TABLE BEHAVIOURS ''' In a Fixed Length (Standard) SV Table, the Bottom Row, or Rows, of the table is removed when an Insert Row or Insert Tuple calculation is performed. In a Variable Length Table, the Bottom Row of the table is not removed when an Insert Row or Insert Tuple calculation is performed, instead the table grows larger by the number of rows added.<br /><br />
In a Fixed Length (Standard) SV Table, the Bottom Row, or rows of the table is replaced when a Delete Row or Extract Tuple calculation is performed. In a Variable Length Table, the Bottom Row of the table is not removed when a Delete Row or Extract Tuple calculation is performed, however the table shrinks in size by the number of rows removed.<br /><br /><br />'''- New Global Clear Contents Table Option '''You can now choose a "Global" Table option to Clear All Contents of your Table at the start of a run. For Variable Length Tables, this means that your table will begin with NO ROWS in it at the start of a run. (SV will let you add a Row at index number 1 to begin the table off, and will not throw range errors at you). <br /><br />'''- IT'S ALSO PROBABLY TIME TO WRITE UP TUPLES '''TUPLE INTRODUCTION:<br /><u>TUPLE CALCULATIONS</u><br /><u>- INSERT / DELETE ROW (Also came with Tuples)</u><br /><br /><br />''' TUPLE INTRODUCTION: '''A table in SV can be thought of as consisting of ROWS of data records. A Tuple is a group of attributes recorded in a table row. In SV, a Tuple comprises one or more attributes from a single table row. You can read, or extract Tuples, using Items, writing values INTO MATCHING Item Attributes. You can also write, or insert Tuples, using Items, writing values FROM MATCHING Item Attributes. SV automatically matches the appropriate Item Attribute and Table column. It matches the Column Label (NB: Not the Column Title) with the Item Attribute name. You do not need to know where a particular attribute appears in a table ''-'' i.e. what column it is in.<br /><u>TUPLE CALCULATIONS</u><br /><br /><br />''' TUPLE CALCULATIONS '''The calculation list in the Change Object now has an extra category of options, called "Tuple". You can choose from the following:<br />'''Get Tuple''' ''-'' Read the Tuple Information on to the Item. (Write Cell Data into MATCHING Item Attributes)<br /><br />'''Set Tuple''' ''-'' Write the Item Attribute Data into the Tuple. (Overwrites exsting MATCHING Tuple Data) (Non''-''matching cells are unchanged).<br /><br />'''Extract''' ''-'' Read the Tuple Information on to the Item, (As in Get), and then delete the Row. (Non''-''matching cells' values will be lost).<br /><br />'''Insert ''' ''-'' Insert a Row into the table and Set the tuple using the MATCHING Item Attributes. (Non''-''matching cells are set to Zero).<br /><br />
E.G. You have a table with three columns, and their Column LABELS are:<br /><br />
Train No. Origin Destination<br /><br />
If you add three corresponding Item Attributes to an Item, then you can use the Tuple Operations to read and write data to this table. (NB: Doing this does not prevent you doing single''-''cell calcs) The advantage of this is that you need only one calculation line to set the values of three attributes. A neat thing with Tuples is that non''-''matching values are ignored by SV. Now, say you create a fourth column in your table, using the column label "Payload". This does not affect your existing calculations. SV simply ignores the existence of the fourth column when "Getting" or "Setting" a Tuple. Note that if you Delete a tuple, then the entire row will disappear, including non''-''matching Cells. Likewise when you Insert a tuple, the table cell for the fourth column will be set to Zero. (NB: NOT currently the table column's clear value).<br /><br />
If you then decide to include the fourth column's data in your existing tuple calculations, then you need only define a new Item Attribute called "Payload". This new attribute collects the fourth column's data. There is no need to edit any of the tuple calculations.<br /><br />
The obvious convenience here is in the initial structuring of a model. You can build up the data profiles carried in an Item conveniently, without incurring too much calculation list editing. You can also construct tables that will receive only selected Item Attributes into a row, in Tuple Operations. Thus you can pass information between tables readily, perhaps filtering the information, and re''-''ordering its sequence for a more convenient for screen display. You can use any available attribute to define the target row for a Tuple Operation. If your Row index value is out of range, you get the usual error messages. When you Insert a Tuple, the Targeted (Indexed) Row is moved DOWN, and the new Row is placed at the Target.<br /><br /><u>TUPLE INTRODUCTION:</u><br /><u>- INSERT / DELETE ROW (Also came with Tuples)</u><br /><br /><br />'''- INSERT / DELETE ROW (Also came with Tuples) '''The calculation list in the Change Object now has an extra options, in the "Table" category. You can choose from the following:<br />'''Insert Row ''' ''-'' Insert one or more Rows into the Table. All cells in the Row will be set to Zero. (NOT currently the table column's clear value).<br /><br />'''Delete Row ''' ''-'' Delete one or more Rows from the Table.<br /><br />
You can use any available attribute to define the target row, and the number of rows to be Inserted or Deleted in the Operation. If your Row index value is out of range, you get the usual error messages. When you Insert a Row, the Targeted (Indexed) Row is moved DOWN by the number of Rows you specify,and the new Row or row set is placed at the Target. When you Delete a Row, the Targeted (Indexed) Row and the rows below it up to the number you specified is removed.<br /><u>TUPLE INTRODUCTION:</u><br /><u>TUPLE CALCULATIONS</u><br /><br /><br />'''SV<br />
===4.06g===<br />
20:41 2/04/97 '''File Format 166<br /><u>- NEW FEATURES</u><br /><br /><br />'''- NEW FEATURES '''- Ability to make a direct reference to an item of <br /><br />'''- Ability to make a direct reference to an item of '''''-'' Ability to make a direct reference to an item of a Label List in the Attribute Selection Dialog. The value taken for the item is its list index value. Benefit is to make your model's logic easier for others to follow. The sample model is a good example of this. (Previously we had to create a bunch of attributes in order to deliver this degree of traceability in the logic of a model). Sample Model ''-'' HighRoad.mdl Where is it? In the Attribute selection dialog, under the Type Button, there is now an additional option, called "Label". When you select this option, you can first of all choose a label list, and then you get to choose the specific label. Note that the new attribute type has the prefix "L:" Note also that in the "button" display for the attribute, the source label list is not mentioned. You can change the name of the Label List when it is referenced in this manner. If you change the text of the label item, this change is reflected in all of the locations where it is referenced. You will get a count of the number of times a specific Label item is referenced in attribute dialogs, when you check the Refs button. You cannot delete a label list that still had references made to it from parts of the model.<br /><br /><br />'''SV<br />
===4.06f===<br />
17:38 25/03/97 '''File Format 166 (covers 406e also)<br /><u>- NEW FEATURE</u><br /><u>ENHANCEMENTS</u><br /><br /><br />'''- NEW FEATURE '''<nowiki>**** IMPORTANT!!</nowiki><br /><u>- Connecting to Track Objects</u><br /><u>- Limitations:</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br />'''- Multiple Portal Entries and Exits '''<br />''-'' Sample Models (These are pretty basic, and require further annotations, which will be done later). Multex01.mdl 406et01.mdl 406ex01.mdl MultiTrk.mdl Fortest.mdl Fortest2.mdl<br /><br />'''''-'' Multiple Portal Entries and Exits Enables the following: '''a) Direct control over incoming flows from specific objects located outside a Subsystem. b) Direct control over outgoing flows to specific objects located outside a Subsystem. c) An entirely new approach to handling item flows through a subsystem ''-'' you need no longer use switches and attributes to direct an item when its route through the subsystem depends upon the object from which it came into the subsystem. d) An entirely new approach to handling item flows out from a subsystem. You need no longer place switches and attributes immediately outside a Portal to direct an item when its route away from a Portal depends upon how it was processed inside the Subsystem. The "Switching" can now be done within the Portal, and the Portal Exit chosen determines the branch taken outside the Portal as the item leaves. e) Enables previously challenging (or impossible) train control logic, and capacity management issues to be handled cleanly. f) A far more congruent representation of incoming, outgoing and crossover schematics within subsystems. Multiple Portal Entries and Exits enable items to enter from the left, and depart to the right, and at the same time enter from the right and depart to the left, and enter from the top and depart to the bottom, and so on. This also makes logical constructs easier to build and follow.<br />'''You can now create as many alternate Portal Entry Objects, and Portal Exit Objects in a Subsystem as you wish. '''Choose the new option "Add Alternate Entry"/"Add Alternate Exit", and a new Entry/Exit is placed on the screen for you to use. Each can be assigned to be the link from, or link to, a specific object, outside the subsystem. When you assign an object to a Portal Entry, its name appears above the Portal Entry/Exit. A Portal Entry not specifically linked to an object (ie. linked to "Any") receives the items that are not directed to a specific Portal Entry. Only one Portal Entry should be set to "Any"... (this will be enforced in a later version). Portal Exits set to "Any" (i.e. no specific target object) will send items out of the subsystem along the first flow (lowest numbered path) or appropriate track leaving the Portal, as in previous SV versions. NB: Other Paths / Tracks are NOT taken, even if the lowest path is blocked.<br /><u><nowiki>**** IMPORTANT!!</nowiki></u><br /><u>- Connecting to Track Objects</u><br /><u>- Limitations:</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br /><br />'''- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE '''Each Portal Entry and Portal Exit can now be named independently. However if you rename the owning Portal (the Object containing this subsystem), then all of the Portal Entires and Exits are automatically renamed according to a special renaming/numbering system. All links to specific named objects are retained if you copy and paste the subsystem. This enables you to perform Ctrl''-''Pastes, without having to re''-''assign the Entries and Exits. If a specified object is not linked, or not present when the portal with multi entries is pasted, then the system will complain about: a) Being unable to form a link, when there is no object of that name present, or b) The absence of a link, (either Path or Track) where the object is present.<br /><br /><u><nowiki>**** IMPORTANT!!</nowiki></u><br /><u>- Connecting to Track Objects</u><br /><u>- Limitations:</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br /><br />'''- Connecting to Track Objects '''You can connect Portal Entries and Exits to Track Objects. To properly connect up a Track object and enable bi''-''directional travel, you need to assign both a Portal Entry, and a Portal Exit to it. This will enable two way flow. If your track is only uni''-''directional, then you need only assign an Entry or Exit, depending on the Track's direction. Note that if you connect a Portal Entry/Exit to a Double Track Object, then you will get traffic coming in from either of the two individual tracks, (Portal Entry) or departing on to either of the two individual tracks (Portal Exit). You may get more flexibility options by using two single tracks, rather than one double track ''-'' this will becme clearer with further testing.<br /><br /><u><nowiki>**** IMPORTANT!!</nowiki></u><br /><u>- Connecting to Track Objects</u><br /><u>- Limitations:</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br /><br />'''- Limitations: '''A link created between a Specific Object and a Specific Portal Entry applies to ALL ITEM CLASSES' with a path from the Object to the Portal. All items, regardless of Class, leaving the Specified Object and entering the Portal, will arrive at the Specified Portal Entry. As usual, you can have different paths for the different classes leaving the specified portal entry. A link created between a Specific Portal Exit and a Specific Object applies to ALL ITEM CLASSES' leading to this Portal Exit. All items, regardless of Class, passing through this Exit, will go to the Specified Object. The software doesn't complain if 2 Portal Entries are assigned to the same object. Only the earliest created (NOT earliest assigned to the object) Portal Entry will accept items. (2 exits can point to the same object ''-'' this makes sense). More validation will soon be added to prevent assigning multiple Portal Entries to the same object (or to &lt;any&gt; for that matter). The software currently provides no warnings if an object connected to the Portal is "left out" of the specifications, and there is no Portal Entry in the subsystem with the assignment of "Any". This object will simply become, and remain blocked. You cannot leave the earliest''-''created Portal Entry with an unconnected flow, even if all other Portal Entries are connected, and set to receive items from any object.<br /><u><nowiki>**** IMPORTANT!!</nowiki></u><br /><u>- Connecting to Track Objects</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br /><br />'''<nowiki>**** IMPORTANT!!</nowiki> '''Ctrl''-''Pasting of Subsystems assigned specific connections in a track network will probably give link warnings since the connections made are so specific to each subsystem, and a great deal of re''-''connection maintenance will be required if you think you will be making changes that you will have to replicate many times if the subsystem flow structure must change for some reason. Either use Ctrl''-''Paste only on single objects inside the subsystem, or build logic into Portals within the Portal linked into the network infrastructure, (if you think that flow editing may be required as the model progresses).<br /><br /><u>- Connecting to Track Objects</u><br /><u>- Limitations:</u><br /><u>- Multiple Portal Entries and Exits</u><br /><u>- NB: AUTOMATIC RENUMBERING ON PORTAL NAME CHANGE</u><br /><br /><br />'''ENHANCEMENTS '''- Beginnings of Password access to the Model. <br /><u>- Enhanced Debugging Info on Runtime errors.</u><br /><br />'''- Enhanced Debugging Info on Runtime errors. ''' When a runtime error occurs, the user is given more information now.<br /><br />
Line 1 gives the Subsystem path, and Name Line 2 gives the Object name Line 3 gives the Item ID number Line 4 gives the Error Message Details<br /><br />
A "'''Show Location'''" button enables you to see the location of the object where the error was detected. Object will flash for 5 seconds. An "'''Inspect Item'''" button enables you to inspect the attributes of the item that was involved in the error, and determine which object it was in when the error was detected.<br /><br /><br />'''- Beginnings of Password access to the Model. ''' (Under Author Info, but not operational yet.)<br /><br />'''SV<br />
===4.06d===<br />
19/03/97 8:45:17 '''File Format 165<br /><u>- New features</u><br /><br /><br />'''- New features '''- Capabilities:<br /><u>- creation of remote message item.</u><br /><u>- Dispatcher Object now has a new mode, called "Send Message".</u><br /><u>- Limitations:</u><br /><br />'''- creation of remote message item. ''' Enables remote management of items in transit.<br /><br /><br />'''- Dispatcher Object now has a new mode, called "Send Message". '''Entry Object now has a new mode, called "Message Entry". When you set the Dispatcher to “Send Message” mode, you need to nominate an Entry from a list of available Message Entries. The Message Entry nominated need not be in the same subsystem. When an item enters this dispatcher, a "message" is sent to the nominated Entry, which then produces a "Message Item". This Message Item is identical to the original item except for its item ID. It contains all of the attributes and values of the original item in the dispatcher. The original item is held by the Dispatcher until the "Message Item" is taken out through an Exit object, whereupon the original item is then free to leave the Dispatcher. When the Message Item passes through the Exit, it passes back to the original item its characteristics, including Attributes, Trip details, Icon, and Class.<br /><u>- Capabilities:</u><br /><u>- creation of remote message item.</u><br /><br /><u>- Limitations:</u><br /><br /><br />'''- Capabilities: ''' Many Dispatchers can call upon a single Message Entry. You can centrally/remotely manage changes to any or all of an an item's: Attributes Icon Trip details Class <br /><br /><u>- Dispatcher Object now has a new mode, called "Send Message".</u><br /><br />'''- Limitations: '''You can not pass information back to the original item if you destroy the Message Item in an Assembler, Splitter. The original Item will be held in the Dispatcher forever if this happens.<br /><br />''-'' NB: You cannot allow a Message Entry to be blocked. (Model complains when this occurs).<br /><br /><u>- Capabilities:</u><br /><u>- creation of remote message item.</u><br /><u>- Dispatcher Object now has a new mode, called "Send Message".</u><br /><br />'''SV<br />
===4.06c===<br />
'''BUGFIXES<br /><u>Enhancements</u><br /><u>New Features</u><br /><br />'''BUGFIXES '''- Bug with log system and big disks (&gt; 2GB free) should be fixed<br /><u>- Track animation on blocked section bug fixed </u><br /><u>- Track loop no longer "puts aside" train which has trip step at the loop</u><br /><u>- Track naming conflicts fixed </u><br /><br />'''- Track animation on blocked section bug fixed ''' (used to get extraneous animation of the blocked item)<br /><br /><br />'''- Track loop no longer "puts aside" train which has trip step at the loop ''' (so zero capacity should be honoured)<br /><br /><br />'''- Bug with log system and big disks (&gt; 2GB free) should be fixed ''' (but &gt; 4G free may still be a problem ''-'' cant test either ;( )<br /><br /><br />'''- Track naming conflicts fixed '''''-'' 2 or more tracks between the same 2 portals would get the same name which would cause problems when loading trip steps (eg: loops) specifically on one of the tracks.<br /><br />'''New Features '''- Paint text/buttons - new option - to hide on interdyne flag.<br /><br /><br />'''- Paint text/buttons - new option - to hide on interdyne flag. '''A button with a click action attached to it can be set so it is seen only by a modeller. It is not then seen in InterDyne view.<br /><br />'''Enhancements '''- Label list selection dialog also enables adding label alias<br /><u>- The table column label now adopts its column title's name when the title is </u><br /><u>- yes/no/cancel dialog - proper button labels for different contexts</u><br /><br /><br />'''- yes/no/cancel dialog - proper button labels for different contexts '''''-'' yes/no/cancel dialog ''-'' proper button labels for different contexts<br /><br />'''- The table column label now adopts its column title's name when the title is '''The table column label now adopts its column title's name when the title is first set, and thereafter (while they are identical) upon any edit of the title, the user is asked whether they wish the label to follow the title.<br /><br /><br />'''- Label list selection dialog also enables adding label alias '''<br />'''SV<br />
===4.06b===<br />
'''<nowiki>## note alot of changes this version, commit with care ###</nowiki> * The windows version of this release is built with full optimisation and co''-''processor inline code (it will still work w/o a coprocessor)<br /><u>BugFixes</u><br /><u>Enhancements</u><br /><br /><br />'''Enhancements '''- File loader number read rewritten <br /><br /><br />'''- File loader number read rewritten '''''-'' got 18% reduction in load time ''-'' please report any load anomalies<br /><br /><br />'''BugFixes '''- button alignment code rewritten <br /><u>- Double tracks display properly at any angle</u><br /><u>- Fixed bug with search </u><br /><u>- table column / overlay </u><br /><br /><br />'''- Fixed bug with search '''''-'' it was causing an unblock during lookahead this caused a model to get "stuck" ''-'' the clock stopped advancing<br /><br /><br />''' - Track bends added '''A section can have one or more bends inserted into it. Bend points appear as + during edit. You can shift''-''click select them to drag them as a group.<br /><br /><br />'''- Double tracks display properly at any angle '''<br /><br />'''- table column / overlay '''column selection in graph views now uses new scrolling list<br /><br /><br />'''- button alignment code rewritten '''(computes base line of buttons) let me know of any overlaps<br /><br /><br />'''SV 4.06 ''' ''-'' Windows editor fixed for auto track build (updates properly after edit)<br />''-'' default track sort mode is now manual<br />''-'' section up/down time dialog has proper z''-''order (wont get hidden)<br />''-'' win icon mover shows paths and names<br />''-'' label list clear button<br />''-'' export section running time can export directly into a label list, starting at a given index<br />''-'' win line drawing fixed (chart horz pixels) ''-'' was not drawing to end of line<br />''-'' bitmap handling/mask generation bugs fixed in icon editor (windows icon/bitmap handling consolidated a lot)<br />''-'' "round/trunc/min/max" implemented for columns ''-'' you can round a complete column, also take min/max of column vs. a scalar<br />''-'' zero width columns ''-'' display as just a box<br />''-'' table edit fill across ''-'' will ignore any row label column encountered ''-'' nb not for index across yet<br />''-'' money presentation ''-'' if a decimal isn't entered it isn't added<br />''-'' windows missing clock problem (now positions at window corner by default)<br />''-'' windows ''-'' smaller clock, supports drag, click on it for menu<br />''' ''-'' windows clipboard ''-'' can copy data into SV tables ''' ''-'' either via FILE''-''&gt;IMPORT from clipboard or from cell "Paste from clipboard" options (these only appear in SVW if there is data in the clipboard)<br />''-'' fixed "close window" bug from SV4.05 (could cause memory tag errors or lock ups when closing) <br /><br /><br />'''SV<br />
===4.05c===<br />
'''<br />''-'' Box clipping problems fixed for object exits<br />''-'' Icon choose directory browsing now works<br />''-'' Icon choose no longer retains last directory used, it starts at the model's library (unless going to icon edit)<br />''-'' Graphics engine now supports "clear colour", so its available in the colour palette again<br />''-'' Half''-''oval dials now drawn/filled<br />''-'' MessageLine handling ''-'' start to give windows their own message line<br />''-'' better screen redraw (reduce flicker) when repainting with a scroll offset<br />''-'' Started log viewer cleanup<br /><br /><br />'''SV<br />
===4.05b===<br />
'''<br />''-'' Fixed winnt startup problems in SVW<br />''-'' Track runtime popup menus avoid no''-''select text<br />''-'' Track section name is now generated from adjacent stations (internal name can still be set but its become redundant)<br />''-'' '"'s are now filtered in SVW<br />''-'' Icon editor Load/Quit now works but it meant locking SVW's main window while the editor is running ''-'' it needs to become a separate app or DLL<br /><br /><br />'''SV<br />
===4.05a===<br />
'''<br />''-'' fixed icon draw problems for icons which were not a multiple of 4 pixels wide<br />''-'' control''-''key shortcuts, mode change, run and save CTRL''-''O, CTRL''-''F, CTRL''-''I, CTRL''-''S, CTRL''-''P<br /><br />''-'' better name filter for exported section name<br />''-'' stat double click handling (table views) fixed ''-'' to edit double click in the name area (at the top)<br />''-'' stat clipping (copy/load) uses proper bounding box ''-'' should not move<br />''-'' portals track their scroll position separately (not saved yet)<br />''-'' "Trips" renamed to "Routes"<br />''-'' wider calc description area in calc dialog<br />''-'' Colour palette handling improved to handle multiple images better in 256 colour modes<br />''-'' make sure images which use less colours are redrawn first (ie. in the background) If possible, try running in 16 bit colour mode, images look nicer<br />''-'' Table write problems (DOS) ''-'' appears file sharing extensions broken for file write mode so they are avoided under DOS<br />''-'' icon browser now has working scrollbars, text descriptions<br />''-'' selecting the same icon for several states no longer loses images<br />''-'' Icon mover cleanup, partially operational now under Win (needs bit more work Icon editor still flaky so be careful<br /><br />'''SV 4.05 '''''-'' Bugfix to writing of DAT files during model run<br /><br />''-'' Introduction of new Tuple handling features and new reference mechanism for tables. This will be further documented soon.<br /><br /><br /><br />'''SV 4.04 '''''-'' Bugfix to loading of models saved in 4.03<br /><br /><br />'''SV 4.03 '''''-'' Paint object clipping for windows with bigger workspace now fixed<br />''-'' Table import crash bug fixed ''-'' redraw happening at bad time<br />''-'' Trip list sort by name button (Win version only) added<br />''-'' Export of section names now exports the names of the bounding stations/loops<br />''-'' Run time and edit table import file access uses sharing to avoid the brown warning dialog and its problems on some systems<br /><br /><br />'''SV 4.02 '''''-'' Fixed table/mapper edit dialog size (so it fits on 640x480 displays)<br />''-'' Continue background popup works in panels<br /><br />''-'' Added: Row operations (only in table view, not in table edit yet)<br /><br />''-'' Cut, Copy, Paste, Insert''-''Paste, Clear, Insert Row &amp; Delete Row<br />''-'' These work during edit and runtime without resizing the actual table<br />''-'' Paste pastes whatever is in the copy paste buffer starting at the first column of the selected row [no keyboard short cuts yet]<br /><br />''-'' Shift click on a row or column selects it, if already selected it gets deselected, if something else is selected the selection is extended to include the row/column <br /><br />''-'' These are available in InterDyne mode as well<br /><br />''-'' Cell select menu now enables selection from current cell to end of table (Select To End)<br /><br />''-'' Selection click: Now support cut (copies data and clears) and Clear (sets cells to their clear value) as well as copy<br /><br />''-'' DOS wait box display fixed<br />''-'' model stop bug with preinit for track stoppages and conveyor co''-''ords fixed<br />''-'' Simulation continue background menu works in interdyne mode<br /><br /><br />'''SV 4.01 ''' Mainly bug fixes<br /><br />''-'' Fixed scrollbar redrawing<br />''-'' Removed flicker on resize<br />''-'' Fixed grow window with scroll bars problems<br />''-'' Fixed glitches in animate during scroll<br />''-'' Maximise window problem fixed<br />''-'' New "Palette" style for palettes &amp; clock<br />''-'' "Clock" title =&gt; "Time"<br />''-'' rewrote scrollbar handling for new Win95 style scrollbars<br />''-'' fixed redraw problems with fields &amp; rtf when paused and scroll<br />''-'' new notes can be added again, fixed note dialog in Win version<br />''-'' Cleaned up icon''-''attribute lookup table dialog<br />''-'' Reimplemented mouse cursor handling<br /><br /><br />'''SV 4.0 '''New Features:<br /><br /><br />'''New Features: '''"Fit to Area" <br /><u>BugFixes:</u><br /><u>Interface Misc:</u><br /><u>Screen Workspace Size</u><br /><u>Tracks</u><br /><br /><br />'''Screen Workspace Size '''Each dynamic and Panel screen can have a different workspace size<br /><br />
Theres an option in the Windows menu (as well as the screen properties popup) to change the size for the current screen and those within its scope (dynamic and / or panel) Resizing existing screens is possible, but shrinking a screen will squash the objects at the bottom, also large objects (eg. tables) may fall outside of the "canvas" area if a large work area is shrunk. Maximising the SV window centres the work area<br /><br /><br />'''"Fit to Area" '''A "Fit to Area" option in the menubar resizes the SV window to fit the canvas, as much as possible<br /><br /><br />'''Interface Misc: '''<br />''-'' Background menu now has a "View" popup for changing mode without going to the menubar (in flow mode do a ctrl''-''click and use the object menu)<br />''-'' Animation now continues when SV is put into background, use left click in window to pause (via menu), right click forces pause. If animating with time box, click in timebox to pause <br /><br />''-'' attref dialog has better item alignment, and has the correct Zorder so it doesn't get hidden under the dialog which created it<br />''-'' wait cursors (for model load etc) are now shown<br />''-'' a new "Inner" about box (no splash screen yet...)<br />''-'' Calculation list editor rewritten to reduce flicker<br />''-'' Many more object popups formatted more nicely (eg. PV objects, file access menu, interaction menus)<br /><br /><br />'''Tracks '''''-'' Tracks Objects (spanning from portal to portal) are named automatically with names derived from the objects at each end. They will be renamed if the portal either end of them is renamed.<br /><br /><br />'''BugFixes: '''<br />''-'' Label update now works for attributes as well<br />''-'' Routine warnings in 39X2 were extraneous and have been fixed<br />''-'' scroller drag now works ''-'' but animation glitches badly if scrollers are dragged while items are actually animating<br />''-'' Changes to mouse button "focus" handling, no longer process the click which activates SV (when its in the background)<br />''-'' Attref scanning did not include mark object attrefs ''-'' could have caused some problems if tables were referenced at mark objects<br />''-'' double click on clock now starts model in SV win (and fixes DOS preinit bugs I hope)<br /><br /><br />'''SV39X2 Changes '''Misc<br /><u>Routines - Calculation List Enhancements</u><br /><br /><br />'''Routines - Calculation List Enhancements '''New Row/Column Calculations<br /><br /><br />'''New Row/Column Calculations '''<br />''-'' Compute a value from a row or column of a table<br /><br />
Min,Max ''-'' give index of cell with min/max value<br /><br />
Sum,Sum of Squares, Average, StdDev ''-'' sllow summing etc. of row or column<br /><br />''-'' Can duplicate a calculation in a routine during edit<br /><br />''-'' Problems in routine instances fixed but still not much testing...<br /><br /><br />'''Misc '''''-'' Attribute stats no longer clip ''-''ve values to 0<br />''-'' Track crew usage would cause crash at end of run ''-'' fixed<br />''-'' Colour palette now displays the colours :)<br />''-'' Keys work for graph viewer<br />''-'' Path numbers now hide properly, using new drawing technique<br />''-'' Portal animation for entering item handles track/non track properly (animation to edge or centre)<br />''-'' Keys work for graph "browse"<br />''-'' Menubar "Run Start Time" was broken in SV39X, now fixed<br />''-'' Scale handling for graphs handles big fonts and clipping more nicely<br />''-'' Many more Object menus formatting changes for Win, facility state/stoppage etc. Please report problems in either version <br /><br /><br />'''SV39X '''- Label import has more validation<br /><u>- Table import enhancement</u><br /><u>Clipboard (for the Win version)</u><br /><u>Item Edit Box</u><br /><u>Label Handling</u><br /><u>Menu bar</u><br /><u>Misc</u><br /><u>Routines</u><br /><u>RTF paint object (for the Win version)</u><br /><u>Tables</u><br /><u>Track Productivity Enhancements</u><br /><br /><br />'''Routines ''' A "routine" is the new name for "Calculation List". Instead of being stored in a change object, a change object can reference a routine associated with a portal in its parent hierarchy. This means that modification of the routine will immediately be reflected in all change objects using it (assisting in maintenance).<br /><br />
To come: Routine "calling", parameter passing and *ITERATION*<br /><br /><br />'''Clipboard (for the Win version) ''' Copied table data is put into the Windows clipboard when another application is brought to the foreground.<br /><br /><br />'''Label Handling ''' ''-'' The "new index" algorithm now uses the index of the first "gap" in the index range<br />''-'' The sort can reindex from 0 or 1 ''-'' it makes a guess at the right option which the user can override<br /><br />'''<nowiki>** Label Alias</nowiki> '''Several names can be given to one label, to enable matching of varying forms of the same string during label import<br /><br />'''<nowiki>** Target Update</nowiki> '''When the label list is modified (edited, sorted, imported), all targets using the label list (eg: table columns) are updated to reflect the change in the index values.<br /><br />'''- Merging supported '''Changing the index of a label to the index of another label enables a merge of the two labels<br /><br />'''- Table import enhancement '''When importing labels via a table import, an unknown label can be handled in 3 ways<br />''-'' add it as a new label<br />''-'' substitute an existing label for it (once only)<br />''-'' add it as an alias of an existing label<br /><br /><br />'''- Label import has more validation ''' ''-'' checks against the same label index being used twice<br />''-'' Label import now can read just a list of names (on separate lines) which will then get indexed automatically (from 1)<br /><br />'''Track Productivity Enhancements '''You can export a list of section names from the section running time dialog. This can be imported into a label list (using the "Names Only" option since no index values are written The change object "Trip assignment table" can be exported ''-'' the names and index values are written ''-'' which can be imported into a label list NB: It is intended that these linkages will become internal and automatic<br /><br /><br />'''Tables '''As well as fill down / fill across, index down / index across are available in the table editor (enabling increments to be applied down a column, for example) A Table "Select All/Copy" option in the "Table" button menu facilitates quick copy of the table Keys now work (in the Windows version) for the selected table<br /><br /><br />'''RTF paint object (for the Win version) '''Like a note but enables text with formatting (Rich Text) to be used. Text can be pasted to/from Word, Wordpad etc. using the edit control keys. NB: RTF notes appear as empty boxes under DOS<br /><br /><br />'''Menu bar '''The menu bar has been rearranged, particularly the "Edit" menu. More changes to come (including a button bar)<br /><br /><br />'''Item Edit Box '''The item edit box (top right corner) now lives in the status bar (at the bottom right of the screen) in both versions. This now clears the way for growing the workspace in later versions...<br /><br /><br />'''Misc '''"Safe Lookahead" option (on for new models) strictly checks that change objects before switches dont make changes that conflict with the lookahead system (eg: clear table or invoke a user dialog). This helps clears up strange behaviour in models which have a switch depending on a table cell value preceeded by a table''-''change object. Turn it on for older models and watch for warnings during its run<br /><br />''-'' Many dialogs improved/fixed in the Win version (eg: switch multi''-''condition)<br />''-'' Comments on calculations and attributes can be added<br />''-'' The Portal Entry/Exit borders are properly hidden when the Portal "Keep PEntry/PExit Hidden" option is on<br />''-'' Windows now confirms save on quit of the program<br />''-'' Choose Icon palette now enables selections, more robust <br />''-'' display option to hold clock on end of run<br />''-'' The dial "Y" scale can have a time''-''formatted axis<br />''-'' The "Journal" options are removed for now.<br /><br /><br /><br />'''<br /><br />
'''<br />
=== 3.9 ===<br />
<br />
*Basic instructions on Scenarios:<br /><br />
Things to know about the current scenario implementation.. 1. The need to "initialise" the model now replaces the starting of the model, in preparation for editing by the InterDyne user (i.e. via the Edit Button). But there is effectively no difference between then and now. <br /><br />
2. You can only load or save a scenario while the model is in its pre-init (paused) state. Thus it is recommended that you save your scenario before beginning the actual run. NB: This may preclude the saving of output data into a scenario file.<br /><br />
3. Before point 2 will work, you need to choose the "pause after pre-init" option from the Display/Display Options list-picker dialog.<br /><br />
4. You also need to have the model automatically run upon being loaded. Again this is selected from the Display/Display Options list-picker dialog.<br /><br />
5. The model can automatically go into the pre-init paused state, but can do so only when it is loaded as a command line argument for Simview. e.g. Drag the MDL file on to the SimView.exe [or icon] in Explorer/File Manager. Alternatively, make a program item for the model file itself. If the model is loaded from the menu bar, this option does not activate.<br /><br />
6. During a run, and after a run is stopped, you will not be able to save your scenario - you will have to re-initialise the model in order to do so. NB: If output tables in your scenario are set to be cleared upon initialisation, their data will be lost. This may limit the ability of an existing model output table to work well in a scenario, and may require some rework of tables before output data can be preserved upon reinitialisation. A better solution will come if the ability to save a scenario at any stage is addressed.<br /><br /><br />
SELECTING THE INFORMATION TO INCLUDE IN THE SCENARIO <br /><br />
Choose those tables you wish to have included into the scenario. Do the same for Portal and Model Attributes.<br /><br />
Choose an order for the information before selecting anything, because there is currently no means of re-ordering the scenario, other than removing an item and then re-selecting it to become the last on the list.<br /><br />
For each table (or attribute) : a) Open it for editing, b) Click on the table/attribute edit dialog's Options button, c) Select the option called "Include in Scenario".<br /><br />
This item will now be included into the scenario file.<br /><br /><br />
SAVING YOUR FIRST SCENARIO FILE<br /><br />
To save a scenario file, first initialise the model, by starting a run. Then when the model has initialised, the "Save Scenario" and "Load Scenario" options will now be available from the File menu. Select the Save Scenario option, enter a file name, and a scenario file will be written to the disk. This file has a .SCN extension. It is a text file, and can be read by a word processor or spreadsheet.<br /><br />
Once created, a Scenario file may be reloaded in the per-init/paused state.<br /><br />
If you alter your model scenario, say by including another table or attribute, and you then try to reload an earlier scenario file, SV will warn you that the format is different, and then load what it can from the file.<br /><br /><br />
POSSIBLE OR KNOWN BUGS:<br /><br />
Do not continue a run after the Pre-init pause by double-clicking the clock... The screen will go blank, and not recover, necessitating a 3 finger salute.<br /><br />
Do not stop a run that is in the pre-init pause state, as the system will also hang, requiring abandonment of the session.<br /><br />
See further notes on scenarios below.<br /><br />
New Features since SV39V5<br />
*Scenarios (still incomplete)<br /><br />
Tables and portal attributes can tagged as "included in scenario" then they collectively can be saved/loaded in the model pre-init pause state<br /><br />
Scenario files contain subsystem names so files are interchangeable as long as the portal hierarchy leading to the object saved is the same<br />
*Preinit state (option in display options)<br /><br />
SV "pauses" after initialisation of attributes and tables is complete (objects haven't been primed/initialised yet)<br /><br />
Scenarios can be loaded/saved in this state<br />
*Graph views now support minor axis grids<br />
*major grid lines are now thicker so minor grid lines are obvious<br />
*y axis grid spacing can be specified<br />
*Table Graph Views handle mouse clicks:<br />
*drag in graph to view points<br />
*let go near point to show point co-ord and overlay number<br />
*use left/right to select prev/next point, up/down to select overlay<br />
*can drag within graph to select another point<br />
*click outside of graph, &lt;ESC&gt; or press right button to leave mode<br />
*"Clear" operation applies clear value to table/row/col/cell/attribute setting it to its "Clear" value as defined in edit. For item attributes they are set to the value '0'<br /><br />
Misc bug fixes:<br />
*attribute link copy: attribute stats rebind to new attributes on copy<br />
*text alignment/grid snap in paint problem fixed<br />
*cell stats can now be added to panels<br />
*click action Save As can no longer be invoked while paused.<br />
*added Log Start Time click action<br />
*click action Run Start Time can no longer be invoked while paused.<br />
*after modifying table cell via edit unblocks work properly<br />
*menubar Model Attributes-&gt;Add adds to current window, not top screen<br />
*warning given if Show Dialog attepted when not running<br />
*Facility stoppage dist timer handling fixed (it was drawing a random number on each test of the stoppage parameter rather than drawing one value and waiting for it to be matched)<br /><br />
SV39W Release notes<br /><br />
New Features since SV39V5<br />
*Scenarios (still incomplete)<br /><br />
Tables and portal attributes can tagged as "included in scenario" then they collectively can be saved/loaded in the model pre-init pause state<br /><br />
Scenario files contain subsystem names so files are interchangeable as long as the portal hierarchy leading to the object saved is the same<br />
*Preinit state (option in display options)<br /><br />
SV "pauses" after initialisation of attributes and tables is complete (objects haven't been primed/initialised yet)<br /><br />
Scenarios can be loaded/saved in this state<br />
*Graph views now support minor axis grids<br />
*major grid lines are now thicker so minor grid lines are obvious<br />
*y axis grid spacing can be specified<br />
*Table Graph Views handle mouse clicks:<br />
*drag in graph to view points<br />
*let go near point to show point co-ord and overlay number<br />
*use left/right to select prev/next point, up/down to select overlay<br />
*can drag within graph to select another point<br />
*click outside of graph, &lt;ESC&gt; or press right button to leave mode<br />
*"Clear" operation applies clear value to table/row/col/cell/attribute setting it to its "Clear" value as defined in edit. For item attributes they are set to the value '0'<br /><br />
Misc bug fixes:<br />
*attribute link copy: attribute stats rebind to new attributes on copy<br />
*text alignment/grid snap in paint problem fixed<br />
*cell stats can now be added to panels<br />
*click action Save As can no longer be invoked while paused.<br />
*added Log Start Time click action<br />
*click action Run Start Time can no longer be invoked while paused.<br />
*after modifying table cell via edit unblocks work properly<br />
*menubar Model Attributes-&gt;Add adds to current window, not top screen<br />
*warning given if Show Dialog attepted when not running<br />
*Facility stoppage dist timer handling fixed (it was drawing a random number on each test of the stoppage parameter rather than drawing one value and waiting for it to be matched)<br /><br />
SV39V5 Changes<br /><br />
Fixed user "Dialog" bug when using item attributes<br /><br />
SV39V4 Changes<br /><br />
Table Importing during model run --------------------------------<br /><br />
Importing a table during model run (via the Change Object-&gt;File option) has been enhanced to support the following:<br />
*Tables can be imported from formatted data. The format of the column being imported into must match the format of the data from the column being read into it. Calendar times and labels are handled, labels must be already defined (new ones can not be automatically added unlike in edit mode).<br />
*As well as importing into "Table", a "Row", "Column" or "Block" target can be used as the destination into which data is read. "Block" enables definition of the top left corner of a rectangular table block into which data will be read, whereas "Table" starts at Row 1 Column 1.<br />
*An offset row/column into the source table (the file) can be specified, defining the top-left corner of a rectangular table block from which data is read.<br />
*A limit on the number of rows and columns to be read can be specified, without a limit SV attempts to fill to the last row/column (if the target is table or block), to the last row (if the target is a column) or to the last column (if the target is a row).<br />
*The source table file can have more columns (and rows) than the region which will be read given the offset, limit and target as described above.<br /><br />
The last 4 points mean that an arbitrary sized rectangular block can be read from a large table file.<br /><br />
SV39V2 Changes (from SV39T6)<br /><br />
1. Tables<br />
*The label name import filter can now handle "'s appearing in label names when deriving label lists from a table<br />
*Only the first 30 characters of a label name are retained<br />
*The "File" sub menu in the Label List editor has a "Sort" option which sorts the labels, removes duplicates and numbers them from 1<br /><br />
*** THIS WILL SCRAMBLE ANY TABLE COLUMNS OR ATTRIBUTES USING THAT LABEL LIST<br />
*Its now possible to have the row label column (ie. Column 0) derived from dynamic data in the table.<br /><br />
In the table editor, the [TABLE] button menu has a new option "Row Label Source" which enables a column containing the row label names to be nominated.<br /><br />
Its a good idea to make this column the last column in the table<br />
*The table "Keep Simulation Values" option is on by default<br />
*The Table View option "In Place Edit" is now implemented. With it off, tables can be browsed/scrolled but the values can not be changed<br /><br />
2. Performance View =&gt; Panels<br /><br />
Performance View screens are now called PANELS. Some key enhancements have been made to enable them to be grouped, managed and copied much more effectively:<br />
*Every panel has an owner, which may be another panel or a dynamic model screen or subsystem. Ownership loops are not allowed. Thus every panel has a dynamic screen at the top of its "ancestry" tree.<br />
*A given dynamic screen or panel can own many panels<br />
*Newly added panels get the current screen as the default owner,<br />
*The owner of a panel can easily be changed. Any panels owned by a panel stay with that panel when its owner is changed.<br />
*Copying a dynamic screen (ie. copying the portal for a subsystem) will completely copy all owned panels as well, for all subsystems in the copy.<br />
*Copied screen-change buttons and table views will be updated to "point" to the copied version of the object they were associated with - if it was also involved in the copy. Otherwise the copies remain associated with the original object.<br /><br />
The panel arrangement is flexible, enabling panels to be collected together in different ways:<br /><br />
Example 1: Stringing panels in series<br /><br />
[Dynamic]---&gt;[Panel 1]---&gt;[Panel 2]---&gt;[Panel 3]<br /><br />
Here the subsystem "Dynamic" owns Panel 1, which in turn owns Panel 2 etc. This would be a good structure to use where the user works in a way which steps along the panels.<br /><br />
Example 2: A group of panels<br /><br />
[Dynamic]---&gt;[Panel 1] ---&gt;[Panel 2] ---&gt;[Panel 3]--&gt;[Panel 4]<br /><br />
Here, panels 1,2,3 are owned by the subsystem Dynamic Panel 3 also owns Panel 4 This would be a good structure where the panels are related but not accessed in any particular order<br /><br />
NOTE: These structures are intended to help the modeller organise their panels into logical collections. In example 1, when you shift "Panel 1" it will "carry" with it its child panels, which can minimise work when reusing panel structures.<br /><br />
The structure used does not currently alter what each panel is able to access.<br /><br />
A later version will have button types for "Next Panel" and "Previous Panel" which will follow the owner/child panel links without requiring specific "pointing" to a given panel.<br /><br />
3. "Screen List" in status bar and Edit Background Menu changes<br /><br />
The "Performance View" section of the subsystem navigation list now lists Panels in a structured way, indented to indicate ownership much like dynamic screens are. The first panel for a given panel "tree", owned by a dynamic screen, is annotated with the dynamic screen's name.<br /><br />
The editing background menu (object mode) has been consolidated to support working with panels more effectively. For any screen, the background menu allows:<br />
*adding a new panel (which will be owned by the current screen)<br />
*navigating directly if there is a single owned panel<br />
*navigating (via list selection) if more than one panel is owned<br />
*navigating to the owner panel (or dynamic screen) if the current view is a panel<br />
*navigating to the owning portal screen if the current view is a dynamic screen<br /><br />
In addition to listing attribute,table and mapper counts, the portal object menu now also shows the number of panels owned by the portal's subsystem.<br /><br />
Misc Fixes / Changes:<br />
*Dialogs can now reference attributes from an arbitrary dynamic screen - ie. they now can be used on a "Panel" screen.<br />
*"Table Stats" are gradually being renamed "Table Views"<br />
*new "Run At Start" model option - will run the model when SV is started with the model on the command line<br />
*4 conditions are now supported in the multi condition list<br />
*Extra button actions added (Log View, Save As)<br />
*New Key lock system requires key file to run SV, eanbles "Edit" and "Run" access levels<br />
*Fixed crash bug when an item re-visited a change object in the same epoch (ie. in a zero capacity loop) - this is now trapped<br />
*More specialised options in the portal object menu have been moved to a sub-menu<br /><br />
*** Important notes for SV39T6: ***<br /><br />
This version has seen more internal rewrite and consolidation, so please be careful migrating to it. The file format is different to T5.<br /><br />
In particular note the following:<br />
*In user mode (hidden menus)<br />
*you can only interact with tables and attribute stats (in place edit) when system is paused (not stopped).<br />
*Change to graphs:<br /><br />
A graph can have its scales fixed to constant points.<br /><br />
In the graph "Stat" menu, Parameters enables min/max x and y scale ranges to be fixed - these will only be retained if the options-&gt;Auto X Scale/Auto Y Scale are turned off first.<br /><br />
All graphs in older models will have the auto x scale/auto y scale option turned on, to avoid update problems with older models. This slows graph redraw down, so use a fixed scale if possible for x and/or y<br /><br />
Using a fixed scale for an axis which is in absolute time will probably not work yet. Let me know.<br />
*Font management<br /><br />
Once fonts were edited under windows, DOS runs of the model became ugly.<br /><br />
This has been addressed by tracking DOS and Windows font information separately. Initially, the DOS Text (Button) font will be guessed, which is of consequence when a Windows-saved version of a model is loaded under DOS, particularly if many font changes were made to the default font classes whilst under Windows. <br /><br />
Your buttons may look ugly under DOS if you did alot to the model under Windows, but fixing them should only be a one time operation. If its real bad, let me know and I'll code a once off special case for you, so you can migrate your model over.<br />
*Stat Copy handling<br /><br />
It is possible to create a cell, graph or table view in a dynamic screen well below the the screen its table is defined in. This would cause a crash when copying the portal containing the stat, this has been fixed by rewriting the way stat copy is handled. The code change was not trivial.<br /><br /><br />
*** Important Reminder ***<br /><br />
Please report all System Errors Code messages and "Program Error Intercepted" warnings you encounter, they are abnormal and should never arise. In the latter, the only numbers I need to know are EIP/ESP:<br /><br /><br /><br />
[3.9T2]<br /><br />
SV39T3<br />
*graph X scale grid can be shown, hidden, x scale grid interval can be set (but its not saved yet)<br />
*label selection list sorted (when selecting label, not editing list)<br />
*double click handling consolidated to some degree (for win) Should avoid phantom double clicks problem<br />
*clock drawn properly in DOS if win font changed<br />
*Implemented dialog as a change object calc (target set to button code on exit, 1 = OK, 0 means a cancel occured and other attributes were not changed)<br />
*default object name font not bold under Win<br />
*attribute clear at start option<br />
*as for table, can set clear value of attribute<br />
*In place edit for attribute stats (during simu pause only) Option on attribute stat<br />
*loop delay implementation<br />
*set on screen by screen basis but is attref based so individual item can have different delays<br />
*delay is applied for entering and leaving items which are forced to wait at the loop<br />
*during the delay the item occupies occupancy on both the track and the loop<br />
*delay is not applied for entering item which has a trip step at the loop (is anyone using this)<br />
*Enhanced paused-click on loop shows items occupying it, a 'D' before the name indicates item is under loop delay (and it will appear on the pause-click menu for the track from which it is entering/on which it is leaving<br /><br />
Bug fixes<br />
*database dialog fixed for icon save<br />
*not scanning attribute properly for dialog items - gave Scan Count error<br />
*stat box width retained on copy/paste<br />
*BMP in DB should now work<br /><br />
[3.9S]<br /><br />
SV39S Release 9<br /><br />
This includes both a Win32 and DOS build<br /><br />
Recent Dial enhancements<br />
*separate x and y axis<br />
*scroll mode (scrolls display)<br />
*absolute times display in x axis when in scroll mode and absolute time in use<br />
*min update interval can be set<br />
*join points option implemented properly on update (needs to be on to get solid line)<br /><br />
Area graph mode for tables<br />
*under dos may cause GPF (get me a model which does this!)<br /><br />
Attribute (value, table cell) Stat width and justification can be changed<br /><br />
Clear at start/retain simul values options are set on a column by column basis<br /><br />
Added "User Can Sort" table option which, if set, allows the user to sort the table when the model is paused, by clicking in its title area<br /><br />
Row insert/delete during paused mode (nb: doesn't resize table, just shifts data)<br /><br />
FEC debug window (display menu) shows pending events during simulation paused mode<br /><br />
Sped up table &amp; attribute name lookup (binary list used)<br /><br />
Sped up switch unblocking code<br />
*a reference to a table cell (eg: at a switch) where the table column is "Constant During Run" will only get unblocked when that particular table column is altered<br /><br />
Hence:<br />
*Use a constant attribute for the column index (at the switch)<br />
*Store multiple switch dependencies in different columns, not down one column<br /><br />
to benefit from this speedup<br /><br />
Binary search option added to the search dialog<br />
*this can speed up searches in sorted tables significantly, but requires that the data is sorted, each search element is for equality and that multiple search elements are combined using AND.<br /><br />
Entry can be triggered from a signal (from assembler pull or timetable)<br />
*supports trip assign &amp; latency<br /><br />
Optimisation option to change object implemented - can specify that a "Routine" (notice the new naming) is only implemented when item moves, not during search. This speeds up lookahead but means you cant have a switch downstream to the change object without intervening capacity.<br /><br />
Enhanced database management<br />
*BMP/PCX images placed in the model's DB file will be located and loaded (the ability to do this is not integrated into SV yet, you need F_DBASE)<br /><br />
Enhanced dialogs - can reference any attribute in a dialog anywhere. =&gt; warning: be disciplined using this!<br /><br />
Added file name track option in model info<br />
*displays the name of all data files accessed via change objects and images (via paint objects) used in the model<br /><br />
[3.9R]<br /><br />
SV39R, R1, R2<br />
*fixed bug when simulation time &lt; clock reported (at best would print bad second time, at worst would crash when error detected)<br />
*current linear search speed up (no re-evaluating second condition as iterating)<br />
*sped up processing of multi-conditional AND (second/third expressions not computed if the combining operation is AND and the previous result is false.<br />
*Table block insert/delete operations implemented<br />
*Fixes to table/mapper display bugs with x scale in absolute time mode<br />
*Many font changes due to Windows work<br /><br />
(Eg. table/stat titles)<br /><br />
[3.9Q]<br /><br />
SV39Q3 changes:<br />
*EXE return result code handling:<br /><br />
0 : no system error (doesn't mean model didn't stop with error)<br /><br />
1 : error processing command line, load file bad, script name bad<br /><br />
2 : error processing script<br /><br />
3 : user hit escape during run (for demo/animate mode)<br />
*Fixed abs time '-' handling bug (conversion from edit to run)<br />
*Table write row<br /><br />
SV39Q changes:<br /><br />
-=-=-=-=-=- | WARNING | Check results and data integrity carefully with this version, =-=-=-=-=-= The changes to the time handling were not trivial.<br /><br />
In particular, look out for absolute times which differ between run and stopped state. I've covered Tables and Attributes, anywhere else where an Abs Time is entered which I've missed???<br /><br />
Also, re-verify edit time sorting is OK<br /><br />
Needless to say, this version uses a NEW FILE FORMAT [139] so retain previous model versions.<br />
*Absolute Time handling enhancements<br />
*Once system is in absolute time mode, the Run Absolute Time can be set separately to the Edit Absolute Time reference.<br />
*the Edit Absolute Time should be left at 1-jan-1970 for new models, there is no need to change it now. Eventually, I might hide it altogether.<br />
*Table columns and attributes in absolute time mode will retain their integrity if the Run Absolute Time is changed. This is because they are internally stored as offsets from the Edit Absolute Time and automatically translated to the Run Absolute Time reference when the model is run. Retain Values does the reverse translation (if on).<br />
*Do not export Absolute Time Attributes/Table Columns as seconds, otherwise you create a dependency on the current edit/run absolute time.<br /><br />
Instead, always Export/Import as a formatted time. Then, upon import, they will be properly translated to the current time frame. This is particularly important for exports/imports during a run, since the run time frame is now free to change.<br />
*Dire Warnings are given when the Edit Absolute Time reference is changed.<br />
*Work still needed to use abs time notation in schedules, entry arrivals etc.<br />
*Animate Start / Run Stop time are now specified in Absolute Time, with '-' as the default/0 case.<br /><br />
[NOTE: word Absolute to be changed to Calendar soon]<br />
*Reworked Table Sort (edit sort) so it can be applied during a run<br />
*does not sort labels when model is paused<br />
*edit-sort (no run) has been modified to use much less memory<br />
*test and report and strange error messages please<br />
*Portal has new option - "Retain State" which causes portal to remember state it was in when model is stopped. This is so model can be inspected after a run. State is *NOT* retained when the model is saved/reloaded.<br />
*The "states" option in portals no longer needs the ctrl-click<br /><br />
Renaming states now works!<br /><br />
(?surprised no one pointed this out before)<br /><br />
[3.9P]<br /><br />
SV39P changes:<br />
*ctrl-paste of object now enables a name to be specified. Any object within the sub-hierarchy matching the name entered and type of the copied object is replaced. '*' and '?' can be used as wildcards.<br />
*Added attribute option "Retained On Paste/Replace" attribute option. Attributes tagged with this option will be retained for the top level subsystem of a replaced portal, during a ctrl-paste. The target attribute will have the "Retained On Paste/Replace" option enabled, if it was not already. If the target portal does not contain an attribute that the original portal had, it gets ignored.<br />
*event timer rewritten - supports events switching scrn to PV screen<br />
*Exit message handling re-implemented - allows combination of msgs, screen changes, pauses etc. events.<br />
*Start time specification for run appears in abs time mode if abs time mode is selected.<br />
*A DOS command can be executed as part of a file access operation. For file reads, the command is executed before the file is read, for writes it is performed after the file is written. This enables sub-models to be invoked.<br />
*"Clear value" for table columns can now be specified column by column. For absolute time columns, a abs time can be used or '-' which means the "infinite" time... a very large number which will be put last in a sort. "Zero Contents At Start" changed to "Clear Contents At Start"<br /><br />
NB: This version has been built with full optimisation<br /><br />
[3.9o]<br /><br />
CTRL-Paste object merge (works for portals too) enabling merge/replace of objects, including entire sub-systems<br /><br />
Bug fixes for track-pv links and trip deletion<br /><br />
DIALOGs added as a button action, enabling attributes to be input by the user<br /><br /><br /><br />
[[Category:Release Note]]</div>Rickhttps://wiki.planimate.com/index.php?title=ReleaseNotes:Feature_Review_December_2011&diff=4221ReleaseNotes:Feature Review December 20112021-07-05T14:26:41Z<p>Rick: </p>
<hr />
<div>This review covers Planimate® versions 5.30g to 5.33c. <br />
<br />
2011 was a spectacular year for Planimate with major leaps in capability on multiple fronts. This page summarises the highlights. For details and fixes, refer to the release notes. <br />
<br />
In addition to the 5.3X releases (available to licensed users), version 5.25z5 became the baseline install, with key fixes backported to it. This version is made [[Download|freely available]] to educational institutions. <br />
<br />
__TOC__ <br />
<br />
== Tiled Map Capability ==<br />
<br />
A new [[Map (Paint Object)|Map Paint Object]] enables models that run over a pannable and zoomable map. The object integrates with model editing as well as runtime, enabling models to be built over an extended geographical region which could otherwise not possibly fit on the screen at a workable level of zoom. Tables containing object co-ordinates (latitude and longitude) drive the positioning of portals and bend points, with the editor being aware of the tables and assisting in generating/maintaing them. <br />
<br />
Networks with tracks, spatial links and pipes are supported. <br />
<br />
During run the map can be smoothly zoomed and panned, even in simulate mode with objects and items (moving along links) updating smoothly. Scroll wheel events and drags are available to the modeller and a baseline model demonstrates how to update the display as the map is zoomed and panned. <br />
<br />
The map itself uses graphical "tiles" which contain map images, with zoom levels ranging from the entire world to a resolution of metres. Two map tile formats are supported, as used in OpenStreetMaps and Google Maps. <br />
<br />
InterDynamics now has experience in building "[[Tile Server|tile servers]]" to create customised map image tile sets which incorporate CAD imagery provided by clients. This augments the maps with current and proposed infrastructure specific (and private)&nbsp;to a client. <br />
<br />
== Graphics Enhancements ==<br />
<br />
=== Transparency and Alpha Blending ===<br />
<br />
The graphics system now supports PNG images with "Alpha Transparency", that is partial and varying transparency in images. <br />
<br />
Partially transparent objects can animate over other partially transparent objects which are also animating, enabling impressive visual effects. Transparency can be changed on the fly. <br />
<br />
=== Animated GIFs ===<br />
<br />
Planimate now supports animated GIFs. The modeller can control the animation frame directly or Planimate can vary it based on position or time. <br />
<br />
=== Animation Layer ===<br />
<br />
Paint objects and portals can be animated as smoothly as items. Paint objects have an option to render them in the "animation layer" which means they are redrawn every animation frame, enabling them to overlap and shadow other animating objects. <br />
<br />
=== Drop Shadows, rounded rectangles ===<br />
<br />
Objects can drop translucent shadows over whatever is under them. This is very effective with nodes over a map. Text can have a shadow effect. <br />
<br />
Rectangles, views and buttons can now have rounded corner rectangles with the rounding radius being variable. <br />
<br />
=== Dynamic Portal Icon ===<br />
<br />
A portal's Icon can be set on the fly directly using a file name that itself is generated dynamically by model code. This is useful where there is a large database of imagery based on object type, condition, colour and resolution. <br />
<br />
With the new graphical capabilities, InterDynamics has invested in new icon imagery which will make their way into our Planimate Based Applications. <br />
<br />
=== Dynamic Graphical Properties ===<br />
<br />
Many properties of dynamic objects, items and paint objects can now be set by the modeller at runtime, including dynamically controlling visibility. <br />
<br />
The items on a spatial link can be queried and updated. An item already on a link can be halted or "turned around" without it leaving the link. The scaling of an individual item or its entire class can be set. This works well with map displays at changing zoom levels. <br />
<br />
=== Icons Created From Panels ===<br />
<br />
Panimate can create an in-memory icon from the graphical display of another panel. This is achieved without flicker and can be used to build dynamic buttons which display the actual current contents of other panels in the model. <br />
<br />
== Release Compilation Environment ==<br />
<br />
=== DLL API Revised ===<br />
<br />
The Planimate DLL call API has been rewritten, It is much easier to write and maintain a DLL with routines that Planimate calls. <br />
<br />
The new API supports better specification of parameters and provision for comments back to the DLL&nbsp;user in Planimate. Many new callbacks expose Planimate functionality to the DLL including data formatting and setting/reading tables using formatted text. <br />
<br />
The framework supports "optional" parameters which means they can be left "s.Null" on the Planimate side if not needed. This can reduce the need for multiple routines in a DLL where different capabilities of the same basic operation are needed at different times. <br />
<br />
New mechanisms make it easy to manage 32 and 64 bit versions of a Planimate Based Application with automatic loading of the correct DLL for the target platform, be it 32 or 64 bit. <br />
<br />
=== DLL Range Checking ===<br />
<br />
The DLL API assists in debugging DLLs by having additional checks which are enabled for debug builds of a Planimate DLL. <br />
<br />
=== Batch Run Enhancements ===<br />
<br />
Model mechanisms now enable a "watchdog" to be implemented in a model which can take action if a model becomes stuck in an endless loop. This is especially useful in batch run situations. <br />
<br />
=== Application Compression ===<br />
<br />
Planimate applications are now compressed and encrypted using the same superior mechanims that are used for DataSet2 files. This makes compiled PBAs far smaller when the model is large. <br />
<br />
=== EXE Versioning ===<br />
<br />
Users with a Level 4 License (PBA Compiler) can set the version information for a compiled Planimate Based Application, the information which Windows shows when you hover over an application or display its properties. <br />
<br />
=== Speed/Performance ===<br />
<br />
Virtually every aspect of the runtime engine was reviewed and optimised for performance. This includes <br />
<br />
*Messages and broadcasting <br />
*Tables with many columns <br />
*Spatial Link and Track Route finding (magnitudes of improvement) <br />
*Token lookup/file loader/data file reading <br />
*Portal engine code (item movement) <br />
*Portal animation performance (thousands of portals can now move at once)<br />
<br />
Various changes to reduce memory "churn" (repeated allocation/deallocation) and reducing memory fragmentation <br />
<br />
== Model Editing and Debugging ==<br />
<br />
=== Debugging in "User Mode" ===<br />
<br />
It is easier to debug user oriented models as debugging services remain available when Planimate is in "user mode", only being disabled when a compiled application is built or Planimate is run with a "End User" key. This extends to called DLLs, which can check whether Planimate is running in development or user mode. <br />
<br />
=== Routine Colours and Wrapping ===<br />
<br />
The routine editor supports colouring of elements of a routine line at a fine grained level, with nested references being properly handled. The colours can be configured using the options editor and are retained in the Platorm INI settings file. Profiles for dark background and light background are separately configurablre <br />
<br />
Long lines can wrapped instead of cropped, with background colour changing to help highlight wrapped lines. <br />
<br />
=== Routine Code Folding ===<br />
<br />
The routine editor can collapse statement blocks (IF/ELSE, ELSE/ENDIF, ITERATE/ENDLOOP, SELECT, WHILE/ENDWHILE) so that the lines within the block are hidden behind the top line for the block. This is known as "folding" and can make long code easier to read. <br />
<br />
Copy/paste/delete is supported for folded lines of code. <br />
<br />
=== Multiple Table Column Edit ===<br />
<br />
Multiple table columns can be viewed and edited at once using a new column editing list dialog in the table editor. This makes it much easier to arrange columns in a table. Multiple columns can be selected and their properties set together. <br />
<br />
=== Pipe Enhancements ===<br />
<br />
Pipes can be more readily monitored and controlled using new pipe status broadcasts. The colour of the pipe when empty can be dynamically changed. <br />
<br />
=== Portal Entries More Useful ===<br />
<br />
Different classes can be assigned to different portal entries (where multiple are added for a given portal subsystem). This enables different portal entries to handle different item classes inside that subsystem. <br />
<br />
=== Flow Editor Tips and Undo ===<br />
<br />
The flow editor has more useful tooltips when hovering over arrows and supports a single level of undo. <br />
<br />
=== Broadcast Debugging ===<br />
<br />
The "Show Recent Broadcasts" menubar option shows the most recent broadcasts sent in the model. <br />
<br />
Clicking on a broadcast entry in pause mode shows the time and origin of the last broadcast received. <br />
<br />
=== Model Integrity ===<br />
<br />
Models are saved with CRC checksums and the saved file is tested to ensure it wsa written correctly by the system. This is valuable particularly where files are being saved to network or external drives. <br />
<br />
Many more internal buffers (particularly for text strings) are now managed with over-run detection. <br />
<br />
== End User Experience ==<br />
<br />
=== Column Filters ===<br />
<br />
Table column filters now support "not" terms (using&nbsp;!) so a given match term can be excluded. <br />
<br />
=== Page Printing ===<br />
<br />
The default paper size and orientation can be queried and set by a modeller. This is useful in applications which print customised forms, large graphs etc. <br />
<br />
=== Natural Order Sorting ===<br />
<br />
Correct sort order for lists, filter data and labels which start with a number is now supported. This takes into account the value of the number rather than just sorting by ASCII character alone. <br />
<br />
=== Muliple Monitors ===<br />
<br />
Support has been improved for multiple monitors, with popups and sub dialogs appearing on the monitor containing the Planimate window. <br />
<br />
=== Advance Time Dialog ===<br />
<br />
The Advance Time Dialog (while a model is fast-forwarding) now includes model name, dataset name (if enabled) and an ETA. The dialog is updated regularly and more responsive to a pause click. <br />
<br />
[[Category:Release Note]]</div>Rick