Skip to main content

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 as Sensor, 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
The base object type is selected when the subclass is created and cannot be changed later. If a classification should apply to a different base type, create a new subclass for that type.

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?
An object can have both. A specialization can inherit the effective subclass from its base through its 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.
If you want those objects or relationship endpoints to use a different subclass instead of reverting to the base type, rename the subclass or reassign them before deleting it.
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.