Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
what_is_new_8_12_0 [2026/06/15 13:56]
admin created
what_is_new_8_12_0 [2026/07/08 05:31] (current)
hermann [Interoperability]
Line 1: Line 1:
-====== Dinamica EGO — Changes since v8.11.======+====== Dinamica EGO — version 8.12.0  ​====== 
 + 
 +Changes compared to version [[what_is_new_8_11_2|8.11.2]]:​
  
 ===== 1. Elevation Graph (new type and functors) ===== ===== 1. Elevation Graph (new type and functors) =====
Line 7: Line 9:
 ==== Data type ==== ==== Data type ====
  
-  * ''​ElevationGraphType''​ / ''​ElevationGraphData'' ​— core data structure storing the elevation graph, including basic operations to construct, manipulate, and query it.+  * [[Elevation Graph Type]] ​— core data structure storing the elevation graph, including basic operations to construct, manipulate, and query it.
  
 ==== Functors ==== ==== Functors ====
  
-  * **CreateElevationGraph** ​— creates an elevation graph from DEM information. +  * [[Create Elevation Graph]] ​— creates an elevation graph from DEM information. 
-  * **GetElevationGraphInfo** ​— retrieves basic information about the graph (number of nodes, edges, etc.). +  * [[Get Elevation Graph Info]] ​— retrieves basic information about the graph (number of nodes, edges, etc.). 
-  * **GetElevationGraphTopsAndBases** ​— retrieves the list of all patches corresponding to tops and bases. +  * [[Get Elevation Graph Tops And Bases]] ​— retrieves the list of all patches corresponding to tops and bases. 
-  * **FilterElevationGraph** ​— removes (filters) nodes from the graph. +  * [[Filter Elevation Graph]] ​— removes (filters) nodes from the graph. 
-  * **FindElevationGraphBases** ​— retrieves the nodes that are bases reachable from a given top node. +  * [[Find Elevation Graph Bases]] ​— retrieves the nodes that are bases reachable from a given top node. 
-  * **FindElevationGraphPaths** ​— retrieves all nodes reachable from a given top node. +  * [[Find Elevation Graph Paths]] ​— retrieves all nodes reachable from a given top node; a new option allows the search to also include parent nodes (nodes above a given node) when finding paths between tops and bases
-  * **GetElevationGraphCommonPathsSummaries** ​— retrieves information about common paths between nodes of two top nodes. +  * [[Get Elevation Graph Common Paths Summaries]] ​— retrieves information about common paths between nodes of two top nodes. 
-  * **SaveElevationGraph** ​— saves the graph in JSON format (and DOT format for debugging).+  * [[Save Elevation Graph]] ​— saves the graph in JSON format (and DOT format for debugging).
  
 ==== Conversions ==== ==== Conversions ====
  
-  * ''​ElevationGraph'' ​→ ''​NeighborhoodTable'' ​— allows the graph to be used wherever neighborhood tables are expected. +  * [[Elevation Graph Type]] ​→ [[Neighborhood Table]] ​— allows the graph to be used wherever neighborhood tables are expected. 
-  * ''​ElevationGraph'' ​→ ''​String''​ (JSON) — serialises the graph to a human-readable JSON representation.+  * [[Elevation Graph Type]] ​→ ''​String''​ (JSON) — serialises the graph to a human-readable JSON representation.
  
 ==== Integration and scripting ==== ==== Integration and scripting ====
  
   * Elevation graphs can now be used as execution-sequencing tokens (force execution order between functors).   * Elevation graphs can now be used as execution-sequencing tokens (force execution order between functors).
-  * A carrier functor was defined for the ''​ElevationGraph''​ type.+  * A carrier functor was defined for the [[Elevation Graph Type]]. 
 +  * The engine now reports whether a conversion between two data types is lossless or not, using an additional information field in the data converter factory. 
 +  * The criteria used to detect when it is safe to remove a carrier functor from a script without changing its execution semantics were expanded.
  
 ==== UI support ==== ==== UI support ====
Line 36: Line 40:
 ==== Test coverage ==== ==== Test coverage ====
  
