About Attribute Inheritance

Classification is achieved by associating attributes with library nodes. When items get put into that place in the library, they acquire the attributes associated with that node. Attributes can be inherited by parent classes. The basic concept is simple, but there are many complexities that arise from the ability to classify the same item more than once, and from being to modify the library structure after objects have already been classified into it.

This page discusses:

Inheritance

Basic inheritance works as described in this section.

A Part Family "Screws," has been defined with attributes "length" and "thread pitch". Another Part Family, "Wing Screws" is a child of "Screws" in that library, and it adds "Wing spread" and "Wing type" attributes. "Wing Screws" inherits the Screws attributes, and adds its own. Any Part inserted into "Wing Screws" includes all 4 of these attributes.

"Wing spread' and "Wing type" attributes are grouped into a "Wing" attribute group. That attribute group can be referenced in a class for "Wing Nuts," which is not in any way related to Screws.

The following diagram illustrates how attribute groups are inherited from class to class. In this diagram, each Class might be a Part Family, for example.



In this example, Class D associates multiple attribute groups. There is NOT a one-to-one correspondence between a class and any single attribute group that defines that class.

When an item is classified and acquires the attributes of the class, it does define where it got those attributes from, that is, whether it got them from Class D, or Class C, or Class A. That classified item views them all the same. Each class, however, does define which attribute groups it contributes, and which it inherits. A class has no control over the attributes it inherits.

Attribute Group Uniqueness Within a Lineage

You cannot add an attribute group to a class if the class inherits that attribute group from an ancestor class.

For example, if the class Screw has an attribute group "Thread," a subclass "Wing Screw" cannot also add its own "Thread" attribute group, it must inherit it.

If an attribute group is added at a higher level that already exists at a lower level, the attribute group at the lower level becomes promoted. When this happens, an alert such as this will be presented to the user:

The attribute group <xxx> was already associated with subclass <yyy>. 
It has now been promoted to class <zzz> and is inherited by <yyy>.

If some class is added as a child of another class with Add Existing, and that would violate this rule, the attribute group is removed from the re-parented class and will from that point be inherited only. For example, the "Wing Screw" class was originally a top-level class, and it had the "Thread" attribute group, and then the Wing Screw class is pushed down as a subclass of Screw. From then on, the "Thread" attribute group of the Wing Screw class would be considered inherited and would show up as such in the attribute group association table. It could not be removed later from Wing Screw.

Classified Object Revision

If a classified object is revised, the new revision is classified as the original was, and both the original and the new revision appear in the same spot in the library. All the values of the inherited attributes carry over from the original to the new revision.

Triggers are provided to control which revisions of an object are kept in the library and which revisions are automatically removed from the library. If a classified object is automatically removed as part of a revise or promote operation, the classified object retains all its attributes despite no longer being classified in that library.

If the object is navigated to by some other means (no longer reachable by library search or navigation), all its classification attributes and values are still displayed.

Multiple Classification

A single item (like a part) can be classified into more than one class.

This is easily accomplished by using Add Existing to put the same object into two nodes of the same library, or even into different libraries. When this is done, the object acquires all the attributes of each of its classifications. For example, a part that is dropped into a "Screws" part family in some library, and also in a "Brass" class in some other library, would exhibit all the attributes of "Screws", and also all the attributes of "Brass", whatever those are.

Attribute Group Uniqueness for Multiple Classified Objects

Attribute groups are free-standing entities that can be referenced by any number of classifications. Also, an item can be classified into two different classes. It is possible that such an item would inherit the same group of attributes from more than one class. In this case, what is important is that the individual attributes that constitute the duplicated group are instantiated only once in the object.

For example, let us say there is some part family called "Tinker Toy Bolt" that has the "Thread" attribute group. If some part object were dropped in a "Screws" class, and then also into "Screws," which also has "Thread," this particular part would exhibit all the attributes of Thread just once, although they may be presented more than once in the UI.

Individual Attribute Uniqueness for Multiple Classified Objects

It is possible for a single classified item to inherit the same attribute from two distinct attribute groups via two different classes that the item may be classified as.

Even in this case, the attribute is not instantiated multiple times in the classified item. The item will have a single instance of that attribute. This situation is analogous to if the attribute had appeared in two groups of the same class.