Overview

Ind. Tag identity, reset behavior, and old drawing migration

The big idea for 17.0 is that Ind. Tag identity is no longer tied only to the Part for restoration of custom data. A Part now has a stable sourceId() that says "this is the same logical part for this Snapper or owning object," while the user's custom Ind. Tag text is stored separately in UserTagInfoHolder. This helps to stabilize and improve management of customization to position and content of the Ind. Tag for a Part

That change is what makes the new reset behavior possible. Users can choose whether Ind. Tags reset with the legacy behavior, only when the part number changes, or when the part number or option set changes. Extension code can still influence part identity, but the intended migration path is to make sourceId() stable and use the shared user-tag APIs to manage user modified ItemTagInfo.

For old drawings, CET 17.0 does a few repair passes during load:

  • user-modified Ind. Tags are moved into the shared user-tag holder on the owning Snapper.
  • old AN/AD part annotations are moved from legacy part keys to sourceId()
  • old SinglePartAdjustments are remapped when the pre-17.0 finalFlattenableKey no longer matches the 17.0 key
  • data-symbol and package-specific old Ind. Tag keys can be found through the new legacyItemTagKey() interface.

The short migration checklist is:

  • give custom Part subclasses a stable sourceId(), generally part number alone is not stable enough. Ex: leftFrontLeg for the leg Part from a Table.
  • call setUserItemTagInfo(..) for user-entered Ind. Tags or any previous custom _itemTagInfoKey management in your extension.
  • override legacyItemTagKey() if old drawings saved Ind. Tags under a custom pre-17.0 key
  • test old drawings that combine user-modified Ind. Tags, AN/AD annotations, sub-objects, and single-part adjustments

Relevant Merge Requests: MR-1, MR-2, MR-3

Compile Time Changes

Custom Part Ind. Tag overrides

If your extension used itemTagKey() or itemTagInfoKey() as the main way to control Ind. Tag identity, move that intent to the 17.0 override points.

Old override point: extend public str itemTagKey()
New override point: extend public str sourceId()

Old override point: extend public str itemTagInfoKey()
New override point: extend public str defaultItemTagInfoKey()

Old user text setter: extend public ItemTagInfo setItemTagInfo(str text)
New user text setter: extend public ItemTagInfo setUserItemTagInfo(str text)

If you also had custom Ind. Tag keys in drawings saved before 17.0, add a legacy key hook:

Added/important usage: extend public str legacyItemTagKey()
Added/important usage: extend public ItemTag getItemTagForMigration()

getItemTagForMigration() now looks up the old tag by legacyItemTagKey(). Most packages should override legacyItemTagKey() rather than replacing the whole migration lookup.

Annotation migration is now a migrator flow

AN/AD part annotation migration now has a dedicated migrator, similar in spirit to the part-special migrator.

Added: public class PartAnnotationMigrator
Added/important usage: extend public void initPartAnnotationMigrator(ObjectFormatter formatter)
Added/important usage: extend public PartAnnotationMigrator getPartAnnotationMigrator(bool init=false)

This matters most for custom snapper and part implementations that create parts from sub-objects or delayed data. If your annotations were stored under a pre-17.0 key, the migrator is what moves them to the current sourceId().

Runtime/Behavior Changes

Ind. Tag text only splits rows when there is real tag data

finalFlattenableKey() and the Ind. Tag calculation column now use Part.itemTagsKey() for the tag-text part of the key. If there is no item tag data to append, no Ind. Tag suffix is added.

This avoids unnecessary row splits and avoids "repairing" saved adjustments when the old and new keys are effectively the same. If you depended on every part getting an Ind. Tag suffix whether or not it had real tag data, re-test that logic.

Adjustment migration now checks each loaded space

Older single-part adjustments are now repaired per Space instead of only through the main space/global setting path. CET marks each loaded space that has pre-17.0 part adjustments, repairs matching SinglePartAdjustment keys after merge finalization, and clears the space flag afterward.

The repair only runs when the part's legacyFinalFlattenableKey() matches the saved adjustment key and that legacy key differs from the current finalFlattenableKey(). That keeps the migration from moving adjustments that do not actually need to move.

MR 3 fixes a real old-drawing case where user-modified Ind. Tags on sub-objects could be lost during load. The fix is the new legacyItemTagKey() path. Data symbol parts implement a default legacy key, and packages with older custom key history, such as Fika, add package-specific overrides.

If your package generated old Ind. Tag keys from frame names, creator keys, option paths, or any other custom sub-object identity, add and test legacyItemTagKey().