Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
what_is_new_8_12_0 [2026/06/15 14:01] admin |
what_is_new_8_12_0 [2026/07/08 05:31] (current) hermann [Interoperability] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Dinamica EGO — version 8.12.0 ====== | ====== Dinamica EGO — version 8.12.0 ====== | ||
| - | Changed compared to version [[what_is_new_8_12_0|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 9: | 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 38: | 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 48: | 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 66: | 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 75: | 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 86: | 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 110: | 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 118: | 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 126: | 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 161: | 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 174: | 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 193: | 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 203: | 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 210: | 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 218: | 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. | ||