-Test cases were added for all of the above functors and conversions (''​CreateElevationGraph''​''​FilterElevationGraph''​''​GetElevationGraphInfo''​''​GetElevationGraphTopsAndBases''​''​FindElevationGraphBases''​''​FindElevationGraphPaths''​''​SaveElevationGraph''​, both conversions,​ and ''​GetElevationGraphCommonPathsSummaries''​).+Test cases were added for all of the above functors and conversions ([[Create Elevation Graph]][[Filter Elevation Graph]][[Get Elevation Graph Info]][[Get Elevation Graph Tops And Bases]][[Find Elevation Graph Bases]][[Find Elevation Graph Paths]][[Save Elevation Graph]], both conversions,​ and [[Get Elevation Graph Common Paths Summaries]]).
  
 ---- ----
Line 46: Line 50:
 ==== Data type ==== ==== Data type ====
  
-  * ''​SpatialIndex2DPointType''​ / ''​SpatialIndex2DPointData'' ​— wraps the Boost R-Tree with the standard Dinamica type interface; defines the basic operations to build and query the index.+  * [[Spatial Index 2D Point Type]] ​— wraps the Boost R-Tree with the standard Dinamica type interface; defines the basic operations to build and query the index.
  
 ==== Functors ==== ==== Functors ====
  
-  * **CreateSpatialIndexFor2DPoints** ​— builds a spatial index from a set of 2-D points. +  * [[Create Spatial Index For 2D Points]] ​— builds a spatial index from a set of 2-D points. 
-  * **FindNearest2DPointsFromSpatialIndex** ​— queries the index using a set of probe points and returns the nearest neighbours.+  * [[Find Nearest 2D Points From Spatial Index]] ​— queries the index using a set of probe points and returns the nearest neighbours.
  
 ==== Integration and scripting ==== ==== Integration and scripting ====
  
-  * A carrier functor was defined for the ''​SpatialIndex2DPoint''​ type+  * A carrier functor was defined for the [[Spatial Index 2D Point Type]]
-  * The display name for ''​SpatialIndex2DPoint'' ​was corrected.+  * The display name for [[Spatial Index 2D Point Type]] ​was corrected.
  
 ==== UI support ==== ==== UI support ====
Line 64: Line 68:
 ==== Test coverage ==== ==== Test coverage ====
  
-Test cases were added for both ''​CreateSpatialIndexFor2DPoints'' ​and ''​FindNearest2DPointsFromSpatialIndex''​.+Test cases were added for both [[Create Spatial Index For 2D Points]] ​and [[Find Nearest 2D Points From Spatial Index]].
  
 ---- ----
Line 73: Line 77:
   * **Configurable window size** — new options allow the number of lines and columns of the neighbourhood search window to be specified, making it possible to consider non-immediate neighbours.   * **Configurable window size** — new options allow the number of lines and columns of the neighbourhood search window to be specified, making it possible to consider non-immediate neighbours.
   * **Orthogonal-border option** — a new flag restricts the neighbourhood relationship to pairs of features that share an orthogonal border only.   * **Orthogonal-border option** — a new flag restricts the neighbourhood relationship to pairs of features that share an orthogonal border only.
-  * **Reflexive relations** — ''​NeighborhoodTable'' ​now supports reflexive self-relations; ​''​CalcNeighborhood'' ​always includes a reflexive entry for each neighbour to ensure completely isolated features are still represented in the result. +  * **Reflexive relations** — [[Neighborhood Table]] ​now supports reflexive self-relations; ​[[Calc Neighborhood]] ​always includes a reflexive entry for each neighbour to ensure completely isolated features are still represented in the result. 
-  * **Progress reporting** — ''​CalcNeighborhood'' ​now reports execution progress.+  * **Progress reporting** — [[Calc Neighborhood]] ​now reports execution progress.
   * **Performance optimisation** — the functor was optimised to avoid inspecting every cell of the neighbourhood window unnecessarily.   * **Performance optimisation** — the functor was optimised to avoid inspecting every cell of the neighbourhood window unnecessarily.
-  * Compatibility of ''​CalcSpatialLag'' ​with the legacy behaviour of ''​NeighborhoodTable'' ​was preserved.+  * Compatibility of [[Calc Spatial Lag]] with the legacy behaviour of [[Neighborhood Table]] ​was preserved.
  
 ---- ----
