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/19 16:30] admin [11. Calculate functor family — abbreviated syntax and deprecations] |
what_is_new_8_12_0 [2026/07/08 05:31] (current) hermann [Interoperability] |
||
|---|---|---|---|
| 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. | + | * **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 ==== | ||
| + | |||
| * **Pending changes on submodel removal** — before removing the definition of a local submodel, the UI now ensures that all pending changes to that submodel (or submodels that depend on it) are either discarded or propagated first. This prevents errors that occurred when reverting a dependent submodel after its dependency had already been removed. | * **Pending changes on submodel removal** — before removing the definition of a local submodel, the UI now ensures that all pending changes to that submodel (or submodels that depend on it) are either discarded or propagated first. This prevents errors that occurred when reverting a dependent submodel after its dependency had already been removed. | ||
| * **Group names in the Local Submodels tree** — names of groups defined inside local submodels are now displayed in the Local Submodels tree in the Functor Library. The built-in group name "Submodels" is hidden to avoid unnecessary clutter. | * **Group names in the Local Submodels tree** — names of groups defined inside local submodels are now displayed in the Local Submodels tree in the Functor Library. The built-in group name "Submodels" is hidden to avoid unnecessary clutter. | ||
| 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 202: | Line 210: | ||
| ---- | ---- | ||
| + | |||
| ===== 11. Calculate functor family — abbreviated syntax and deprecations ===== | ===== 11. Calculate functor family — abbreviated syntax and deprecations ===== | ||
| - | * **Abbreviated syntax remapped** — When reading and writing models, the abbreviated syntax constructs ''#[]'', ''##[]'', ''%[]'', and ''$[]'' now always map to ''CalculateMap'', ''CalculateCategoricalMap'', ''CalculateLookupTableValues'', and ''CalculateValue'' respectively — instead of mapping to their legacy ''*2'' counterparts as before. | + | * **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. |
| - | * **Configurable abbreviated syntax output** — A new option lets you control whether functors in the ''Calculate'' family are written using the abbreviated syntax when a script is saved. | + | * **New abbreviated syntax construct** — the construct ''%%[]'' now maps to [[Calculate Lookup Table Keys And Values]]. |
| - | * **Deprecated functors** — The following functors are now deprecated and should no longer be used: ''CalculateMap2'', ''CalculateCategoricalMap2'', ''CalculateLookupTable2'', and ''CalculateValue2''. | + | * **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 ==== | ==== Example: traditional syntax ==== | ||
| <code java> | <code java> | ||
| - | // Restore the noisy cell/pixels marked for restoration. The value that will be | + | // 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 | + | // assigned to the noisy pixels is derived from a window that grows with the |
| - | // current time step. | + | // current time step. |
| updatedRestoredImage := CalculateMap [ | updatedRestoredImage := CalculateMap [ | ||
| if i1 = 2 then | if i1 = 2 then | ||
| nbMedian(i2, v1, v1) ? i3 | nbMedian(i2, v1, v1) ? i3 | ||
| - | else | + | else |
| - | i3 | + | i3 |
| ] cellType nullValue .no .none {{ | ] cellType nullValue .no .none {{ | ||
| NumberMap arePixelsOriginalOrNoisyWithCategories 1; | NumberMap arePixelsOriginalOrNoisyWithCategories 1; | ||
| Line 230: | Line 240: | ||
| <code java> | <code java> | ||
| - | // Restore the noisy cell/pixels marked for restoration. The value that will be | + | // 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 | + | // assigned to the noisy pixels is derived from a window that grows with the |
| - | // current time step. | + | // current time step. |
| updatedRestoredImage := # [ | updatedRestoredImage := # [ | ||
| if #arePixelsOriginalOrNoisyWithCategories = 2 then | if #arePixelsOriginalOrNoisyWithCategories = 2 then | ||
| nbMedian(#originalPixelsOnlyInRestoredImage, $lK, $lK) ? #currentRestoredImage | nbMedian(#originalPixelsOnlyInRestoredImage, $lK, $lK) ? #currentRestoredImage | ||
| - | else | + | else |
| - | #currentRestoredImage | + | #currentRestoredImage |
| ] cellType nullValue .no .none; | ] cellType nullValue .no .none; | ||
| </code> | </code> | ||
| Line 243: | Line 253: | ||
| ==== Interoperability ==== | ==== 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. | + | 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 ===== | ===== 12. Bug fixes and minor improvements ===== | ||
| Line 253: | 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. | * **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. | ||
| ---- | ---- | ||
| + | |||
| ===== 13. 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''. | 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: | ||
| + | |||
| + | * Whether to use the new or the legacy submodel importer. | ||
| + | * Whether to show extended tooltip information for functors and submodels. | ||
| + | |||