Introduction
A GChain (Generic Chain) is a generic (usable in any arKItect view) type which is used to manage what we call “Chains” in arKItect.
A Chain consists of a subset (built in a dedicated view “B”) of objects present in another view “A”, which allows modeling something (set of objects active in a particular use case, in a particular physics, in a particular state…), apart from other non-pertinent objects of “A” view.
For instance, in Systems Engineering, in order to model a complex system you need among others to design a functional architecture (a hierarchy of functions realized by the system and the flows they exchange). When the system is functionally “huge”, you could need to visualize/focus on/study separately one functionality (a subset of functions) at a time. GChain will help you to do that by choosing just some of the functions/flows you want to show and hiding those you do not.
Using Generic Chains
Steps prepare the metamodel
1) Include Generic Chains into the metamodel: Run the script “Update matrix” : Tools Category -> Scripting Panel -> Common Tools -> Generic Chains -> Metamodel as illustrated below. (This operation has to be done only one time per metamodel).
Figure 1: Launch script updating metamodel
If the script runs successfully, you’ll get the following confirmation message:
Figure 2: Successful matrix update
This action modifies project metamodel, creating one new rule and one filter with a sub-filter (To open metamodel panel: Tools Category -> Show / Hide Panel -> “Rules & Filters”). It additionally installs 2 new event handlers to the project root as summarized in the table below:
Change | Use | Notes |
New rule: GChain | This rule is a container | Rule name is arbitrary, it can be renamed by user later. The rule is identified by its key: gchain-rule, that should not be changed. |
New filter: Generic Chains | This filter shows chain objects | Filter name is arbitrary, it can be renamed. The filter is identified by its key: gchain-view |
New root event handler: | Supports chain editing | If your project already uses OnAddChildGlobal handler (unlikely), this could cause conflict. |
New root event handler: | Supports chain editing | If your project already uses OnRemoveChildGlobal handler (unlikely), this could cause conflict. |
- The rule “GChain” includes 4 attributes:
Figure 3: "GChain" rule attributes
- _data: to list the objects belonging to the GChain
- _filter: when checked (in a filter), the GChain filters hidden objects and when unchecked, all objects (hidden or not) are shown.
- chain version: a number corresponding to the development version of the GChain
- Merge chains: a script merging several existing GChains in the current one
- The filter “Generic Chains” (with the two event handlers) looks like this:
Figure 4: "Generic Chains" filter configuration
Notice that:
- A sub-filter “Generic Chains – all” is added
- In that sub-filter, GChain attribute “_filter” is unchecked in the sub-filter, which means that the resulting view will not filter any objects. All of them will be displayed (what is not the case in the parent filter)
2) Configure your metamodel to specify objects/views related to GChain
- In the Rules tab, put some rules under the GChain rule.
Eg.(The GChain is renamed as “Chain” in the following example) :
- In the Rules tab, put some rules under the GChain rule.
Figure 5: Adding rules to GChain
- Check added rules in the Filters tab.
Figure 6: Chosing rules "displayable" in the GChain
- In the filters in which you want to use chains, check root attributes related to the chains as in the figure 7.
Figure 7: Enable event handlers
3) (Optional) “Abstraction” management
If you want to forbid eventual flows (“Data flow” and “Physical flow” for instance on the example picture below) under the GChain to cross (visually in graphical views) through the GChain boundary, set the “Contain Links” property (Right click on the GChain in the filer -> Properties) of the GChain as illustrated:
Figure 8: Manage "abstraction"
How editing existing rule/filters to deal with GChain?
Let consider an existing rule (for example: named “Chain”) and exiting filters used to manage Chains. These are the steps to follow in order to “upgrade” it:
- Include Generic Chains into the metamodel (Figure 1): Run the script “Update matrix” from “Tools” menu -> Scripts -> Generic Chains -> Metamodel as illustrated below. (This operation has to be done only one time per metamodel).
- Set “Keys” property (Right-click in “Rules” panel -> Properties) of “Chain” to “gchain-rule” (Figure 9)
- In “Rules”, add the four “GChain” attributes to “Chain” attributes (Figure 3)
- Set the suitable existing filters as the one generated by the script (Figure 4 and 7)
- Delete “GChain” rule and filter/sub-filter created by the script
Figure 9: Setting Chain "Keys" property