Yeah, I can see where it is confusing. I'll try to explain it in the simplest terms possible from the programming perspective.
I programmatically copy a layout, including all of the associated geometry, to a new layout.
acLayoutMgr.CopyLayout(source, target);
The new target layout is an exact copy of the source layout with the exception of the name (and tab order which I set elsewhere)
The source layout has multiple block references, each with multiple attributes that get copied to the target layout. I need these block references to have a unique name that consists of the base block name (it is one of 12 predefined names), the layout name (where the block reference resides), and an index that identifies that block uniquely in that layout. Thus, if the source layout was named "Current" and the target layout was named "Future", a block reference named "a-current-32" in the "Current" layout would be "a-future-32" in the "Future" layout.
I realize that is going to require a new BlockDefinition in the BlockTableRecord because in the end, there can only be one block reference for every block definition.
What I am envisioning is the following:
Open a user form;
Copy a layout to a new layout;
Get a collection of all Block References on the target layout;
For each Block Reference in Future layout,
Copy the existing Block Definition (i.e. "a-Current-21" ) to a new Block Definition ("a-Future-21");
Update the associated Block Reference ("a-Current-21") to point to the new Block Definition ("a-Future-21");
Regen the editor;
Close the userform;
I guess a real simple way to explain it would be to say "Replace all inserts on a specified layout with new inserts that reference a copy of the original block definition, while replacing the layout name in the source block definition name with the layout name of the target layout."
I really hope this makes sense because I am not sure I know how to explain it any different.