Line 84: Line 88:
   * **Deterministic output** — when saving a script in EGO format, lines that share the same scheduler rank are now sorted by functor name, alias, banner, and functor ID as a tiebreaker, producing reproducible output.   * **Deterministic output** — when saving a script in EGO format, lines that share the same scheduler rank are now sorted by functor name, alias, banner, and functor ID as a tiebreaker, producing reproducible output.
   * **Improved variable-name generation** — the script writer no longer derives automatic variable names from functor IDs; it now generates shorter sequential names.   * **Improved variable-name generation** — the script writer no longer derives automatic variable names from functor IDs; it now generates shorter sequential names.
-  * **Functor rank as a property** — the scheduling rank of a functor can now be retrieved as a functor property.+  * **Functor rank as a property** — the scheduling rank of a functor can now be retrieved as a [[ego_script#​functor_properties|functor property]]. 
 +  * **Configurable comment wrapping column** — a new option controls the column at which long comments are broken into multiple lines when writing scripts in EGO script format. See [[ego_script#​script_generation_options|Script generation options]].
   * **Java API** — ''​Script::​addNicknameToLocalSubmodelFactory()''​ was added to the Java binding, allowing a submodel in the local factory to be temporarily renamed via a custom nickname.   * **Java API** — ''​Script::​addNicknameToLocalSubmodelFactory()''​ was added to the Java binding, allowing a submodel in the local factory to be temporarily renamed via a custom nickname.
  
Line 108: Line 113:
   * **Fixed: regression affecting submodel selection** — fixed a regression introduced by the copy/paste refactoring that could negate the previous fix for copying local submodels between scripts controlled by different main scripts when submodel names overlapped.   * **Fixed: regression affecting submodel selection** — fixed a regression introduced by the copy/paste refactoring that could negate the previous fix for copying local submodels between scripts controlled by different main scripts when submodel names overlapped.
   * **Fixed: submodel export properties retained after paste** — fixed a bug where functors that export submodel inputs or outputs would keep the properties controlling that information even after being copied and pasted into a main script.   * **Fixed: submodel export properties retained after paste** — fixed a bug where functors that export submodel inputs or outputs would keep the properties controlling that information even after being copied and pasted into a main script.
- 
  
 ---- ----
Line 116: Line 120:
 ==== New submodel importer ==== ==== New submodel importer ====
  
-An improved submodel importer ​was introduced, available when additional ​development ​tools are active ​(''​Ctrl+Alt+F1''​).+An improved submodel importer ​is now used by default. The previous importer can be restored via the development ​options ​(see §14).
  
   * A **verification step** was added to confirm submodel import continuity, allowing the user to review the import plan and cancel before any changes are made.   * A **verification step** was added to confirm submodel import continuity, allowing the user to review the import plan and cancel before any changes are made.
Line 124: Line 128:
   * The new importer cleanly separates import **resolution and validation** from the actual importing step.   * The new importer cleanly separates import **resolution and validation** from the actual importing step.
   * **Code cleanup** — removed an unused parameter from ''​resolveSubmodelImport()'',​ fixed documentation and parameter names, and removed obsolete code related to importing dependent submodels during submodel creation and update operations.   * **Code cleanup** — removed an unused parameter from ''​resolveSubmodelImport()'',​ fixed documentation and parameter names, and removed obsolete code related to importing dependent submodels during submodel creation and update operations.
 +  * **Fixed: open/closed container state ignored on import** — fixed a regression where importing submodels would ignore the open/closed state of a container.
  
 ==== Local submodel management ==== ==== Local submodel management ====
Line 159: Line 164:
  
 A duplicate entry in the search menu was also removed. A duplicate entry in the search menu was also removed.
 +
 +==== Experimental functor filter ====
 +
 +A new search qualifier ''​is:​experimental''​ was added and can be used to search for experimental functors in the **Explorer panel**, the **Issue Panel**, and the **Functor Library**.
  
 ---- ----
Line 172: Line 181:
 ==== Banners ==== ==== Banners ====
  
-  * **SetTableColumnName** — a banner was defined to show the new column name; port editors are now presented in separate tabs. +  * **[[Set Table Column Name]]** — a banner was defined to show the new column name; port editors are now presented in separate tabs. 
-  * **Add Table Column** — the banner now includes information about the type of the column being added. +  * **[[Add Table Column]]** — the banner now includes information about the type of the column being added. 
-  * **Extract Categorical Map Attributes / Get Table From Key** — utility functions for generating banners were added, along with a banner that better illustrates the interaction between those two functors.+  * **[[Get Table Column]]** — a banner was added to show the column index or name being retrieved. 
 +  * **[[Extract Categorical Map Attributes]] [[Get Table From Key]]** — utility functions for generating banners were added, along with a banner that better illustrates the interaction between those two functors.
  
 ==== Other UI improvements ==== ==== Other UI improvements ====
Line 191: Line 201:
 ==== Engine ==== ==== Engine ====
  
-  * ''​SYSTEM_COMMUNICATION''​ was added as a new ''​LogSubsystem''​ value.+  * ''​SYSTEM_COMMUNICATION''​ was added as a new ''​LogSubsystem''​ value. See [[dinamica_console|Dinamica Console]] for the full list of log subsystem flags.
   * ''​LOG_DEBUG_SUBSYSTEM''​ and ''​LOG_DEBUG_2_SUBSYSTEM''​ macro usages were standardised across the codebase for the following subsystems: ''​GENERAL'',​ ''​EXECUTION_BASICS'',​ ''​MAP_HANDLING'',​ ''​SYSTEM_COMMUNICATION'',​ and ''​FUNCTOR_EXECUTION''​.   * ''​LOG_DEBUG_SUBSYSTEM''​ and ''​LOG_DEBUG_2_SUBSYSTEM''​ macro usages were standardised across the codebase for the following subsystems: ''​GENERAL'',​ ''​EXECUTION_BASICS'',​ ''​MAP_HANDLING'',​ ''​SYSTEM_COMMUNICATION'',​ and ''​FUNCTOR_EXECUTION''​.
   * Unused log-related definitions were removed.   * Unused log-related definitions were removed.
Line 201: Line 211:
 ---- ----
  
-===== 11. Bug fixes and minor improvements =====+===== 11. Calculate functor family — abbreviated syntax and deprecations ===== 
 + 
 +  * **Abbreviated syntax remapped** — When reading and writing models, the [[ego_script#​calculator_functor_shorthand|abbreviated syntax]] constructs ''#​[]'',​ ''##​[]'',​ ''​%[]'',​ and ''​$[]''​ now always map to [[Calculate Map]], [[Calculate Categorical Map]], [[Calculate Lookup Table Values]], and [[Calculate Value]] respectively — instead of mapping to their legacy ''​*2''​ counterparts as before. 
 +  * **New abbreviated syntax construct** — the construct ''​%%[]''​ now maps to [[Calculate Lookup Table Keys And Values]]. 
 +  * **Configurable abbreviated syntax output** — A new option (//Tools// -> //Options// | //EGO Script// | [[ego_script#​script_generation_options|Use abbreviated syntax for Calculate family functors]]) lets you control whether functors in the ''​Calculate''​ family are written using the abbreviated syntax when a script is saved. 
 +  * **Deprecated functors** — The following functors are now deprecated and should no longer be used: ''​CalculateMap2'',​ ''​CalculateCategoricalMap2'',​ ''​CalculateLookupTable2'',​ and ''​CalculateValue2''​. Use [[Calculate Map]], [[Calculate Categorical Map]], [[Calculate Lookup Table Values]], and [[Calculate Value]] instead. 
 + 
 +==== Example: traditional syntax ==== 
 + 
 +<code java> 
 +// Restore the noisy cell/pixels marked for restoration. The value that will be 
 +// assigned to the noisy pixels is derived from a window that grows with the 
 +// current time step. 
 +updatedRestoredImage := CalculateMap [ 
 +    if i1 = 2 then 
 +        nbMedian(i2,​ v1, v1) ? i3 
 +    else 
 +        i3 
 +] cellType nullValue .no .none {{ 
 +    NumberMap arePixelsOriginalOrNoisyWithCategories 1; 
 +    NumberMap originalPixelsOnlyInRestoredImage 2; 
 +    NumberMap currentRestoredImage 3; 
 +    NumberValue lK 1; 
 +}}; 
 +</​code>​ 
 + 
 +==== Example: equivalent abbreviated syntax ==== 
 + 
 +<code java> 
 +// Restore the noisy cell/pixels marked for restoration. The value that will be 
 +// assigned to the noisy pixels is derived from a window that grows with the 
 +// current time step. 
 +updatedRestoredImage := # [ 
 +    if #​arePixelsOriginalOrNoisyWithCategories = 2 then 
 +        nbMedian(#​originalPixelsOnlyInRestoredImage,​ $lK, $lK) ? #​currentRestoredImage 
 +    else 
 +        #​currentRestoredImage 
 +] cellType nullValue .no .none; 
 +</​code>​ 
 + 
 +==== Interoperability ==== 
 + 
 +The application treats both formats completely transparently. Any script written in the abbreviated syntax can be saved or edited, or converted back to the traditional syntax, at any time — without any loss of information. See [[ego_script#​conversion_between_forms|Conversion between forms]] for details. 
 + 
 +---- 
 + 
 +===== 12. Bug fixes and minor improvements =====
  
   * **CalculatePythonExpression** — fixed a problem where packages whose install path contained a space could not be installed.   * **CalculatePythonExpression** — fixed a problem where packages whose install path contained a space could not be installed.
Line 208: Line 264:
   * **safeDivide utility** — a helper function ''​safeDivide''​ was added to make it easier to prevent division-by-zero errors.   * **safeDivide utility** — a helper function ''​safeDivide''​ was added to make it easier to prevent division-by-zero errors.
   * **TupleEditor memory leak** — fixed a small memory leak where the tuple representation was not deleted when the editor was closed.   * **TupleEditor memory leak** — fixed a small memory leak where the tuple representation was not deleted when the editor was closed.
 +  * **Table editor error on close** — added a workaround for a rare error that could occur when a table editor was being closed.
   * **Error button in filtered view** — fixed an error triggered when clicking the error button in a functor'​s action bar while the functor was hidden by an active search filter.   * **Error button in filtered view** — fixed an error triggered when clicking the error button in a functor'​s action bar while the functor was hidden by an active search filter.
   * **Missing submodel workaround** — added a workaround for failures when retrieving information about missing submodels, which could previously prevent the interface from opening a model script.   * **Missing submodel workaround** — added a workaround for failures when retrieving information about missing submodels, which could previously prevent the interface from opening a model script.
   * **Parameter options null-check** — fixed a small bug where parameter options were not allowed to be ''​null''​ as documented.   * **Parameter options null-check** — fixed a small bug where parameter options were not allowed to be ''​null''​ as documented.
 +  * **Table validation regression** — fixed a regression in table validation that affected support for multiple table formats; test cases were added.
 +  * **TableValue path expansion** — fixed a bug where converting a ''​TableValue''​ representing a relative path to a ''​Filename''​ would expand the path prematurely.
 +  * **Console script error reporting** — console script execution now prints complete error information when the underlying cause provides an exception with additional details.
   * Documentation comments for non-obvious constructs were improved; typos were corrected.   * Documentation comments for non-obvious constructs were improved; typos were corrected.
   * Code cleanup: removed unnecessary convoluted constructs and unused properties.   * Code cleanup: removed unnecessary convoluted constructs and unused properties.
Line 216: Line 276:
 ---- ----
  
-===== 12. Dependency update =====+===== 13. Dependency update ===== 
 + 
 +Synthetica 3.6.0 — the Synthetica look-and-feel library was updated to version 3.6.0 in both ''​dinamica-nui''​ and ''​dinamica-nui-utils''​. 
 + 
 +---- 
 + 
 +===== 14. Development options ===== 
 + 
 +A new **Development** tab was added to the Options dialog (//Tools// → //Options// | //​Development//​) consolidating settings that were previously accessible only via keyboard shortcuts or not exposed at all. These options control internal behaviours intended for developers and advanced users, including:
  
-  * **Synthetica 3.6.0** — the Synthetica look-and-feel library was updated ​to version 3.6.0 in both ''​dinamica-nui'' ​and ''​dinamica-nui-utils''​.+  * Whether to use the new or the legacy submodel importer. 
 +  ​Whether ​to show extended tooltip information for functors ​and submodels.