Overview
Project subclasses let you define project-specific types within an existing Davinci object type. For example, a project can define specialized Part types such asSensor, Controller, or PowerModule without creating a new built-in object type.
A project subclass has a base type and a project-defined name. Objects can be assigned to a subclass, and relationship endpoint definitions can use a subclass to describe which specialized objects they accept.
Project subclassing is separate from Object Inheritance. A subclass classifies an object; inheritance creates a specialized object that derives fields and structure from a base object.
Managing Project Subclasses
Project subclasses are managed from the Schema tab in Project Settings (Project Settings → Schema → Project Subclasses). From the Project Subclasses panel, you can:- Create a subclass for a supported base object type
- Rename an existing subclass
- Search the project subclass list
- Edit its color and custom SVG icon
- Review the objects and definitions that use it
Assigning a Subclass
You can create an object with a project subclass directly from the Add Object menu in the Index by selecting the subclass under its base object type, or assign a subclass through the Davinci Agent and model importers when the subclass’s base type matches the object type. Davinci displays the object’s effective subclass as a read-only badge in the Properties header. Subclasses can also be used in structured relationship endpoint definitions. An endpoint can specify both a base type and a subclass, allowing the relationship to accept only the intended specialized objects. Included or foreign objects cannot receive a local project subclass assignment. Define the subclass in the project that owns the object instead.Subclasses and Inheritance
Project subclasses and object inheritance answer different questions:- Subclass: What project-defined category does this object belong to?
- Inheritance: Which base object supplies this object’s fields and model structure?
extends chain unless it has its own applicable assignment. The subclass badge describes the effective classification; the inheritance link describes the base object.
Use subclasses when you need project-specific categories, filtering, or relationship endpoint typing. Use inheritance when you need a reusable object definition with synchronized fields and structural counterparts.
Renaming and Deleting
Renaming a subclass updates the objects assigned to it and the structured relationship endpoint definitions that reference it. Rename a subclass when the classification name changes but its meaning and base type remain the same. When you delete a subclass from Project Subclasses, Davinci shows how many objects and relationship definitions currently use it and asks you to confirm:- Objects assigned to the deleted subclass are automatically reset to their base object type.
- Structured relationship endpoint definitions referencing the deleted subclass automatically revert to the base object type.
When deleting a subclass through the Davinci Agent, the agent requires existing object and relationship references to be cleared or reassigned first so in-use classifications are not removed unintentionally.
Agent Generation and Validation
When the Davinci Agent generates objects with a requested subclass, it validates that the subclass exists in the project and matches the generated object’s base type, then applies that subclass as the default classification for the generated objects of that type.Export Behavior
SysML v2 exports preserve project subclass definitions and subclass usage typing where supported. The exported definitions describe the project-specific subclass separately from ordinary inheritance and redefinition.Best Practices
- Use clear names that describe the project-specific meaning of the subclass.
- Keep each subclass tied to one stable base object type.
- Use subclasses for classification and accepted endpoint types, not as a substitute for inheritance.
- Review object assignments and relationship definitions before renaming or deleting a subclass.
- Use Object Inheritance when variants need shared fields, children, and controlled overrides.