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:
Snapper. sourceId()SinglePartAdjustments are remapped when the pre-17.0 finalFlattenableKey no longer matches the 17.0 keylegacyItemTagKey() interface.The short migration checklist is:
Part subclasses a stable sourceId(), generally part number alone is not stable enough. Ex: leftFrontLeg for the leg Part from a Table.setUserItemTagInfo(..) for user-entered Ind. Tags or any previous custom _itemTagInfoKey management in your extension. legacyItemTagKey() if old drawings saved Ind. Tags under a custom pre-17.0 keyPart Ind. Tag overridesIf 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.
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().
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.
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().